import py import os, stat, gc from pathat import dir udir = py.path.local.make_numbered_dir(prefix = 'usession-', keep = 3) class TestPathAt: def setup_method(self, meth): self._firstfileno = dir()._fileno def teardown_method(self, meth): count = 10 while self._firstfileno != dir()._fileno: count -= 1 assert count > 0, "a handle was not released" gc.collect() gc.collect() def test_getdir(self): dir() dir("..") dir("/tmp") dir("/usr/bin") py.test.raises(OSError, dir, "x/y/z/does/not/exist") py.test.raises(OSError, dir, "/bin/true") def test_repr(self): assert repr(dir("/usr/bin")) == "" assert repr(dir("/")) == "" def test_repr_dead(self): tmpdir = udir.ensure("tmpdir", dir=1) d = dir(str(tmpdir)) tmpdir.remove() assert repr(d) == "" def test_relto(self): assert dir("/usr/local/bin").relto(dir("/usr")) == "local/bin" assert dir("/usr/local/bin").relto(dir("/")) == "usr/local/bin" assert dir("/usr/bin").relto(dir("/usr/bin")) == "." assert dir("/usr/bin").relto(dir("/usr/local/bin")) == None assert dir("/usr").relto(dir("/usr/local/bin")) == None assert dir("/").relto(dir("/usr/local/bin")) == None assert dir("/").relto(dir("/")) == "." def test_join(self): d = dir("/") d1 = d.join("..").join("usr").join("bin").join("..").join("local") assert repr(d1) == "" udir.ensure("test_join", dir=1) d = dir(str(udir)) assert repr(d.join("test_join")).endswith("/test_join'>") def test_open(self): d = dir(str(udir)) f = d.open("test_open", "w") f.write("hello\n") f.close() assert udir.join("test_open").read() == "hello\n" def test_mkdir(self): d = dir(str(udir)) d.mkdir("test_mkdir") assert udir.join("test_mkdir").check(dir=1) assert repr(d.join("test_mkdir")).endswith("/test_mkdir'>") def test_stat(self): d = dir(str(udir)) d.mkdir("test_stat") st = d.stat("test_stat") assert stat.S_ISDIR(st.st_mode) def test_symlink_lstat(self): d = dir(str(udir)) d.mkdir("test_symlink") d.symlink("test_symlink", "test_second_symlink") assert 'test_symlink' in repr(d.join("test_second_symlink")) st = d.stat("test_second_symlink") assert stat.S_ISDIR(st.st_mode) st = d.lstat("test_second_symlink") assert stat.S_ISLNK(st.st_mode) def test_rename(self): d = dir(str(udir)) d.mkdir("test_rename_1") f = d.join("test_rename_1").open("foo", "w") f.write("bar\n") f.close() d.mkdir("test_rename_2") d.join("test_rename_1").rename("foo", d.join("test_rename_2"), "baz") assert udir.join("test_rename_1/foo").check(exists=0) assert udir.join("test_rename_2/baz").check(exists=1) f = d.open("test_rename_2/baz", "r") data = f.read() f.close() assert data == "bar\n" def test_unlink(self): d = dir(str(udir)) f = d.open("test_unlink", "w") f.write("world\n") f.close() d.unlink("test_unlink") assert udir.join("test_unlink").check(exists=0) def test_rmdir(self): d = dir(str(udir)) d.mkdir("test_rmdir") assert udir.join("test_rmdir").check(exists=1, dir=1) d.rmdir("test_rmdir") assert udir.join("test_rmdir").check(exists=0) def test_readlink(self): d = dir(str(udir)) d.symlink("test_readlink_dummy", "test_readlink") assert d.readlink("test_readlink") == "test_readlink_dummy" def test_link(self): d = dir(str(udir)) f = d.open("test_link", "w") f.write("hi there\n") f.close() d.link("test_link", d, "test_link_2") assert os.path.samestat(d.stat("test_link"), d.stat("test_link_2")) d.mkdir("test_link_3") d.link("test_link_2", d.join("test_link_3"), "link_3") assert os.path.samestat(d.stat("test_link"), d.stat("test_link_3/link_3"))