183 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Python
		
	
	
	
| import sys
 | |
| import py
 | |
| import pytest
 | |
| 
 | |
| from _pytest.tmpdir import tmpdir
 | |
| 
 | |
| def test_funcarg(testdir):
 | |
|     testdir.makepyfile("""
 | |
|             def pytest_generate_tests(metafunc):
 | |
|                 metafunc.addcall(id='a')
 | |
|                 metafunc.addcall(id='b')
 | |
|             def test_func(tmpdir): pass
 | |
|     """)
 | |
|     from _pytest.tmpdir import TempdirFactory
 | |
|     reprec = testdir.inline_run()
 | |
|     calls = reprec.getcalls("pytest_runtest_setup")
 | |
|     item = calls[0].item
 | |
|     config = item.config
 | |
|     tmpdirhandler = TempdirFactory(config)
 | |
|     item._initrequest()
 | |
|     p = tmpdir(item._request, tmpdirhandler)
 | |
|     assert p.check()
 | |
|     bn = p.basename.strip("0123456789")
 | |
|     assert bn.endswith("test_func_a_")
 | |
|     item.name = "qwe/\\abc"
 | |
|     p = tmpdir(item._request, tmpdirhandler)
 | |
|     assert p.check()
 | |
|     bn = p.basename.strip("0123456789")
 | |
|     assert bn == "qwe__abc"
 | |
| 
 | |
| def test_ensuretemp(recwarn):
 | |
|     #pytest.deprecated_call(pytest.ensuretemp, 'hello')
 | |
|     d1 = pytest.ensuretemp('hello')
 | |
|     d2 = pytest.ensuretemp('hello')
 | |
|     assert d1 == d2
 | |
|     assert d1.check(dir=1)
 | |
| 
 | |
| class TestTempdirHandler:
 | |
|     def test_mktemp(self, testdir):
 | |
|         from _pytest.tmpdir import TempdirFactory
 | |
|         config = testdir.parseconfig()
 | |
|         config.option.basetemp = testdir.mkdir("hello")
 | |
|         t = TempdirFactory(config)
 | |
|         tmp = t.mktemp("world")
 | |
|         assert tmp.relto(t.getbasetemp()) == "world0"
 | |
|         tmp = t.mktemp("this")
 | |
|         assert tmp.relto(t.getbasetemp()).startswith("this")
 | |
|         tmp2 = t.mktemp("this")
 | |
|         assert tmp2.relto(t.getbasetemp()).startswith("this")
 | |
|         assert tmp2 != tmp
 | |
| 
 | |
| class TestConfigTmpdir:
 | |
|     def test_getbasetemp_custom_removes_old(self, testdir):
 | |
|         mytemp = testdir.tmpdir.join("xyz")
 | |
|         p = testdir.makepyfile("""
 | |
|             def test_1(tmpdir):
 | |
|                 pass
 | |
|         """)
 | |
|         testdir.runpytest(p, '--basetemp=%s' % mytemp)
 | |
|         mytemp.check()
 | |
|         mytemp.ensure("hello")
 | |
| 
 | |
|         testdir.runpytest(p, '--basetemp=%s' % mytemp)
 | |
|         mytemp.check()
 | |
|         assert not mytemp.join("hello").check()
 | |
| 
 | |
| 
 | |
| def test_basetemp(testdir):
 | |
|     mytemp = testdir.tmpdir.mkdir("mytemp")
 | |
|     p = testdir.makepyfile("""
 | |
|         import pytest
 | |
|         def test_1():
 | |
|             pytest.ensuretemp("hello")
 | |
|     """)
 | |
|     result = testdir.runpytest(p, '--basetemp=%s' % mytemp)
 | |
|     assert result.ret == 0
 | |
|     assert mytemp.join('hello').check()
 | |
| 
 | |
| @pytest.mark.skipif(not hasattr(py.path.local, 'mksymlinkto'),
 | |
|                     reason="symlink not available on this platform")
 | |
| def test_tmpdir_always_is_realpath(testdir):
 | |
|     # the reason why tmpdir should be a realpath is that
 | |
|     # when you cd to it and do "os.getcwd()" you will anyway
 | |
|     # get the realpath.  Using the symlinked path can thus
 | |
|     # easily result in path-inequality
 | |
|     # XXX if that proves to be a problem, consider using
 | |
|     # os.environ["PWD"]
 | |
|     realtemp = testdir.tmpdir.mkdir("myrealtemp")
 | |
|     linktemp = testdir.tmpdir.join("symlinktemp")
 | |
