[py-svn] pytest commit d3c75ce89f7d: internally use pytest.* instead of ``py.test.*`` in many places.

commits-noreply at bitbucket.org commits-noreply at bitbucket.org
Sat Nov 13 09:13:41 CET 2010


# HG changeset patch -- Bitbucket.org
# Project pytest
# URL http://bitbucket.org/hpk42/pytest/overview
# User holger krekel <holger at merlinux.eu>
# Date 1289635511 -3600
# Node ID d3c75ce89f7d8c69468c3f96a3bd1473600895f6
# Parent  f52a7803cac89ab3cbcceeca38b8f218ad58ffbc
internally use pytest.* instead of ``py.test.*`` in many places.
make sub namespace names 'collect' and 'cmdline' available on pytest directly

--- a/pytest/__init__.py
+++ b/pytest/__init__.py
@@ -5,9 +5,9 @@ see http://pytest.org for documentation 
 
 (c) Holger Krekel and others, 2004-2010
 """
-__version__ = '2.0.0.dev24'
+__version__ = '2.0.0.dev25'
 
-__all__ = ['config', 'cmdline']
+__all__ = ['cmdline', 'collect', 'main']
 
 from pytest import main as cmdline
 UsageError = cmdline.UsageError

--- a/pytest/hookspec.py
+++ b/pytest/hookspec.py
@@ -140,7 +140,7 @@ def pytest_runtest_teardown(item):
 
 def pytest_runtest_makereport(item, call):
     """ return a :py:class:`pytest.plugin.runner.TestReport` object
-    for the given :py:class:`pytest.collect.Item` and
+    for the given :py:class:`pytest.Item` and
     :py:class:`pytest.plugin.runner.CallInfo`.
     """
 pytest_runtest_makereport.firstresult = True

--- a/doc/example/nonpython/conftest.py
+++ b/doc/example/nonpython/conftest.py
@@ -6,14 +6,14 @@ def pytest_collect_file(path, parent):
     if path.ext == ".yml" and path.basename.startswith("test"):
         return YamlFile(path, parent)
             
-class YamlFile(py.test.collect.File):
+class YamlFile(pytest.File):
     def collect(self):
         import yaml # we need a yaml parser, e.g. PyYAML
         raw = yaml.load(self.fspath.open())
         for name, spec in raw.items():
             yield YamlItem(name, self, spec)
 
-class YamlItem(py.test.collect.Item):
+class YamlItem(pytest.Item):
     def __init__(self, name, parent, spec):
         super(YamlItem, self).__init__(name, parent)
         self.spec = spec

--- a/pytest/plugin/doctest.py
+++ b/pytest/plugin/doctest.py
@@ -1,6 +1,6 @@
 """ discover and run doctests in modules and test files."""
 
-import py
+import pytest, py
 from py._code.code import TerminalRepr, ReprFileLocation
 
 def pytest_addoption(parser):
@@ -31,7 +31,7 @@ class ReprFailDoctest(TerminalRepr):
             tw.line(line)
         self.reprlocation.toterminal(tw)
 
-class DoctestItem(py.test.collect.Item):
+class DoctestItem(pytest.Item):
     def __init__(self, path, parent):
         name = self.__class__.__name__ + ":" + path.basename
         super(DoctestItem, self).__init__(name=name, parent=parent)

--- a/testing/plugin/test_runner.py
+++ b/testing/plugin/test_runner.py
@@ -141,8 +141,8 @@ class BaseFunctionalTests:
 
     def test_custom_failure_repr(self, testdir):
         testdir.makepyfile(conftest="""
-            import py
-            class Function(py.test.collect.Function):
+            import pytest
+            class Function(pytest.Function):
                 def repr_failure(self, excinfo):
                     return "hello"
         """)
@@ -162,13 +162,12 @@ class BaseFunctionalTests:
 
     def test_failure_in_setup_function_ignores_custom_repr(self, testdir):
         testdir.makepyfile(conftest="""
-            import py
-            class Function(py.test.collect.Function):
+            import pytest
+            class Function(pytest.Function):
                 def repr_failure(self, excinfo):
                     assert 0
         """)
         reports = testdir.runitem("""
-            import py
             def setup_function(func):
                 raise ValueError(42)
             def test_func():
@@ -200,9 +199,9 @@ class BaseFunctionalTests:
     def test_exit_propagates(self, testdir):
         try:
             testdir.runitem("""
-                import py
+                import pytest
                 def test_func():
-                    raise py.test.exit.Exception()
+                    raise pytest.exit.Exception()
             """)
         except py.test.exit.Exception:
             pass
@@ -267,8 +266,8 @@ class TestSessionReports:
 
     def test_skip_at_module_scope(self, testdir):
         col = testdir.getmodulecol("""
-            import py
-            py.test.skip("hello")
+            import pytest
+            pytest.skip("hello")
             def test_func():
                 pass
         """)

--- a/pytest/plugin/mark.py
+++ b/pytest/plugin/mark.py
@@ -1,5 +1,5 @@
 """ generic mechanism for marking and selecting python functions. """
-import py
+import pytest, py
 
 def pytest_namespace():
     return {'mark': MarkGenerator()}
@@ -156,13 +156,13 @@ class MarkInfo:
                 self._name, self.args, self.kwargs)
 
 def pytest_itemcollected(item):
