def __init__(self, all_tests, test_defaults=None): self._tests_by_path = OrderedDefaultDict(list) self._tests_by_flavor = defaultdict(set) self._test_dirs = set() with open(all_tests, 'rb') as fh: test_data = pickle.load(fh) defaults = None if test_defaults: with open(test_defaults, 'rb') as fh: defaults = pickle.load(fh) for path, tests in test_data.items(): for metadata in tests: if defaults: defaults_manifests = [metadata['manifest']] ancestor_manifest = metadata.get('ancestor-manifest') if ancestor_manifest: defaults_manifests.append(ancestor_manifest) for manifest in defaults_manifests: manifest_defaults = defaults.get(manifest) if manifest_defaults: metadata = manifestparser.combine_fields(manifest_defaults, metadata) self._tests_by_path[path].append(metadata) self._test_dirs.add(os.path.dirname(path)) flavor = metadata.get('flavor') self._tests_by_flavor[flavor].add(path)
def __init__(self, all_tests, test_defaults=None): self._tests_by_path = OrderedDefaultDict(list) self._tests_by_flavor = defaultdict(set) self._test_dirs = set() with open(all_tests, 'rb') as fh: test_data = pickle.load(fh) defaults = None if test_defaults: with open(test_defaults, 'rb') as fh: defaults = pickle.load(fh) for path, tests in test_data.items(): for metadata in tests: if defaults: defaults_manifests = [metadata['manifest']] ancestor_manifest = metadata.get('ancestor-manifest') if ancestor_manifest: defaults_manifests.append(ancestor_manifest) for manifest in defaults_manifests: manifest_defaults = defaults.get(manifest) if manifest_defaults: metadata = manifestparser.combine_fields( manifest_defaults, metadata) self._tests_by_path[path].append(metadata) self._test_dirs.add(os.path.dirname(path)) flavor = metadata.get('flavor') self._tests_by_flavor[flavor].add(path)
def test_subsuite_defaults(self): manifest = os.path.join(here, "default-subsuite.ini") parser = ManifestParser(manifests=(manifest,), handle_defaults=False) expected_subsuites = {"test1": "baz", "test2": "foo"} defaults = parser.manifest_defaults[manifest] for test in parser.tests: value = combine_fields(defaults, test) self.assertEqual(expected_subsuites[value["name"]], value["subsuite"])
def __call__(self): """Loads the test metadata generated by the TestManifest build backend. The data is stored in two files: - <objdir>/all-tests.pkl - <objdir>/test-defaults.pkl The 'all-tests.pkl' file is a mapping of source path to test objects. The 'test-defaults.pkl' file maps manifests to their DEFAULT configuration. These manifest defaults will be merged into the test configuration of the contained tests. """ # If installing tests is going to result in re-generating the build # backend, we need to do this here, so that the updated contents of # all-tests.pkl make it to the set of tests to run. if self.backend_out_of_date( mozpath.join(self.topobjdir, "backend.TestManifestBackend")): print("Test configuration changed. Regenerating backend.") from mozbuild.gen_test_backend import gen_test_backend gen_test_backend() all_tests = os.path.join(self.topobjdir, "all-tests.pkl") test_defaults = os.path.join(self.topobjdir, "test-defaults.pkl") with open(all_tests, "rb") as fh: test_data = pickle.load(fh) with open(test_defaults, "rb") as fh: defaults = pickle.load(fh) # The keys in defaults use platform-specific path separators. # self.topsrcdir was normalized to use /, revert back to \ if needed. topsrcdir = os.path.normpath(self.topsrcdir) for path, tests in six.iteritems(test_data): for metadata in tests: defaults_manifests = [metadata["manifest"]] ancestor_manifest = metadata.get("ancestor_manifest") if ancestor_manifest: # The (ancestor manifest, included manifest) tuple # contains the defaults of the included manifest, so # use it instead of [metadata['manifest']]. ancestor_manifest = os.path.join(topsrcdir, ancestor_manifest) defaults_manifests[0] = (ancestor_manifest, metadata["manifest"]) defaults_manifests.append(ancestor_manifest) for manifest in defaults_manifests: manifest_defaults = defaults.get(manifest) if manifest_defaults: metadata = combine_fields(manifest_defaults, metadata) yield metadata
def test_subsuite_defaults(self): manifest = os.path.join(here, 'default-subsuite.ini') parser = ManifestParser(manifests=(manifest,), handle_defaults=False) expected_subsuites = { 'test1': 'baz', 'test2': 'foo', } defaults = parser.manifest_defaults[manifest] for test in parser.tests: value = combine_fields(defaults, test) self.assertEqual(expected_subsuites[value['name']], value['subsuite'])
def test_subsuite_defaults(self): manifest = os.path.join(here, "default-subsuite.ini") parser = ManifestParser(manifests=(manifest, ), handle_defaults=False) expected_subsuites = { "test1": "baz", "test2": "foo", } defaults = parser.manifest_defaults[manifest] for test in parser.tests: value = combine_fields(defaults, test) self.assertEqual(expected_subsuites[value["name"]], value["subsuite"])
def __call__(self): """Loads the test metadata generated by the TestManifest build backend. The data is stored in two files: - <objdir>/all-tests.pkl - <objdir>/test-defaults.pkl The 'all-tests.pkl' file is a mapping of source path to test objects. The 'test-defaults.pkl' file maps manifests to their DEFAULT configuration. These manifest defaults will be merged into the test configuration of the contained tests. """ # If installing tests is going to result in re-generating the build # backend, we need to do this here, so that the updated contents of # all-tests.pkl make it to the set of tests to run. if self.backend_out_of_date( mozpath.join(self.topobjdir, 'backend.TestManifestBackend')): print("Test configuration changed. Regenerating backend.") from mozbuild.gen_test_backend import gen_test_backend gen_test_backend() all_tests = os.path.join(self.topobjdir, 'all-tests.pkl') test_defaults = os.path.join(self.topobjdir, 'test-defaults.pkl') with open(all_tests, 'rb') as fh: test_data = pickle.load(fh) with open(test_defaults, 'rb') as fh: defaults = pickle.load(fh) for path, tests in test_data.items(): for metadata in tests: defaults_manifests = [metadata['manifest']] ancestor_manifest = metadata.get('ancestor-manifest') if ancestor_manifest: # The (ancestor manifest, included manifest) tuple # contains the defaults of the included manifest, so # use it instead of [metadata['manifest']]. defaults_manifests[0] = (ancestor_manifest, metadata['manifest']) defaults_manifests.append(ancestor_manifest) for manifest in defaults_manifests: manifest_defaults = defaults.get(manifest) if manifest_defaults: metadata = manifestparser.combine_fields( manifest_defaults, metadata) yield metadata
def __init__(self, all_tests, srcdir, test_defaults=None): self._tests_by_path = OrderedDefaultDict(list) self._tests_by_flavor = defaultdict(set) self._test_dirs = set() self._objdir = os.path.abspath(os.path.join(all_tests, os.pardir)) self._wpt_loaded = False self._srcdir = srcdir with open(all_tests, 'rb') as fh: test_data = pickle.load(fh) defaults = None if test_defaults: with open(test_defaults, 'rb') as fh: defaults = pickle.load(fh) for path, tests in test_data.items(): for metadata in tests: if defaults: defaults_manifests = [metadata['manifest']] ancestor_manifest = metadata.get('ancestor-manifest') if ancestor_manifest: # The (ancestor manifest, included manifest) tuple # contains the defaults of the included manifest, so # use it instead of [metadata['manifest']]. defaults_manifests[0] = (ancestor_manifest, metadata['manifest']) defaults_manifests.append(ancestor_manifest) for manifest in defaults_manifests: manifest_defaults = defaults.get(manifest) if manifest_defaults: metadata = manifestparser.combine_fields( manifest_defaults, metadata) self._tests_by_path[path].append(metadata) self._test_dirs.add(os.path.dirname(path)) flavor = metadata.get('flavor') self._tests_by_flavor[flavor].add(path)