2010-11-30 Mihai Parparita <mihaip@chromium.org>
[WebKit-https.git] / WebKitTools / Scripts / webkitpy / tool / commands / rebaselineserver_unittest.py
1 # Copyright (C) 2010 Google Inc. All rights reserved.
2 #
3 # Redistribution and use in source and binary forms, with or without
4 # modification, are permitted provided that the following conditions are
5 # met:
6 #
7 #    * Redistributions of source code must retain the above copyright
8 # notice, this list of conditions and the following disclaimer.
9 #    * Redistributions in binary form must reproduce the above
10 # copyright notice, this list of conditions and the following disclaimer
11 # in the documentation and/or other materials provided with the
12 # distribution.
13 #    * Neither the name of Google Inc. nor the names of its
14 # contributors may be used to endorse or promote products derived from
15 # this software without specific prior written permission.
16 #
17 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29 import unittest
30
31 from webkitpy.common.system import filesystem_mock
32 from webkitpy.layout_tests.port import base
33 from webkitpy.layout_tests.port.webkit import WebKitPort
34 from webkitpy.tool.commands import rebaselineserver
35
36
37 class GetBaselinesTest(unittest.TestCase):
38     def test_no_baselines(self):
39         self._assertBaselines(
40             test_files=(),
41             test_name='fast/missing.html',
42             expected_baselines={})
43
44     def test_text_baselines(self):
45         self._assertBaselines(
46             test_files=(
47                 'fast/text-expected.txt',
48                 'platform/mac/fast/text-expected.txt',
49             ),
50             test_name='fast/text.html',
51             expected_baselines={
52                 'mac': {'.txt': True},
53                 'base': {'.txt': False},
54             })
55
56     def test_image_and_text_baselines(self):
57         self._assertBaselines(
58             test_files=(
59                 'fast/image-expected.txt',
60                 'platform/mac/fast/image-expected.png',
61                 'platform/mac/fast/image-expected.checksum',
62                 'platform/win/fast/image-expected.png',
63                 'platform/win/fast/image-expected.checksum',
64             ),
65             test_name='fast/image.html',
66             expected_baselines={
67                 'base': {'.txt': True},
68                 'mac': {'.checksum': True, '.png': True},
69                 'win': {'.checksum': False, '.png': False},
70             })
71
72     def test_extra_baselines(self):
73         self._assertBaselines(
74             test_files=(
75                 'fast/text-expected.txt',
76                 'platform/nosuchplatform/fast/text-expected.txt',
77             ),
78             test_name='fast/text.html',
79             expected_baselines={'base': {'.txt': True}})
80
81     def _assertBaselines(self, test_files, test_name, expected_baselines):
82         layout_tests_directory = base.Port().layout_tests_dir()
83         mock_filesystem = filesystem_mock.MockFileSystem()
84         for file in test_files + (test_name,):
85             file_path = mock_filesystem.join(layout_tests_directory, file)
86             mock_filesystem.files[file_path] = ''
87
88         class TestMacPort(WebKitPort):
89             def __init__(self):
90                 WebKitPort.__init__(self, filesystem=mock_filesystem)
91                 self._name = 'mac'
92
93         actual_baselines = rebaselineserver._get_test_baselines(
94             test_name,
95             TestMacPort(),
96             layout_tests_directory,
97             ('mac', 'win', 'linux'),
98             mock_filesystem)
99         self.assertEqual(expected_baselines, actual_baselines)