[py-svn] r51525 - py/branch/event/py/test2/testing
hpk at codespeak.net
hpk at codespeak.net
Fri Feb 15 14:00:42 CET 2008
Author: hpk
Date: Fri Feb 15 14:00:40 2008
New Revision: 51525
Modified:
py/branch/event/py/test2/testing/suptest.py
py/branch/event/py/test2/testing/test_outcome.py
py/branch/event/py/test2/testing/test_session.py
py/branch/event/py/test2/testing/test_setup_nested.py
Log:
* refactored setup tests
* introduced some more helpers for testing examples
* unskip generator setup test
Modified: py/branch/event/py/test2/testing/suptest.py
==============================================================================
--- py/branch/event/py/test2/testing/suptest.py (original)
+++ py/branch/event/py/test2/testing/suptest.py Fri Feb 15 14:00:40 2008
@@ -35,6 +35,11 @@
sorter.session.main()
return sorter
+def events_from_runsource(source):
+ source = py.code.Source(source)
+ tfile = makeuniquepyfile(source)
+ return events_from_cmdline([tfile])
+
def events_from_session(session):
sorter = EventSorter(session.config, session)
session.main()
@@ -76,6 +81,12 @@
def countoutcomes(self):
return map(len, self.listoutcomes())
+ def assertoutcome(self, passed=0, skipped=0, failed=0):
+ realpassed, realskipped, realfailed = self.listoutcomes()
+ assert passed == len(realpassed)
+ assert skipped == len(realskipped)
+ assert failed == len(realfailed)
+
def getfailedcollections(self):
l = []
for ev in self.get(repevent.CollectionFinish):
@@ -83,6 +94,19 @@
l.append(ev)
return l
+ def getreport(self, inamepart):
+ """ return a testreport whose dotted import path matches """
+ l = []
+ for rep in self.get(repevent.ItemTestReport):
+ dp = rep.dottedpath(self.config)
+ if dp.find(inamepart) != -1:
+ l.append(rep)
+ if len(l) != 1:
+ raise ValueError("did not find exactly one testreport"
+ "found" + str(l))
+ return l[0]
+
+
counter = py.std.itertools.count().next
def makeuniquepyfile(source):
dirname = "test_%d" %(counter(),)
Modified: py/branch/event/py/test2/testing/test_outcome.py
==============================================================================
--- py/branch/event/py/test2/testing/test_outcome.py (original)
+++ py/branch/event/py/test2/testing/test_outcome.py Fri Feb 15 14:00:40 2008
@@ -3,22 +3,6 @@
import marshal
import py
-def f1():
- 1
- 2
- 3
- 4
- raise ValueError(42)
-
-def f2():
- f1()
-
-def f3():
- f2()
-
-def f4():
- py.test.skip("argh!")
-
class TestRaises:
def test_raises(self):
py.test2.raises(ValueError, "int('qwe')")
Modified: py/branch/event/py/test2/testing/test_session.py
==============================================================================
--- py/branch/event/py/test2/testing/test_session.py (original)
+++ py/branch/event/py/test2/testing/test_session.py Fri Feb 15 14:00:40 2008
@@ -79,11 +79,10 @@
assert passed == skipped == 0
def test_generator_yields_None(self):
- p = suptest.makeuniquepyfile("""
+ sorter = suptest.events_from_runsource("""
def test_1():
yield None
""")
- sorter = suptest.events_from_cmdline([p])
failures = sorter.getfailedcollections()
out = failures[0].excinfo.exconly()
i = out.find('TypeError')
@@ -120,12 +119,11 @@
assert ev.item._testmycapture
def test_raises_output(self):
- p = suptest.makeuniquepyfile('''
+ sorter = suptest.events_from_runsource('''
import py
def test_raises_doesnt():
py.test2.raises(ValueError, int, "3")
''')
- sorter = suptest.events_from_cmdline([p])
passed, skipped, failed = sorter.listoutcomes()
assert len(failed) == 1
out = failed[0].exconly
@@ -134,7 +132,7 @@
py.test2.fail("incorrect raises() output")
def test_order_of_execution(self):
- tfile = suptest.makeuniquepyfile("""
+ sorter = suptest.events_from_runsource("""
l = []
def test_1():
l.append(1)
@@ -153,7 +151,6 @@
def test_4(self):
assert self.reslist == [1,2,1,2,3]
""")
- sorter = suptest.events_from_cmdline([tfile])
passed, skipped, failed = sorter.countoutcomes()
assert failed == skipped == 0
assert passed == 7
@@ -253,20 +250,18 @@
assert failed[1].dottedpath(sorter.config).endswith("test_other")
assert failed[2].dottedpath(sorter.config).endswith("test_two")
- def test_capture_info_on_event(self):
- tfile = suptest.makeuniquepyfile("""
+ def test_capture_on_function(self):
+ sorter = suptest.events_from_runsource("""
def test_one():
- print 1
- print 2
- print 3
+ print "passed"
+ def test_two():
+ print "failed"
+ assert 0
""")
- sorter = suptest.events_from_cmdline([tfile])
- passed, skipped, failed = sorter.listoutcomes()
- assert len(skipped) == len(failed) == 0
- assert len(passed) == 1
- ev = passed[0]
- py.test.skip("XXX get more info (e.g. capturing) available from events")
- assert ev.outcome.passed
- assert ev.outcome.stderr == ""
- assert ev.outcome.stdout == "1\n2\n3\n"
-
+ testrep = sorter.getreport("test_one")
+ assert testrep.stdout.startswith("passed")
+ assert not testrep.stderr
+
+ testrep = sorter.getreport("test_two")
+ assert testrep.stdout.startswith("failed")
+ assert not testrep.stderr
Modified: py/branch/event/py/test2/testing/test_setup_nested.py
==============================================================================
--- py/branch/event/py/test2/testing/test_setup_nested.py (original)
+++ py/branch/event/py/test2/testing/test_setup_nested.py Fri Feb 15 14:00:40 2008
@@ -1,64 +1,93 @@
-
#
# test correct setup/teardowns at
# module, class, and instance level
-modlevel = []
-def setup_module(module):
- assert not modlevel
- module.modlevel.append(42)
-
-def teardown_module(module):
- modlevel.pop()
-
-def setup_function(function):
- function.answer = 17
-
-def teardown_function(function):
- del function.answer
-
-def test_modlevel():
- assert modlevel[0] == 42
- assert test_modlevel.answer == 17
-
-class TestSimpleClassSetup:
- clslevel = []
- def setup_class(cls):
- cls.clslevel.append(23)
-
- def teardown_class(cls):
- cls.clslevel.pop()
-
- def test_classlevel(self):
- assert self.clslevel[0] == 23
-
- def test_modulelevel(self):
- print modlevel
- assert modlevel == [42]
-
-class TestInheritedClassSetupStillWorks(TestSimpleClassSetup):
- def test_classlevel_anothertime(self):
- assert self.clslevel == [23]
-
-class TestSetupTeardownOnInstance(TestSimpleClassSetup):
- def setup_method(self, method):
- self.clslevel.append(method.__name__)
-
- def teardown_method(self, method):
- x = self.clslevel.pop()
- assert x == method.__name__
-
- def test_setup(self):
- assert self.clslevel[-1] == 'test_setup'
-
- def test_generate(self):
- assert self.clslevel[-1] == 'test_generate'
- yield self.generated, 5
- assert self.clslevel[-1] == 'test_generate'
-
- def generated(self, value):
- assert value == 5
- assert self.clslevel[-1] == 'test_generate'
+import suptest
-def test_teardown_method_worked():
- assert not TestSetupTeardownOnInstance.clslevel
+def test_module_and_function_setup():
+ sorter = suptest.events_from_runsource("""
+ modlevel = []
+ def setup_module(module):
+ assert not modlevel
+ module.modlevel.append(42)
+
+ def teardown_module(module):
+ modlevel.pop()
+
+ def setup_function(function):
+ function.answer = 17
+
+ def teardown_function(function):
+ del function.answer
+
+ def test_modlevel():
+ assert modlevel[0] == 42
+ assert test_modlevel.answer == 17
+
+ class TestFromClass:
+ def test_module(self):
+ assert modlevel[0] == 42
+ assert not hasattr(test_modlevel, 'answer')
+ """)
+ sorter.assertoutcome(passed=2)
+
+def test_class_setup():
+ sorter = suptest.events_from_runsource("""
+ class TestSimpleClassSetup:
+ clslevel = []
+ def setup_class(cls):
+ cls.clslevel.append(23)
+
+ def teardown_class(cls):
+ cls.clslevel.pop()
+
+ def test_classlevel(self):
+ assert self.clslevel[0] == 23
+
+ class TestInheritedClassSetupStillWorks(TestSimpleClassSetup):
+ def test_classlevel_anothertime(self):
+ assert self.clslevel == [23]
+
+ def test_cleanup():
+ assert not TestSimpleClassSetup.clslevel
+ assert not TestInheritedClassSetupStillWorks.clslevel
+ """)
+ sorter.assertoutcome(passed=1+2+1)
+
+def test_method_setup():
+ sorter = suptest.events_from_runsource("""
+ class TestSetupMethod:
+ def setup_method(self, meth):
+ self.methsetup = meth
+ def teardown_method(self, meth):
+ del self.methsetup
+
+ def test_some(self):
+ assert self.methsetup == self.test_some
+
+ def test_other(self):
+ assert self.methsetup == self.test_other
+ """)
+ sorter.assertoutcome(passed=2)
+
+def test_generator_setup():
+ sorter = suptest.events_from_runsource("""
+ class TestSetupTeardownOnInstance:
+ def setup_class(cls):
+ cls.classsetup = True
+
+ def setup_method(self, method):
+ self.methsetup = method
+
+ def test_generate(self):
+ assert self.classsetup
+ assert self.methsetup == self.test_generate
+ yield self.generated, 5
+ yield self.generated, 2
+
+ def generated(self, value):
+ assert self.classsetup
+ assert self.methsetup == self.test_generate
+ assert value == 5
+ """)
+ sorter.assertoutcome(passed=1, failed=1)
More information about the pytest-commit
mailing list