-    if not isinstance(item, py.test.collect.Function):
+    if not isinstance(item, pytest.Function):
         return
     try:
         func = item.obj.__func__
     except AttributeError:
         func = getattr(item.obj, 'im_func', item.obj)
-    pyclasses = (py.test.collect.Class, py.test.collect.Module)
+    pyclasses = (pytest.Class, pytest.Module)
     for node in item.listchain():
         if isinstance(node, pyclasses):
             marker = getattr(node.obj, 'pytestmark', None)

--- a/testing/plugin/test_junitxml.py
+++ b/testing/plugin/test_junitxml.py
@@ -237,11 +237,11 @@ class TestPython:
 class TestNonPython:
     def test_summing_simple(self, testdir):
         testdir.makeconftest("""
-            import py
+            import pytest
             def pytest_collect_file(path, parent):
                 if path.ext == ".xyz":
                     return MyItem(path, parent)
-            class MyItem(py.test.collect.Item):
+            class MyItem(pytest.Item):
                 def __init__(self, path, parent):
                     super(MyItem, self).__init__(path.basename, parent)
                     self.fspath = path

--- a/doc/plugins.txt
+++ b/doc/plugins.txt
@@ -234,7 +234,7 @@ initialisation, command line and configu
 generic "runtest" hooks
 ------------------------------
 
-All all runtest related hooks receive a :py:class:`pytest.collect.Item` object.
+All all runtest related hooks receive a :py:class:`pytest.Item` object.
 
 .. autofunction:: pytest_runtest_protocol
 .. autofunction:: pytest_runtest_setup

--- a/testing/test_conftest.py
+++ b/testing/test_conftest.py
@@ -52,7 +52,7 @@ class TestConftestValueAccessGlobal:
     def test_default_has_lower_prio(self, basedir):
         conftest = ConftestWithSetinitial(basedir.join("adir"))
         assert conftest.rget('Directory') == 3
-        #assert conftest.lget('Directory') == py.test.collect.Directory
+        #assert conftest.lget('Directory') == pytest.Directory
 
     def test_value_access_not_existing(self, basedir):
         conftest = ConftestWithSetinitial(basedir)

--- a/setup.py
+++ b/setup.py
@@ -22,7 +22,7 @@ def main():
         name='pytest',
         description='py.test: simple powerful testing with Python',
         long_description = long_description,
-        version='2.0.0.dev24',
+        version='2.0.0.dev25',
         url='http://pytest.org',
         license='MIT license',
         platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'],

--- a/testing/test_main.py
+++ b/testing/test_main.py
@@ -352,8 +352,8 @@ class TestPytestPluginInteractions:
 
     def test_namespace_early_from_import(self, testdir):
         p = testdir.makepyfile("""
-            from py.test.collect import Item
-            from pytest.collect import Item as Item2
+            from pytest import Item
+            from pytest import Item as Item2
             assert Item is Item2
         """)
         result = testdir.runpython(p)

--- a/pytest/plugin/nose.py
+++ b/pytest/plugin/nose.py
@@ -1,6 +1,6 @@
 """run test suites written for nose. """
 
-import py
+import pytest, py
 import inspect
 import sys
 
@@ -14,12 +14,12 @@ def pytest_runtest_makereport(__multical
 
 
 def pytest_runtest_setup(item):
-    if isinstance(item, (py.test.collect.Function)):
-        if isinstance(item.parent, py.test.collect.Generator):
+    if isinstance(item, (pytest.Function)):
+        if isinstance(item.parent, pytest.Generator):
             gen = item.parent
             if not hasattr(gen, '_nosegensetup'):
                 call_optional(gen.obj, 'setup')
-                if isinstance(gen.parent, py.test.collect.Instance):
+                if isinstance(gen.parent, pytest.Instance):
                     call_optional(gen.parent.obj, 'setup')
                 gen._nosegensetup = True
         if not call_optional(item.obj, 'setup'):
@@ -27,7 +27,7 @@ def pytest_runtest_setup(item):
             call_optional(item.parent.obj, 'setup')
 
 def pytest_runtest_teardown(item):
-    if isinstance(item, py.test.collect.Function):
+    if isinstance(item, pytest.Function):
         if not call_optional(item.obj, 'teardown'):
             call_optional(item.parent.obj, 'teardown')
         #if hasattr(item.parent, '_nosegensetup'):
@@ -35,7 +35,7 @@ def pytest_runtest_teardown(item):
         #    del item.parent._nosegensetup
 
 def pytest_make_collect_report(collector):
-    if isinstance(collector, py.test.collect.Generator):
+    if isinstance(collector, pytest.Generator):
         call_optional(collector.obj, 'setup')
 
 def call_optional(obj, name):

--- a/pytest/plugin/session.py
+++ b/pytest/plugin/session.py
@@ -122,9 +122,9 @@ class HookProxy:
 def compatproperty(name):
     def fget(self):
         #print "retrieving %r property from %s" %(name, self.fspath)
-        py.log._apiwarn("2.0", "use py.test.collect.%s for "
-            "Session classes" % name)
-        return getattr(pytest.collect, name)
+        py.log._apiwarn("2.0", "use pytest.%s for "
+            "test collection and item classes" % name)
+        return getattr(pytest, name)
     return property(fget)
     
 class Node(object):
@@ -479,10 +479,10 @@ class Session(FSCollector):
         nextnames = names[1:]
         resultnodes = []
         for node in matching:
-            if isinstance(node, pytest.collect.Item):
+            if isinstance(node, pytest.Item):
                 resultnodes.append(node)
                 continue
-            assert isinstance(node, pytest.collect.Collector)
+            assert isinstance(node, pytest.Collector)
             node.ihook.pytest_collectstart(collector=node)
             rep = node.ihook.pytest_make_collect_report(collector=node)
             if rep.passed:
@@ -494,11 +494,11 @@ class Session(FSCollector):
 
     def genitems(self, node):
         self.trace("genitems", node)
-        if isinstance(node, pytest.collect.Item):
+        if isinstance(node, pytest.Item):
             node.ihook.pytest_itemcollected(item=node)
             yield node
         else:
-            assert isinstance(node, pytest.collect.Collector)
+            assert isinstance(node, pytest.Collector)
             node.ihook.pytest_collectstart(collector=node)
             rep = node.ihook.pytest_make_collect_report(collector=node)
             if rep.passed:

--- a/pytest/plugin/unittest.py
+++ b/pytest/plugin/unittest.py
@@ -1,5 +1,5 @@
 """ discovery and running of std-library "unittest" style tests. """
-import py
+import pytest, py
 import sys
 
 def pytest_pycollect_makeitem(collector, name, obj):
@@ -16,7 +16,7 @@ def pytest_pycollect_makeitem(collector,
         if isunit:
             return UnitTestCase(name, parent=collector)
 
-class UnitTestCase(py.test.collect.Class):
+class UnitTestCase(pytest.Class):
     def collect(self):
         loader = py.std.unittest.TestLoader()
         for name in loader.getTestCaseNames(self.obj):
@@ -32,7 +32,7 @@ class UnitTestCase(py.test.collect.Class
         if meth is not None:
             meth()
 
-class TestCaseFunction(py.test.collect.Function):
+class TestCaseFunction(pytest.Function):
     def setup(self):
         pass
     def teardown(self):

--- a/pytest/plugin/skipping.py
+++ b/pytest/plugin/skipping.py
@@ -65,7 +65,7 @@ class MarkEvaluator:
 
 
 def pytest_runtest_setup(item):
-    if not isinstance(item, py.test.collect.Function):
+    if not isinstance(item, pytest.Function):
         return
     evalskip = MarkEvaluator(item, 'skipif')
     if evalskip.istrue():
@@ -84,7 +84,7 @@ def check_xfail_no_run(item):
                 py.test.xfail("[NOTRUN] " + evalxfail.getexplanation())
 
 def pytest_runtest_makereport(__multicall__, item, call):
-    if not isinstance(item, py.test.collect.Function):
+    if not isinstance(item, pytest.Function):
         return
     if not (call.excinfo and
         call.excinfo.errisinstance(py.test.xfail.Exception)):

--- a/testing/plugin/test_python.py
+++ b/testing/plugin/test_python.py
@@ -59,11 +59,11 @@ class TestGenerator:
         colitems = modcol.collect()
         assert len(colitems) == 1
         gencol = colitems[0]
-        assert isinstance(gencol, py.test.collect.Generator)
+        assert isinstance(gencol, pytest.Generator)
         gencolitems = gencol.collect()
         assert len(gencolitems) == 2
-        assert isinstance(gencolitems[0], py.test.collect.Function)
-        assert isinstance(gencolitems[1], py.test.collect.Function)
+        assert isinstance(gencolitems[0], pytest.Function)
+        assert isinstance(gencolitems[1], pytest.Function)
         assert gencolitems[0].name == '[0]'
         assert gencolitems[0].obj.__name__ == 'func1'
 
@@ -77,11 +77,11 @@ class TestGenerator:
                     yield func1, 42, 6*7
         """)
         gencol = modcol.collect()[0].collect()[0].collect()[0]
