import py from py.path import local from py.__.path.common import checker from py.__.path.testing.fscommon import CommonFSTests, setuptestfs class LocalSetup: def setup_class(cls): cls.root = py.test.ensuretemp('TestLocalPath') cls.root.ensure(dir=1) setuptestfs(cls.root) def setup_method(self, method): self.tmpdir = self.root.ensure('tmpdir', dir=1) def teardown_method(self, method): self.tmpdir.remove(rec=1) class TestLocalPath(LocalSetup, CommonFSTests): def test_join_normpath(self): assert self.tmpdir.join(".") == self.tmpdir p = self.tmpdir.join("../%s" % self.tmpdir.basename) assert p == self.tmpdir p = self.tmpdir.join("..//%s/" % self.tmpdir.basename) assert p == self.tmpdir def test_gethash(self): import md5 import sha fn = self.tmpdir.join("testhashfile") fn.write("hello") assert fn.computehash("md5") == md5.md5("hello").hexdigest() assert fn.computehash("sha") == sha.sha("hello").hexdigest() py.test.raises(ValueError, fn.computehash, "asdasd") def test_remove_removes_readonly_file(self): readonly_file = self.tmpdir.join('readonly').ensure() readonly_file.chmod(0) readonly_file.remove() assert not readonly_file.check(exists=1) def test_remove_removes_readonly_dir(self): readonly_dir = self.tmpdir.join('readonlydir').ensure(dir=1) readonly_dir.chmod(0500) readonly_dir.remove() assert not readonly_dir.check(exists=1) def test_remove_removes_dir_and_readonly_file(self): readonly_dir = self.tmpdir.join('readonlydir').ensure(dir=1) readonly_file = readonly_dir.join('readonlyfile').ensure() readonly_file.chmod(0) readonly_dir.remove() assert not readonly_dir.check(exists=1) def test_initialize_curdir(self): assert str(local()) == py.std.os.getcwd() def test_initialize_reldir(self): old = self.root.chdir() try: p = local('samplefile') assert p.check() finally: old.chdir() def test_eq_with_strings(self): path1 = self.root.join('sampledir') path2 = str(path1) assert path1 == path2 assert path2 == path1 path3 = self.root.join('samplefile') assert path3 != path2 assert path2 != path3 def test_dump(self): import tempfile for bin in 0, 1: try: fd, name = tempfile.mkstemp() f = py.std.os.fdopen(fd) except AttributeError: name = tempfile.mktemp() f = open(name, 'w+') try: d = {'answer' : 42} path = local(name) path.dump(d, bin=bin) from cPickle import load dnew = load(f) assert d == dnew finally: f.close() py.std.os.remove(name) def test_setmtime(self): import tempfile import time try: fd, name = tempfile.mkstemp() py.std.os.close(fd) except AttributeError: name = tempfile.mktemp() open(name, 'w').close() try: mtime = int(time.time())-100 path = local(name) assert path.mtime() != mtime path.setmtime(mtime) assert path.mtime() == mtime path.setmtime() assert path.mtime() != mtime finally: py.std.os.remove(name) def test_normpath(self): new1 = self.root.join("/otherdir") new2 = self.root.join("otherdir") assert str(new1) == str(new2) def test_mkdtemp_creation(self): d = local.mkdtemp() try: assert d.check(dir=1) finally: d.remove(rec=1) def test_tmproot(self): d = local.mkdtemp() tmproot = local.get_temproot() try: assert d.check(dir=1) assert d.dirpath() == tmproot finally: d.remove(rec=1) def test_chdir(self): tmpdir = self.tmpdir.realpath() old = local() try: res = tmpdir.chdir() assert str(res) == str(old) assert py.std.os.getcwd() == str(tmpdir) finally: old.chdir() def test_ensure_filepath_withdir(self): tmpdir = self.tmpdir newfile = tmpdir.join('test1','test') newfile.ensure() assert newfile.check(file=1) newfile.write("42") newfile.ensure() assert newfile.read() == "42" def test_ensure_filepath_withoutdir(self): tmpdir = self.tmpdir newfile = tmpdir.join('test1file') t = newfile.ensure() assert t == newfile assert newfile.check(file=1) def test_ensure_dirpath(self): tmpdir = self.tmpdir newfile = tmpdir.join('test1','testfile') t = newfile.ensure(dir=1) assert t == newfile assert newfile.check(dir=1) def test_init_from_path(self): l = local() l2 = local(l) assert l2 is l wc = py.path.svnwc('.') l3 = local(wc) assert l3 is not wc assert l3.strpath == wc.strpath assert not hasattr(l3, 'commit') class TestExecutionOnWindows(LocalSetup): disabled = py.std.sys.platform != 'win32' def test_sysfind(self): x = py.path.local.sysfind('cmd') assert x.check(file=1) assert py.path.local.sysfind('jaksdkasldqwe') is None class TestExecution(LocalSetup): disabled = py.std.sys.platform == 'win32' def test_sysfind(self): x = py.path.local.sysfind('test') assert x.check(file=1) assert py.path.local.sysfind('jaksdkasldqwe') is None def test_sysfind_no_permisson(self): dir = py.test.ensuretemp('sysfind') env = py.std.os.environ oldpath = env['PATH'] try: noperm = dir.ensure('noperm', dir=True) env['PATH'] += ":%s" % (noperm) noperm.chmod(0) assert py.path.local.sysfind('a') is None finally: env['PATH'] = oldpath noperm.chmod(0644) noperm.remove() def test_sysfind_absolute(self): x = py.path.local.sysfind('test') assert x.check(file=1) y = py.path.local.sysfind(str(x)) assert y.check(file=1) assert y == x def test_sysfind_multiple(self): dir = py.test.ensuretemp('sysfind') env = py.std.os.environ oldpath = env['PATH'] try: env['PATH'] += ":%s:%s" % (dir.ensure('a'), dir.join('b')) dir.ensure('b', 'a') checker = lambda x: x.dirpath().basename == 'b' x = py.path.local.sysfind('a', checker=checker) assert x.basename == 'a' assert x.dirpath().basename == 'b' checker = lambda x: None assert py.path.local.sysfind('a', checker=checker) is None finally: env['PATH'] = oldpath #dir.remove() def test_sysexec(self): x = py.path.local.sysfind('ls') out = x.sysexec('-a') for x in py.path.local().listdir(): assert out.find(x.basename) != -1 def test_sysexec_failing(self): x = py.path.local.sysfind('false') py.test.raises(py.process.cmdexec.Error, """ x.sysexec('aksjdkasjd') """) def test_make_numbered_dir(self): root = self.tmpdir root.ensure('base.not_an_int', dir=1) for i in range(10): numdir = local.make_numbered_dir(prefix='base.', rootdir=root, keep=2, lock_timeout=0) assert numdir.check() assert numdir.basename == 'base.%d' %i if i>=1: assert numdir.new(ext=str(i-1)).check() if i>=2: assert numdir.new(ext=str(i-2)).check() if i>=3: assert not numdir.new(ext=str(i-3)).check() def test_locked_make_numbered_dir(self): if py.test.config.option.boxed: py.test.skip("Fails when run as boxed tests") root = self.tmpdir for i in range(10): numdir = local.make_numbered_dir(prefix='base.', rootdir=root, keep=2) assert numdir.check() assert numdir.basename == 'base.%d' %i for j in range(i): assert numdir.new(ext=str(j)).check() def test_error_preservation(self): py.test.raises (EnvironmentError, self.root.join('qwoeqiwe').mtime) py.test.raises (EnvironmentError, self.root.join('qwoeqiwe').read) #def test_parentdirmatch(self): # local.parentdirmatch('std', startmodule=__name__) # # importing tests def test_pyimport(self): obj = self.root.join('execfile.py').pyimport() assert obj.x == 42 assert obj.__name__ == 'execfile' def test_pyimport_execfile_different_name(self): obj = self.root.join('execfile.py').pyimport(modname="0x.y.z") assert obj.x == 42 assert obj.__name__ == '0x.y.z' def test_pyimport_a(self): otherdir = self.root.join('otherdir') mod = otherdir.join('a.py').pyimport() assert mod.result == "got it" assert mod.__name__ == 'otherdir.a' def test_pyimport_b(self): otherdir = self.root.join('otherdir') mod = otherdir.join('b.py').pyimport() assert mod.stuff == "got it" assert mod.__name__ == 'otherdir.b' def test_pyimport_c(self): otherdir = self.root.join('otherdir') mod = otherdir.join('c.py').pyimport() assert mod.value == "got it" def test_pyimport_d(self): otherdir = self.root.join('otherdir') mod = otherdir.join('d.py').pyimport() assert mod.value2 == "got it" def test_pyimport_and_import(self): # XXX maybe a bit of a fragile test ... p = py.test.ensuretemp("pyimport") p.ensure('xxxpackage', '__init__.py') mod1path = p.ensure('xxxpackage', 'module1.py') mod1 = mod1path.pyimport() assert mod1.__name__ == 'xxxpackage.module1' from xxxpackage import module1 assert module1 is mod1 def test_pypkgdir(): datadir = py.test.ensuretemp("pypkgdir") pkg = datadir.ensure('pkg1', dir=1) pkg.ensure("__init__.py") pkg.ensure("subdir/__init__.py") assert pkg.pypkgpath() == pkg assert pkg.join('subdir', '__init__.py').pypkgpath() == pkg def test_homedir(): homedir = py.path.local._gethomedir() assert homedir.check(dir=1) #class XTestLocalPath(TestLocalPath): # def __init__(self): # TestLocalPath.__init__(self) # self.root = local(self.root) # #class XXTestLocalPath(TestLocalPath): # def __init__(self): # TestLocalPath.__init__(self) # self.root = local(self.root)