OLD | NEW |
1 # Copyright (C) 2011 Google Inc. All rights reserved. | 1 # Copyright (C) 2011 Google Inc. All rights reserved. |
2 # | 2 # |
3 # Redistribution and use in source and binary forms, with or without | 3 # Redistribution and use in source and binary forms, with or without |
4 # modification, are permitted provided that the following conditions are | 4 # modification, are permitted provided that the following conditions are |
5 # met: | 5 # met: |
6 # | 6 # |
7 # * Redistributions of source code must retain the above copyright | 7 # * Redistributions of source code must retain the above copyright |
8 # notice, this list of conditions and the following disclaimer. | 8 # notice, this list of conditions and the following disclaimer. |
9 # * Redistributions in binary form must reproduce the above | 9 # * Redistributions in binary form must reproduce the above |
10 # copyright notice, this list of conditions and the following disclaimer | 10 # copyright notice, this list of conditions and the following disclaimer |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 if len(specifier_set) == 0: | 150 if len(specifier_set) == 0: |
151 return copy.copy(self._all_test_configurations) | 151 return copy.copy(self._all_test_configurations) |
152 | 152 |
153 matching_sets = {} | 153 matching_sets = {} |
154 | 154 |
155 for specifier in specifier_set: | 155 for specifier in specifier_set: |
156 for expanded_specifier in self._expand_macros(specifier): | 156 for expanded_specifier in self._expand_macros(specifier): |
157 configurations = self._specifier_to_configuration_set.get(expand
ed_specifier) | 157 configurations = self._specifier_to_configuration_set.get(expand
ed_specifier) |
158 if not configurations: | 158 if not configurations: |
159 if error_list is not None: | 159 if error_list is not None: |
160 error_list.append("Unrecognized modifier '" + expanded_s
pecifier + "'") | 160 error_list.append("Unrecognized specifier '" + expanded_
specifier + "'") |
161 return set() | 161 return set() |
162 category = self._specifier_sorter.category_for_specifier(expande
d_specifier) | 162 category = self._specifier_sorter.category_for_specifier(expande
d_specifier) |
163 matching_sets.setdefault(category, set()).update(configurations) | 163 matching_sets.setdefault(category, set()).update(configurations) |
164 | 164 |
165 return reduce(set.intersection, matching_sets.values()) | 165 return reduce(set.intersection, matching_sets.values()) |
166 | 166 |
167 @classmethod | 167 @classmethod |
168 def collapse_macros(cls, macros_dict, specifiers_list): | 168 def collapse_macros(cls, macros_dict, specifiers_list): |
169 for macro_specifier, macro in macros_dict.items(): | 169 for macro_specifier, macro in macros_dict.items(): |
170 if len(macro) == 1: | 170 if len(macro) == 1: |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 def symmetric_difference(cls, iterable): | 226 def symmetric_difference(cls, iterable): |
227 union = set() | 227 union = set() |
228 intersection = iterable[0] | 228 intersection = iterable[0] |
229 for item in iterable: | 229 for item in iterable: |
230 union = union | item | 230 union = union | item |
231 intersection = intersection.intersection(item) | 231 intersection = intersection.intersection(item) |
232 return union - intersection | 232 return union - intersection |
233 | 233 |
234 def to_specifiers_list(self, test_configuration_set): | 234 def to_specifiers_list(self, test_configuration_set): |
235 """Convert a set of TestConfiguration instances into one or more list of
specifiers.""" | 235 """Convert a set of TestConfiguration instances into one or more list of
specifiers.""" |
236 # Easy out: if the set is all configurations, the modifier is empty. | 236 # Easy out: if the set is all configurations, the specifier is empty. |
237 if len(test_configuration_set) == len(self._all_test_configurations): | 237 if len(test_configuration_set) == len(self._all_test_configurations): |
238 return [[]] | 238 return [[]] |
239 | 239 |
240 # 1) Build a list of specifier sets, discarding specifiers that don't ad
d value. | 240 # 1) Build a list of specifier sets, discarding specifiers that don't ad
d value. |
241 specifiers_list = [] | 241 specifiers_list = [] |
242 for config in test_configuration_set: | 242 for config in test_configuration_set: |
243 values = set(config.values()) | 243 values = set(config.values()) |
244 for specifier, junk_specifier_set in self._junk_specifier_combinatio
ns.items(): | 244 for specifier, junk_specifier_set in self._junk_specifier_combinatio
ns.items(): |
245 if specifier in values: | 245 if specifier in values: |
246 values -= junk_specifier_set | 246 values -= junk_specifier_set |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
299 specifiers_to_remove = [] | 299 specifiers_to_remove = [] |
300 for specifier_set in specifiers_list: | 300 for specifier_set in specifiers_list: |
301 if macro_keys <= specifier_set: | 301 if macro_keys <= specifier_set: |
302 specifiers_to_remove.append(specifier_set) | 302 specifiers_to_remove.append(specifier_set) |
303 | 303 |
304 for specifier_set in specifiers_to_remove: | 304 for specifier_set in specifiers_to_remove: |
305 specifiers_list.remove(specifier_set) | 305 specifiers_list.remove(specifier_set) |
306 specifiers_list.append(frozenset(specifier_set - macro_keys)) | 306 specifiers_list.append(frozenset(specifier_set - macro_keys)) |
307 | 307 |
308 return specifiers_list | 308 return specifiers_list |
OLD | NEW |