-        assert isinstance(gencol, py.test.collect.Generator)
+        assert isinstance(gencol, pytest.Generator)
         gencolitems = gencol.collect()
         assert len(gencolitems) == 2
-        assert isinstance(gencolitems[0], py.test.collect.Function)
-        assert isinstance(gencolitems[1], py.test.collect.Function)
+        assert isinstance(gencolitems[0], pytest.Function)
+        assert isinstance(gencolitems[1], pytest.Function)
         assert gencolitems[0].name == '[0]'
         assert gencolitems[0].obj.__name__ == 'func1'
 
@@ -97,11 +97,11 @@ class TestGenerator:
         colitems = modcol.collect()
         assert len(colitems) == 1
         gencol = colitems[0]
-        assert isinstance(gencol, py.test.collect.Generator)
+        assert isinstance(gencol, pytest.Generator)
         gencolitems = gencol.collect()
         assert len(gencolitems) == 2
-        assert isinstance(gencolitems[0], py.test.collect.Function)
-        assert isinstance(gencolitems[1], py.test.collect.Function)
+        assert isinstance(gencolitems[0], pytest.Function)
+        assert isinstance(gencolitems[1], pytest.Function)
         assert gencolitems[0].name == "['seventeen']"
         assert gencolitems[0].obj.__name__ == 'func1'
         assert gencolitems[1].name == "['fortytwo']"
@@ -118,7 +118,7 @@ class TestGenerator:
         colitems = modcol.collect()
         assert len(colitems) == 1
         gencol = colitems[0]
