395 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			395 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			Python
		
	
	
	
| import pytest
 | |
| 
 | |
| def setup_module(mod):
 | |
|     mod.nose = pytest.importorskip("nose")
 | |
| 
 | |
| def test_nose_setup(testdir):
 | |
|     p = testdir.makepyfile("""
 | |
|         l = []
 | |
|         from nose.tools import with_setup
 | |
| 
 | |
|         @with_setup(lambda: l.append(1), lambda: l.append(2))
 | |
|         def test_hello():
 | |
|             assert l == [1]
 | |
| 
 | |
|         def test_world():
 | |
|             assert l == [1,2]
 | |
| 
 | |
|         test_hello.setup = lambda: l.append(1)
 | |
|         test_hello.teardown = lambda: l.append(2)
 | |
|     """)
 | |
|     result = testdir.runpytest(p, '-p', 'nose')
 | |
|     result.assert_outcomes(passed=2)
 | |
| 
 | |
| 
 | |
| def test_setup_func_with_setup_decorator():
 | |
|     from _pytest.nose import call_optional
 | |
|     l = []
 | |
|     class A:
 | |
|         @pytest.fixture(autouse=True)
 | |
|         def f(self):
 | |
|             l.append(1)
 | |
|     call_optional(A(), "f")
 | |
|     assert not l
 | |
| 
 | |
| 
 | |
| def test_setup_func_not_callable():
 | |
|     from _pytest.nose import call_optional
 | |
|     class A:
 | |
|         f = 1
 | |
|     call_optional(A(), "f")
 | |
| 
 | |
| def test_nose_setup_func(testdir):
 | |
|     p = testdir.makepyfile("""
 | |
|         from nose.tools import with_setup
 | |
| 
 | |
|         l = []
 | |
| 
 | |
|         def my_setup():
 | |
|             a = 1
 | |
|             l.append(a)
 | |
| 
 | |
|         def my_teardown():
 | |
|             b = 2
 | |
|             l.append(b)
 | |
| 
 | |
|         @with_setup(my_setup, my_teardown)
 | |
|         def test_hello():
 | |
|             print (l)
 | |
|             assert l == [1]
 | |
| 
 | |
|         def test_world():
 | |
|             print (l)
 | |
|             assert l == [1,2]
 | |
| 
 | |
|     """)
 | |
|     result = testdir.runpytest(p, '-p', 'nose')
 | |
|     result.assert_outcomes(passed=2)
 | |
| 
 | |
| 
 | |
| def test_nose_setup_func_failure(testdir):
 | |
|     p = testdir.makepyfile("""
 | |
|         from nose.tools import with_setup
 | |
| 
 | |
|         l = []
 | |
|         my_setup = lambda x: 1
 | |
|         my_teardown = lambda x: 2
 | |
| 
 | |
|         @with_setup(my_setup, my_teardown)
 | |
|         def test_hello():
 | |
|             print (l)
 | |
|             assert l == [1]
 | |
| 
 | |
|         def test_world():
 | |
|             print (l)
 | |
|             assert l == [1,2]
 | |
| 
 | |
|     """)
 | |
|     result = testdir.runpytest(p, '-p', 'nose')
 | |
|     result.stdout.fnmatch_lines([
 | |
|         "*TypeError: <lambda>()*"
 | |
|     ])
 | |
| 
 | |
| 
 | |
| def test_nose_setup_func_failure_2(testdir):
 | |
|     testdir.makepyfile("""
 | |
|         l = []
 | |
| 
 | |
|         my_setup = 1
 | |
|         my_teardown = 2
 | |
| 
 | |
|         def test_hello():
 | |
|             assert l == []
 | |
| 
 | |
|         test_hello.setup = my_setup
 | |
|         test_hello.teardown = my_teardown
 | |
|     """)
 | |
|     reprec = testdir.inline_run()
 | |
|     reprec.assertoutcome(passed=1)
 | |
| 
 | |
| def test_nose_setup_partial(testdir):
 | |
|     pytest.importorskip("functools")
 | |
|     p = testdir.makepyfile("""
 | |
|         from functools import partial
 | |
| 
 | |
|         l = []
 | |
| 
 | |
|         def my_setup(x):
 | |
|             a = x
 | |
|             l.append(a)
 | |
| 
 | |
|         def my_teardown(x):
 | |
|             b = x
 | |
|             l.append(b)
 | |
| 
 | |
|         my_setup_partial = partial(my_setup, 1)
 | |
|         my_teardown_partial = partial(my_teardown, 2)
 | |
| 
 | |
|         def test_hello():
 | |
|             print (l)
 | |
|             assert l == [1]
 | |
| 
 | |
|         def test_world():
 | |
|             print (l)
 | |
|             assert l == [1,2]
 | |
| 
 | |
|         test_hello.setup = my_setup_partial
 | |
|         test_hello.teardown = my_teardown_partial
 | |
|     """)
 | |