|     linktemp.mksymlinkto(realtemp)
 | |
|     p = testdir.makepyfile("""
 | |
|         def test_1(tmpdir):
 | |
|             import os
 | |
|             assert os.path.realpath(str(tmpdir)) == str(tmpdir)
 | |
|     """)
 | |
|     result = testdir.runpytest("-s", p, '--basetemp=%s/bt' % linktemp)
 | |
|     assert not result.ret
 | |
| 
 | |
| 
 | |
| def test_tmpdir_too_long_on_parametrization(testdir):
 | |
|     testdir.makepyfile("""
 | |
|         import pytest
 | |
|         @pytest.mark.parametrize("arg", ["1"*1000])
 | |
|         def test_some(arg, tmpdir):
 | |
|             tmpdir.ensure("hello")
 | |
|     """)
 | |
|     reprec = testdir.inline_run()
 | |
|     reprec.assertoutcome(passed=1)
 | |
| 
 | |
| 
 | |
| def test_tmpdir_factory(testdir):
 | |
|     testdir.makepyfile("""
 | |
|         import pytest
 | |
|         @pytest.fixture(scope='session')
 | |
|         def session_dir(tmpdir_factory):
 | |
|             return tmpdir_factory.mktemp('data', numbered=False)
 | |
|         def test_some(session_dir):
 | |
|             session_dir.isdir()
 | |
|     """)
 | |
|     reprec = testdir.inline_run()
 | |
|     reprec.assertoutcome(passed=1)
 | |
| 
 | |
| 
 | |
| def test_tmpdir_fallback_tox_env(testdir, monkeypatch):
 | |
|     """Test that tmpdir works even if environment variables required by getpass
 | |
|     module are missing (#1010).
 | |
|     """
 | |
|     monkeypatch.delenv('USER', raising=False)
 | |
|     monkeypatch.delenv('USERNAME', raising=False)
 | |
|     testdir.makepyfile("""
 | |
|         import pytest
 | |
|         def test_some(tmpdir):
 | |
|             assert tmpdir.isdir()
 | |
|     """)
 | |
|     reprec = testdir.inline_run()
 | |
|     reprec.assertoutcome(passed=1)
 | |
| 
 | |
| 
 | |
| @pytest.mark.skipif(sys.platform.startswith('win'), reason='no os.getuid on windows')
 | |
| def test_tmpdir_fallback_uid_not_found(testdir, monkeypatch):
 | |
|     """Test that tmpdir works even if the current process's user id does not
 | |
|     correspond to a valid user.
 | |
|     """
 | |
|     import os
 | |
|     monkeypatch.setattr(os, 'getuid', lambda: -1)
 | |
|     monkeypatch.delenv('USER', raising=False)
 | |
|     monkeypatch.delenv('USERNAME', raising=False)
 | |
| 
 | |
|     testdir.makepyfile("""
 | |
|         import pytest
 | |
|         def test_some(tmpdir):
 | |
|             assert tmpdir.isdir()
 | |
|     """)
 | |
|     reprec = testdir.inline_run()
 | |
|     reprec.assertoutcome(passed=1)
 | |
| 
 | |
| 
 | |
| @pytest.mark.skipif(sys.platform.startswith('win'), reason='no os.getuid on windows')
 | |
| def test_get_user_uid_not_found(monkeypatch):
 | |
|     """Test that get_user() function works even if the current process's
 | |
|     user id does not correspond to a valid user (e.g. running pytest in a
 | |
|     Docker container with 'docker run -u'.
 | |
|     """
 | |
|     import os
 | |
|     monkeypatch.setattr(os, 'getuid', lambda: -1)
 | |
|     monkeypatch.delenv('USER', raising=False)
 | |
|     monkeypatch.delenv('USERNAME', raising=False)
 | |
| 
 | |
|     from _pytest.tmpdir import get_user
 | |
|     assert get_user() is None
 | |
| 
 | |
| 
 | |
| @pytest.mark.skipif(not sys.platform.startswith('win'), reason='win only')
 | |
| def test_get_user(monkeypatch):
 | |
|     """Test that get_user() function works even if environment variables
 | |
|     required by getpass module are missing from the environment on Windows
 | |
|     (#1010).
 | |
|     """
 | |
|     from _pytest.tmpdir import get_user
 | |
|     monkeypatch.delenv('USER', raising=False)
 | |
|     monkeypatch.delenv('USERNAME', raising=False)
 | |
|     assert get_user() is None
 |