Modified: trunk/Tools/ChangeLog (92005 => 92006)
--- trunk/Tools/ChangeLog 2011-07-29 20:20:52 UTC (rev 92005)
+++ trunk/Tools/ChangeLog 2011-07-29 21:04:57 UTC (rev 92006)
@@ -1,3 +1,15 @@
+2011-07-29 Dimitri Glazkov <[email protected]>
+
+ Fix an error in macro collapsing, refactor code to be pretty.
+ https://bugs.webkit.org/show_bug.cgi?id=65387
+
+ My set math was wrong.
+
+ Reviewed by Adam Barth.
+
+ * Scripts/webkitpy/layout_tests/models/test_configuration.py: Moved collapsing into a classmethod, fixed the math to be correct.
+ * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Added unit tests.
+
2011-07-27 Ryuan Choi <[email protected]>
Style bot complains about EFL-specific forward declaration naming.
Modified: trunk/Tools/Scripts/webkitpy/layout_tests/models/test_configuration.py (92005 => 92006)
--- trunk/Tools/Scripts/webkitpy/layout_tests/models/test_configuration.py 2011-07-29 20:20:52 UTC (rev 92005)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/models/test_configuration.py 2011-07-29 21:04:57 UTC (rev 92006)
@@ -121,6 +121,15 @@
return reduce(set.intersection, matching_sets.values())
+ @classmethod
+ def collapse_macros(cls, macros_dict, specifiers_list):
+ for i in range(len(specifiers_list)):
+ for macro_specifier, macro in macros_dict.items():
+ specifiers_set = set(specifiers_list[i])
+ macro_set = set(macro)
+ if specifiers_set >= macro_set:
+ specifiers_list[i] = frozenset((specifiers_set - macro_set) | set([macro_specifier]))
+
def to_specifiers_list(self, test_configuration_set):
"""Convert a set of TestConfiguration instances into one or more list of specifiers."""
@@ -201,10 +210,6 @@
# 4) Substitute specifier subsets that match macros witin each set:
# (xp, vista, win7, release) -> (win, release)
- for i in range(len(specifiers_list)):
- for macro_specifier, macro in self._configuration_macros.items():
- diff = set(specifiers_list[i]) - set(macro)
- if specifiers_list[i] != diff:
- specifiers_list[i] = frozenset(diff | set([macro_specifier]))
+ self.collapse_macros(self._configuration_macros, specifiers_list)
return specifiers_list
Modified: trunk/Tools/Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py (92005 => 92006)
--- trunk/Tools/Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py 2011-07-29 20:20:52 UTC (rev 92005)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py 2011-07-29 21:04:57 UTC (rev 92006)
@@ -264,6 +264,25 @@
self.assertEquals(converter.to_specifiers_list(configs_to_match), [set(['release', 'gpu', 'lucid', 'x86']), set(['gpu', 'win7']), set(['release', 'gpu', 'xp', 'snowleopard'])])
def test_macro_collapsing(self):
+ macros = {'foo': ['bar', 'baz'], 'people': ['bob', 'alice', 'john']}
+
+ specifiers_list = [set(['john', 'godzilla', 'bob', 'alice'])]
+ TestConfigurationConverter.collapse_macros(macros, specifiers_list)
+ self.assertEquals(specifiers_list, [set(['people', 'godzilla'])])
+
+ specifiers_list = [set(['john', 'godzilla', 'alice'])]
+ TestConfigurationConverter.collapse_macros(macros, specifiers_list)
+ self.assertEquals(specifiers_list, [set(['john', 'godzilla', 'alice', 'godzilla'])])
+
+ specifiers_list = [set(['bar', 'godzilla', 'baz', 'bob', 'alice', 'john'])]
+ TestConfigurationConverter.collapse_macros(macros, specifiers_list)
+ self.assertEquals(specifiers_list, [set(['foo', 'godzilla', 'people'])])
+
+ specifiers_list = [set(['bar', 'godzilla', 'baz', 'bob']), set(['bar', 'baz']), set(['people', 'alice', 'bob', 'john'])]
+ TestConfigurationConverter.collapse_macros(macros, specifiers_list)
+ self.assertEquals(specifiers_list, [set(['bob', 'foo', 'godzilla']), set(['foo']), set(['people'])])
+
+ def test_converter_macro_collapsing(self):
converter = TestConfigurationConverter(self._all_test_configurations, self._macros)
configs_to_match = set([