diff options
Diffstat (limited to 'catapult/telemetry/telemetry/util/image_util_unittest.py')
-rw-r--r-- | catapult/telemetry/telemetry/util/image_util_unittest.py | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/catapult/telemetry/telemetry/util/image_util_unittest.py b/catapult/telemetry/telemetry/util/image_util_unittest.py new file mode 100644 index 00000000..4cb10e6e --- /dev/null +++ b/catapult/telemetry/telemetry/util/image_util_unittest.py @@ -0,0 +1,128 @@ +# Copyright 2014 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 os +import tempfile +import unittest + +from telemetry.core import util +from telemetry.util import image_util +from telemetry.util import rgba_color + +# This is a simple base64 encoded 2x2 PNG which contains, in order, a single +# Red, Yellow, Blue, and Green pixel. +test_png = """ + iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91 + JpzAAAAFklEQVR4Xg3EAQ0AAABAMP1LY3YI7l8l6A + T8tgwbJAAAAABJRU5ErkJggg== +""" +test_png_path = os.path.join(util.GetUnittestDataDir(), 'test_png.png') +test_png_2_path = os.path.join(util.GetUnittestDataDir(), 'test_png_2.png') + +class ImageUtilTest(unittest.TestCase): + def testReadFromBase64Png(self): + bmp = image_util.FromBase64Png(test_png) + + self.assertEquals(2, image_util.Width(bmp)) + self.assertEquals(2, image_util.Height(bmp)) + + image_util.GetPixelColor(bmp, 0, 0).AssertIsRGB(255, 0, 0) + image_util.GetPixelColor(bmp, 1, 1).AssertIsRGB(0, 255, 0) + image_util.GetPixelColor(bmp, 0, 1).AssertIsRGB(0, 0, 255) + image_util.GetPixelColor(bmp, 1, 0).AssertIsRGB(255, 255, 0) + + def testReadFromPngFile(self): + file_bmp = image_util.FromPngFile(test_png_path) + + self.assertEquals(2, image_util.Width(file_bmp)) + self.assertEquals(2, image_util.Height(file_bmp)) + + image_util.GetPixelColor(file_bmp, 0, 0).AssertIsRGB(255, 0, 0) + image_util.GetPixelColor(file_bmp, 1, 1).AssertIsRGB(0, 255, 0) + image_util.GetPixelColor(file_bmp, 0, 1).AssertIsRGB(0, 0, 255) + image_util.GetPixelColor(file_bmp, 1, 0).AssertIsRGB(255, 255, 0) + + def testWritePngToPngFile(self): + orig = image_util.FromPngFile(test_png_path) + temp_file = tempfile.NamedTemporaryFile(suffix='.png').name + image_util.WritePngFile(orig, temp_file) + new_file = image_util.FromPngFile(temp_file) + self.assertTrue(image_util.AreEqual(orig, new_file, likely_equal=True)) + + def testWritePngWithoutPngSuffixThrows(self): + orig = image_util.FromPngFile(test_png_path) + temp_file = tempfile.NamedTemporaryFile().name + self.assertRaises(AssertionError, image_util.WritePngFile, + orig, temp_file) + + def testWriteCroppedBmpToPngFile(self): + pixels = [255, 0, 0, 255, 255, 0, 0, 0, 0, + 255, 255, 0, 0, 255, 0, 0, 0, 0] + orig = image_util.FromRGBPixels(3, 2, pixels) + orig = image_util.Crop(orig, 0, 0, 2, 2) + temp_file = tempfile.NamedTemporaryFile(suffix='.png').name + image_util.WritePngFile(orig, temp_file) + new_file = image_util.FromPngFile(temp_file) + self.assertTrue(image_util.AreEqual(orig, new_file, likely_equal=True)) + + def testIsEqual(self): + bmp = image_util.FromBase64Png(test_png) + file_bmp = image_util.FromPngFile(test_png_path) + self.assertTrue(image_util.AreEqual(bmp, file_bmp, likely_equal=True)) + + def testDiff(self): + file_bmp = image_util.FromPngFile(test_png_path) + file_bmp_2 = image_util.FromPngFile(test_png_2_path) + + diff_bmp = image_util.Diff(file_bmp, file_bmp) + + self.assertEquals(2, image_util.Width(diff_bmp)) + self.assertEquals(2, image_util.Height(diff_bmp)) + + image_util.GetPixelColor(diff_bmp, 0, 0).AssertIsRGB(0, 0, 0) + image_util.GetPixelColor(diff_bmp, 1, 1).AssertIsRGB(0, 0, 0) + image_util.GetPixelColor(diff_bmp, 0, 1).AssertIsRGB(0, 0, 0) + image_util.GetPixelColor(diff_bmp, 1, 0).AssertIsRGB(0, 0, 0) + + diff_bmp = image_util.Diff(file_bmp, file_bmp_2) + + self.assertEquals(3, image_util.Width(diff_bmp)) + self.assertEquals(3, image_util.Height(diff_bmp)) + + image_util.GetPixelColor(diff_bmp, 0, 0).AssertIsRGB(0, 255, 255) + image_util.GetPixelColor(diff_bmp, 1, 1).AssertIsRGB(255, 0, 255) + image_util.GetPixelColor(diff_bmp, 0, 1).AssertIsRGB(255, 255, 0) + image_util.GetPixelColor(diff_bmp, 1, 0).AssertIsRGB(0, 0, 255) + + image_util.GetPixelColor(diff_bmp, 0, 2).AssertIsRGB(255, 255, 255) + image_util.GetPixelColor(diff_bmp, 1, 2).AssertIsRGB(255, 255, 255) + image_util.GetPixelColor(diff_bmp, 2, 0).AssertIsRGB(255, 255, 255) + image_util.GetPixelColor(diff_bmp, 2, 1).AssertIsRGB(255, 255, 255) + image_util.GetPixelColor(diff_bmp, 2, 2).AssertIsRGB(255, 255, 255) + + def testGetBoundingBox(self): + pixels = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + bmp = image_util.FromRGBPixels(4, 3, pixels) + box, count = image_util.GetBoundingBox(bmp, rgba_color.RgbaColor(1, 0, 0)) + self.assertEquals(box, (1, 1, 2, 1)) + self.assertEquals(count, 2) + + box, count = image_util.GetBoundingBox(bmp, rgba_color.RgbaColor(0, 1, 0)) + self.assertEquals(box, None) + self.assertEquals(count, 0) + + def testCrop(self): + pixels = [0, 0, 0, 1, 0, 0, 2, 0, 0, 3, 0, 0, + 0, 1, 0, 1, 1, 0, 2, 1, 0, 3, 1, 0, + 0, 2, 0, 1, 2, 0, 2, 2, 0, 3, 2, 0] + bmp = image_util.FromRGBPixels(4, 3, pixels) + bmp = image_util.Crop(bmp, 1, 2, 2, 1) + + self.assertEquals(2, image_util.Width(bmp)) + self.assertEquals(1, image_util.Height(bmp)) + image_util.GetPixelColor(bmp, 0, 0).AssertIsRGB(1, 2, 0) + image_util.GetPixelColor(bmp, 1, 0).AssertIsRGB(2, 2, 0) + self.assertEquals(image_util.Pixels(bmp), bytearray([1, 2, 0, 2, 2, 0])) |