blob: 52e4825f3d59850e1694b4665c9dea22bef725a1 [file] [log] [blame]
# 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()