[py-svn] r57762 - in py/trunk/py/test: . report report/testing testing

hpk at codespeak.net hpk at codespeak.net
Tue Sep 2 16:31:43 CEST 2008


Author: hpk
Date: Tue Sep  2 16:31:42 2008
New Revision: 57762

Removed:
   py/trunk/py/test/testing/setupdata.py
   py/trunk/py/test/testing/test_repevent.py
Modified:
   py/trunk/py/test/pycollect.py
   py/trunk/py/test/report/base.py
   py/trunk/py/test/report/terminal.py
   py/trunk/py/test/report/testing/test_basereporter.py
   py/trunk/py/test/testing/suptest.py
   py/trunk/py/test/testing/test_collect.py
   py/trunk/py/test/testing/test_config.py
   py/trunk/py/test/testing/test_event.py
   py/trunk/py/test/testing/test_session.py
Log:
* settle on using suptest for supporting test runs
* fix a bug in getmodpath
* remove redundant functions/files



Modified: py/trunk/py/test/pycollect.py
==============================================================================
--- py/trunk/py/test/pycollect.py	(original)
+++ py/trunk/py/test/pycollect.py	Tue Sep  2 16:31:42 2008
@@ -43,9 +43,13 @@
         for node in chain:
             if isinstance(node, Instance):
                 continue
-            if stopatmodule and isinstance(node, Module):
-                break
-            parts.append(node.name)
+            name = node.name 
+            if isinstance(node, Module):
+                if stopatmodule:
+                    break
+                assert name.endswith(".py")
+                name = name[:-3]
+            parts.append(name)
         parts.reverse()
         s = ".".join(parts)
         return s.replace(".[", "[")

Modified: py/trunk/py/test/report/base.py
==============================================================================
--- py/trunk/py/test/report/base.py	(original)
+++ py/trunk/py/test/report/base.py	Tue Sep  2 16:31:42 2008
@@ -64,22 +64,6 @@
             l.append((len(events),) + key)
         return l 
 
-
-def getmodpath(pycolitem): 
-    """ return dotted module path for the given colitem. """ 
-    colitems = pycolitem.listchain()
-    while colitems: 
-        colitem = colitems.pop(0)
-        if isinstance(colitem, colitem.Module):
-            parts = [colitem.obj.__name__]
-            for colitem in colitems: 
-                if colitem.name[0] in '([':
-                    parts[-1] += colitem.name 
-                else:
-                    parts.append(colitem.name) 
-            return ".".join(parts)
-    return colitem.name  
-
 def repr_pythonversion(v=None):
     if v is None:
         v = sys.version_info

Modified: py/trunk/py/test/report/terminal.py
==============================================================================
--- py/trunk/py/test/report/terminal.py	(original)
+++ py/trunk/py/test/report/terminal.py	Tue Sep  2 16:31:42 2008
@@ -2,7 +2,7 @@
 import sys
 from py.__.test import event
 from py.__.test.report.base import BaseReporter
-from py.__.test.report.base import getrelpath, repr_pythonversion, getmodpath
+from py.__.test.report.base import getrelpath, repr_pythonversion
 
 class TerminalReporter(BaseReporter):
     def __init__(self, config, file=None, bus=None):

Modified: py/trunk/py/test/report/testing/test_basereporter.py
==============================================================================
--- py/trunk/py/test/report/testing/test_basereporter.py	(original)
+++ py/trunk/py/test/report/testing/test_basereporter.py	Tue Sep  2 16:31:42 2008
@@ -3,8 +3,7 @@
 from py.__.test.event import EventBus
 from py.__.test import event
 from py.__.test.runner import OutcomeRepr
-from py.__.test.report.base import getrelpath, getmodpath, repr_pythonversion
-from py.__.test.testing import setupdata
+from py.__.test.report.base import getrelpath, repr_pythonversion
 import sys
 
 class TestBaseReporter:
@@ -73,29 +72,6 @@
         assert lineno == longrepr.lineno
         assert reason == longrepr.message
 
