2010-08-24 Dirk Pranke <dpranke@chromium.org>
[WebKit.git] / WebKitTools / Scripts / webkitpy / layout_tests / rebaseline_chromium_webkit_tests_unittest.py
1 #!/usr/bin/python
2 # Copyright (C) 2010 Google Inc. All rights reserved.
3 #
4 # Redistribution and use in source and binary forms, with or without
5 # modification, are permitted provided that the following conditions are
6 # met:
7 #
8 #     * Redistributions of source code must retain the above copyright
9 # notice, this list of conditions and the following disclaimer.
10 #     * Redistributions in binary form must reproduce the above
11 # copyright notice, this list of conditions and the following disclaimer
12 # in the documentation and/or other materials provided with the
13 # distribution.
14 #     * Neither the name of Google Inc. nor the names of its
15 # contributors may be used to endorse or promote products derived from
16 # this software without specific prior written permission.
17 #
18 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
30 """Unit tests for rebaseline_chromium_webkit_tests.py."""
31
32 import os
33 import unittest
34
35 from webkitpy.layout_tests import port
36 from webkitpy.layout_tests import rebaseline_chromium_webkit_tests
37
38
39 class MockPort(object):
40     def __init__(self, image_diff_exists):
41         self.image_diff_exists = image_diff_exists
42
43     def check_image_diff(self, override_step, logging):
44         return self.image_diff_exists
45
46
47 class MockOptions(object):
48     def __init__(self):
49         self.configuration = None
50
51
52 def get_mock_get(config_expectations):
53     def mock_get(port_name, options):
54         return MockPort(config_expectations[options.configuration])
55     return mock_get
56
57
58 class TestGetHostPortObject(unittest.TestCase):
59     def assert_result(self, release_present, debug_present, valid_port_obj):
60         # Tests whether we get a valid port object returned when we claim
61         # that Image diff is (or isn't) present in the two configs.
62         port.get = get_mock_get({'Release': release_present,
63                                  'Debug': debug_present})
64         options = MockOptions()
65         port_obj = rebaseline_chromium_webkit_tests.get_host_port_object(
66             options)
67         if valid_port_obj:
68             self.assertNotEqual(port_obj, None)
69         else:
70             self.assertEqual(port_obj, None)
71
72     def test_get_host_port_object(self):
73         # Save the normal port.get() function for future testing.
74         old_get = port.get
75
76         # Test whether we get a valid port object back for the four
77         # possible cases of having ImageDiffs built. It should work when
78         # there is at least one binary present.
79         self.assert_result(False, False, False)
80         self.assert_result(True, False, True)
81         self.assert_result(False, True, True)
82         self.assert_result(True, True, True)
83
84         # Restore the normal port.get() function.
85         port.get = old_get
86
87
88 class TestRebaseliner(unittest.TestCase):
89     def make_rebaseliner(self):
90         options = MockOptions()
91         host_port_obj = port.get('test', options)
92         target_options = options
93         target_port_obj = port.get('test', target_options)
94         platform = 'test'
95         return rebaseline_chromium_webkit_tests.Rebaseliner(
96             host_port_obj, target_port_obj, platform, options)
97
98     def test_noop(self):
99         # this method tests that was can at least instantiate an object, even
100         # if there is nothing to do.
101         rebaseliner = self.make_rebaseliner()
102         self.assertNotEqual(rebaseliner, None)
103
104     def test_diff_baselines_txt(self):
105         rebaseliner = self.make_rebaseliner()
106         path = os.path.join(rebaseliner._port.layout_tests_dir(),
107                              "passes", "text-expected.txt")
108         self.assertFalse(rebaseliner._diff_baselines(path, path))
109
110     def test_diff_baselines_png(self):
111         rebaseliner = self.make_rebaseliner()
112         path = os.path.join(rebaseliner._port.layout_tests_dir(),
113                             "passes", "image-expected.png")
114         self.assertFalse(rebaseliner._diff_baselines(path, path))
115
116 if __name__ == '__main__':
117     unittest.main()