-        assert isinstance(gencol, py.test.collect.Generator)
+        assert isinstance(gencol, pytest.Generator)
         py.test.raises(ValueError, "gencol.collect()")
 
     def test_generative_methods_with_explicit_names(self, testdir):
@@ -131,11 +131,11 @@ class TestGenerator:
                     yield "m2", func1, 42, 6*7
         """)
         gencol = modcol.collect()[0].collect()[0].collect()[0]
-        assert isinstance(gencol, py.test.collect.Generator)
+        assert isinstance(gencol, pytest.Generator)
         gencolitems = gencol.collect()
         assert len(gencolitems) == 2
-        assert isinstance(gencolitems[0], py.test.collect.Function)
-        assert isinstance(gencolitems[1], py.test.collect.Function)
+        assert isinstance(gencolitems[0], pytest.Function)
+        assert isinstance(gencolitems[1], pytest.Function)
         assert gencolitems[0].name == "['m1']"
         assert gencolitems[0].obj.__name__ == 'func1'
         assert gencolitems[1].name == "['m2']"
@@ -199,20 +199,20 @@ class TestGenerator:
 class TestFunction:
     def test_getmodulecollector(self, testdir):
         item = testdir.getitem("def test_func(): pass")
-        modcol = item.getparent(py.test.collect.Module)
-        assert isinstance(modcol, py.test.collect.Module)
+        modcol = item.getparent(pytest.Module)
+        assert isinstance(modcol, pytest.Module)
         assert hasattr(modcol.obj, 'test_func')
 
     def test_function_equality(self, testdir, tmpdir):
         config = testdir.reparseconfig()
         session = testdir.Session(config)
-        f1 = py.test.collect.Function(name="name", config=config,
+        f1 = pytest.Function(name="name", config=config,
                 args=(1,), callobj=isinstance, session=session)
-        f2 = py.test.collect.Function(name="name",config=config,
+        f2 = pytest.Function(name="name",config=config,
                 args=(1,), callobj=py.builtin.callable, session=session)
         assert not f1 == f2
         assert f1 != f2
-        f3 = py.test.collect.Function(name="name", config=config,
+        f3 = pytest.Function(name="name", config=config,
                 args=(1,2), callobj=py.builtin.callable, session=session)
         assert not f3 == f2
         assert f3 != f2
@@ -220,7 +220,7 @@ class TestFunction:
         assert not f3 == f1
         assert f3 != f1
 
-        f1_b = py.test.collect.Function(name="name", config=config,
+        f1_b = pytest.Function(name="name", config=config,
               args=(1,), callobj=isinstance, session=session)
         assert f1 == f1_b
         assert not f1 != f1_b
@@ -236,9 +236,9 @@ class TestFunction:
             funcargs = {}
             id = "world"
         session = testdir.Session(config)
-        f5 = py.test.collect.Function(name="name", config=config,
+        f5 = pytest.Function(name="name", config=config,
             callspec=callspec1, callobj=isinstance, session=session)
-        f5b = py.test.collect.Function(name="name", config=config,
+        f5b = pytest.Function(name="name", config=config,
             callspec=callspec2, callobj=isinstance, session=session)
         assert f5 != f5b
         assert not (f5 == f5b)
@@ -263,9 +263,9 @@ class TestSorting:
             def test_fail(): assert 0
         """)
         fn1 = testdir.collect_by_name(modcol, "test_pass")
-        assert isinstance(fn1, py.test.collect.Function)
+        assert isinstance(fn1, pytest.Function)
         fn2 = testdir.collect_by_name(modcol, "test_pass")
-        assert isinstance(fn2, py.test.collect.Function)
+        assert isinstance(fn2, pytest.Function)
 
         assert fn1 == fn2
         assert fn1 != modcol
@@ -274,7 +274,7 @@ class TestSorting:
         assert hash(fn1) == hash(fn2)
 
         fn3 = testdir.collect_by_name(modcol, "test_fail")
-        assert isinstance(fn3, py.test.collect.Function)
+        assert isinstance(fn3, pytest.Function)
         assert not (fn1 == fn3)
         assert fn1 != fn3
 
