summaryrefslogtreecommitdiffstats
path: root/testing/mochitest/tests/python/test_get_active_tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'testing/mochitest/tests/python/test_get_active_tests.py')
-rw-r--r--testing/mochitest/tests/python/test_get_active_tests.py269
1 files changed, 269 insertions, 0 deletions
diff --git a/testing/mochitest/tests/python/test_get_active_tests.py b/testing/mochitest/tests/python/test_get_active_tests.py
new file mode 100644
index 0000000000..f91bc64a5f
--- /dev/null
+++ b/testing/mochitest/tests/python/test_get_active_tests.py
@@ -0,0 +1,269 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import os
+from argparse import Namespace
+from collections import defaultdict
+from textwrap import dedent
+
+import mozunit
+import pytest
+import six
+from conftest import setup_args
+from manifestparser import TestManifest
+
+
+@pytest.fixture
+def get_active_tests(setup_test_harness, parser):
+ setup_test_harness(*setup_args)
+ runtests = pytest.importorskip("runtests")
+ md = runtests.MochitestDesktop("plain", {"log_tbpl": "-"})
+
+ options = vars(parser.parse_args([]))
+
+ def inner(**kwargs):
+ opts = options.copy()
+ opts.update(kwargs)
+
+ manifest = opts.get("manifestFile")
+ if isinstance(manifest, six.string_types):
+ md.testRootAbs = os.path.dirname(manifest)
+ elif isinstance(manifest, TestManifest):
+ md.testRootAbs = manifest.rootdir
+
+ md._active_tests = None
+ md.prefs_by_manifest = defaultdict(set)
+ return md, md.getActiveTests(Namespace(**opts))
+
+ return inner
+
+
+@pytest.fixture
+def create_manifest(tmpdir, build_obj):
+ def inner(string, name="manifest.ini"):
+ manifest = tmpdir.join(name)
+ manifest.write(string, ensure=True)
+ # pylint --py3k: W1612
+ path = six.text_type(manifest)
+ return TestManifest(manifests=(path,), strict=False, rootdir=tmpdir.strpath)
+
+ return inner
+
+
+def test_args_validation(get_active_tests, create_manifest):
+ # Test args set in a single manifest.
+ manifest_relpath = "manifest.ini"
+ manifest = create_manifest(
+ dedent(
+ """
+ [DEFAULT]
+ args=
+ --cheese
+ --foo=bar
+ --foo1 bar1
+
+ [files/test_pass.html]
+ [files/test_fail.html]
+ """
+ )
+ )
+
+ options = {
+ "runByManifest": True,
+ "manifestFile": manifest,
+ }
+ md, tests = get_active_tests(**options)
+
+ assert len(tests) == 2
+ assert manifest_relpath in md.args_by_manifest
+
+ args = md.args_by_manifest[manifest_relpath]
+ assert len(args) == 1
+ assert args.pop() == "\n--cheese\n--foo=bar\n--foo1 bar1"
+
+ # Test args set with runByManifest disabled.
+ options["runByManifest"] = False
+ with pytest.raises(SystemExit):
+ get_active_tests(**options)
+
+ # Test args set in non-default section.
+ options["runByManifest"] = True
+ options["manifestFile"] = create_manifest(
+ dedent(
+ """
+ [files/test_pass.html]
+ args=--foo2=bar2
+ [files/test_fail.html]
+ """
+ )
+ )
+ with pytest.raises(SystemExit):
+ get_active_tests(**options)
+
+
+def test_args_validation_with_ancestor_manifest(get_active_tests, create_manifest):
+ # Test args set by an ancestor manifest.
+ create_manifest(
+ dedent(
+ """
+ [DEFAULT]
+ args=
+ --cheese
+
+ [files/test_pass.html]
+ [files/test_fail.html]
+ """
+ ),
+ name="subdir/manifest.ini",
+ )
+
+ manifest = create_manifest(
+ dedent(
+ """
+ [DEFAULT]
+ args =
+ --foo=bar
+
+ [include:manifest.ini]
+ [test_foo.html]
+ """
+ ),
+ name="subdir/ancestor-manifest.ini",
+ )
+
+ options = {
+ "runByManifest": True,
+ "manifestFile": manifest,
+ }
+
+ md, tests = get_active_tests(**options)
+ assert len(tests) == 3
+
+ key = os.path.join("subdir", "ancestor-manifest.ini")
+ assert key in md.args_by_manifest
+ args = md.args_by_manifest[key]
+ assert len(args) == 1
+ assert args.pop() == "\n--foo=bar"
+
+ key = "{}:{}".format(
+ os.path.join("subdir", "ancestor-manifest.ini"),
+ os.path.join("subdir", "manifest.ini"),
+ )
+ assert key in md.args_by_manifest
+ args = md.args_by_manifest[key]
+ assert len(args) == 1
+ assert args.pop() == "\n--foo=bar \n--cheese"
+
+
+def test_prefs_validation(get_active_tests, create_manifest):
+ # Test prefs set in a single manifest.
+ manifest_relpath = "manifest.ini"
+ manifest = create_manifest(
+ dedent(
+ """
+ [DEFAULT]
+ prefs=
+ foo=bar
+ browser.dom.foo=baz
+
+ [files/test_pass.html]
+ [files/test_fail.html]
+ """
+ )
+ )
+
+ options = {
+ "runByManifest": True,
+ "manifestFile": manifest,
+ }
+ md, tests = get_active_tests(**options)
+
+ assert len(tests) == 2
+ assert manifest_relpath in md.prefs_by_manifest
+
+ prefs = md.prefs_by_manifest[manifest_relpath]
+ assert len(prefs) == 1
+ assert prefs.pop() == "\nfoo=bar\nbrowser.dom.foo=baz"
+
+ # Test prefs set with runByManifest disabled.
+ options["runByManifest"] = False
+ with pytest.raises(SystemExit):
+ get_active_tests(**options)
+
+ # Test prefs set in non-default section.
+ options["runByManifest"] = True
+ options["manifestFile"] = create_manifest(
+ dedent(
+ """
+ [files/test_pass.html]
+ prefs=foo=bar
+ [files/test_fail.html]
+ """
+ )
+ )
+ with pytest.raises(SystemExit):
+ get_active_tests(**options)
+
+
+def test_prefs_validation_with_ancestor_manifest(get_active_tests, create_manifest):
+ # Test prefs set by an ancestor manifest.
+ create_manifest(
+ dedent(
+ """
+ [DEFAULT]
+ prefs=
+ foo=bar
+ browser.dom.foo=baz
+
+ [files/test_pass.html]
+ [files/test_fail.html]
+ """
+ ),
+ name="subdir/manifest.ini",
+ )
+
+ manifest = create_manifest(
+ dedent(
+ """
+ [DEFAULT]
+ prefs =
+ browser.dom.foo=fleem
+ flower=rose
+
+ [include:manifest.ini]
+ [test_foo.html]
+ """
+ ),
+ name="subdir/ancestor-manifest.ini",
+ )
+
+ options = {
+ "runByManifest": True,
+ "manifestFile": manifest,
+ }
+
+ md, tests = get_active_tests(**options)
+ assert len(tests) == 3
+
+ key = os.path.join("subdir", "ancestor-manifest.ini")
+ assert key in md.prefs_by_manifest
+ prefs = md.prefs_by_manifest[key]
+ assert len(prefs) == 1
+ assert prefs.pop() == "\nbrowser.dom.foo=fleem\nflower=rose"
+
+ key = "{}:{}".format(
+ os.path.join("subdir", "ancestor-manifest.ini"),
+ os.path.join("subdir", "manifest.ini"),
+ )
+ assert key in md.prefs_by_manifest
+ prefs = md.prefs_by_manifest[key]
+ assert len(prefs) == 1
+ assert (
+ prefs.pop()
+ == "\nbrowser.dom.foo=fleem\nflower=rose \nfoo=bar\nbrowser.dom.foo=baz"
+ )
+
+
+if __name__ == "__main__":
+ mozunit.main()