예제 #1
0
    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)
예제 #2
0
    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"])
예제 #4
0
    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'])
예제 #6
0
 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'])
예제 #7
0
 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"])
예제 #8
0
    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
예제 #9
0
    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)