19985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org#!/usr/bin/python 29985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 39985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org""" 49985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.orgCopyright 2014 Google Inc. 59985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 69985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.orgUse of this source code is governed by a BSD-style license that can be 79985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.orgfound in the LICENSE file. 89985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 99985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.orgTest imagepair.py 109985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org""" 119985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 129985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org# System-level imports 139985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.orgimport shutil 149985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.orgimport tempfile 159985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.orgimport unittest 169985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 179985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org# Local imports 189985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.orgimport imagediffdb 199985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.orgimport imagepair 209985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 219985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 229985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.orgIMG_URL_BASE = 'http://chromium-skia-gm.commondatastorage.googleapis.com/gm/bitmap-64bitMD5/' 239985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 249985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 259985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.orgclass ImagePairTest(unittest.TestCase): 269985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 279985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org def setUp(self): 289985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org self._temp_dir = tempfile.mkdtemp() 299985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org self.maxDiff = None 309985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 319985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org def tearDown(self): 329985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org shutil.rmtree(self._temp_dir) 339985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 349985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org def shortDescription(self): 35536b15ffb05a20f3681ed72749a3bc09c5386c10commit-bot@chromium.org """Tells unittest framework to not print docstrings for test cases.""" 369985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org return None 379985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 389985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org def test_endToEnd(self): 39536b15ffb05a20f3681ed72749a3bc09c5386c10commit-bot@chromium.org """Tests ImagePair, using a real ImageDiffDB to download real images. 409985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 419985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org TODO(epoger): Either in addition to or instead of this end-to-end test, 429985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org we should perform some tests using either: 439985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 1. a mock ImageDiffDB, or 449985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 2. a real ImageDiffDB that doesn't hit Google Storage looking for input 459985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org image files (maybe a file:// IMG_URL_BASE) 469985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org """ 479985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org # params for each self-test: 489985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org # 499985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org # inputs: 509985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org # 0. imageA_relative_URL 519985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org # 1. imageB_relative_URL 529985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org # 2. expectations dict 539985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org # 3. extra_columns dict 549985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org # expected output: 559985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org # 4. expected result of ImagePair.as_dict() 569985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org selftests = [ 579985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org [ 589985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org # inputs: 599985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'arcofzorro/16206093933823793653.png', 609985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'arcofzorro/16206093933823793653.png', 619985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org None, 629985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org { 639985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'builder': 'MyBuilder', 649985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'test': 'MyTest', 659985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org }, 669985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org # expected output: 679985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org { 68536b15ffb05a20f3681ed72749a3bc09c5386c10commit-bot@chromium.org 'extraColumns': { 699985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'builder': 'MyBuilder', 709985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'test': 'MyTest', 719985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org }, 729985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'imageAUrl': 'arcofzorro/16206093933823793653.png', 739985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'imageBUrl': 'arcofzorro/16206093933823793653.png', 749985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'isDifferent': False, 759985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org }, 769985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org ], 779985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 789985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org [ 799985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org # inputs: 809985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'arcofzorro/16206093933823793653.png', 819985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'arcofzorro/13786535001616823825.png', 829985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org None, 839985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org None, 849985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org # expected output: 859985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org { 869985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'differenceData': { 879985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'maxDiffPerChannel': [255, 255, 247], 889985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'numDifferingPixels': 662, 899985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'percentDifferingPixels': 0.0662, 9016f418080ff6751e15e0193263149412de9c848acommit-bot@chromium.org 'perceptualDifference': 0.06620000000000914, 919985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org }, 929985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'imageAUrl': 'arcofzorro/16206093933823793653.png', 939985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'imageBUrl': 'arcofzorro/13786535001616823825.png', 949985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'isDifferent': True, 959985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org }, 969985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org ], 979985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 989985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org [ 999985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org # inputs: 1009985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'gradients_degenerate_2pt/10552995703607727960.png', 1019985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'gradients_degenerate_2pt/11198253335583713230.png', 1029985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org { 1039985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'ignoreFailure': True, 1049985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'bugs': [1001, 1002], 1059985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org }, 1069985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org { 1079985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'builder': 'MyBuilder', 1089985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'test': 'MyTest', 1099985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org }, 1109985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org # expected output: 1119985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org { 1129985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'differenceData': { 1139985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'maxDiffPerChannel': [255, 0, 255], 1149985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'numDifferingPixels': 102400, 1159985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'percentDifferingPixels': 100.00, 11616f418080ff6751e15e0193263149412de9c848acommit-bot@chromium.org 'perceptualDifference': 100.00, 1179985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org }, 118536b15ffb05a20f3681ed72749a3bc09c5386c10commit-bot@chromium.org 'expectations': { 1199985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'bugs': [1001, 1002], 1209985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'ignoreFailure': True, 1219985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org }, 122536b15ffb05a20f3681ed72749a3bc09c5386c10commit-bot@chromium.org 'extraColumns': { 1239985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'builder': 'MyBuilder', 1249985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'test': 'MyTest', 1259985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org }, 1269985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'imageAUrl': 1279985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'gradients_degenerate_2pt/10552995703607727960.png', 1289985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'imageBUrl': 1299985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'gradients_degenerate_2pt/11198253335583713230.png', 1309985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 'isDifferent': True, 1319985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org }, 1329985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org ], 1336844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org 1346844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org # Test fix for http://skbug.com/2368 -- how do we handle an ImagePair 1356844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org # missing one of its images? 1366844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org [ 1376844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org # inputs: 1386844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org 'arcofzorro/16206093933823793653.png', 1396844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org 'nonexistentDir/111111.png', 1406844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org { 1416844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org 'ignoreFailure': True, 1426844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org 'bugs': [1001, 1002], 1436844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org }, 1446844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org { 1456844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org 'builder': 'MyBuilder', 1466844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org 'test': 'MyTest', 1476844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org }, 1486844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org # expected output: 1496844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org { 1506844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org 'expectations': { 1516844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org 'bugs': [1001, 1002], 1526844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org 'ignoreFailure': True, 1536844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org }, 1546844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org 'extraColumns': { 1556844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org 'builder': 'MyBuilder', 1566844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org 'test': 'MyTest', 1576844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org }, 1586844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org 'imageAUrl': 'arcofzorro/16206093933823793653.png', 1596844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org 'imageBUrl': 'nonexistentDir/111111.png', 1606844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org 'isDifferent': True, 1616844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org }, 1626844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org ], 1639985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org ] 1649985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 1659985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org db = imagediffdb.ImageDiffDB(self._temp_dir) 1669985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org for selftest in selftests: 1679985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org image_pair = imagepair.ImagePair( 1689985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org image_diff_db=db, 1699985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org base_url=IMG_URL_BASE, 1709985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org imageA_relative_url=selftest[0], 1719985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org imageB_relative_url=selftest[1], 1729985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org expectations=selftest[2], 1739985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org extra_columns=selftest[3]) 1749985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org self.assertEqual(image_pair.as_dict(), selftest[4]) 1759985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 1769985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 1779985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.orgdef main(): 1789985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org suite = unittest.TestLoader().loadTestsFromTestCase(ImagePairTest) 1799985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org unittest.TextTestRunner(verbosity=2).run(suite) 1809985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 1819985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org 1829985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.orgif __name__ == '__main__': 1839985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org main() 184