-def test_getmodpath_cases():
-    tmpdir = py.test.ensuretemp("test_getmodpath_cases") 
-    pkgdir = tmpdir.join("test_getmodpath") 
-    pkgdir.ensure("__init__.py") 
-    nopkgdir = tmpdir.ensure("nopkg", dir=1) 
-    def checkpkg(names, expected):
-        fcol = setupdata.getexamplecollector(names, tmpdir=pkgdir)
-        assert getmodpath(fcol) == pkgdir.basename + "." + expected 
-    def checknopkg(names, expected):
-        fcol = setupdata.getexamplecollector(names, tmpdir=nopkgdir)
-        assert getmodpath(fcol) == expected 
-
-    for names in (
-        'test_mod.py test_f1           test_mod.test_f1', 
-        'test_mod.py TestA () test_m1  test_mod.TestA().test_m1', 
-        'test_mod.py test_g1           test_mod.test_g1', 
-        'test_mod.py test_g1 [0]       test_mod.test_g1[0]', 
-    ):
-        names = names.split()
-        expected = names.pop()
-        yield checkpkg, names, expected 
-        yield checknopkg, names, expected 
-
 def test_repr_python_version():
     py.magic.patch(sys, 'version_info', (2, 5, 1, 'final', 0))
     try:

Deleted: /py/trunk/py/test/testing/setupdata.py
==============================================================================
--- /py/trunk/py/test/testing/setupdata.py	Tue Sep  2 16:31:42 2008
+++ (empty file)
@@ -1,173 +0,0 @@
-import py
-
-#def setup_module(mod):
-#    mod.datadir = setupdatadir()
-#    mod.tmpdir = py.test.ensuretemp(mod.__name__) 
-
-#def setupdatadir():
-#    datadir = py.test.ensuretemp("datadir")
-#    for name in namecontent:
-#        getexamplefile(name)
-#    return datadir
-
-def getexamplefile(basename, tmpdir=None):
-    if tmpdir is None: 
-        tmpdir = py.test.ensuretemp("example") 
-        tmpdir.ensure("__init__.py")
-    path = tmpdir.join(basename) 
-    if not path.check():
-        path.write(py.code.Source(namecontent[basename]))
-        print "creating testfile", path
-    return path 
-
-def getexamplecollector(names, tmpdir=None): 
-    fn = getexamplefile(names[0], tmpdir=tmpdir)  
-    config = py.test.config._reparse([fn.dirpath()])
-    col = config.getfsnode(fn)
-    return col._getitembynames(names[1:])
-
-namecontent = {
-    'syntax_error.py': "this is really not python\n",
-
-    'disabled_module.py': '''
-        disabled = True
-
-        def setup_module(mod):
-            raise ValueError
-
-        class TestClassOne:
-            def test_func(self):
-                raise ValueError
-
-        class TestClassTwo:
-            def setup_class(cls):
-                raise ValueError
-            def test_func(self):
-                raise ValueError
-    ''', 
-
-    'brokenrepr.py': '''
-        import py
-
-        class BrokenRepr1:
-            """A broken class with lots of broken methods. Let's try to make the test framework 
-            immune to these."""
-            foo=0
-            def __repr__(self):
-                raise Exception("Ha Ha fooled you, I'm a broken repr().")
-
-        class BrokenRepr2:
-            """A broken class with lots of broken methods. Let's try to make the test framework 
-            immune to these."""
-            foo=0
-            def __repr__(self):
-                raise "Ha Ha fooled you, I'm a broken repr()."
-
-            
-        class TestBrokenClass:
-
-            def test_explicit_bad_repr(self):
-                t = BrokenRepr1()
-                py.test.raises(Exception, 'repr(t)')
-                
-            def test_implicit_bad_repr1(self):
-                t = BrokenRepr1()
-                assert t.foo == 1
-
-            def test_implicit_bad_repr2(self):
-                t = BrokenRepr2()
-                assert t.foo == 1
-    ''', 
-
-    'failingimport.py': "import gruetzelmuetzel\n", 
-
-    'test_mod.py': """
-        class TestA:
-            def test_m1(self):
-                pass
-        def test_f1():
-            pass
-        def test_g1():
-            yield lambda x: None, 42
-    """,
-
-    'file_test.py': """
-        def test_one(): 
-            assert 42 == 43
-
-        class TestClass(object): 
-            def test_method_one(self): 
-                assert 42 == 43 
-
-    """,
-
-    'test_threepass.py': """
-        def test_one():
-            assert 1
-
-        def test_two():
-            assert 1
-
-        def test_three():
-            assert 1
-    """,
-
-    'testspecial_importerror.py': """
-
-        import asdasd
-
-    """,
-
-    'disabled.py': """
-        class TestDisabled:
-            disabled = True
-            def test_method(self): 
-                pass
-    """,
-
-    'test_funcexamples.py': """
-        import py
-        import time
-        def test_funcpassed(): 
-            pass
-
-        def test_funcfailed():
-            raise AssertionError("hello world")
-
-        def test_funcskipped():
-            py.test.skip("skipped")
-
-        def test_funcprint():
-            print "samfing"
-
-        def test_funcprinterr():
-            print >>py.std.sys.stderr, "samfing"
-
-        def test_funcprintfail():
-            print "samfing elz"
-            asddsa
-
-        def test_funcexplicitfail():
-            py.test.fail("3")
-
-        def test_funcraisesfails():
-            py.test.raises(ValueError, lambda: 123) 
-
-        def test_funcoptioncustom():
-            assert py.test.config.getvalue("custom")
-
-        def test_funchang():
-            import time
-            time.sleep(1000)
-
-        def test_funckill15():
-            import os
-            os.kill(os.getpid(), 15)
-    """,
-
-    'docexample.txt': """ 
-        Aha!!!!!!
-        =========
-     """,
-
-} 