|     result = testdir.runpytest(p, '-p', 'nose')
 | |
|     result.stdout.fnmatch_lines([
 | |
|         "*2 passed*"
 | |
|     ])
 | |
| 
 | |
| 
 | |
| def test_nose_test_generator_fixtures(testdir):
 | |
|     p = testdir.makepyfile("""
 | |
|         # taken from nose-0.11.1 unit_tests/test_generator_fixtures.py
 | |
|         from nose.tools import eq_
 | |
|         called = []
 | |
| 
 | |
|         def outer_setup():
 | |
|             called.append('outer_setup')
 | |
| 
 | |
|         def outer_teardown():
 | |
|             called.append('outer_teardown')
 | |
| 
 | |
|         def inner_setup():
 | |
|             called.append('inner_setup')
 | |
| 
 | |
|         def inner_teardown():
 | |
|             called.append('inner_teardown')
 | |
| 
 | |
|         def test_gen():
 | |
|             called[:] = []
 | |
|             for i in range(0, 5):
 | |
|                 yield check, i
 | |
| 
 | |
|         def check(i):
 | |
|             expect = ['outer_setup']
 | |
|             for x in range(0, i):
 | |
|                 expect.append('inner_setup')
 | |
|                 expect.append('inner_teardown')
 | |
|             expect.append('inner_setup')
 | |
|             eq_(called, expect)
 | |
| 
 | |
| 
 | |
|         test_gen.setup = outer_setup
 | |
|         test_gen.teardown = outer_teardown
 | |
|         check.setup = inner_setup
 | |
|         check.teardown = inner_teardown
 | |
| 
 | |
|         class TestClass(object):
 | |
|             def setup(self):
 | |
|                 print ("setup called in %s" % self)
 | |
|                 self.called = ['setup']
 | |
| 
 | |
|             def teardown(self):
 | |
|                 print ("teardown called in %s" % self)
 | |
|                 eq_(self.called, ['setup'])
 | |
|                 self.called.append('teardown')
 | |
| 
 | |
|             def test(self):
 | |
|                 print ("test called in %s" % self)
 | |
|                 for i in range(0, 5):
 | |
|                     yield self.check, i
 | |
| 
 | |
|             def check(self, i):
 | |
|                 print ("check called in %s" % self)
 | |
|                 expect = ['setup']
 | |
|                 #for x in range(0, i):
 | |
|                 #    expect.append('setup')
 | |
|                 #    expect.append('teardown')
 | |
|                 #expect.append('setup')
 | |
|                 eq_(self.called, expect)
 | |
|     """)
 | |
|     result = testdir.runpytest(p, '-p', 'nose')
 | |
|     result.stdout.fnmatch_lines([
 | |
|         "*10 passed*"
 | |
|     ])
 | |
| 
 | |
| 
 | |
| def test_module_level_setup(testdir):
 | |
|     testdir.makepyfile("""
 | |
|         from nose.tools import with_setup
 | |
|         items = {}
 | |
| 
 | |
|         def setup():
 | |
|             items[1]=1
 | |
| 
 | |
|         def teardown():
 | |
|             del items[1]
 | |
| 
 | |
|         def setup2():
 | |
|             items[2] = 2
 | |
| 
 | |
|         def teardown2():
 | |
|             del items[2]
 | |
| 
 | |
|         def test_setup_module_setup():
 | |
|             assert items[1] == 1
 | |
| 
 | |
|         @with_setup(setup2, teardown2)
 | |
|         def test_local_setup():
 | |
|             assert items[2] == 2
 | |
|             assert 1 not in items
 | |
|     """)
 | |
|     result = testdir.runpytest('-p', 'nose')
 | |
|     result.stdout.fnmatch_lines([
 | |
|         "*2 passed*",
 | |
|     ])
 | |
| 
 | |
| 
 | |
| def test_nose_style_setup_teardown(testdir):
 | |
|     testdir.makepyfile("""
 | |
|         l = []
 | |
| 
 | |
|         def setup_module():
 | |
|             l.append(1)
 | |
| 
 | |
|         def teardown_module():
 | |
|             del l[0]
 | |
| 
 | |
|         def test_hello():
 | |
|             assert l == [1]
 | |
| 
 | |
|         def test_world():
 | |
|             assert l == [1]
 | |
|         """)
 | |
|     result = testdir.runpytest('-p', 'nose')
 | |
|     result.stdout.fnmatch_lines([
 | |
|         "*2 passed*",
 | |
|     ])
 | |
| 
 | |
| def test_nose_setup_ordering(testdir):
 | |
|     testdir.makepyfile("""
 | |
|         def setup_module(mod):
 | |
|             mod.visited = True
 | |
| 
 | |
|         class TestClass:
 | |
|             def setup(self):
 | |
|                 assert visited
 | |
|             def test_first(self):
 | |
|                 pass
 | |
|         """)
 | |
|     result = testdir.runpytest()
 | |
