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
2254f1ad8bb5bdd2ac2ea7981427abeb193383d449epogerIMG_URL_BASE = ('http://chromium-skia-gm.commondatastorage.googleapis.com/'
2354f1ad8bb5bdd2ac2ea7981427abeb193383d449epoger                'gm/bitmap-64bitMD5/')
249985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org
259985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org
269985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.orgclass ImagePairTest(unittest.TestCase):
279985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org
289985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org  def setUp(self):
2966ed8dc4bfd63e4552a213cb17909f9fbbf59abdepoger    self.temp_dir = tempfile.mkdtemp()
309985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org    self.maxDiff = None
319985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org
329985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org  def tearDown(self):
3366ed8dc4bfd63e4552a213cb17909f9fbbf59abdepoger    shutil.rmtree(self.temp_dir)
349985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org
359985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org  def shortDescription(self):
36536b15ffb05a20f3681ed72749a3bc09c5386c10commit-bot@chromium.org    """Tells unittest framework to not print docstrings for test cases."""
379985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org    return None
389985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org
399985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org  def test_endToEnd(self):
40536b15ffb05a20f3681ed72749a3bc09c5386c10commit-bot@chromium.org    """Tests ImagePair, using a real ImageDiffDB to download real images.
419985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org
429985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org    TODO(epoger): Either in addition to or instead of this end-to-end test,
439985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org    we should perform some tests using either:
449985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org    1. a mock ImageDiffDB, or
459985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org    2. a real ImageDiffDB that doesn't hit Google Storage looking for input
469985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org       image files (maybe a file:// IMG_URL_BASE)
479985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org    """
489985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org    # params for each self-test:
499985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org    #
509985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org    # inputs:
519985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org    #  0. imageA_relative_URL
529985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org    #  1. imageB_relative_URL
539985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org    #  2. expectations dict
549985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org    #  3. extra_columns dict
559985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org    # expected output:
569985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org    #  4. expected result of ImagePair.as_dict()
579985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org    selftests = [
589985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org        [
599985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            # inputs:
609985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            'arcofzorro/16206093933823793653.png',
619985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            'arcofzorro/16206093933823793653.png',
629985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            None,
639985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            {
649985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                'builder': 'MyBuilder',
659985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                'test': 'MyTest',
669985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            },
679985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            # expected output:
689985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            {
69536b15ffb05a20f3681ed72749a3bc09c5386c10commit-bot@chromium.org                'extraColumns': {
709985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                    'builder': 'MyBuilder',
719985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                    'test': 'MyTest',
729985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                },
739985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                'imageAUrl': 'arcofzorro/16206093933823793653.png',
749985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                'imageBUrl': 'arcofzorro/16206093933823793653.png',
759985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                'isDifferent': False,
769985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            },
779985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org        ],
789985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org
799985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org        [
809985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            # inputs:
819985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            'arcofzorro/16206093933823793653.png',
829985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            'arcofzorro/13786535001616823825.png',
839985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            None,
849985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            None,
859985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            # expected output:
869985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            {
879985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                'differenceData': {
889985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                    'maxDiffPerChannel': [255, 255, 247],
899985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                    'numDifferingPixels': 662,
909985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                    'percentDifferingPixels': 0.0662,
9154f1ad8bb5bdd2ac2ea7981427abeb193383d449epoger                    'perceptualDifference': 0.06620300000000157,
92a1aa5c280662faf0df54865f69449d13b8b0cc65stephana                    'diffUrl': 'arcofzorro_16206093933823793653_png_png-vs-' +
93a1aa5c280662faf0df54865f69449d13b8b0cc65stephana                        'arcofzorro_13786535001616823825_png_png.png',
942529f2e72cddf87904c8ad4b613942cbef802cfbrmistry                    'whiteDiffUrl': 'arcofzorro_16206093933823793653_png_png' +
95a1aa5c280662faf0df54865f69449d13b8b0cc65stephana                        '-vs-arcofzorro_13786535001616823825_png_png.png',
969985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                },
979985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                'imageAUrl': 'arcofzorro/16206093933823793653.png',
989985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                'imageBUrl': 'arcofzorro/13786535001616823825.png',
999985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                'isDifferent': True,
1009985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            },
1019985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org        ],
1029985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org
1039985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org        [
1049985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            # inputs:
1059985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            'gradients_degenerate_2pt/10552995703607727960.png',
1069985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            'gradients_degenerate_2pt/11198253335583713230.png',
1079985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            {
1089985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                'ignoreFailure': True,
1099985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                'bugs': [1001, 1002],
1109985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            },
1119985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            {
1129985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                'builder': 'MyBuilder',
1139985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                'test': 'MyTest',
1149985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            },
1159985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            # expected output:
1169985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            {
1179985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                'differenceData': {
1189985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                    'maxDiffPerChannel': [255, 0, 255],
1199985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                    'numDifferingPixels': 102400,
1209985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                    'percentDifferingPixels': 100.00,
12116f418080ff6751e15e0193263149412de9c848acommit-bot@chromium.org                    'perceptualDifference': 100.00,
122a1aa5c280662faf0df54865f69449d13b8b0cc65stephana                    'diffUrl': 'gradients_degenerate_2pt_10552995703607727960' +
123a1aa5c280662faf0df54865f69449d13b8b0cc65stephana                               '_png_png-vs-gradients_degenerate_2pt_' +
124a1aa5c280662faf0df54865f69449d13b8b0cc65stephana                               '11198253335583713230_png_png.png',
125a1aa5c280662faf0df54865f69449d13b8b0cc65stephana                    'whiteDiffUrl': 'gradients_degenerate_2pt_' +
126a1aa5c280662faf0df54865f69449d13b8b0cc65stephana                               '10552995703607727960_png_png-vs-' +
127a1aa5c280662faf0df54865f69449d13b8b0cc65stephana                               'gradients_degenerate_2pt_11198253335583713230' +
128a1aa5c280662faf0df54865f69449d13b8b0cc65stephana                               '_png_png.png'
1299985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                },
130536b15ffb05a20f3681ed72749a3bc09c5386c10commit-bot@chromium.org                'expectations': {
1319985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                    'bugs': [1001, 1002],
1329985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                    'ignoreFailure': True,
1339985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                },
134536b15ffb05a20f3681ed72749a3bc09c5386c10commit-bot@chromium.org                'extraColumns': {
1359985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                    'builder': 'MyBuilder',
1369985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                    'test': 'MyTest',
1379985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                },
1389985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                'imageAUrl':
1399985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                    'gradients_degenerate_2pt/10552995703607727960.png',
1409985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                'imageBUrl':
1419985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                    'gradients_degenerate_2pt/11198253335583713230.png',
1429985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org                'isDifferent': True,
1439985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org            },
1449985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org        ],
1456844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org
1466844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org        # Test fix for http://skbug.com/2368 -- how do we handle an ImagePair
1476844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org        # missing one of its images?
1486844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org        [
1496844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org            # inputs:
1506844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org            'arcofzorro/16206093933823793653.png',
1516844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org            'nonexistentDir/111111.png',
1526844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org            {
1536844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org                'ignoreFailure': True,
1546844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org                'bugs': [1001, 1002],
1556844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org            },
1566844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org            {
1576844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org                'builder': 'MyBuilder',
1586844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org                'test': 'MyTest',
1596844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org            },
1606844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org            # expected output:
1616844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org            {
1626844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org                'expectations': {
1636844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org                    'bugs': [1001, 1002],
1646844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org                    'ignoreFailure': True,
1656844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org                },
1666844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org                'extraColumns': {
1676844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org                    'builder': 'MyBuilder',
1686844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org                    'test': 'MyTest',
1696844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org                },
1706844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org                'imageAUrl': 'arcofzorro/16206093933823793653.png',
1716844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org                'imageBUrl': 'nonexistentDir/111111.png',
1726844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org                'isDifferent': True,
1736844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org            },
1746844958fffcf9ee19370f47aba8cba909caef4f7commit-bot@chromium.org        ],
1753facc7c87d9f81c352c9d37b1b46340b9e745578epoger
1763facc7c87d9f81c352c9d37b1b46340b9e745578epoger        # One of the two images is missing, but download_all_images=True so we
1773facc7c87d9f81c352c9d37b1b46340b9e745578epoger        # should download it anyway.
1783facc7c87d9f81c352c9d37b1b46340b9e745578epoger        [
1793facc7c87d9f81c352c9d37b1b46340b9e745578epoger            # inputs:
1803facc7c87d9f81c352c9d37b1b46340b9e745578epoger            None,
1813facc7c87d9f81c352c9d37b1b46340b9e745578epoger            'arcofzorro/13786535001616823825.png',
1823facc7c87d9f81c352c9d37b1b46340b9e745578epoger            None,
1833facc7c87d9f81c352c9d37b1b46340b9e745578epoger            None,
1843facc7c87d9f81c352c9d37b1b46340b9e745578epoger            # expected output:
1853facc7c87d9f81c352c9d37b1b46340b9e745578epoger            {
1863facc7c87d9f81c352c9d37b1b46340b9e745578epoger                'imageAUrl': None,
1873facc7c87d9f81c352c9d37b1b46340b9e745578epoger                'imageBUrl': 'arcofzorro/13786535001616823825.png',
1883facc7c87d9f81c352c9d37b1b46340b9e745578epoger                'isDifferent': True,
1893facc7c87d9f81c352c9d37b1b46340b9e745578epoger            },
1903facc7c87d9f81c352c9d37b1b46340b9e745578epoger        ],
1913facc7c87d9f81c352c9d37b1b46340b9e745578epoger
1929985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org    ]
1939985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org
19466ed8dc4bfd63e4552a213cb17909f9fbbf59abdepoger    db = imagediffdb.ImageDiffDB(self.temp_dir)
1959985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org    for selftest in selftests:
1969985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org      image_pair = imagepair.ImagePair(
1979985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org          image_diff_db=db,
1982529f2e72cddf87904c8ad4b613942cbef802cfbrmistry          imageA_base_url=IMG_URL_BASE,
1992529f2e72cddf87904c8ad4b613942cbef802cfbrmistry          imageB_base_url=IMG_URL_BASE,
2009985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org          imageA_relative_url=selftest[0],
2019985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org          imageB_relative_url=selftest[1],
2029985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org          expectations=selftest[2],
2033facc7c87d9f81c352c9d37b1b46340b9e745578epoger          extra_columns=selftest[3],
2043facc7c87d9f81c352c9d37b1b46340b9e745578epoger          download_all_images=True)
2059985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org      self.assertEqual(image_pair.as_dict(), selftest[4])
2069985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org
2079985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org
2089985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.orgdef main():
2099985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org  suite = unittest.TestLoader().loadTestsFromTestCase(ImagePairTest)
2109985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org  unittest.TextTestRunner(verbosity=2).run(suite)
2119985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org
2129985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org
2139985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.orgif __name__ == '__main__':
2149985ef5ed8c0b5cf3530ccf13c0774c6ef6256ddcommit-bot@chromium.org  main()
215