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"))