actually look into all non-dot subdirs for conftest.py files - recursive walk would be too heavy for large source trees but first-level subdirs are fine IMO. Note that prior to py.test 1.0 doing this "look-ahead" was not easily doable because it was hard to avoid global state in conftest.py, this is not true anymore - so i feel ok telling people to cleanup their conftest files if they get problems (you can imagine people doing all kinds of things at global conftest.py module scope, can't you?)
--HG-- branch : trunk
This commit is contained in:
		
							parent
							
								
									105ed6dcaa
								
							
						
					
					
						commit
						d163d92b33
					
				| 
						 | 
					@ -15,9 +15,9 @@ Changes between 1.2.1 and 1.2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- display a short and concise traceback if a funcarg lookup fails 
 | 
					- display a short and concise traceback if a funcarg lookup fails 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- early-load "test*/conftest.py" files, i.e. conftest.py files in
 | 
					- early-load "conftest.py" files in non-dot first-level sub directories. 
 | 
				
			||||||
  directories starting with 'test'.  allows to conveniently keep and access
 | 
					  allows to conveniently keep and access test-related options without 
 | 
				
			||||||
  test-related options without having to put a conftest.py into the package root dir.
 | 
					  having to put a conftest.py into the package root dir.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- fix issue67: new super-short traceback-printing option: "--tb=line" will print a single line for each failing (python) test indicating its filename, lineno and the failure value
 | 
					- fix issue67: new super-short traceback-printing option: "--tb=line" will print a single line for each failing (python) test indicating its filename, lineno and the failure value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,7 +41,7 @@ class Conftest(object):
 | 
				
			||||||
                self._path2confmods[None] = self.getconftestmodules(anchor)
 | 
					                self._path2confmods[None] = self.getconftestmodules(anchor)
 | 
				
			||||||
                # let's also consider test* dirs 
 | 
					                # let's also consider test* dirs 
 | 
				
			||||||
                if anchor.check(dir=1):
 | 
					                if anchor.check(dir=1):
 | 
				
			||||||
                    for x in anchor.listdir("test*"):
 | 
					                    for x in anchor.listdir(lambda x: x.check(dir=1, dotfile=0)):
 | 
				
			||||||
                        self.getconftestmodules(x)
 | 
					                        self.getconftestmodules(x)
 | 
				
			||||||
                break
 | 
					                break
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,7 +32,7 @@ class TestConftestValueAccessGlobal:
 | 
				
			||||||
        l = []
 | 
					        l = []
 | 
				
			||||||
        conftest = Conftest(onimport=l.append)
 | 
					        conftest = Conftest(onimport=l.append)
 | 
				
			||||||
        conftest.setinitial([basedir.join("adir")])
 | 
					        conftest.setinitial([basedir.join("adir")])
 | 
				
			||||||
        assert len(l) == 1 
 | 
					        assert len(l) == 2 
 | 
				
			||||||
        assert conftest.rget("a") == 1
 | 
					        assert conftest.rget("a") == 1
 | 
				
			||||||
        assert conftest.rget("b", basedir.join("adir", "b")) == 2
 | 
					        assert conftest.rget("b", basedir.join("adir", "b")) == 2
 | 
				
			||||||
        assert len(l) == 2
 | 
					        assert len(l) == 2
 | 
				
			||||||
| 
						 | 
					@ -133,18 +133,15 @@ def test_setinitial_confcut(testdir):
 | 
				
			||||||
        assert conftest.getconftestmodules(sub) == []
 | 
					        assert conftest.getconftestmodules(sub) == []
 | 
				
			||||||
        assert conftest.getconftestmodules(conf.dirpath()) == []
 | 
					        assert conftest.getconftestmodules(conf.dirpath()) == []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_setinitial_not_considers_conftest_in_non_test_dirs(testdir):
 | 
					@py.test.mark.multi(name='test tests whatever .dotdir'.split())
 | 
				
			||||||
    sub = testdir.mkdir("sub")
 | 
					def test_setinitial_conftest_subdirs(testdir, name):
 | 
				
			||||||
    sub.ensure("conftest.py")
 | 
					 | 
				
			||||||
    conftest = Conftest()
 | 
					 | 
				
			||||||
    conftest.setinitial([sub.dirpath()])
 | 
					 | 
				
			||||||
    assert not conftest._conftestpath2mod
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@py.test.mark.multi(name='test tests testing'.split())
 | 
					 | 
				
			||||||
def test_setinitial_considers_conftest_in_test_dirs(testdir, name):
 | 
					 | 
				
			||||||
    sub = testdir.mkdir(name)
 | 
					    sub = testdir.mkdir(name)
 | 
				
			||||||
    subconftest = sub.ensure("conftest.py")
 | 
					    subconftest = sub.ensure("conftest.py")
 | 
				
			||||||
    conftest = Conftest()
 | 
					    conftest = Conftest()
 | 
				
			||||||
    conftest.setinitial([sub.dirpath()])
 | 
					    conftest.setinitial([sub.dirpath()])
 | 
				
			||||||
    assert  subconftest in conftest._conftestpath2mod
 | 
					    if name != ".dotdir":
 | 
				
			||||||
    assert len(conftest._conftestpath2mod) == 1
 | 
					        assert  subconftest in conftest._conftestpath2mod
 | 
				
			||||||
 | 
					        assert len(conftest._conftestpath2mod) == 1
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        assert  subconftest not in conftest._conftestpath2mod
 | 
				
			||||||
 | 
					        assert len(conftest._conftestpath2mod) == 0
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,15 +24,6 @@ class Test_genitems:
 | 
				
			||||||
        p = testdir.makepyfile(conftest="raise SyntaxError\n")
 | 
					        p = testdir.makepyfile(conftest="raise SyntaxError\n")
 | 
				
			||||||
        py.test.raises(SyntaxError, testdir.inline_genitems, p.dirpath())
 | 
					        py.test.raises(SyntaxError, testdir.inline_genitems, p.dirpath())
 | 
				
			||||||
       
 | 
					       
 | 
				
			||||||
    def test_subdir_conftest_error(self, testdir):
 | 
					 | 
				
			||||||
        tmp = testdir.tmpdir
 | 
					 | 
				
			||||||
        tmp.ensure("sub", "conftest.py").write("raise SyntaxError('x')\n")
 | 
					 | 
				
			||||||
        items, reprec = testdir.inline_genitems(tmp)
 | 
					 | 
				
			||||||
        collectionfailures = reprec.getfailedcollections()
 | 
					 | 
				
			||||||
        assert len(collectionfailures) == 1
 | 
					 | 
				
			||||||
        ev = collectionfailures[0] 
 | 
					 | 
				
			||||||
        assert "SyntaxError: x" in ev.longrepr.reprcrash.message
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def test_example_items1(self, testdir):
 | 
					    def test_example_items1(self, testdir):
 | 
				
			||||||
        p = testdir.makepyfile('''
 | 
					        p = testdir.makepyfile('''
 | 
				
			||||||
            def testone():
 | 
					            def testone():
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue