1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
9 from telemetry import test
10 from telemetry.core import bitmap
11 from telemetry.core import util
14 # This is a simple base64 encoded 2x2 PNG which contains, in order, a single
15 # Red, Yellow, Blue, and Green pixel.
17 iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91
18 JpzAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACx
19 MBAJqcGAAAABZJREFUCNdj/M/AwPCfgYGB4T/DfwY
20 AHAAD/iOWZXsAAAAASUVORK5CYII=
22 test_png_path = os.path.join(util.GetUnittestDataDir(), 'test_png.png')
23 test_png_2_path = os.path.join(util.GetUnittestDataDir(), 'test_png_2.png')
26 class BitmapTest(unittest.TestCase):
28 # pylint: disable=C0324
30 def testReadFromBase64Png(self):
31 bmp = bitmap.Bitmap.FromBase64Png(test_png)
33 self.assertEquals(2, bmp.width)
34 self.assertEquals(2, bmp.height)
36 bmp.GetPixelColor(0, 0).AssertIsRGB(255, 0, 0)
37 bmp.GetPixelColor(1, 1).AssertIsRGB(0, 255, 0)
38 bmp.GetPixelColor(0, 1).AssertIsRGB(0, 0, 255)
39 bmp.GetPixelColor(1, 0).AssertIsRGB(255, 255, 0)
41 def testReadFromPngFile(self):
42 file_bmp = bitmap.Bitmap.FromPngFile(test_png_path)
44 self.assertEquals(2, file_bmp.width)
45 self.assertEquals(2, file_bmp.height)
47 file_bmp.GetPixelColor(0, 0).AssertIsRGB(255, 0, 0)
48 file_bmp.GetPixelColor(1, 1).AssertIsRGB(0, 255, 0)
49 file_bmp.GetPixelColor(0, 1).AssertIsRGB(0, 0, 255)
50 file_bmp.GetPixelColor(1, 0).AssertIsRGB(255, 255, 0)
52 def testWritePngToPngFile(self):
53 orig = bitmap.Bitmap.FromPngFile(test_png_path)
54 temp_file = tempfile.NamedTemporaryFile().name
55 orig.WritePngFile(temp_file)
56 new_file = bitmap.Bitmap.FromPngFile(temp_file)
57 self.assertTrue(orig.IsEqual(new_file))
60 def testWriteCroppedBmpToPngFile(self):
61 pixels = [255,0,0, 255,255,0, 0,0,0,
62 255,255,0, 0,255,0, 0,0,0]
63 orig = bitmap.Bitmap(3, 3, 2, pixels)
65 temp_file = tempfile.NamedTemporaryFile().name
66 orig.WritePngFile(temp_file)
67 new_file = bitmap.Bitmap.FromPngFile(temp_file)
68 self.assertTrue(orig.IsEqual(new_file))
70 def testIsEqual(self):
71 bmp = bitmap.Bitmap.FromBase64Png(test_png)
72 file_bmp = bitmap.Bitmap.FromPngFile(test_png_path)
73 self.assertTrue(bmp.IsEqual(file_bmp))
76 file_bmp = bitmap.Bitmap.FromPngFile(test_png_path)
77 file_bmp_2 = bitmap.Bitmap.FromPngFile(test_png_2_path)
79 diff_bmp = file_bmp.Diff(file_bmp)
81 self.assertEquals(2, diff_bmp.width)
82 self.assertEquals(2, diff_bmp.height)
84 diff_bmp.GetPixelColor(0, 0).AssertIsRGB(0, 0, 0)
85 diff_bmp.GetPixelColor(1, 1).AssertIsRGB(0, 0, 0)
86 diff_bmp.GetPixelColor(0, 1).AssertIsRGB(0, 0, 0)
87 diff_bmp.GetPixelColor(1, 0).AssertIsRGB(0, 0, 0)
89 diff_bmp = file_bmp.Diff(file_bmp_2)
91 self.assertEquals(3, diff_bmp.width)
92 self.assertEquals(3, diff_bmp.height)
94 diff_bmp.GetPixelColor(0, 0).AssertIsRGB(0, 255, 255)
95 diff_bmp.GetPixelColor(1, 1).AssertIsRGB(255, 0, 255)
96 diff_bmp.GetPixelColor(0, 1).AssertIsRGB(255, 255, 0)
97 diff_bmp.GetPixelColor(1, 0).AssertIsRGB(0, 0, 255)
99 diff_bmp.GetPixelColor(0, 2).AssertIsRGB(255, 255, 255)
100 diff_bmp.GetPixelColor(1, 2).AssertIsRGB(255, 255, 255)
101 diff_bmp.GetPixelColor(2, 0).AssertIsRGB(255, 255, 255)
102 diff_bmp.GetPixelColor(2, 1).AssertIsRGB(255, 255, 255)
103 diff_bmp.GetPixelColor(2, 2).AssertIsRGB(255, 255, 255)
106 def testGetBoundingBox(self):
107 pixels = [0,0,0, 0,0,0, 0,0,0, 0,0,0,
108 0,0,0, 1,0,0, 1,0,0, 0,0,0,
109 0,0,0, 0,0,0, 0,0,0, 0,0,0]
110 bmp = bitmap.Bitmap(3, 4, 3, pixels)
111 box, count = bmp.GetBoundingBox(bitmap.RgbaColor(1, 0, 0))
112 self.assertEquals(box, (1, 1, 2, 1))
113 self.assertEquals(count, 2)
115 box, count = bmp.GetBoundingBox(bitmap.RgbaColor(0, 1, 0))
116 self.assertEquals(box, None)
117 self.assertEquals(count, 0)
121 pixels = [0,0,0, 1,0,0, 2,0,0, 3,0,0,
122 0,1,0, 1,1,0, 2,1,0, 3,1,0,
123 0,2,0, 1,2,0, 2,2,0, 3,2,0]
124 bmp = bitmap.Bitmap(3, 4, 3, pixels)
127 self.assertEquals(bmp.width, 2)
128 self.assertEquals(bmp.height, 1)
129 bmp.GetPixelColor(0, 0).AssertIsRGB(1, 2, 0)
130 bmp.GetPixelColor(1, 0).AssertIsRGB(2, 2, 0)
131 self.assertEquals(bmp.pixels, bytearray([1,2,0, 2,2,0]))
134 def testHistogram(self):
135 pixels = [1,2,3, 1,2,3, 1,2,3, 1,2,3,
136 1,2,3, 8,7,6, 5,4,6, 1,2,3,
137 1,2,3, 8,7,6, 5,4,6, 1,2,3]
138 bmp = bitmap.Bitmap(3, 4, 3, pixels)
141 histogram = bmp.ColorHistogram()
142 self.assertEquals(sum(histogram), bmp.width * bmp.height * 3)
143 self.assertEquals(histogram[1], 0)
144 self.assertEquals(histogram[5], 2)
145 self.assertEquals(histogram[8], 2)
146 self.assertEquals(histogram[2 + 256], 0)
147 self.assertEquals(histogram[4 + 256], 2)
148 self.assertEquals(histogram[7 + 256], 2)
149 self.assertEquals(histogram[3 + 512], 0)
150 self.assertEquals(histogram[6 + 512], 4)
153 def testHistogramIgnoreColor(self):
154 pixels = [1,2,3, 1,2,3, 1,2,3, 1,2,3,
155 1,2,3, 8,7,6, 5,4,6, 1,2,3,
156 1,2,3, 8,7,6, 5,4,6, 1,2,3]
157 bmp = bitmap.Bitmap(3, 4, 3, pixels)
159 histogram = bmp.ColorHistogram(ignore_color=bitmap.RgbaColor(1, 2, 3))
160 self.assertEquals(histogram[1], 0)
161 self.assertEquals(histogram[5], 2)
162 self.assertEquals(histogram[8], 2)
163 self.assertEquals(histogram[2 + 256], 0)
164 self.assertEquals(histogram[4 + 256], 2)
165 self.assertEquals(histogram[7 + 256], 2)
166 self.assertEquals(histogram[3 + 512], 0)
167 self.assertEquals(histogram[6 + 512], 4)
170 def testHistogramIgnoreColorTolerance(self):
171 pixels = [1,2,3, 4,5,6,
173 bmp = bitmap.Bitmap(3, 2, 2, pixels)
175 histogram = bmp.ColorHistogram(ignore_color=bitmap.RgbaColor(0, 1, 2),
177 self.assertEquals(histogram[1], 0)
178 self.assertEquals(histogram[4], 1)
179 self.assertEquals(histogram[7], 1)
180 self.assertEquals(histogram[8], 1)
181 self.assertEquals(histogram[2 + 256], 0)
182 self.assertEquals(histogram[5 + 256], 1)
183 self.assertEquals(histogram[7 + 256], 1)
184 self.assertEquals(histogram[8 + 256], 1)
185 self.assertEquals(histogram[3 + 512], 0)
186 self.assertEquals(histogram[6 + 512], 2)
187 self.assertEquals(histogram[9 + 512], 1)