Changeset 92136 in webkit
- Timestamp:
- Aug 1, 2011 12:55:45 PM (13 years ago)
- Location:
- trunk/Tools
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r92135 r92136 1 2011-08-01 Dimitri Glazkov <dglazkov@chromium.org> 2 3 Introduce SpecifierSorter, a thing that knows how specifiers should be ordered. 4 https://bugs.webkit.org/show_bug.cgi?id=65413 5 6 Reviewed by Adam Barth. 7 8 * Scripts/webkitpy/layout_tests/models/test_configuration.py: Added SpecifierSorter and converted 9 existing code to use it. 10 * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py: Added unit tests and cleaned up a bit. 11 1 12 2011-08-01 Adam Barth <abarth@webkit.org> 2 13 -
trunk/Tools/Scripts/webkitpy/layout_tests/models/test_configuration.py
r92006 r92136 65 65 66 66 67 class SpecifierSorter: 68 def __init__(self, all_test_configurations=None, macros=None): 69 self._specifier_to_category = {} 70 71 if not all_test_configurations: 72 return 73 for test_configuration in all_test_configurations: 74 for category, specifier in test_configuration.items(): 75 self.add_specifier(category, specifier) 76 77 if not macros: 78 return 79 # Assume well-formed macros. 80 for macro, specifier_list in macros.items(): 81 self.add_specifier(self.category_for_specifier(specifier_list[0]), macro) 82 83 def add_specifier(self, category, specifier): 84 self._specifier_to_category[specifier] = category 85 86 @classmethod 87 def category_priority(cls, category): 88 return TestConfiguration.category_order().index(category) 89 90 def specifier_priority(self, specifier): 91 return self.category_priority(self._specifier_to_category[specifier]) 92 93 def category_for_specifier(self, specifier): 94 return self._specifier_to_category.get(specifier) 95 96 def sort_specifiers(self, specifiers): 97 category_slots = map(lambda x: [], TestConfiguration.category_order()) 98 for specifier in specifiers: 99 category_slots[self.specifier_priority(specifier)].append(specifier) 100 101 def sort_and_return(result, specifier_list): 102 specifier_list.sort() 103 return result + specifier_list 104 105 return reduce(sort_and_return, category_slots, []) 106 107 67 108 class TestConfigurationConverter: 68 109 def __init__(self, all_test_configurations, configuration_macros=None): … … 70 111 self._configuration_macros = configuration_macros or {} 71 112 self._specifier_to_configuration_set = {} 72 self._specifier_ to_category = {}113 self._specifier_sorter = SpecifierSorter() 73 114 self._collapsing_sets_by_size = {} 74 115 self._junk_specifier_combinations = {} … … 78 119 for category, specifier in configuration.items(): 79 120 self._specifier_to_configuration_set.setdefault(specifier, set()).add(configuration) 80 self._specifier_ to_category[specifier] = category121 self._specifier_sorter.add_specifier(category, specifier) 81 122 collapsing_sets_by_category.setdefault(category, set()).add(specifier) 82 123 # FIXME: This seems extra-awful. … … 88 129 self._collapsing_sets_by_size.setdefault(len(collapsing_set), set()).add(frozenset(collapsing_set)) 89 130 90 def category_priority(category):91 return TestConfiguration.category_order().index(category)92 93 def specifier_priority(specifier):94 return category_priority(self._specifier_to_category[specifier])95 96 131 for specifier, sets_by_category in matching_sets_by_category.items(): 97 132 for category, set_by_category in sets_by_category.items(): 98 if len(set_by_category) == 1 and category_priority(category) >specifier_priority(specifier):133 if len(set_by_category) == 1 and self._specifier_sorter.category_priority(category) > self._specifier_sorter.specifier_priority(specifier): 99 134 self._junk_specifier_combinations[specifier] = set_by_category 100 135 … … 117 152 error_list.append("Unrecognized modifier '" + expanded_specifier + "'") 118 153 return set() 119 category = self._specifier_ to_category[expanded_specifier]154 category = self._specifier_sorter.category_for_specifier(expanded_specifier) 120 155 matching_sets.setdefault(category, set()).update(configurations) 121 156 -
trunk/Tools/Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py
r92006 r92136 33 33 34 34 35 def make_mock_all_test_configurations_set(): 36 all_test_configurations = set() 37 for version, architecture in (('snowleopard', 'x86'), ('xp', 'x86'), ('win7', 'x86'), ('lucid', 'x86'), ('lucid', 'x86_64')): 38 for build_type in ('debug', 'release'): 39 for graphics_type in ('cpu', 'gpu'): 40 all_test_configurations.add(TestConfiguration(None, version, architecture, build_type, graphics_type)) 41 return all_test_configurations 42 43 MOCK_MACROS = { 44 'mac': ['snowleopard'], 45 'win': ['xp', 'win7'], 46 'linux': ['lucid'], 47 } 48 49 35 50 class TestConfigurationTest(unittest.TestCase): 36 51 def test_items(self): … … 92 107 93 108 109 class SpecifierSorterTest(unittest.TestCase): 110 def __init__(self, testFunc): 111 self._all_test_configurations = make_mock_all_test_configurations_set() 112 unittest.TestCase.__init__(self, testFunc) 113 114 def test_init(self): 115 sorter = SpecifierSorter() 116 self.assertEquals(sorter.category_for_specifier('control'), None) 117 sorter = SpecifierSorter(self._all_test_configurations) 118 self.assertEquals(sorter.category_for_specifier('xp'), 'version') 119 sorter = SpecifierSorter(self._all_test_configurations, MOCK_MACROS) 120 self.assertEquals(sorter.category_for_specifier('mac'), 'version') 121 122 def test_add_specifier(self): 123 sorter = SpecifierSorter() 124 self.assertEquals(sorter.category_for_specifier('control'), None) 125 sorter.add_specifier('version', 'control') 126 self.assertEquals(sorter.category_for_specifier('control'), 'version') 127 sorter.add_specifier('version', 'one') 128 self.assertEquals(sorter.category_for_specifier('one'), 'version') 129 sorter.add_specifier('architecture', 'renaissance') 130 self.assertEquals(sorter.category_for_specifier('one'), 'version') 131 self.assertEquals(sorter.category_for_specifier('renaissance'), 'architecture') 132 133 def test_category_priority(self): 134 sorter = SpecifierSorter(self._all_test_configurations) 135 self.assertEquals(sorter.category_priority('version'), 0) 136 self.assertEquals(sorter.category_priority('build_type'), 2) 137 138 def test_specifier_priority(self): 139 sorter = SpecifierSorter(self._all_test_configurations) 140 self.assertEquals(sorter.specifier_priority('x86'), 1) 141 self.assertEquals(sorter.specifier_priority('gpu'), 3) 142 self.assertEquals(sorter.specifier_priority('snowleopard'), 0) 143 144 def test_sort_specifiers(self): 145 sorter = SpecifierSorter(self._all_test_configurations, MOCK_MACROS) 146 self.assertEquals(sorter.sort_specifiers(set()), []) 147 self.assertEquals(sorter.sort_specifiers(set(['x86'])), ['x86']) 148 self.assertEquals(sorter.sort_specifiers(set(['x86', 'win7'])), ['win7', 'x86']) 149 self.assertEquals(sorter.sort_specifiers(set(['gpu', 'x86', 'debug', 'win7'])), ['win7', 'x86', 'debug', 'gpu']) 150 self.assertEquals(sorter.sort_specifiers(set(['gpu', 'snowleopard', 'x86', 'debug', 'win7'])), ['snowleopard', 'win7', 'x86', 'debug', 'gpu']) 151 self.assertEquals(sorter.sort_specifiers(set(['gpu', 'x86', 'mac', 'debug', 'win7'])), ['mac', 'win7', 'x86', 'debug', 'gpu']) 152 153 94 154 class TestConfigurationConverterTest(unittest.TestCase): 95 155 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 } 156 self._all_test_configurations = make_mock_all_test_configurations_set() 106 157 unittest.TestCase.__init__(self, testFunc) 107 158 … … 180 231 181 232 def test_macro_expansion(self): 182 converter = TestConfigurationConverter(self._all_test_configurations, self._macros)233 converter = TestConfigurationConverter(self._all_test_configurations, MOCK_MACROS) 183 234 184 235 configs_to_match = set([ … … 284 335 285 336 def test_converter_macro_collapsing(self): 286 converter = TestConfigurationConverter(self._all_test_configurations, self._macros)337 converter = TestConfigurationConverter(self._all_test_configurations, MOCK_MACROS) 287 338 288 339 configs_to_match = set([
Note: See TracChangeset
for help on using the changeset viewer.