aboutsummaryrefslogtreecommitdiffstats
path: root/tests/wpt/web-platform-tests/tools/pytest/testing/test_collection.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/wpt/web-platform-tests/tools/pytest/testing/test_collection.py')
-rw-r--r--tests/wpt/web-platform-tests/tools/pytest/testing/test_collection.py641
1 files changed, 0 insertions, 641 deletions
diff --git a/tests/wpt/web-platform-tests/tools/pytest/testing/test_collection.py b/tests/wpt/web-platform-tests/tools/pytest/testing/test_collection.py
deleted file mode 100644
index 749c5b7ce45..00000000000
--- a/tests/wpt/web-platform-tests/tools/pytest/testing/test_collection.py
+++ /dev/null
@@ -1,641 +0,0 @@
-import pytest, py
-
-from _pytest.main import Session, EXIT_NOTESTSCOLLECTED
-
-class TestCollector:
- def test_collect_versus_item(self):
- from pytest import Collector, Item
- assert not issubclass(Collector, Item)
- assert not issubclass(Item, Collector)
-
- def test_compat_attributes(self, testdir, recwarn):
- modcol = testdir.getmodulecol("""
- def test_pass(): pass
- def test_fail(): assert 0
- """)
- recwarn.clear()
- assert modcol.Module == pytest.Module
- assert modcol.Class == pytest.Class
- assert modcol.Item == pytest.Item
- assert modcol.File == pytest.File
- assert modcol.Function == pytest.Function
-
- def test_check_equality(self, testdir):
- modcol = testdir.getmodulecol("""
- def test_pass(): pass
- def test_fail(): assert 0
- """)
- fn1 = testdir.collect_by_name(modcol, "test_pass")
- assert isinstance(fn1, pytest.Function)
- fn2 = testdir.collect_by_name(modcol, "test_pass")
- assert isinstance(fn2, pytest.Function)
-
- assert fn1 == fn2
- assert fn1 != modcol
- if py.std.sys.version_info < (3, 0):
- assert cmp(fn1, fn2) == 0
- assert hash(fn1) == hash(fn2)
-
- fn3 = testdir.collect_by_name(modcol, "test_fail")
- assert isinstance(fn3, pytest.Function)
- assert not (fn1 == fn3)
- assert fn1 != fn3
-
- for fn in fn1,fn2,fn3:
- assert fn != 3
- assert fn != modcol
- assert fn != [1,2,3]
- assert [1,2,3] != fn
- assert modcol != fn
-
- def test_getparent(self, testdir):
- modcol = testdir.getmodulecol("""
- class TestClass:
- def test_foo():
- pass
- """)
- cls = testdir.collect_by_name(modcol, "TestClass")
- fn = testdir.collect_by_name(
- testdir.collect_by_name(cls, "()"), "test_foo")
-
- parent = fn.getparent(pytest.Module)
- assert parent is modcol
-
- parent = fn.getparent(pytest.Function)
- assert parent is fn
-
- parent = fn.getparent(pytest.Class)
- assert parent is cls
-
-
- def test_getcustomfile_roundtrip(self, testdir):
- hello = testdir.makefile(".xxx", hello="world")
- testdir.makepyfile(conftest="""
- import pytest
- class CustomFile(pytest.File):
- pass
- def pytest_collect_file(path, parent):
- if path.ext == ".xxx":
- return CustomFile(path, parent=parent)
- """)
- node = testdir.getpathnode(hello)
- assert isinstance(node, pytest.File)
- assert node.name == "hello.xxx"
- nodes = node.session.perform_collect([node.nodeid], genitems=False)
- assert len(nodes) == 1
- assert isinstance(nodes[0], pytest.File)
-
-class TestCollectFS:
- def test_ignored_certain_directories(self, testdir):
- tmpdir = testdir.tmpdir
- tmpdir.ensure("_darcs", 'test_notfound.py')
- tmpdir.ensure("CVS", 'test_notfound.py')
- tmpdir.ensure("{arch}", 'test_notfound.py')
- tmpdir.ensure(".whatever", 'test_notfound.py')
- tmpdir.ensure(".bzr", 'test_notfound.py')
- tmpdir.ensure("normal", 'test_found.py')
- for x in tmpdir.visit("test_*.py"):
- x.write("def test_hello(): pass")
-
- result = testdir.runpytest("--collect-only")
- s = result.stdout.str()
- assert "test_notfound" not in s
- assert "test_found" in s
-
- def test_custom_norecursedirs(self, testdir):
- testdir.makeini("""
- [pytest]
- norecursedirs = mydir xyz*
- """)
- tmpdir = testdir.tmpdir
- tmpdir.ensure("mydir", "test_hello.py").write("def test_1(): pass")
- tmpdir.ensure("xyz123", "test_2.py").write("def test_2(): 0/0")
- tmpdir.ensure("xy", "test_ok.py").write("def test_3(): pass")
- rec = testdir.inline_run()
- rec.assertoutcome(passed=1)
- rec = testdir.inline_run("xyz123/test_2.py")
- rec.assertoutcome(failed=1)
-
- def test_testpaths_ini(self, testdir, monkeypatch):
- testdir.makeini("""
- [pytest]
- testpaths = gui uts
- """)
- tmpdir = testdir.tmpdir
- tmpdir.ensure("env", "test_1.py").write("def test_env(): pass")
- tmpdir.ensure("gui", "test_2.py").write("def test_gui(): pass")
- tmpdir.ensure("uts", "test_3.py").write("def test_uts(): pass")
-
- # executing from rootdir only tests from `testpaths` directories
- # are collected
- items, reprec = testdir.inline_genitems('-v')
- assert [x.name for x in items] == ['test_gui', 'test_uts']
-
- # check that explicitly passing directories in the command-line
- # collects the tests
- for dirname in ('env', 'gui', 'uts'):
- items, reprec = testdir.inline_genitems(tmpdir.join(dirname))
- assert [x.name for x in items] == ['test_%s' % dirname]
-
- # changing cwd to each subdirectory and running pytest without
- # arguments collects the tests in that directory normally
- for dirname in ('env', 'gui', 'uts'):
- monkeypatch.chdir(testdir.tmpdir.join(dirname))
- items, reprec = testdir.inline_genitems()
- assert [x.name for x in items] == ['test_%s' % dirname]
-
-
-class TestCollectPluginHookRelay:
- def test_pytest_collect_file(self, testdir):
- wascalled = []
- class Plugin:
- def pytest_collect_file(self, path, parent):
- wascalled.append(path)
- testdir.makefile(".abc", "xyz")
- pytest.main([testdir.tmpdir], plugins=[Plugin()])
- assert len(wascalled) == 1
- assert wascalled[0].ext == '.abc'
-
- def test_pytest_collect_directory(self, testdir):
- wascalled = []
- class Plugin:
- def pytest_collect_directory(self, path, parent):
- wascalled.append(path.basename)
- testdir.mkdir("hello")
- testdir.mkdir("world")
- pytest.main(testdir.tmpdir, plugins=[Plugin()])
- assert "hello" in wascalled
- assert "world" in wascalled
-
-class TestPrunetraceback:
- def test_collection_error(self, testdir):
- p = testdir.makepyfile("""
- import not_exists
- """)
- result = testdir.runpytest(p)
- assert "__import__" not in result.stdout.str(), "too long traceback"
- result.stdout.fnmatch_lines([
- "*ERROR collecting*",
- "*mport*not_exists*"
- ])
-
- def test_custom_repr_failure(self, testdir):
- p = testdir.makepyfile("""
- import not_exists
- """)
- testdir.makeconftest("""
- import pytest
- def pytest_collect_file(path, parent):
- return MyFile(path, parent)
- class MyError(Exception):
- pass
- class MyFile(pytest.File):
- def collect(self):
- raise MyError()
- def repr_failure(self, excinfo):
- if excinfo.errisinstance(MyError):
- return "hello world"
- return pytest.File.repr_failure(self, excinfo)
- """)
-
- result = testdir.runpytest(p)
- result.stdout.fnmatch_lines([
- "*ERROR collecting*",
- "*hello world*",
- ])
-
- @pytest.mark.xfail(reason="other mechanism for adding to reporting needed")
- def test_collect_report_postprocessing(self, testdir):
- p = testdir.makepyfile("""
- import not_exists
- """)
- testdir.makeconftest("""
- import pytest
- def pytest_make_collect_report(__multicall__):
- rep = __multicall__.execute()
- rep.headerlines += ["header1"]
- return rep
- """)
- result = testdir.runpytest(p)
- result.stdout.fnmatch_lines([
- "*ERROR collecting*",
- "*header1*",
- ])
-
-
-class TestCustomConftests:
- def test_ignore_collect_path(self, testdir):
- testdir.makeconftest("""
- def pytest_ignore_collect(path, config):
- return path.basename.startswith("x") or \
- path.basename == "test_one.py"
- """)
- sub = testdir.mkdir("xy123")
- sub.ensure("test_hello.py").write("syntax error")
- sub.join("conftest.py").write("syntax error")
- testdir.makepyfile("def test_hello(): pass")
- testdir.makepyfile(test_one="syntax error")
- result = testdir.runpytest("--fulltrace")
- assert result.ret == 0
- result.stdout.fnmatch_lines(["*1 passed*"])
-
- def test_ignore_collect_not_called_on_argument(self, testdir):
- testdir.makeconftest("""
- def pytest_ignore_collect(path, config):
- return True
- """)
- p = testdir.makepyfile("def test_hello(): pass")
- result = testdir.runpytest(p)
- assert result.ret == 0
- result.stdout.fnmatch_lines("*1 passed*")
- result = testdir.runpytest()
- assert result.ret == EXIT_NOTESTSCOLLECTED
- result.stdout.fnmatch_lines("*collected 0 items*")
-
- def test_collectignore_exclude_on_option(self, testdir):
- testdir.makeconftest("""
- collect_ignore = ['hello', 'test_world.py']
- def pytest_addoption(parser):
- parser.addoption("--XX", action="store_true", default=False)
- def pytest_configure(config):
- if config.getvalue("XX"):
- collect_ignore[:] = []
- """)
- testdir.mkdir("hello")
- testdir.makepyfile(test_world="def test_hello(): pass")
- result = testdir.runpytest()
- assert result.ret == EXIT_NOTESTSCOLLECTED
- assert "passed" not in result.stdout.str()
- result = testdir.runpytest("--XX")
- assert result.ret == 0
- assert "passed" in result.stdout.str()
-
- def test_pytest_fs_collect_hooks_are_seen(self, testdir):
- testdir.makeconftest("""
- import pytest
- class MyModule(pytest.Module):
- pass
- def pytest_collect_file(path, parent):
- if path.ext == ".py":
- return MyModule(path, parent)
- """)
- testdir.mkdir("sub")
- testdir.makepyfile("def test_x(): pass")
- result = testdir.runpytest("--collect-only")
- result.stdout.fnmatch_lines([
- "*MyModule*",
- "*test_x*"
- ])
-
- def test_pytest_collect_file_from_sister_dir(self, testdir):
- sub1 = testdir.mkpydir("sub1")
- sub2 = testdir.mkpydir("sub2")
- conf1 = testdir.makeconftest("""
- import pytest
- class MyModule1(pytest.Module):
- pass
- def pytest_collect_file(path, parent):
- if path.ext == ".py":
- return MyModule1(path, parent)
- """)
- conf1.move(sub1.join(conf1.basename))
- conf2 = testdir.makeconftest("""
- import pytest
- class MyModule2(pytest.Module):
- pass
- def pytest_collect_file(path, parent):
- if path.ext == ".py":
- return MyModule2(path, parent)
- """)
- conf2.move(sub2.join(conf2.basename))
- p = testdir.makepyfile("def test_x(): pass")
- p.copy(sub1.join(p.basename))
- p.copy(sub2.join(p.basename))
- result = testdir.runpytest("--collect-only")
- result.stdout.fnmatch_lines([
- "*MyModule1*",
- "*MyModule2*",
- "*test_x*"
- ])
-
-class TestSession:
- def test_parsearg(self, testdir):
- p = testdir.makepyfile("def test_func(): pass")
- subdir = testdir.mkdir("sub")
- subdir.ensure("__init__.py")
- target = subdir.join(p.basename)
- p.move(target)
- subdir.chdir()
- config = testdir.parseconfig(p.basename)
- rcol = Session(config=config)
- assert rcol.fspath == subdir
- parts = rcol._parsearg(p.basename)
-
- assert parts[0] == target
- assert len(parts) == 1
- parts = rcol._parsearg(p.basename + "::test_func")
- assert parts[0] == target
- assert parts[1] == "test_func"
- assert len(parts) == 2
-
- def test_collect_topdir(self, testdir):
- p = testdir.makepyfile("def test_func(): pass")
- id = "::".join([p.basename, "test_func"])
- # XXX migrate to collectonly? (see below)
- config = testdir.parseconfig(id)
- topdir = testdir.tmpdir
- rcol = Session(config)
- assert topdir == rcol.fspath
- #rootid = rcol.nodeid
- #root2 = rcol.perform_collect([rcol.nodeid], genitems=False)[0]
- #assert root2 == rcol, rootid
- colitems = rcol.perform_collect([rcol.nodeid], genitems=False)
- assert len(colitems) == 1
- assert colitems[0].fspath == p
-
-
- def test_collect_protocol_single_function(self, testdir):
- p = testdir.makepyfile("def test_func(): pass")
- id = "::".join([p.basename, "test_func"])
- items, hookrec = testdir.inline_genitems(id)
- item, = items
- assert item.name == "test_func"
- newid = item.nodeid
- assert newid == id
- py.std.pprint.pprint(hookrec.calls)
- topdir = testdir.tmpdir # noqa
- hookrec.assert_contains([
- ("pytest_collectstart", "collector.fspath == topdir"),
- ("pytest_make_collect_report", "collector.fspath == topdir"),
- ("pytest_collectstart", "collector.fspath == p"),
- ("pytest_make_collect_report", "collector.fspath == p"),
- ("pytest_pycollect_makeitem", "name == 'test_func'"),
- ("pytest_collectreport", "report.nodeid.startswith(p.basename)"),
- ("pytest_collectreport", "report.nodeid == ''")
- ])
-
- def test_collect_protocol_method(self, testdir):
- p = testdir.makepyfile("""
- class TestClass:
- def test_method(self):
- pass
- """)
- normid = p.basename + "::TestClass::()::test_method"
- for id in [p.basename,
- p.basename + "::TestClass",
- p.basename + "::TestClass::()",
- normid,
- ]:
- items, hookrec = testdir.inline_genitems(id)
- assert len(items) == 1
- assert items[0].name == "test_method"
- newid = items[0].nodeid
- assert newid == normid
-
- def test_collect_custom_nodes_multi_id(self, testdir):
- p = testdir.makepyfile("def test_func(): pass")
- testdir.makeconftest("""
- import pytest
- class SpecialItem(pytest.Item):
- def runtest(self):
- return # ok
- class SpecialFile(pytest.File):
- def collect(self):
- return [SpecialItem(name="check", parent=self)]
- def pytest_collect_file(path, parent):
- if path.basename == %r:
- return SpecialFile(fspath=path, parent=parent)
- """ % p.basename)
- id = p.basename
-
- items, hookrec = testdir.inline_genitems(id)
- py.std.pprint.pprint(hookrec.calls)
- assert len(items) == 2
- hookrec.assert_contains([
- ("pytest_collectstart",
- "collector.fspath == collector.session.fspath"),
- ("pytest_collectstart",
- "collector.__class__.__name__ == 'SpecialFile'"),
- ("pytest_collectstart",
- "collector.__class__.__name__ == 'Module'"),
- ("pytest_pycollect_makeitem", "name == 'test_func'"),
- ("pytest_collectreport", "report.nodeid.startswith(p.basename)"),
- #("pytest_collectreport",
- # "report.fspath == %r" % str(rcol.fspath)),
- ])
-
- def test_collect_subdir_event_ordering(self, testdir):
- p = testdir.makepyfile("def test_func(): pass")
- aaa = testdir.mkpydir("aaa")
- test_aaa = aaa.join("test_aaa.py")
- p.move(test_aaa)
-
- items, hookrec = testdir.inline_genitems()
- assert len(items) == 1
- py.std.pprint.pprint(hookrec.calls)
- hookrec.assert_contains([
- ("pytest_collectstart", "collector.fspath == test_aaa"),
- ("pytest_pycollect_makeitem", "name == 'test_func'"),
- ("pytest_collectreport",
- "report.nodeid.startswith('aaa/test_aaa.py')"),
- ])
-
- def test_collect_two_commandline_args(self, testdir):
- p = testdir.makepyfile("def test_func(): pass")
- aaa = testdir.mkpydir("aaa")
- bbb = testdir.mkpydir("bbb")
- test_aaa = aaa.join("test_aaa.py")
- p.copy(test_aaa)
- test_bbb = bbb.join("test_bbb.py")
- p.move(test_bbb)
-
- id = "."
-
- items, hookrec = testdir.inline_genitems(id)
- assert len(items) == 2
- py.std.pprint.pprint(hookrec.calls)
- hookrec.assert_contains([
- ("pytest_collectstart", "collector.fspath == test_aaa"),
- ("pytest_pycollect_makeitem", "name == 'test_func'"),
- ("pytest_collectreport", "report.nodeid == 'aaa/test_aaa.py'"),
- ("pytest_collectstart", "collector.fspath == test_bbb"),
- ("pytest_pycollect_makeitem", "name == 'test_func'"),
- ("pytest_collectreport", "report.nodeid == 'bbb/test_bbb.py'"),
- ])
-
- def test_serialization_byid(self, testdir):
- testdir.makepyfile("def test_func(): pass")
- items, hookrec = testdir.inline_genitems()
- assert len(items) == 1
- item, = items
- items2, hookrec = testdir.inline_genitems(item.nodeid)
- item2, = items2
- assert item2.name == item.name
- assert item2.fspath == item.fspath
-
- def test_find_byid_without_instance_parents(self, testdir):
- p = testdir.makepyfile("""
- class TestClass:
- def test_method(self):
- pass
- """)
- arg = p.basename + ("::TestClass::test_method")
- items, hookrec = testdir.inline_genitems(arg)
- assert len(items) == 1
- item, = items
- assert item.nodeid.endswith("TestClass::()::test_method")
-
-class Test_getinitialnodes:
- def test_global_file(self, testdir, tmpdir):
- x = tmpdir.ensure("x.py")
- config = testdir.parseconfigure(x)
- col = testdir.getnode(config, x)
- assert isinstance(col, pytest.Module)
- assert col.name == 'x.py'
- assert col.parent.name == testdir.tmpdir.basename
- assert col.parent.parent is None
- for col in col.listchain():
- assert col.config is config
-
- def test_pkgfile(self, testdir):
- tmpdir = testdir.tmpdir
- subdir = tmpdir.join("subdir")
- x = subdir.ensure("x.py")
- subdir.ensure("__init__.py")
- config = testdir.parseconfigure(x)
- col = testdir.getnode(config, x)
- assert isinstance(col, pytest.Module)
- assert col.name == 'x.py'
- assert col.parent.parent is None
- for col in col.listchain():
- assert col.config is config
-
-class Test_genitems:
- def test_check_collect_hashes(self, testdir):
- p = testdir.makepyfile("""
- def test_1():
- pass
-
- def test_2():
- pass
- """)
- p.copy(p.dirpath(p.purebasename + "2" + ".py"))
- items, reprec = testdir.inline_genitems(p.dirpath())
- assert len(items) == 4
- for numi, i in enumerate(items):
- for numj, j in enumerate(items):
- if numj != numi:
- assert hash(i) != hash(j)
- assert i != j
-
- def test_example_items1(self, testdir):
- p = testdir.makepyfile('''
- def testone():
- pass
-
- class TestX:
- def testmethod_one(self):
- pass
-
- class TestY(TestX):
- pass
- ''')
- items, reprec = testdir.inline_genitems(p)
- assert len(items) == 3
- assert items[0].name == 'testone'
- assert items[1].name == 'testmethod_one'
- assert items[2].name == 'testmethod_one'
-
- # let's also test getmodpath here
- assert items[0].getmodpath() == "testone"
- assert items[1].getmodpath() == "TestX.testmethod_one"
- assert items[2].getmodpath() == "TestY.testmethod_one"
-
- s = items[0].getmodpath(stopatmodule=False)
- assert s.endswith("test_example_items1.testone")
- print(s)
-
- def test_class_and_functions_discovery_using_glob(self, testdir):
- """
- tests that python_classes and python_functions config options work
- as prefixes and glob-like patterns (issue #600).
- """
- testdir.makeini("""
- [pytest]
- python_classes = *Suite Test
- python_functions = *_test test
- """)
- p = testdir.makepyfile('''
- class MyTestSuite:
- def x_test(self):
- pass
-
- class TestCase:
- def test_y(self):
- pass
- ''')
- items, reprec = testdir.inline_genitems(p)
- ids = [x.getmodpath() for x in items]
- assert ids == ['MyTestSuite.x_test', 'TestCase.test_y']
-
-
-def test_matchnodes_two_collections_same_file(testdir):
- testdir.makeconftest("""
- import pytest
- def pytest_configure(config):
- config.pluginmanager.register(Plugin2())
-
- class Plugin2:
- def pytest_collect_file(self, path, parent):
- if path.ext == ".abc":
- return MyFile2(path, parent)
-
- def pytest_collect_file(path, parent):
- if path.ext == ".abc":
- return MyFile1(path, parent)
-
- class MyFile1(pytest.Item, pytest.File):
- def runtest(self):
- pass
- class MyFile2(pytest.File):
- def collect(self):
- return [Item2("hello", parent=self)]
-
- class Item2(pytest.Item):
- def runtest(self):
- pass
- """)
- p = testdir.makefile(".abc", "")
- result = testdir.runpytest()
- assert result.ret == 0
- result.stdout.fnmatch_lines([
- "*2 passed*",
- ])
- res = testdir.runpytest("%s::hello" % p.basename)
- res.stdout.fnmatch_lines([
- "*1 passed*",
- ])
-
-
-class TestNodekeywords:
- def test_no_under(self, testdir):
- modcol = testdir.getmodulecol("""
- def test_pass(): pass
- def test_fail(): assert 0
- """)
- l = list(modcol.keywords)
- assert modcol.name in l
- for x in l:
- assert not x.startswith("_")
- assert modcol.name in repr(modcol.keywords)
-
- def test_issue345(self, testdir):
- testdir.makepyfile("""
- def test_should_not_be_selected():
- assert False, 'I should not have been selected to run'
-
- def test___repr__():
- pass
- """)
- reprec = testdir.inline_run("-k repr")
- reprec.assertoutcome(passed=1, failed=0)