Modified: py/trunk/py/test/testing/suptest.py
==============================================================================
--- py/trunk/py/test/testing/suptest.py	(original)
+++ py/trunk/py/test/testing/suptest.py	Tue Sep  2 16:31:42 2008
@@ -6,8 +6,6 @@
     for analyzing events an EventSorter instance is returned for both of: 
     * events_from_cmdline(args): inprocess-run of cmdline invocation
     * events_from_session(session): inprocess-run of given session
-    * events_run_example(examplename, *args):in-process-run of
-      given example test file 
     
     eventappender(config): for getting all events in a list: 
 """
@@ -49,11 +47,6 @@
     session.main(getcolitems(session.config))
     return sorter 
 
-def events_run_example(examplename, *args):
-    from setupdata import getexamplefile
-    p = getexamplefile(examplename) 
-    return events_from_cmdline([p] + list(args))
-
 class EventSorter(object):
     def __init__(self, config, session=None):
         self.config = config
@@ -217,6 +210,13 @@
         runner = self.getrunner()
         return runner(item, **runnerargs)
 
+class InlineSession(InlineCollection):
+    def parse_and_run(self, *args):
+        config = self.parseconfig(*args)
+        session = config.initsession()
+        sorter = EventSorter(config, session)
+        session.main()
+        return sorter
 
 def popvalue(stringio):
     value = stringio.getvalue().rstrip()

Modified: py/trunk/py/test/testing/test_collect.py
==============================================================================
--- py/trunk/py/test/testing/test_collect.py	(original)
+++ py/trunk/py/test/testing/test_collect.py	Tue Sep  2 16:31:42 2008
@@ -1,7 +1,7 @@
 from __future__ import generators
 import py
 from py.__.test import event, outcome 
-import setupdata, suptest
+from py.__.test.testing import suptest
 from py.__.test.conftesthandle import Conftest
 from py.__.test.collect import SetupState
 from test_config import getcolitems
@@ -376,7 +376,6 @@
     assert f1 == f1_b
     assert not f1 != f1_b
     
-    
 class Testgenitems: 
     def setup_class(cls):
         cls.classtemp = py.test.ensuretemp(cls.__name__)
@@ -462,6 +461,15 @@
         assert items[1].name == 'test_method_one'
         assert items[2].name == 'test_method_one'
 
+        # let's also test getmodpath here
+        assert items[0].getmodpath() == "test_one"
+        assert items[1].getmodpath() == "TestX.test_method_one"
+        assert items[2].getmodpath() == "TestY.test_method_one"
+
+        s = items[0].getmodpath(stopatmodule=False)
+        assert s == "test_example_items1.test_example.test_one"
+        print s
+
     def test_collect_doctest_files_with_test_prefix(self):
         self.tmp.ensure("whatever.txt")
         checkfile = self.tmp.ensure("test_something.txt")

Modified: py/trunk/py/test/testing/test_config.py
==============================================================================
--- py/trunk/py/test/testing/test_config.py	(original)
+++ py/trunk/py/test/testing/test_config.py	Tue Sep  2 16:31:42 2008
@@ -2,7 +2,7 @@
 import py
 
 from py.__.test.config import gettopdir
-import suptest, setupdata
+from py.__.test.testing import suptest
 from py.__.test import event
 
 def getcolitems(config):
@@ -38,6 +38,8 @@
 
 def test_config_cmdline_options_only_lowercase(): 
     o = py.test.ensuretemp('test_config_cmdline_options_only_lowercase')
+    o = o.mkdir("onemore") # neccessary because collection of o.dirpath()
+                           # could see our conftest.py
     o.ensure("conftest.py").write(py.code.Source(""" 
         import py
         Option = py.test.config.Option
