| # Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import unittest |
| import sys |
| import os |
| from PIL import Image |
| |
| sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir)) |
| from tools import image_tools |
| |
| |
| def _GenImage(size, color): |
| return Image.new('RGBA', size, color) |
| |
| |
| def _AllPixelsOfColor(image, color): |
| return not any(px != color for px in image.getdata()) |
| |
| |
| class ImageToolsTest(unittest.TestCase): |
| |
| def setUp(self): |
| self.black25 = _GenImage((25, 25), (0, 0, 0, 255)) |
| self.black50 = _GenImage((50, 50), (0, 0, 0, 255)) |
| self.white25 = _GenImage((25, 25), (255, 255, 255, 255)) |
| self.white50 = _GenImage((50, 50), (255, 255, 255, 255)) |
| |
| def testAreTheSameSize(self): |
| self.assertTrue(image_tools._AreTheSameSize([self.black25, self.black25])) |
| self.assertTrue(image_tools._AreTheSameSize([self.white25, self.white25])) |
| self.assertTrue(image_tools._AreTheSameSize([self.black50, self.black50])) |
| self.assertTrue(image_tools._AreTheSameSize([self.white50, self.white50])) |
| self.assertTrue(image_tools._AreTheSameSize([self.black25, self.white25])) |
| self.assertTrue(image_tools._AreTheSameSize([self.black50, self.white50])) |
| |
| self.assertFalse(image_tools._AreTheSameSize([self.black50, self.black25])) |
| self.assertFalse(image_tools._AreTheSameSize([self.white50, self.white25])) |
| self.assertFalse(image_tools._AreTheSameSize([self.black25, self.white50])) |
| self.assertFalse(image_tools._AreTheSameSize([self.black50, self.white25])) |
| |
| self.assertRaises(Exception, image_tools._AreTheSameSize, []) |
| self.assertRaises(Exception, image_tools._AreTheSameSize, [self.black50]) |
| |
| def testGetDifferenceWithMask(self): |
| self.assertTrue(_AllPixelsOfColor(image_tools._GetDifferenceWithMask( |
| self.black25, self.black25), (0, 0, 0, 255))) |
| self.assertTrue(_AllPixelsOfColor(image_tools._GetDifferenceWithMask( |
| self.white25, self.white25), (0, 0, 0, 255))) |
| self.assertTrue(_AllPixelsOfColor(image_tools._GetDifferenceWithMask( |
| self.white25, self.black25), (255, 255, 255, 255))) |
| self.assertTrue(_AllPixelsOfColor(image_tools._GetDifferenceWithMask( |
| self.black25, self.black25, mask=self.black25), (0, 0, 0, 255))) |
| self.assertTrue(_AllPixelsOfColor(image_tools._GetDifferenceWithMask( |
| self.black25, self.black25, mask=self.white25), (0, 0, 0, 255))) |
| self.assertTrue(_AllPixelsOfColor(image_tools._GetDifferenceWithMask( |
| self.black25, self.white25, mask=self.black25), (255, 255, 255, 255))) |
| self.assertTrue(_AllPixelsOfColor(image_tools._GetDifferenceWithMask( |
| self.black25, self.white25, mask=self.white25), (0, 0, 0, 255))) |
| self.assertTrue(_AllPixelsOfColor(image_tools._GetDifferenceWithMask( |
| self.black25, self.white25, different_color=(255, 0, 0, 255)), |
| (255, 0, 0, 255))) |
| self.assertTrue(_AllPixelsOfColor(image_tools._GetDifferenceWithMask( |
| self.white25, self.white25, same_color=(255, 0, 0, 255)), |
| (255, 0, 0, 255))) |
| self.assertTrue(_AllPixelsOfColor(image_tools._GetDifferenceWithMask( |
| self.white25, self.white25, |
| mask=self.white25, masked_color=(255, 0, 0, 255)), (255, 0, 0, 255))) |
| self.assertRaises(Exception, image_tools._GetDifferenceWithMask, |
| self.white25, |
| self.black50) |
| self.assertRaises(Exception, image_tools._GetDifferenceWithMask, |
| self.white25, |
| self.white25, |
| mask=self.black50) |
| |
| def testCreateMask(self): |
| m1 = image_tools.CreateMask([self.black25, self.white25]) |
| self.assertTrue(_AllPixelsOfColor(m1, (255, 255, 255, 255))) |
| m2 = image_tools.CreateMask([self.black25, self.black25]) |
| self.assertTrue(_AllPixelsOfColor(m2, (0, 0, 0, 255))) |
| m3 = image_tools.CreateMask([self.white25, self.white25]) |
| self.assertTrue(_AllPixelsOfColor(m3, (0, 0, 0, 255))) |
| |
| def testAddMasks(self): |
| m1 = image_tools.CreateMask([self.black25, self.white25]) |
| m2 = image_tools.CreateMask([self.black25, self.black25]) |
| m3 = image_tools.CreateMask([self.black50, self.black50]) |
| self.assertTrue(_AllPixelsOfColor(image_tools.AddMasks([m1]), |
| (255, 255, 255, 255))) |
| self.assertTrue(_AllPixelsOfColor(image_tools.AddMasks([m2]), |
| (0, 0, 0, 255))) |
| self.assertTrue(_AllPixelsOfColor(image_tools.AddMasks([m1, m2]), |
| (255, 255, 255, 255))) |
| self.assertTrue(_AllPixelsOfColor(image_tools.AddMasks([m1, m1]), |
| (255, 255, 255, 255))) |
| self.assertTrue(_AllPixelsOfColor(image_tools.AddMasks([m2, m2]), |
| (0, 0, 0, 255))) |
| self.assertTrue(_AllPixelsOfColor(image_tools.AddMasks([m3]), |
| (0, 0, 0, 255))) |
| self.assertRaises(Exception, image_tools.AddMasks, []) |
| self.assertRaises(Exception, image_tools.AddMasks, [m1, m3]) |
| |
| def testTotalDifferentPixels(self): |
| self.assertEquals(image_tools.TotalDifferentPixels(self.white25, |
| self.white25), |
| 0) |
| self.assertEquals(image_tools.TotalDifferentPixels(self.black25, |
| self.black25), |
| 0) |
| self.assertEquals(image_tools.TotalDifferentPixels(self.white25, |
| self.black25), |
| 25*25) |
| self.assertEquals(image_tools.TotalDifferentPixels(self.white25, |
| self.black25, |
| mask=self.white25), |
| 0) |
| self.assertEquals(image_tools.TotalDifferentPixels(self.white25, |
| self.white25, |
| mask=self.white25), |
| 0) |
| self.assertEquals(image_tools.TotalDifferentPixels(self.white25, |
| self.black25, |
| mask=self.black25), |
| 25*25) |
| self.assertEquals(image_tools.TotalDifferentPixels(self.white25, |
| self.white25, |
| mask=self.black25), |
| 0) |
| self.assertRaises(Exception, image_tools.TotalDifferentPixels, |
| self.white25, self.white50) |
| self.assertRaises(Exception, image_tools.TotalDifferentPixels, |
| self.white25, self.white25, mask=self.white50) |
| |
| def testSameImage(self): |
| self.assertTrue(image_tools.SameImage(self.white25, self.white25)) |
| self.assertFalse(image_tools.SameImage(self.white25, self.black25)) |
| |
| self.assertTrue(image_tools.SameImage(self.white25, self.black25, |
| mask=self.white25)) |
| self.assertFalse(image_tools.SameImage(self.white25, self.black25, |
| mask=self.black25)) |
| self.assertTrue(image_tools.SameImage(self.black25, self.black25)) |
| self.assertTrue(image_tools.SameImage(self.black25, self.black25, |
| mask=self.white25)) |
| self.assertTrue(image_tools.SameImage(self.white25, self.white25, |
| mask=self.white25)) |
| self.assertRaises(Exception, image_tools.SameImage, |
| self.white25, self.white50) |
| self.assertRaises(Exception, image_tools.SameImage, |
| self.white25, self.white25, |
| mask=self.white50) |
| |
| def testInflateMask(self): |
| cross_image = Image.new('RGBA', (3, 3)) |
| white_image = Image.new('RGBA', (3, 3)) |
| dot_image = Image.new('RGBA', (3, 3)) |
| b = (0, 0, 0, 255) |
| w = (255, 255, 255, 255) |
| dot_image.putdata([b, b, b, |
| b, w, b, |
| b, b, b]) |
| cross_image.putdata([b, w, b, |
| w, w, w, |
| b, w, b]) |
| white_image.putdata([w, w, w, |
| w, w, w, |
| w, w, w]) |
| self.assertEquals(list(image_tools.InflateMask(dot_image, 1).getdata()), |
| list(cross_image.getdata())) |
| self.assertEquals(list(image_tools.InflateMask(dot_image, 0).getdata()), |
| list(dot_image.getdata())) |
| self.assertEquals(list(image_tools.InflateMask(dot_image, 2).getdata()), |
| list(white_image.getdata())) |
| self.assertEquals(list(image_tools.InflateMask(dot_image, 3).getdata()), |
| list(white_image.getdata())) |
| self.assertEquals(list(image_tools.InflateMask(self.black25, 1).getdata()), |
| list(self.black25.getdata())) |
| |
| def testVisualizeImageDifferences(self): |
| self.assertTrue(_AllPixelsOfColor(image_tools.VisualizeImageDifferences( |
| self.white25, self.black25), (255, 255, 255, 255))) |
| self.assertTrue(_AllPixelsOfColor(image_tools.VisualizeImageDifferences( |
| self.white25, self.white25), (0, 0, 0, 255))) |
| self.assertTrue(_AllPixelsOfColor(image_tools.VisualizeImageDifferences( |
| self.black25, self.black25), (0, 0, 0, 255))) |
| self.assertTrue(_AllPixelsOfColor(image_tools.VisualizeImageDifferences( |
| self.white25, self.black25, mask=self.white25), (0, 0, 0, 255))) |
| self.assertTrue(_AllPixelsOfColor(image_tools.VisualizeImageDifferences( |
| self.white25, self.black25, mask=self.black25), (255, 255, 255, 255))) |
| self.assertTrue(_AllPixelsOfColor(image_tools.VisualizeImageDifferences( |
| self.white25, self.white25, mask=self.white25), (0, 0, 0, 255))) |
| self.assertTrue(_AllPixelsOfColor(image_tools.VisualizeImageDifferences( |
| self.white25, self.white25, mask=self.black25), (0, 0, 0, 255))) |
| self.assertTrue(_AllPixelsOfColor(image_tools.VisualizeImageDifferences( |
| self.black25, self.black25, mask=self.black25), (0, 0, 0, 255))) |
| self.assertTrue(_AllPixelsOfColor(image_tools.VisualizeImageDifferences( |
| self.black25, self.black25, mask=self.white25), (0, 0, 0, 255))) |
| |
| self.assertRaises(Exception, |
| image_tools.VisualizeImageDifferences, |
| self.white25, |
| self.white50) |
| self.assertRaises(Exception, |
| image_tools.VisualizeImageDifferences, |
| self.white25, |
| self.black25, |
| mask=self.white50) |
| |
| def testSerialization(self): |
| self.assertTrue(_AllPixelsOfColor( |
| image_tools.DeserializeImage( |
| image_tools.SerializeImage(self.white25)), (255, 255, 255, 255))) |
| self.assertTrue(_AllPixelsOfColor( |
| image_tools.DeserializeImage( |
| image_tools.SerializeImage(self.black25)), (0, 0, 0, 255))) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |