19dddf6f6b957166b6cd6080f405b762aab109948epoger@google.com#!/usr/bin/python 29dddf6f6b957166b6cd6080f405b762aab109948epoger@google.com 39dddf6f6b957166b6cd6080f405b762aab109948epoger@google.com""" 49dddf6f6b957166b6cd6080f405b762aab109948epoger@google.comCopyright 2013 Google Inc. 59dddf6f6b957166b6cd6080f405b762aab109948epoger@google.com 69dddf6f6b957166b6cd6080f405b762aab109948epoger@google.comUse of this source code is governed by a BSD-style license that can be 79dddf6f6b957166b6cd6080f405b762aab109948epoger@google.comfound in the LICENSE file. 89dddf6f6b957166b6cd6080f405b762aab109948epoger@google.com 99dddf6f6b957166b6cd6080f405b762aab109948epoger@google.comTest imagediffdb.py 109dddf6f6b957166b6cd6080f405b762aab109948epoger@google.com""" 119dddf6f6b957166b6cd6080f405b762aab109948epoger@google.com 129dddf6f6b957166b6cd6080f405b762aab109948epoger@google.com# System-level imports 132a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.orgimport shutil 142a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.orgimport tempfile 152a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.orgimport unittest 169dddf6f6b957166b6cd6080f405b762aab109948epoger@google.com 179dddf6f6b957166b6cd6080f405b762aab109948epoger@google.com# Local imports 189dddf6f6b957166b6cd6080f405b762aab109948epoger@google.comimport imagediffdb 199dddf6f6b957166b6cd6080f405b762aab109948epoger@google.com 209dddf6f6b957166b6cd6080f405b762aab109948epoger@google.com 2144546f85d9170d9dbbb0423813c339c1def30074commit-bot@chromium.orgIMG_URL_BASE = ('http://chromium-skia-gm.commondatastorage.googleapis.com/gm/' 2244546f85d9170d9dbbb0423813c339c1def30074commit-bot@chromium.org 'bitmap-64bitMD5/') 232a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org 242a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org 252a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.orgclass ImageDiffDbTest(unittest.TestCase): 262a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org 272a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org def setUp(self): 2866ed8dc4bfd63e4552a213cb17909f9fbbf59abdepoger self.temp_dir = tempfile.mkdtemp() 299985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org self.maxDiff = None 302a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org 312a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org def tearDown(self): 3266ed8dc4bfd63e4552a213cb17909f9fbbf59abdepoger shutil.rmtree(self.temp_dir) 332a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org 342a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org def shortDescription(self): 352a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org """Tell unittest framework to not print docstrings for test cases.""" 362a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org return None 372a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org 389985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org def test_sanitize_locator(self): 399985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org """Test _sanitize_locator().""" 4066ed8dc4bfd63e4552a213cb17909f9fbbf59abdepoger # pylint: disable=W0212 419985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org self.assertEqual(imagediffdb._sanitize_locator('simple'), 'simple') 429985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org self.assertEqual(imagediffdb._sanitize_locator(1234), '1234') 439985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org self.assertEqual(imagediffdb._sanitize_locator('one/two'), 'one_two') 449985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org self.assertEqual(imagediffdb._sanitize_locator('one\\two'), 'one_two') 459985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org self.assertEqual(imagediffdb._sanitize_locator('one_two'), 'one_two') 469985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 472a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org def test_simple(self): 489985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org """Test ImageDiffDB, downloading real known images from Google Storage. 499985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 509985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org TODO(epoger): Instead of hitting Google Storage, we should read image 519985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org files from local disk using a file:// IMG_URL_BASE. 529985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org """ 532a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org # params for each self-test: 542a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org # 0. expected image locator 552a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org # 1. expected image URL 562a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org # 2. actual image locator 572a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org # 3. actual image URL 582a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org # 4. expected percent_pixels_differing (as a string, to 4 decimal places) 59984b97c496e3e2d798c1091de4066f495e8afebdepoger # 5. expected perceptual difference (as a string, to 4 decimal places) 60984b97c496e3e2d798c1091de4066f495e8afebdepoger # 6. expected max_diff_per_channel 612a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org selftests = [ 622a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org [ 639985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'arcofzorro/16206093933823793653', 642a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org IMG_URL_BASE + 'arcofzorro/16206093933823793653.png', 659985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'arcofzorro/13786535001616823825', 662a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org IMG_URL_BASE + 'arcofzorro/13786535001616823825.png', 67984b97c496e3e2d798c1091de4066f495e8afebdepoger '0.0662', '0.0662', [255, 255, 247], 682a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org ], 692a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org [ 709985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'gradients_degenerate_2pt/10552995703607727960', 712a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org IMG_URL_BASE + 'gradients_degenerate_2pt/10552995703607727960.png', 729985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'gradients_degenerate_2pt/11198253335583713230', 732a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org IMG_URL_BASE + 'gradients_degenerate_2pt/11198253335583713230.png', 74984b97c496e3e2d798c1091de4066f495e8afebdepoger '100.0000', '100.0000', [255, 0, 255], 752a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org ], 762a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org ] 772a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org 782a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org # Add all image pairs to the database 7966ed8dc4bfd63e4552a213cb17909f9fbbf59abdepoger db = imagediffdb.ImageDiffDB(self.temp_dir) 802a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org for selftest in selftests: 8166ed8dc4bfd63e4552a213cb17909f9fbbf59abdepoger db.add_image_pair( 822a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org expected_image_locator=selftest[0], expected_image_url=selftest[1], 832a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org actual_image_locator=selftest[2], actual_image_url=selftest[3]) 842a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org 852a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org # Fetch each image pair from the database 862a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org for selftest in selftests: 872a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org record = db.get_diff_record(expected_image_locator=selftest[0], 882a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org actual_image_locator=selftest[2]) 892a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org self.assertEqual('%.4f' % record.get_percent_pixels_differing(), 902a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org selftest[4]) 91984b97c496e3e2d798c1091de4066f495e8afebdepoger self.assertEqual('%.4f' % record.get_perceptual_difference(), selftest[5]) 92984b97c496e3e2d798c1091de4066f495e8afebdepoger self.assertEqual(record.get_max_diff_per_channel(), selftest[6]) 932a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org 949dddf6f6b957166b6cd6080f405b762aab109948epoger@google.com 959dddf6f6b957166b6cd6080f405b762aab109948epoger@google.comdef main(): 962a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org suite = unittest.TestLoader().loadTestsFromTestCase(ImageDiffDbTest) 972a78e82f5eb82c3832231e36957110044b0783b3commit-bot@chromium.org unittest.TextTestRunner(verbosity=2).run(suite) 989dddf6f6b957166b6cd6080f405b762aab109948epoger@google.com 999dddf6f6b957166b6cd6080f405b762aab109948epoger@google.com 1009dddf6f6b957166b6cd6080f405b762aab109948epoger@google.comif __name__ == '__main__': 1019dddf6f6b957166b6cd6080f405b762aab109948epoger@google.com main() 102