@@ -159,12 +161,16 @@
     assert config.option.gdest == 11
     assert option.gdest == 11
 
-class TestSessionAndOptions: 
-    def setup_class(cls):
-        cls.tmproot = py.test.ensuretemp(cls.__name__)
-
-    def setup_method(self, method):
-        self.tmpdir = self.tmproot.ensure(method.__name__, dir=1) 
+class TestSessionAndOptions(suptest.FileCreation): 
+    def exampletestfile(self):
+        return self.makepyfile(file_test="""
+            def test_one(): 
+                assert 42 == 43
+
+            class TestClass(object): 
+                def test_method_one(self): 
+                    assert 42 == 43 
+        """)
 
     def test_session_eventlog(self):
         eventlog = self.tmpdir.join("test_session_eventlog")
@@ -312,7 +318,7 @@
     def test_conflict_options(self):
         def check_conflict_option(opts):
             print "testing if options conflict:", " ".join(opts)
-            path = setupdata.getexamplefile("file_test.py")
+            path = self.exampletestfile()
             config = py.test.config._reparse(opts + [path])
             py.test.raises((ValueError, SystemExit), """
                 config.initsession()
@@ -329,7 +335,7 @@
     
     def test_implied_options(self):
         def check_implied_option(opts, expr):
-            path = setupdata.getexamplefile("file_test.py")
+            path = self.exampletestfile()
             config = py.test.config._reparse(opts + [path])
             session = config.initsession()
             assert eval(expr, session.config.option.__dict__)
@@ -348,19 +354,19 @@
             passed, skipped, failed = sorter.countoutcomes()
             assert failed == 2 
             assert skipped == passed == 0
-        path = setupdata.getexamplefile("file_test.py")
+        path = self.exampletestfile()
         for opts in ([], ['-l'], ['-s'], ['--tb=no'], ['--tb=short'], 
                      ['--tb=long'], ['--fulltrace'], ['--nomagic'], 
                      ['--traceconfig'], ['-v'], ['-v', '-v']):
             yield runfiletest, opts + [path]
 
     def test_is_not_boxed_by_default(self):
-        path = setupdata.getexamplefile("file_test.py")
+        path = self.exampletestfile()
         config = py.test.config._reparse([path])
         assert not config.option.boxed
 
 
-class TestConfigColitems:
+class TestConfigColitems(suptest.FileCreation):
     def setup_class(cls):
         cls.tmproot = py.test.ensuretemp(cls.__name__)
 

Modified: py/trunk/py/test/testing/test_event.py
==============================================================================
--- py/trunk/py/test/testing/test_event.py	(original)
+++ py/trunk/py/test/testing/test_event.py	Tue Sep  2 16:31:42 2008
@@ -36,9 +36,12 @@
         assert l == [1]
 
 
-class TestItemTestReport(object):
+class TestItemTestReport(suptest.InlineCollection):
     def test_toterminal(self):
-        sorter = suptest.events_run_example("file_test.py")
+        sorter = suptest.events_from_runsource("""
+            def test_one(): 
+                assert 42 == 43
+        """)
         reports = sorter.get(event.ItemTestReport)
         ev = reports[0] 
         assert ev.failed 
@@ -54,5 +57,5 @@
         ##assert ev.repr_run.find("AssertionError") != -1
         filepath = ev.colitem.fspath
         #filepath , modpath = ev.itemrepr_path
-        assert str(filepath).endswith("file_test.py")
+        assert str(filepath).endswith(".py")
         #assert modpath.endswith("file_test.test_one")

Deleted: /py/trunk/py/test/testing/test_repevent.py
==============================================================================
--- /py/trunk/py/test/testing/test_repevent.py	Tue Sep  2 16:31:42 2008
+++ (empty file)
@@ -1,30 +0,0 @@
-
-from py.__.test import event 
-import setupdata, suptest
-from py.__.code.testing.test_excinfo import TWMock
-
-
-
-class TestItemTestReport(object):
-
-    def test_toterminal(self):
-        sorter = suptest.events_run_example("file_test.py")
-        reports = sorter.get(event.ItemTestReport)
-        ev = reports[0] 
-        assert ev.failed 
-        twmock = TWMock()
-        ev.toterminal(twmock)
-        assert twmock.lines
-        twmock = TWMock()
-        ev.outcome.longrepr = "hello"
-        ev.toterminal(twmock)
-        assert twmock.lines[0] == "hello"
-        assert not twmock.lines[1:]
-
-        ##assert ev.repr_run.find("AssertionError") != -1
-        filepath = ev.colitem.fspath
-        #filepath , modpath = ev.itemrepr_path
-        assert str(filepath).endswith("file_test.py")
-        #assert modpath.endswith("file_test.test_one")
-        
-

Modified: py/trunk/py/test/testing/test_session.py
==============================================================================
--- py/trunk/py/test/testing/test_session.py	(original)
+++ py/trunk/py/test/testing/test_session.py	Tue Sep  2 16:31:42 2008
@@ -1,15 +1,20 @@
 import py
 from py.__.test import event 
-import suptest, setupdata
+from py.__.test.testing import suptest
 
 def setup_module(mod):
     mod.tmpdir = py.test.ensuretemp(mod.__name__) 
 
-class TestKeywordSelection: 
+class TestKeywordSelection(suptest.InlineSession):
     def test_select_simple(self):
+        file_test = self.makepyfile(file_test="""
+            def test_one(): assert 0
+            class TestClass(object): 
+                def test_method_one(self): 
+                    assert 42 == 43 
+        """)
         def check(keyword, name):
-            sorter = suptest.events_run_example("file_test.py", 
-                '-s', '-k', keyword)
+            sorter = self.parse_and_run("-s", "-k", keyword, file_test)
             passed, skipped, failed = sorter.listoutcomes()
             assert len(failed) == 1
             assert failed[0].colitem.name == name 
@@ -20,7 +25,7 @@
         yield check, 'TestClass.test', 'test_method_one'
 
     def test_select_extra_keywords(self):
-        o = tmpdir.ensure('test_select_extra_keywords', dir=1) 
+        o = self.tmpdir
         tfile = o.join('test_select.py').write(py.code.Source("""
             def test_1():
                 pass 
@@ -46,8 +51,12 @@
             assert dlist[0].items[0].name == 'test_1'
 
     def test_select_starton(self):
-        sorter = suptest.events_run_example("test_threepass.py", 
-                '-k', "test_two:")
+        threepass = self.makepyfile(test_threepass="""
+            def test_one(): assert 1
+            def test_two(): assert 1
+            def test_three(): assert 1
+        """)
+        sorter = self.parse_and_run("-k", "test_two:", threepass)
         passed, skipped, failed = sorter.listoutcomes()
         assert len(passed) == 2
         assert not failed 



More information about the pytest-commit mailing list