@@ -309,8 +309,8 @@ class TestSorting:
 class TestConftestCustomization:
     def test_pytest_pycollect_module(self, testdir):
         testdir.makeconftest("""
-            import py
-            class MyModule(py.test.collect.Module):
+            import pytest
+            class MyModule(pytest.Module):
                 pass
             def pytest_pycollect_makemodule(path, parent):
                 if path.basename == "test_xyz.py":
@@ -326,8 +326,8 @@ class TestConftestCustomization:
 
     def test_pytest_pycollect_makeitem(self, testdir):
         testdir.makeconftest("""
-            import py
-            class MyFunction(py.test.collect.Function):
+            import pytest
+            class MyFunction(pytest.Function):
                 pass
             def pytest_pycollect_makeitem(collector, name, obj):
                 if name == "some":
@@ -342,7 +342,7 @@ class TestConftestCustomization:
     def test_makeitem_non_underscore(self, testdir, monkeypatch):
         modcol = testdir.getmodulecol("def _hello(): pass")
         l = []
-        monkeypatch.setattr(py.test.collect.Module, 'makeitem',
+        monkeypatch.setattr(pytest.Module, 'makeitem',
             lambda self, name, obj: l.append(name))
         l = modcol.collect()
         assert '_hello' not in l
@@ -545,7 +545,7 @@ class TestFillFuncArgs:
         item.config.pluginmanager.register(Provider())
         if hasattr(item, '_args'):
             del item._args
-        py.test.collect._fillfuncargs(item)
+        pytest._fillfuncargs(item)
         assert len(item.funcargs) == 1
 
 class TestRequest:
@@ -634,7 +634,7 @@ class TestRequest:
         req.config._setupstate.prepare(item) # XXX
         req._fillfuncargs()
         # successively check finalization calls
-        teardownlist = item.getparent(py.test.collect.Module).obj.teardownlist
+        teardownlist = item.getparent(pytest.Module).obj.teardownlist
         ss = item.config._setupstate
         assert not teardownlist
         ss.teardown_exact(item)
@@ -1009,11 +1009,11 @@ def test_conftest_funcargs_only_availabl
 
 def test_funcarg_non_pycollectobj(testdir): # rough jstests usage
     testdir.makeconftest("""
-        import py
+        import pytest
         def pytest_pycollect_makeitem(collector, name, obj):
             if name == "MyClass":
                 return MyCollector(name, parent=collector)
-        class MyCollector(py.test.collect.Collector):
+        class MyCollector(pytest.Collector):
             def reportinfo(self):
                 return self.fspath, 3, "xyz"
     """)
@@ -1048,8 +1048,8 @@ def test_funcarg_lookup_error(testdir):
 class TestReportInfo:
     def test_itemreport_reportinfo(self, testdir, linecomp):
         testdir.makeconftest("""
-            import py
-            class MyFunction(py.test.collect.Function):
+            import pytest
+            class MyFunction(pytest.Function):
                 def reportinfo(self):
                     return "ABCDE", 42, "custom"
             def pytest_pycollect_makeitem(collector, name, obj):

--- a/testing/acceptance_test.py
+++ b/testing/acceptance_test.py
@@ -24,7 +24,6 @@ class TestGeneralUsage:
                 parser.addoption("--xyz", dest="xyz", action="store")
         """)
         testdir.makepyfile(test_one="""
-            import py
             def test_option(pytestconfig):
                 assert pytestconfig.option.xyz == "123"
         """)
@@ -37,7 +36,6 @@ class TestGeneralUsage:
     def test_basetemp(self, testdir):
         mytemp = testdir.tmpdir.mkdir("mytemp")
         p = testdir.makepyfile("""
-            import py
             def test_1(pytestconfig):
                 pytestconfig.getbasetemp().ensure("hello")
         """)
@@ -86,9 +84,9 @@ class TestGeneralUsage:
     def test_early_skip(self, testdir):
         testdir.mkdir("xyz")
         testdir.makeconftest("""
-            import py
+            import pytest
             def pytest_collect_directory():
-                py.test.skip("early")
+                pytest.skip("early")
         """)
         result = testdir.runpytest()
         assert result.ret == 0
@@ -98,8 +96,8 @@ class TestGeneralUsage:
 
     def test_issue88_initial_file_multinodes(self, testdir):
         testdir.makeconftest("""
-            import py
-            class MyFile(py.test.collect.File):
+            import pytest
+            class MyFile(pytest.File):
                 def collect(self):
                     return
             def pytest_collect_file(path, parent):
@@ -163,9 +161,9 @@ class TestGeneralUsage:
 
     def test_directory_skipped(self, testdir):
         testdir.makeconftest("""
-            import py
+            import pytest
             def pytest_ignore_collect():
-                py.test.skip("intentional")
+                pytest.skip("intentional")
         """)
         testdir.makepyfile("def test_hello(): pass")
         result = testdir.runpytest()
@@ -176,11 +174,11 @@ class TestGeneralUsage:
 
     def test_multiple_items_per_collector_byid(self, testdir):
         c = testdir.makeconftest("""
-            import py
-            class MyItem(py.test.collect.Item):
+            import pytest
+            class MyItem(pytest.Item):
                 def runtest(self):
                     pass
-            class MyCollector(py.test.collect.File):
+            class MyCollector(pytest.File):
                 def collect(self):
                     return [MyItem(name="xyz", parent=self)]
             def pytest_collect_file(path, parent):
@@ -195,13 +193,13 @@ class TestGeneralUsage:
 
     def test_skip_on_generated_funcarg_id(self, testdir):
         testdir.makeconftest("""
-            import py
+            import pytest
             def pytest_generate_tests(metafunc):
                 metafunc.addcall({'x': 3}, id='hello-123')
             def pytest_runtest_setup(item):
                 print (item.keywords)
                 if 'hello-123' in item.keywords:
-                    py.test.skip("hello")
+                    pytest.skip("hello")
                 assert 0
         """)
         p = testdir.makepyfile("""def test_func(x): pass""")
@@ -233,23 +231,37 @@ class TestGeneralUsage:
 class TestInvocationVariants:
     def test_earlyinit(self, testdir):
         p = testdir.makepyfile("""
-            import py
-            assert hasattr(py.test, 'mark')
+            import pytest
+            assert hasattr(pytest, 'mark')
         """)
         result = testdir.runpython(p)
         assert result.ret == 0
 
     def test_pydoc(self, testdir):
-        result = testdir.runpython_c("import py;help(py.test)")
+        for name in ('py.test', 'pytest'):
+            result = testdir.runpython_c("import %s;help(%s)" % (name,name))
+            assert result.ret == 0
+            s = result.stdout.str()
+            assert 'MarkGenerator' in s
+
+    @pytest.mark.multi(source=['py.test', 'pytest'])
+    def test_import_star(self, testdir, source):
+        p = testdir.makepyfile("""
+            from %s import *
+            collect
+            cmdline
+            main
+            skip
+            xfail
+        """ % source)
+        result = testdir.runpython(p)
         assert result.ret == 0
-        s = result.stdout.str()
-        assert 'MarkGenerator' in s
 
     def test_double_pytestcmdline(self, testdir):
         p = testdir.makepyfile(run="""
-            import py
-            py.test.cmdline.main()
-            py.test.cmdline.main()
+            import py, pytest
+            pytest.main()
+            pytest.main()
         """)
         testdir.makepyfile("""
             def test_hello():
@@ -343,7 +355,6 @@ class TestInvocationVariants:
     def test_noclass_discovery_if_not_testcase(self, testdir):
         testpath = testdir.makepyfile("""
             import unittest
-            import py
             class TestHello(object):
                 def test_hello(self):
                     assert self.attr

--- a/testing/plugin/test_session.py
+++ b/testing/plugin/test_session.py
@@ -1,4 +1,4 @@
-import py
+import pytest, py
 
 class SessionTests:
     def test_basic_testitem_events(self, testdir):
@@ -26,7 +26,7 @@ class SessionTests:
         colstarted = reprec.getcalls("pytest_collectstart")
         assert len(colstarted) == 1 + 1
         col = colstarted[1].collector
-        assert isinstance(col, py.test.collect.Module)
+        assert isinstance(col, pytest.Module)
 
     def test_nested_import_error(self, testdir):
         tfile = testdir.makepyfile("""
@@ -94,7 +94,7 @@ class SessionTests:
 
     def test_broken_repr(self, testdir):
         p = testdir.makepyfile("""
-            import py
+            import pytest
             class BrokenRepr1:
                 foo=0
                 def __repr__(self):
@@ -103,7 +103,7 @@ class SessionTests:
             class TestBrokenClass:
                 def test_explicit_bad_repr(self):
                     t = BrokenRepr1()
-                    py.test.raises(Exception, 'repr(t)')
+                    pytest.raises(Exception, 'repr(t)')
 
                 def test_implicit_bad_repr1(self):
                     t = BrokenRepr1()

--- a/pytest/plugin/python.py
+++ b/pytest/plugin/python.py
@@ -142,7 +142,7 @@ class PyobjMixin(object):
             modpath = self.getmodpath()
         return fspath, lineno, modpath
 
-class PyCollectorMixin(PyobjMixin, pytest.collect.Collector):
+class PyCollectorMixin(PyobjMixin, pytest.Collector):
 
     def funcnamefilter(self, name):
         return name.startswith('test')
@@ -203,7 +203,7 @@ class PyCollectorMixin(PyobjMixin, pytes
             l.append(function)
         return l
 
-class Module(pytest.collect.File, PyCollectorMixin):
+class Module(pytest.File, PyCollectorMixin):
     def _getobj(self):
         return self._memoizedcall('_obj', self._importtestmodule)
 
@@ -249,7 +249,7 @@ class Module(pytest.collect.File, PyColl
             else:
                 self.obj.teardown_module()
 
-class Class(PyCollectorMixin, pytest.collect.Collector):
+class Class(PyCollectorMixin, pytest.Collector):
 
     def collect(self):
         return [Instance(name="()", parent=self)]
@@ -266,7 +266,7 @@ class Class(PyCollectorMixin, pytest.col
             teardown_class = getattr(teardown_class, 'im_func', teardown_class)
             teardown_class(self.obj)
 
-class Instance(PyCollectorMixin, pytest.collect.Collector):
+class Instance(PyCollectorMixin, pytest.Collector):
     def _getobj(self):
         return self.parent.obj()
 
@@ -348,7 +348,7 @@ class FuncargLookupErrorRepr(TerminalRep
         tw.line()
         tw.line("%s:%d" % (self.filename, self.firstlineno+1))
 
-class Generator(FunctionMixin, PyCollectorMixin, pytest.collect.Collector):
+class Generator(FunctionMixin, PyCollectorMixin, pytest.Collector):
     def collect(self):
         # test generators are seen as collectors but they also
         # invoke setup/teardown on popular request
@@ -388,7 +388,7 @@ class Generator(FunctionMixin, PyCollect
 #  Test Items
 #
 _dummy = object()
-class Function(FunctionMixin, pytest.collect.Item):
+class Function(FunctionMixin, pytest.Item):
     """ a Function Item is responsible for setting up
         and executing a Python callable test object.
     """
@@ -480,10 +480,10 @@ def fillfuncargs(function):
 def getplugins(node, withpy=False): # might by any node
     plugins = node.config._getmatchingplugins(node.fspath)
     if withpy:
-        mod = node.getparent(pytest.collect.Module)
+        mod = node.getparent(pytest.Module)
         if mod is not None:
             plugins.append(mod.obj)
-        inst = node.getparent(pytest.collect.Instance)
+        inst = node.getparent(pytest.Instance)
         if inst is not None:
             plugins.append(inst.obj)
     return plugins
@@ -573,12 +573,12 @@ class FuncargRequest:
     @property
     def module(self):
         """ module where the test function was collected. """
-        return self._pyfuncitem.getparent(pytest.collect.Module).obj
+        return self._pyfuncitem.getparent(pytest.Module).obj
        
     @property
     def cls(self):
         """ class (can be None) where the test function was collected. """
-        clscol = self._pyfuncitem.getparent(pytest.collect.Class)
+        clscol = self._pyfuncitem.getparent(pytest.Class)
         if clscol:
             return clscol.obj
     @property
@@ -679,7 +679,7 @@ class FuncargRequest:
         if scope == "function":
             return self._pyfuncitem
         elif scope == "module":
-            return self._pyfuncitem.getparent(py.test.collect.Module)
+            return self._pyfuncitem.getparent(pytest.Module)
         elif scope == "session":
             return None
         raise ValueError("unknown finalization scope %r" %(scope,))

--- a/example/assertion/global_testmodule_config/conftest.py
+++ b/example/assertion/global_testmodule_config/conftest.py
@@ -2,9 +2,9 @@ import py
 mydir = py.path.local(__file__).dirpath()
 
 def pytest_runtest_setup(item):
-    if isinstance(item, py.test.collect.Function):
+    if isinstance(item, pytest.Function):
         if not item.fspath.relto(mydir):
             return
-        mod = item.getparent(py.test.collect.Module).obj
+        mod = item.getparent(pytest.Module).obj
         if hasattr(mod, 'hello'):
             py.builtin.print_("mod.hello", mod.hello)

--- a/doc/test/attic.txt
+++ b/doc/test/attic.txt
@@ -60,7 +60,7 @@ modules to determine collectors and item
 Customizing execution of Items and Functions
 ----------------------------------------------------
 
-- ``py.test.collect.Function`` test items control execution
+- ``pytest.Function`` test items control execution
   of a test function through its ``function.runtest()`` method.
   This method is responsible for performing setup and teardown
   ("Test Fixtures") for a test Function.

--- a/pytest/main.py
+++ b/pytest/main.py
@@ -6,6 +6,7 @@ All else is in pytest/plugin.
 import sys, os
 import inspect
 import py
+import pytest
 from pytest import hookspec # the extension point definitions
 
 assert py.__version__.split(".")[:2] >= ['2', '0'], ("installation problem: "
@@ -207,7 +208,7 @@ class PluginManager(object):
     def pytest_plugin_registered(self, plugin):
         dic = self.call_plugin(plugin, "pytest_namespace", {}) or {}
         if dic:
-            self._setns(py.test, dic)
+            self._setns(pytest, dic)
         if hasattr(self, '_config'):
             self.call_plugin(plugin, "pytest_addoption",
                 {'parser': self._config._parser})
@@ -219,16 +220,20 @@ class PluginManager(object):
             if isinstance(value, dict):
                 mod = getattr(obj, name, None)
                 if mod is None:
-                    mod = py.std.types.ModuleType(name)
-                    sys.modules['pytest.%s' % name] = mod
-                    sys.modules['py.test.%s' % name] = mod
+                    modname = "pytest.%s" % name
+                    mod = py.std.types.ModuleType(modname)
+                    sys.modules[modname] = mod
                     mod.__all__ = []
                     setattr(obj, name, mod)
+                #print "setns", mod, value
                 self._setns(mod, value)
             else:
                 #print "setting", name, value, "on", obj
                 setattr(obj, name, value)
                 obj.__all__.append(name)
+                #print "appending", name, "to", obj
+                #pytest.__all__.append(name) # don't show in help(py.test)
+                setattr(pytest, name, value)
 
     def pytest_terminal_summary(self, terminalreporter):
         tw = terminalreporter._tw
@@ -284,6 +289,7 @@ def canonical_importname(name):
     return name
 
 def importplugin(importspec):
+    #print "importing", importspec
     try:
         return __import__(importspec, None, None, '__doc__')
     except ImportError:
@@ -408,6 +414,9 @@ class HookCaller:
 _preinit = [PluginManager(load=True)] # triggers default plugin importing
 
 def main(args=None, plugins=None):
+    """ returned exit code integer, after an in-process testing run
+    with the given command line arguments, preloading an optional list
+    of passed in plugin objects. """
     if args is None:
         args = sys.argv[1:]
     elif isinstance(args, py.path.local):

--- a/testing/test_collection.py
+++ b/testing/test_collection.py
@@ -1,10 +1,10 @@
-import py
+import pytest, py
 
 from pytest.plugin.session import Session
 
 class TestCollector:
     def test_collect_versus_item(self):
-        from pytest.collect import Collector, Item
+        from pytest import Collector, Item
         assert not issubclass(Collector, Item)
         assert not issubclass(Item, Collector)
 
@@ -14,15 +14,15 @@ class TestCollector:
             def test_fail(): assert 0
         """)
         recwarn.clear()
-        assert modcol.Module == py.test.collect.Module
+        assert modcol.Module == pytest.Module
         recwarn.pop(DeprecationWarning)
-        assert modcol.Class == py.test.collect.Class
+        assert modcol.Class == pytest.Class
         recwarn.pop(DeprecationWarning)
-        assert modcol.Item == py.test.collect.Item
+        assert modcol.Item == pytest.Item
         recwarn.pop(DeprecationWarning)
-        assert modcol.File == py.test.collect.File
+        assert modcol.File == pytest.File
         recwarn.pop(DeprecationWarning)
-        assert modcol.Function == py.test.collect.Function
+        assert modcol.Function == pytest.Function
         recwarn.pop(DeprecationWarning)
 
     def test_check_equality(self, testdir):
@@ -31,9 +31,9 @@ class TestCollector:
             def test_fail(): assert 0
         """)
         fn1 = testdir.collect_by_name(modcol, "test_pass")
-        assert isinstance(fn1, py.test.collect.Function)
+        assert isinstance(fn1, pytest.Function)
         fn2 = testdir.collect_by_name(modcol, "test_pass")
-        assert isinstance(fn2, py.test.collect.Function)
+        assert isinstance(fn2, pytest.Function)
 
         assert fn1 == fn2
         assert fn1 != modcol
@@ -42,7 +42,7 @@ class TestCollector:
         assert hash(fn1) == hash(fn2)
 
         fn3 = testdir.collect_by_name(modcol, "test_fail")
-        assert isinstance(fn3, py.test.collect.Function)
+        assert isinstance(fn3, pytest.Function)
         assert not (fn1 == fn3)
         assert fn1 != fn3
 
@@ -63,32 +63,32 @@ class TestCollector:
         fn = testdir.collect_by_name(
             testdir.collect_by_name(cls, "()"), "test_foo")
 
-        parent = fn.getparent(py.test.collect.Module)
+        parent = fn.getparent(pytest.Module)
         assert parent is modcol
 
-        parent = fn.getparent(py.test.collect.Function)
+        parent = fn.getparent(pytest.Function)
         assert parent is fn
 
-        parent = fn.getparent(py.test.collect.Class)
+        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 py
-            class CustomFile(py.test.collect.File):
+            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, py.test.collect.File)
+        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], py.test.collect.File)
+        assert isinstance(nodes[0], pytest.File)
 
 class TestCollectFS:
     def test_ignored_certain_directories(self, testdir):
@@ -158,18 +158,18 @@ class TestPrunetraceback:
             import not_exists
         """)
         testdir.makeconftest("""
-            import py
+            import pytest
             def pytest_collect_file(path, parent):
                 return MyFile(path, parent)
             class MyError(Exception):
                 pass
-            class MyFile(py.test.collect.File):
+            class MyFile(pytest.File):
                 def collect(self):
                     raise MyError()
                 def repr_failure(self, excinfo):
                     if excinfo.errisinstance(MyError):
                         return "hello world"
-                    return py.test.collect.File.repr_failure(self, excinfo)
+                    return pytest.File.repr_failure(self, excinfo)
         """)
 
         result = testdir.runpytest(p)
@@ -184,7 +184,7 @@ class TestPrunetraceback:
             import not_exists
         """)
         testdir.makeconftest("""
-            import py
+            import pytest
             def pytest_make_collect_report(__multicall__):
                 rep = __multicall__.execute()
                 rep.headerlines += ["header1"]
@@ -246,8 +246,8 @@ class TestCustomConftests:
 
     def test_pytest_fs_collect_hooks_are_seen(self, testdir):
         conf = testdir.makeconftest("""
-            import py
-            class MyModule(py.test.collect.Module):
+            import pytest
+            class MyModule(pytest.Module):
                 pass
             def pytest_collect_file(path, parent):
                 if path.ext == ".py":
@@ -265,8 +265,8 @@ class TestCustomConftests:
         sub1 = testdir.mkpydir("sub1")
         sub2 = testdir.mkpydir("sub2")
         conf1 = testdir.makeconftest("""
-            import py
-            class MyModule1(py.test.collect.Module):
+            import pytest
+            class MyModule1(pytest.Module):
                 pass
             def pytest_collect_file(path, parent):
                 if path.ext == ".py":
@@ -274,8 +274,8 @@ class TestCustomConftests:
         """)
         conf1.move(sub1.join(conf1.basename))
         conf2 = testdir.makeconftest("""
-            import py
-            class MyModule2(py.test.collect.Module):
+            import pytest
+            class MyModule2(pytest.Module):
                 pass
             def pytest_collect_file(path, parent):
                 if path.ext == ".py":
@@ -378,11 +378,11 @@ class TestSession:
     def test_collect_custom_nodes_multi_id(self, testdir):
         p = testdir.makepyfile("def test_func(): pass")
         testdir.makeconftest("""
-            import py
-            class SpecialItem(py.test.collect.Item):
+            import pytest
+            class SpecialItem(pytest.Item):
                 def runtest(self):
                     return # ok
-            class SpecialFile(py.test.collect.File):
+            class SpecialFile(pytest.File):
                 def collect(self):
                     return [SpecialItem(name="check", parent=self)]
             def pytest_collect_file(path, parent):
@@ -481,7 +481,7 @@ class Test_getinitialnodes:
         x = tmpdir.ensure("x.py")
         config = testdir.reparseconfig([x])
         col = testdir.getnode(config, x)
-        assert isinstance(col, py.test.collect.Module)
+        assert isinstance(col, pytest.Module)
         assert col.name == 'x.py'
         assert col.parent.name == testdir.tmpdir.basename
         assert col.parent.parent is None
@@ -496,7 +496,7 @@ class Test_getinitialnodes:
         subdir.ensure("__init__.py")
         config = testdir.reparseconfig([x])
         col = testdir.getnode(config, x)
-        assert isinstance(col, py.test.collect.Module)
+        assert isinstance(col, pytest.Module)
         assert col.name == 'subdir/x.py'
         assert col.parent.parent is None
         for col in col.listchain():



More information about the pytest-commit mailing list