Bug 1265584 - Add a test for wpttest metadata, r=maja_zf draft
authorJames Graham <james@hoppipolla.co.uk>
Tue, 15 May 2018 14:25:58 +0100
changeset 796309 4fa89a7474525c3afb3d41b81b349415d538cabb
parent 796308 89f6f94a06feaf252025cf8506cd43a5cddaf495
child 796310 0d33eb02244616841ef2617b70a3c292ac3b2a4e
push id110205
push userbmo:james@hoppipolla.co.uk
push dateThu, 17 May 2018 13:42:46 +0000
reviewersmaja_zf
bugs1265584
milestone62.0a1
Bug 1265584 - Add a test for wpttest metadata, r=maja_zf MozReview-Commit-ID: Jme9GND8ihS
testing/web-platform/tests/tools/wptrunner/wptrunner/tests/test_chunker.py
testing/web-platform/tests/tools/wptrunner/wptrunner/tests/test_products.py
testing/web-platform/tests/tools/wptrunner/wptrunner/tests/test_wpttest.py
--- a/testing/web-platform/tests/tools/wptrunner/wptrunner/tests/test_chunker.py
+++ b/testing/web-platform/tests/tools/wptrunner/wptrunner/tests/test_chunker.py
@@ -1,37 +1,48 @@
 import unittest
 import sys
 from os.path import join, dirname
 from mozlog import structured
 
+import mock
 import pytest
 
+sys.path.insert(0, join(dirname(__file__), "..", "..", ".."))
 sys.path.insert(0, join(dirname(__file__), "..", ".."))
 
 from wptrunner.testloader import EqualTimeChunker
+from manifest.sourcefile import SourceFile
 
 structured.set_default_logger(structured.structuredlog.StructuredLogger("TestChunker"))
 
+
+testharness_test = """<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>"""
+
+
 class MockTest(object):
     default_timeout = 10
 
-    def __init__(self, id, timeout=10):
+    def __init__(self, id, path, timeout=10, contents=testharness_test):
         self.id = id
+        self.url = "/" + path
         self.item_type = "testharness"
         self.timeout = timeout
+        self.source_file = SourceFile("/", path, "/", contents=contents)
 
 
 def make_mock_manifest(*items):
     rv = []
     for test_type, dir_path, num_tests in items:
         for i in range(num_tests):
+            filename = "/%i.html" % i
             rv.append((test_type,
-                       dir_path + "/%i.test" % i,
-                       set([MockTest(i)])))
+                       dir_path + filename,
+                       set([MockTest("%i.html" % i, dir_path + filename)])))
     return rv
 
 
 class TestEqualTimeChunker(unittest.TestCase):
 
     def test_include_all(self):
         tests = make_mock_manifest(("test", "a", 10), ("test", "a/b", 10),
                                    ("test", "c", 10))
--- a/testing/web-platform/tests/tools/wptrunner/wptrunner/tests/test_products.py
+++ b/testing/web-platform/tests/tools/wptrunner/wptrunner/tests/test_products.py
@@ -7,17 +7,17 @@ import mock
 import pytest
 
 from .base import all_products, active_products
 
 sys.path.insert(0, join(dirname(__file__), "..", "..", "..", ".."))  # repo root
 
 from tools import localpaths
 
-import sslutils
+from wptserve import sslutils
 
 from wptrunner import environment
 from wptrunner import products
 
 test_paths = {"/": {"tests_path": join(dirname(__file__), "..", "..", "..", "..")}}  # repo root
 environment.do_delayed_imports(None, test_paths)
 
 
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/tools/wptrunner/wptrunner/tests/test_wpttest.py
@@ -0,0 +1,50 @@
+import os
+import sys
+from io import BytesIO
+
+sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", ".."))
+
+from wptrunner import manifestexpected, wpttest
+from .test_chunker import make_mock_manifest
+
+dir_ini_0 = """\
+prefs: [a:b]
+"""
+
+dir_ini_1 = """\
+prefs: [@Reset, b:c]
+max-asserts: 2
+min-asserts: 1
+tags: [b, c]
+"""
+
+test_0 = """\
+[0.html]
+  prefs: [c:d]
+  max-asserts: 3
+  tags: [a, @Reset]
+"""
+
+
+def test_metadata_inherit():
+    tests = make_mock_manifest(("test", "a", 10), ("test", "a/b", 10),
+                               ("test", "c", 10))
+
+    inherit_metadata = [
+        manifestexpected.static.compile(
+            BytesIO(item),
+            {},
+            data_cls_getter=lambda x,y: manifestexpected.DirectoryManifest)
+        for item in [dir_ini_0, dir_ini_1]]
+    test_metadata = manifestexpected.static.compile(BytesIO(test_0),
+                                                    {},
+                                                    data_cls_getter=manifestexpected.data_cls_getter,
+                                                    test_path="a",
+                                                    url_base="")
+
+    test = tests[0][2].pop()
+    test_obj = wpttest.from_manifest(test, inherit_metadata, test_metadata.get_test(test.id))
+    assert test_obj.max_assertion_count == 3
+    assert test_obj.min_assertion_count == 1
+    assert test_obj.prefs == {"b": "c", "c": "d"}
+    assert test_obj.tags == {"a", "dir:a"}