|     result.stdout.fnmatch_lines([
 | |
|         "*1 passed*",
 | |
|     ])
 | |
| 
 | |
| 
 | |
| def test_apiwrapper_problem_issue260(testdir):
 | |
|     # this would end up trying a call a optional teardown on the class
 | |
|     # for plain unittests we dont want nose behaviour
 | |
|     testdir.makepyfile("""
 | |
|         import unittest
 | |
|         class TestCase(unittest.TestCase):
 | |
|             def setup(self):
 | |
|                 #should not be called in unittest testcases
 | |
|                 assert 0, 'setup'
 | |
|             def teardown(self):
 | |
|                 #should not be called in unittest testcases
 | |
|                 assert 0, 'teardown'
 | |
|             def setUp(self):
 | |
|                 print('setup')
 | |
|             def tearDown(self):
 | |
|                 print('teardown')
 | |
|             def test_fun(self):
 | |
|                 pass
 | |
|         """)
 | |
|     result = testdir.runpytest()
 | |
|     result.assert_outcomes(passed=1)
 | |
| 
 | |
| def test_setup_teardown_linking_issue265(testdir):
 | |
|     # we accidentally didnt integrate nose setupstate with normal setupstate
 | |
|     # this test ensures that won't happen again
 | |
|     testdir.makepyfile('''
 | |
|         import pytest
 | |
| 
 | |
|         class TestGeneric(object):
 | |
|             def test_nothing(self):
 | |
|                 """Tests the API of the implementation (for generic and specialized)."""
 | |
| 
 | |
|         @pytest.mark.skipif("True", reason=
 | |
|                     "Skip tests to check if teardown is skipped as well.")
 | |
|         class TestSkipTeardown(TestGeneric):
 | |
| 
 | |
|             def setup(self):
 | |
|                 """Sets up my specialized implementation for $COOL_PLATFORM."""
 | |
|                 raise Exception("should not call setup for skipped tests")
 | |
| 
 | |
|             def teardown(self):
 | |
|                 """Undoes the setup."""
 | |
|                 raise Exception("should not call teardown for skipped tests")
 | |
|         ''')
 | |
|     reprec = testdir.runpytest()
 | |
|     reprec.assert_outcomes(passed=1, skipped=1)
 | |
| 
 | |
| 
 | |
| def test_SkipTest_during_collection(testdir):
 | |
|     p = testdir.makepyfile("""
 | |
|         import nose
 | |
|         raise nose.SkipTest("during collection")
 | |
|         def test_failing():
 | |
|             assert False
 | |
|         """)
 | |
|     result = testdir.runpytest(p)
 | |
|     result.assert_outcomes(skipped=1)
 | |
| 
 | |
| 
 | |
| def test_SkipTest_in_test(testdir):
 | |
|     testdir.makepyfile("""
 | |
|         import nose
 | |
| 
 | |
|         def test_skipping():
 | |
|             raise nose.SkipTest("in test")
 | |
|         """)
 | |
|     reprec = testdir.inline_run()
 | |
|     reprec.assertoutcome(skipped=1)
 | |
| 
 | |
| def test_istest_function_decorator(testdir):
 | |
|     p = testdir.makepyfile("""
 | |
|         import nose.tools
 | |
|         @nose.tools.istest
 | |
|         def not_test_prefix():
 | |
|             pass
 | |
|         """)
 | |
|     result = testdir.runpytest(p)
 | |
|     result.assert_outcomes(passed=1)
 | |
| 
 | |
| def test_nottest_function_decorator(testdir):
 | |
|     testdir.makepyfile("""
 | |
|         import nose.tools
 | |
|         @nose.tools.nottest
 | |
|         def test_prefix():
 | |
|             pass
 | |
|         """)
 | |
|     reprec = testdir.inline_run()
 | |
|     assert not reprec.getfailedcollections()
 | |
|     calls = reprec.getreports("pytest_runtest_logreport")
 | |
|     assert not calls
 | |
| 
 | |
| def test_istest_class_decorator(testdir):
 | |
|     p = testdir.makepyfile("""
 | |
|         import nose.tools
 | |
|         @nose.tools.istest
 | |
|         class NotTestPrefix:
 | |
|             def test_method(self):
 | |
|                 pass
 | |
|         """)
 | |
|     result = testdir.runpytest(p)
 | |
|     result.assert_outcomes(passed=1)
 | |
| 
 | |
| def test_nottest_class_decorator(testdir):
 | |
|     testdir.makepyfile("""
 | |
|         import nose.tools
 | |
|         @nose.tools.nottest
 | |
|         class TestPrefix:
 | |
|             def test_method(self):
 | |
|                 pass
 | |
|         """)
 | |
|     reprec = testdir.inline_run()
 | |
|     assert not reprec.getfailedcollections()
 | |
|     calls = reprec.getreports("pytest_runtest_logreport")
 | |
|     assert not calls
 |