365a58559f8618fd27d3321ceee1ea2c51f2c0ea
[WebKit.git] / Tools / Scripts / webkitpy / layout_tests / models / test_configuration_unittest.py
1 # Copyright (C) 2011 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 Google name 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.layout_tests import port
32 from webkitpy.layout_tests.models.test_configuration import *
33
34
35 class TestConfigurationTest(unittest.TestCase):
36     def test_items(self):
37         config = TestConfiguration(None, 'xp', 'x86', 'release', 'cpu')
38         result_config_dict = {}
39         for category, specifier in config.items():
40             result_config_dict[category] = specifier
41         self.assertEquals({'version': 'xp', 'architecture': 'x86', 'build_type': 'release', 'graphics_type': 'cpu'}, result_config_dict)
42
43     def test_keys(self):
44         config = TestConfiguration(None, 'xp', 'x86', 'release', 'cpu')
45         result_config_keys = []
46         for category in config.keys():
47             result_config_keys.append(category)
48         self.assertEquals(set(['graphics_type', 'version', 'architecture', 'build_type']), set(result_config_keys))
49
50     def test_str(self):
51         config = TestConfiguration(None, 'xp', 'x86', 'release', 'cpu')
52         self.assertEquals('<xp, x86, release, cpu>', str(config))
53
54     def test_repr(self):
55         config = TestConfiguration(None, 'xp', 'x86', 'release', 'cpu')
56         self.assertEquals("TestConfig(version='xp', architecture='x86', build_type='release', graphics_type='cpu')", repr(config))
57
58     def test_hash(self):
59         config_dict = {}
60         config_dict[TestConfiguration(None, 'xp', 'x86', 'release', 'cpu')] = True
61         self.assertTrue(TestConfiguration(None, 'xp', 'x86', 'release', 'cpu') in config_dict)
62         self.assertTrue(config_dict[TestConfiguration(None, 'xp', 'x86', 'release', 'cpu')])
63         config_dict[TestConfiguration(None, 'xp', 'x86', 'release', 'gpu')] = False
64         self.assertFalse(config_dict[TestConfiguration(None, 'xp', 'x86', 'release', 'gpu')])
65
66         def query_unknown_key():
67             config_dict[TestConfiguration(None, 'xp', 'x86', 'debug', 'gpu')]
68
69         self.assertRaises(KeyError, query_unknown_key)
70         self.assertTrue(TestConfiguration(None, 'xp', 'x86', 'release', 'gpu') in config_dict)
71         self.assertFalse(TestConfiguration(None, 'xp', 'x86', 'debug', 'gpu') in config_dict)
72         configs_list = [TestConfiguration(None, 'xp', 'x86', 'release', 'gpu'), TestConfiguration(None, 'xp', 'x86', 'debug', 'gpu'), TestConfiguration(None, 'xp', 'x86', 'debug', 'gpu')]
73         self.assertEquals(len(configs_list), 3)
74         self.assertEquals(len(set(configs_list)), 2)
75
76     def test_eq(self):
77         self.assertEquals(TestConfiguration(None, 'xp', 'x86', 'release', 'cpu'), TestConfiguration(None, 'xp', 'x86', 'release', 'cpu'))
78         self.assertEquals(TestConfiguration(port.get('test-win-xp', None)), TestConfiguration(None, 'xp', 'x86', 'release', 'cpu'))
79         self.assertNotEquals(TestConfiguration(None, 'xp', 'x86', 'release', 'gpu'), TestConfiguration(None, 'xp', 'x86', 'release', 'cpu'))
80         self.assertNotEquals(TestConfiguration(None, 'xp', 'x86', 'debug', 'cpu'), TestConfiguration(None, 'xp', 'x86', 'release', 'cpu'))
81
82     def test_values(self):
83         config = TestConfiguration(None, 'xp', 'x86', 'release', 'cpu')
84         result_config_values = []
85         for value in config.values():
86             result_config_values.append(value)
87         self.assertEquals(set(['xp', 'x86', 'release', 'cpu']), set(result_config_values))
88
89     def test_port_init(self):
90         config = TestConfiguration(port.get('test-win-xp', None))
91         self.assertEquals('<xp, x86, release, cpu>', str(config))
92
93
94 class TestConfigurationConverterTest(unittest.TestCase):
95     def __init__(self, testFunc):
96         self._all_test_configurations = set()
97         for version, architecture in (('snowleopard', 'x86'), ('xp', 'x86'), ('win7', 'x86'), ('lucid', 'x86'), ('lucid', 'x86_64')):
98             for build_type in ('debug', 'release'):
99                 for graphics_type in ('cpu', 'gpu'):
100                     self._all_test_configurations.add(TestConfiguration(None, version, architecture, build_type, graphics_type))
101         self._macros = {
102             'mac': ['snowleopard'],
103             'win': ['xp', 'win7'],
104             'linux': ['lucid'],
105         }
106         unittest.TestCase.__init__(self, testFunc)
107
108     def test_to_config_set(self):
109         converter = TestConfigurationConverter(self._all_test_configurations)
110
111         self.assertEquals(converter.to_config_set(set()), self._all_test_configurations)
112
113         self.assertEquals(converter.to_config_set(set(['foo'])), set())
114
115         self.assertEquals(converter.to_config_set(set(['xp', 'foo'])), set())
116
117         errors = []
118         self.assertEquals(converter.to_config_set(set(['xp', 'foo']), errors), set())
119         self.assertEquals(errors, ["Unrecognized modifier 'foo'"])
120
121         self.assertEquals(converter.to_config_set(set(['xp', 'x86_64'])), set())
122
123         configs_to_match = set([
124             TestConfiguration(None, 'xp', 'x86', 'release', 'gpu'),
125             TestConfiguration(None, 'xp', 'x86', 'release', 'cpu'),
126         ])
127         self.assertEquals(converter.to_config_set(set(['xp', 'release'])), configs_to_match)
128
129         configs_to_match = set([
130             TestConfiguration(None, 'snowleopard', 'x86', 'release', 'gpu'),
131             TestConfiguration(None, 'win7', 'x86', 'release', 'gpu'),
132             TestConfiguration(None, 'xp', 'x86', 'release', 'gpu'),
133             TestConfiguration(None, 'lucid', 'x86', 'release', 'gpu'),
134             TestConfiguration(None, 'lucid', 'x86_64', 'release', 'gpu'),
135        ])
136         self.assertEquals(converter.to_config_set(set(['gpu', 'release'])), configs_to_match)
137
138         configs_to_match = set([
139              TestConfiguration(None, 'lucid', 'x86_64', 'release', 'gpu'),
140              TestConfiguration(None, 'lucid', 'x86_64', 'debug', 'gpu'),
141              TestConfiguration(None, 'lucid', 'x86_64', 'release', 'cpu'),
142              TestConfiguration(None, 'lucid', 'x86_64', 'debug', 'cpu'),
143         ])
144         self.assertEquals(converter.to_config_set(set(['x86_64'])), configs_to_match)
145
146         configs_to_match = set([
147             TestConfiguration(None, 'lucid', 'x86_64', 'release', 'gpu'),
148             TestConfiguration(None, 'lucid', 'x86_64', 'debug', 'gpu'),
149             TestConfiguration(None, 'lucid', 'x86_64', 'release', 'cpu'),
150             TestConfiguration(None, 'lucid', 'x86_64', 'debug', 'cpu'),
151             TestConfiguration(None, 'lucid', 'x86', 'release', 'gpu'),
152             TestConfiguration(None, 'lucid', 'x86', 'debug', 'gpu'),
153             TestConfiguration(None, 'lucid', 'x86', 'release', 'cpu'),
154             TestConfiguration(None, 'lucid', 'x86', 'debug', 'cpu'),
155             TestConfiguration(None, 'snowleopard', 'x86', 'release', 'gpu'),
156             TestConfiguration(None, 'snowleopard', 'x86', 'debug', 'gpu'),
157             TestConfiguration(None, 'snowleopard', 'x86', 'release', 'cpu'),
158             TestConfiguration(None, 'snowleopard', 'x86', 'debug', 'cpu'),
159         ])
160         self.assertEquals(converter.to_config_set(set(['lucid', 'snowleopard'])), configs_to_match)
161
162         configs_to_match = set([
163             TestConfiguration(None, 'lucid', 'x86', 'release', 'gpu'),
164             TestConfiguration(None, 'lucid', 'x86', 'debug', 'gpu'),
165             TestConfiguration(None, 'lucid', 'x86', 'release', 'cpu'),
166             TestConfiguration(None, 'lucid', 'x86', 'debug', 'cpu'),
167             TestConfiguration(None, 'snowleopard', 'x86', 'release', 'gpu'),
168             TestConfiguration(None, 'snowleopard', 'x86', 'debug', 'gpu'),
169             TestConfiguration(None, 'snowleopard', 'x86', 'release', 'cpu'),
170             TestConfiguration(None, 'snowleopard', 'x86', 'debug', 'cpu'),
171         ])
172         self.assertEquals(converter.to_config_set(set(['lucid', 'snowleopard', 'x86'])), configs_to_match)
173
174         configs_to_match = set([
175             TestConfiguration(None, 'lucid', 'x86_64', 'release', 'cpu'),
176             TestConfiguration(None, 'lucid', 'x86', 'release', 'cpu'),
177             TestConfiguration(None, 'snowleopard', 'x86', 'release', 'cpu'),
178         ])
179         self.assertEquals(converter.to_config_set(set(['lucid', 'snowleopard', 'release', 'cpu'])), configs_to_match)
180
181     def test_macro_expansion(self):
182         converter = TestConfigurationConverter(self._all_test_configurations, self._macros)
183
184         configs_to_match = set([
185             TestConfiguration(None, 'xp', 'x86', 'release', 'gpu'),
186             TestConfiguration(None, 'xp', 'x86', 'release', 'cpu'),
187             TestConfiguration(None, 'win7', 'x86', 'release', 'gpu'),
188             TestConfiguration(None, 'win7', 'x86', 'release', 'cpu'),
189         ])
190         self.assertEquals(converter.to_config_set(set(['win', 'release'])), configs_to_match)
191
192         configs_to_match = set([
193             TestConfiguration(None, 'xp', 'x86', 'release', 'gpu'),
194             TestConfiguration(None, 'win7', 'x86', 'release', 'gpu'),
195             TestConfiguration(None, 'lucid', 'x86', 'release', 'gpu'),
196             TestConfiguration(None, 'lucid', 'x86_64', 'release', 'gpu'),
197         ])
198         self.assertEquals(converter.to_config_set(set(['win', 'lucid', 'release', 'gpu'])), configs_to_match)
199
200         configs_to_match = set([
201             TestConfiguration(None, 'xp', 'x86', 'release', 'gpu'),
202             TestConfiguration(None, 'win7', 'x86', 'release', 'gpu'),
203             TestConfiguration(None, 'snowleopard', 'x86', 'release', 'gpu'),
204         ])
205         self.assertEquals(converter.to_config_set(set(['win', 'mac', 'release', 'gpu'])), configs_to_match)
206
207     def test_to_specifier_lists(self):
208         converter = TestConfigurationConverter(self._all_test_configurations)
209
210         self.assertEquals(converter.to_specifiers_list(set(self._all_test_configurations)), [])
211
212         configs_to_match = set([
213             TestConfiguration(None, 'xp', 'x86', 'release', 'gpu'),
214             TestConfiguration(None, 'xp', 'x86', 'release', 'cpu'),
215         ])
216         self.assertEquals(converter.to_specifiers_list(configs_to_match), [set(['release', 'xp'])])
217
218         configs_to_match = set([
219             TestConfiguration(None, 'xp', 'x86', 'release', 'gpu'),
220             TestConfiguration(None, 'xp', 'x86', 'release', 'cpu'),
221             TestConfiguration(None, 'xp', 'x86', 'debug', 'gpu'),
222             TestConfiguration(None, 'xp', 'x86', 'debug', 'cpu'),
223         ])
224         self.assertEquals(converter.to_specifiers_list(configs_to_match), [set(['xp'])])
225
226         configs_to_match = set([
227             TestConfiguration(None, 'xp', 'x86', 'release', 'gpu'),
228             TestConfiguration(None, 'lucid', 'x86_64', 'debug', 'cpu'),
229         ])
230         self.assertEquals(converter.to_specifiers_list(configs_to_match), [set(['debug', 'x86_64', 'lucid', 'cpu']), set(['release', 'gpu', 'xp'])])
231
232         configs_to_match = set([
233             TestConfiguration(None, 'xp', 'x86', 'release', 'gpu'),
234             TestConfiguration(None, 'xp', 'x86', 'release', 'cpu'),
235             TestConfiguration(None, 'lucid', 'x86_64', 'debug', 'cpu'),
236             TestConfiguration(None, 'lucid', 'x86', 'debug', 'cpu'),
237             TestConfiguration(None, 'lucid', 'x86_64', 'debug', 'gpu'),
238             TestConfiguration(None, 'lucid', 'x86', 'debug', 'gpu'),
239         ])
240         self.assertEquals(converter.to_specifiers_list(configs_to_match), [set(['release', 'xp']), set(['debug', 'lucid'])])
241
242         configs_to_match = set([
243             TestConfiguration(None, 'xp', 'x86', 'release', 'gpu'),
244             TestConfiguration(None, 'snowleopard', 'x86', 'release', 'gpu'),
245             TestConfiguration(None, 'win7', 'x86', 'release', 'gpu'),
246             TestConfiguration(None, 'lucid', 'x86', 'release', 'gpu'),
247             TestConfiguration(None, 'lucid', 'x86_64', 'release', 'gpu'),
248         ])
249         self.assertEquals(converter.to_specifiers_list(configs_to_match), [set(['release', 'gpu'])])
250
251         configs_to_match = set([
252             TestConfiguration(None, 'xp', 'x86', 'release', 'gpu'),
253             TestConfiguration(None, 'snowleopard', 'x86', 'release', 'gpu'),
254         ])
255         self.assertEquals(converter.to_specifiers_list(configs_to_match), [set(['xp', 'snowleopard', 'release', 'gpu'])])
256
257         configs_to_match = set([
258             TestConfiguration(None, 'xp', 'x86', 'release', 'gpu'),
259             TestConfiguration(None, 'snowleopard', 'x86', 'release', 'gpu'),
260             TestConfiguration(None, 'win7', 'x86', 'release', 'gpu'),
261             TestConfiguration(None, 'win7', 'x86', 'debug', 'gpu'),
262             TestConfiguration(None, 'lucid', 'x86', 'release', 'gpu'),
263         ])
264         self.assertEquals(converter.to_specifiers_list(configs_to_match), [set(['release', 'gpu', 'lucid', 'x86']), set(['gpu', 'win7']), set(['release', 'gpu', 'xp', 'snowleopard'])])
265
266     def test_macro_collapsing(self):
267         macros = {'foo': ['bar', 'baz'], 'people': ['bob', 'alice', 'john']}
268
269         specifiers_list = [set(['john', 'godzilla', 'bob', 'alice'])]
270         TestConfigurationConverter.collapse_macros(macros, specifiers_list)
271         self.assertEquals(specifiers_list, [set(['people', 'godzilla'])])
272
273         specifiers_list = [set(['john', 'godzilla', 'alice'])]
274         TestConfigurationConverter.collapse_macros(macros, specifiers_list)
275         self.assertEquals(specifiers_list, [set(['john', 'godzilla', 'alice', 'godzilla'])])
276
277         specifiers_list = [set(['bar', 'godzilla', 'baz', 'bob', 'alice', 'john'])]
278         TestConfigurationConverter.collapse_macros(macros, specifiers_list)
279         self.assertEquals(specifiers_list, [set(['foo', 'godzilla', 'people'])])
280
281         specifiers_list = [set(['bar', 'godzilla', 'baz', 'bob']), set(['bar', 'baz']), set(['people', 'alice', 'bob', 'john'])]
282         TestConfigurationConverter.collapse_macros(macros, specifiers_list)
283         self.assertEquals(specifiers_list, [set(['bob', 'foo', 'godzilla']), set(['foo']), set(['people'])])
284
285     def test_converter_macro_collapsing(self):
286         converter = TestConfigurationConverter(self._all_test_configurations, self._macros)
287
288         configs_to_match = set([
289             TestConfiguration(None, 'xp', 'x86', 'release', 'gpu'),
290             TestConfiguration(None, 'xp', 'x86', 'release', 'cpu'),
291             TestConfiguration(None, 'win7', 'x86', 'release', 'gpu'),
292             TestConfiguration(None, 'win7', 'x86', 'release', 'cpu'),
293         ])
294         self.assertEquals(converter.to_specifiers_list(configs_to_match), [set(['win', 'release'])])
295
296         configs_to_match = set([
297             TestConfiguration(None, 'xp', 'x86', 'release', 'gpu'),
298             TestConfiguration(None, 'win7', 'x86', 'release', 'gpu'),
299             TestConfiguration(None, 'lucid', 'x86', 'release', 'gpu'),
300             TestConfiguration(None, 'lucid', 'x86_64', 'release', 'gpu'),
301         ])
302         self.assertEquals(converter.to_specifiers_list(configs_to_match), [set(['win', 'linux', 'release', 'gpu'])])
303
304         configs_to_match = set([
305             TestConfiguration(None, 'xp', 'x86', 'release', 'gpu'),
306             TestConfiguration(None, 'win7', 'x86', 'release', 'gpu'),
307             TestConfiguration(None, 'snowleopard', 'x86', 'release', 'gpu'),
308         ])
309         self.assertEquals(converter.to_specifiers_list(configs_to_match), [set(['win', 'mac', 'release', 'gpu'])])