128 lines
4.5 KiB
Python
128 lines
4.5 KiB
Python
import py
|
|
|
|
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_root_conftest_syntax_error(self, testdir):
|
|
# do we want to unify behaviour with
|
|
# test_subdir_conftest_error?
|
|
p = testdir.makepyfile(conftest="raise SyntaxError\n")
|
|
py.test.raises(SyntaxError, testdir.inline_genitems, p.dirpath())
|
|
|
|
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)
|
|
|
|
|
|
class TestKeywordSelection:
|
|
def test_select_simple(self, testdir):
|
|
file_test = testdir.makepyfile("""
|
|
def test_one(): assert 0
|
|
class TestClass(object):
|
|
def test_method_one(self):
|
|
assert 42 == 43
|
|
""")
|
|
def check(keyword, name):
|
|
reprec = testdir.inline_run("-s", "-k", keyword, file_test)
|
|
passed, skipped, failed = reprec.listoutcomes()
|
|
assert len(failed) == 1
|
|
assert failed[0].item.name == name
|
|
assert len(reprec.getcalls('pytest_deselected')) == 1
|
|
|
|
for keyword in ['test_one', 'est_on']:
|
|
#yield check, keyword, 'test_one'
|
|
check(keyword, 'test_one')
|
|
check('TestClass.test', 'test_method_one')
|
|
|
|
def test_select_extra_keywords(self, testdir):
|
|
p = testdir.makepyfile(test_select="""
|
|
def test_1():
|
|
pass
|
|
class TestClass:
|
|
def test_2(self):
|
|
pass
|
|
""")
|
|
testdir.makepyfile(conftest="""
|
|
import py
|
|
class Class(py.test.collect.Class):
|
|
def _keywords(self):
|
|
return ['xxx', self.name]
|
|
""")
|
|
for keyword in ('xxx', 'xxx test_2', 'TestClass', 'xxx -test_1',
|
|
'TestClass test_2', 'xxx TestClass test_2',):
|
|
reprec = testdir.inline_run(p.dirpath(), '-s', '-k', keyword)
|
|
py.builtin.print_("keyword", repr(keyword))
|
|
passed, skipped, failed = reprec.listoutcomes()
|
|
assert len(passed) == 1
|
|
assert passed[0].item.name == "test_2"
|
|
dlist = reprec.getcalls("pytest_deselected")
|
|
assert len(dlist) == 1
|
|
assert dlist[0].items[0].name == 'test_1'
|
|
|
|
def test_select_starton(self, testdir):
|
|
threepass = testdir.makepyfile(test_threepass="""
|
|
def test_one(): assert 1
|
|
def test_two(): assert 1
|
|
def test_three(): assert 1
|
|
""")
|
|
reprec = testdir.inline_run("-k", "test_two:", threepass)
|
|
passed, skipped, failed = reprec.listoutcomes()
|
|
assert len(passed) == 2
|
|
assert not failed
|
|
dlist = reprec.getcalls("pytest_deselected")
|
|
assert len(dlist) == 1
|
|
item = dlist[0].items[0]
|
|
assert item.name == "test_one"
|
|
|
|
|
|
def test_keyword_extra(self, testdir):
|
|
p = testdir.makepyfile("""
|
|
def test_one():
|
|
assert 0
|
|
test_one.mykeyword = True
|
|
""")
|
|
reprec = testdir.inline_run("-k", "-mykeyword", p)
|
|
passed, skipped, failed = reprec.countoutcomes()
|
|
assert passed + skipped + failed == 0
|
|
reprec = testdir.inline_run("-k", "mykeyword", p)
|
|
passed, skipped, failed = reprec.countoutcomes()
|
|
assert failed == 1
|