Bug 1265584 - Reverse the order of metadata iteration, r=maja_zf draft
authorJames Graham <james@hoppipolla.co.uk>
Mon, 14 May 2018 22:25:48 +0100
changeset 796305 ead63d4ac9c26b4be1b3775454db7f4a3402c6ab
parent 796304 18d53b7880ffc760491a31ec36e1deb5deff622d
child 796306 273d5c0d28ce22475fa67bec6d7f1a5b4ca52df5
push id110205
push userbmo:james@hoppipolla.co.uk
push dateThu, 17 May 2018 13:42:46 +0000
reviewersmaja_zf
bugs1265584
milestone62.0a1
Bug 1265584 - Reverse the order of metadata iteration, r=maja_zf wptrunner previously iterated over properties from least significant to most significant. However this was broken since it caused per-directory properties to override per-test properties, which wasn't expected. Therefore we reverse the order of iteration from most significant to least. MozReview-Commit-ID: 5Rh6EGNtnUS
testing/web-platform/tests/tools/wptrunner/wptrunner/wpttest.py
--- a/testing/web-platform/tests/tools/wptrunner/wptrunner/wpttest.py
+++ b/testing/web-platform/tests/tools/wptrunner/wptrunner/wpttest.py
@@ -154,25 +154,24 @@ class Test(object):
 
     def _get_metadata(self, subtest=None):
         if self._test_metadata is not None and subtest is not None:
             return self._test_metadata.get_subtest(subtest)
         else:
             return self._test_metadata
 
     def itermeta(self, subtest=None):
-        for metadata in self._inherit_metadata:
-            yield metadata
-
         if self._test_metadata is not None:
-            yield self._get_metadata()
             if subtest is not None:
                 subtest_meta = self._get_metadata(subtest)
                 if subtest_meta is not None:
                     yield subtest_meta
+            yield self._get_metadata()
+        for metadata in reversed(self._inherit_metadata):
+            yield metadata
 
     def disabled(self, subtest=None):
         for meta in self.itermeta(subtest):
             disabled = meta.disabled
             if disabled is not None:
                 return disabled
         return None
 
@@ -208,36 +207,34 @@ class Test(object):
                 return count
         return 0
 
     @property
     def tags(self):
         tags = set()
         for meta in self.itermeta():
             meta_tags = meta.tags
+            tags |= meta_tags
             if atom_reset in meta_tags:
-                tags = meta_tags.copy()
                 tags.remove(atom_reset)
-            else:
-                tags |= meta_tags
+                break
 
         tags.add("dir:%s" % self.id.lstrip("/").split("/")[0])
 
         return tags
 
     @property
     def prefs(self):
         prefs = {}
         for meta in self.itermeta():
             meta_prefs = meta.prefs
-            if atom_reset in prefs:
-                prefs = meta_prefs.copy()
+            prefs.update(meta_prefs)
+            if atom_reset in meta_prefs:
                 del prefs[atom_reset]
-            else:
-                prefs.update(meta_prefs)
+                break
         return prefs
 
     def expected(self, subtest=None):
         if subtest is None:
             default = self.result_cls.default_expected
         else:
             default = self.subtest_result_cls.default_expected