Skip to content

Commit 3e7cb3d

Browse files
committed
adds case file with class tests
1 parent b4a5151 commit 3e7cb3d

File tree

1 file changed

+228
-0
lines changed

1 file changed

+228
-0
lines changed

upath/tests/cases.py

Lines changed: 228 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,228 @@
1+
from pathlib import Path
2+
3+
import pytest
4+
5+
from upath import UPath
6+
7+
8+
class BaseTests:
9+
10+
def test_cwd(self):
11+
with pytest.raises(NotImplementedError):
12+
self.path.cwd()
13+
14+
def test_home(self):
15+
with pytest.raises(NotImplementedError):
16+
self.path.home()
17+
18+
def test_stat(self):
19+
stat = self.path.stat()
20+
assert stat
21+
22+
def test_chmod(self):
23+
with pytest.raises(NotImplementedError):
24+
self.path.joinpath("file1.txt").chmod(777)
25+
26+
@pytest.mark.parametrize(
27+
"url, expected", [("file1.txt", True), ("fakefile.txt", False)]
28+
)
29+
def test_exists(self, url, expected):
30+
print(self.path)
31+
path = self.path.joinpath(url)
32+
assert path.exists() == expected
33+
34+
def test_expanduser(self):
35+
with pytest.raises(NotImplementedError):
36+
self.path.expanduser()
37+
38+
def test_glob(self, pathlib_base):
39+
mock_glob = list(self.path.glob("**.txt"))
40+
path_glob = list(pathlib_base.glob("**/*.txt"))
41+
42+
assert len(mock_glob) == len(path_glob)
43+
assert all(
44+
map(
45+
lambda m: m.path
46+
in [str(p).replace("\\", "/") for p in path_glob],
47+
mock_glob,
48+
)
49+
)
50+
51+
def test_group(self):
52+
with pytest.raises(NotImplementedError):
53+
self.path.group()
54+
55+
def test_is_dir(self):
56+
assert self.path.is_dir()
57+
58+
path = self.path.joinpath("file1.txt")
59+
assert not path.is_dir()
60+
61+
def test_is_file(self):
62+
path = self.path.joinpath("file1.txt")
63+
assert path.is_file()
64+
assert not self.path.is_file()
65+
66+
def test_is_mount(self):
67+
with pytest.raises(NotImplementedError):
68+
self.path.is_mount()
69+
70+
def test_is_symlink(self):
71+
with pytest.raises(NotImplementedError):
72+
self.path.is_symlink()
73+
74+
def test_is_socket(self):
75+
with pytest.raises(NotImplementedError):
76+
self.path.is_socket()
77+
78+
def test_is_fifo(self):
79+
with pytest.raises(NotImplementedError):
80+
self.path.is_fifo()
81+
82+
def test_is_block_device(self):
83+
with pytest.raises(NotImplementedError):
84+
self.path.is_block_device()
85+
86+
def test_is_char_device(self):
87+
with pytest.raises(NotImplementedError):
88+
self.path.is_char_device()
89+
90+
def test_iterdir(self, local_testdir):
91+
pl_path = Path(local_testdir)
92+
93+
up_iter = list(self.path.iterdir())
94+
pl_iter = list(pl_path.iterdir())
95+
96+
assert len(up_iter) == len(pl_iter)
97+
pnames = [p.name for p in pl_iter]
98+
assert all(map(lambda x: x.name in pnames, up_iter))
99+
100+
def test_lchmod(self):
101+
with pytest.raises(NotImplementedError):
102+
self.path.lchmod(mode=77)
103+
104+
def test_lstat(self):
105+
with pytest.raises(NotImplementedError):
106+
self.path.lstat()
107+
108+
def test_mkdir(self):
109+
new_dir = self.path.joinpath("new_dir")
110+
new_dir.mkdir()
111+
assert new_dir.exists()
112+
113+
def test_open(self):
114+
pass
115+
116+
def test_owner(self):
117+
with pytest.raises(NotImplementedError):
118+
self.path.owner()
119+
120+
def test_read_bytes(self, pathlib_base):
121+
mock = self.path.joinpath("file2.txt")
122+
pl = pathlib_base.joinpath("file2.txt")
123+
assert mock.read_bytes() == pl.read_bytes()
124+
125+
def test_read_text(self, local_testdir):
126+
upath = self.path.joinpath("file1.txt")
127+
assert (
128+
upath.read_text()
129+
== Path(local_testdir).joinpath("file1.txt").read_text()
130+
)
131+
132+
def test_readlink(self):
133+
with pytest.raises(NotImplementedError):
134+
self.path.readlink()
135+
136+
@pytest.mark.xfail
137+
def test_rename(self):
138+
# need to impliment
139+
raise False
140+
141+
def test_replace(self):
142+
pass
143+
144+
def test_resolve(self):
145+
pass
146+
147+
def test_rglob(self):
148+
pass
149+
150+
def test_samefile(self):
151+
pass
152+
153+
def test_symlink_to(self):
154+
pass
155+
156+
def test_touch_unlink(self):
157+
path = self.path.joinpath("test_touch.txt")
158+
path.touch()
159+
assert path.exists()
160+
path.unlink()
161+
assert not path.exists()
162+
163+
# should raise FileNotFoundError since file is missing
164+
with pytest.raises(FileNotFoundError):
165+
path.unlink()
166+
167+
# file doesn't exists, but missing_ok is True
168+
path.unlink(missing_ok=True)
169+
170+
def test_link_to(self):
171+
pass
172+
173+
def test_write_bytes(self, pathlib_base):
174+
fn = "test_write_bytes.txt"
175+
s = b"hello_world"
176+
path = self.path.joinpath(fn)
177+
path.write_bytes(s)
178+
assert path.read_bytes() == s
179+
180+
def test_write_text(self, pathlib_base):
181+
fn = "test_write_text.txt"
182+
s = "hello_world"
183+
path = self.path.joinpath(fn)
184+
path.write_text(s)
185+
assert path.read_text() == s
186+
187+
def prepare_file_system(self):
188+
self.make_top_folder()
189+
self.make_test_files()
190+
191+
def make_top_folder(self):
192+
self.path.mkdir(parents=True, exist_ok=True)
193+
194+
def make_test_files(self):
195+
folder1 = self.path.joinpath("folder1")
196+
folder1.mkdir(exist_ok=True)
197+
folder1_files = ["file1.txt", "file2.txt"]
198+
for f in folder1_files:
199+
p = folder1.joinpath(f)
200+
p.touch()
201+
p.write_text(f)
202+
203+
file1 = self.path.joinpath("file1.txt")
204+
file1.touch()
205+
file1.write_text("hello world")
206+
file2 = self.path.joinpath("file2.txt")
207+
file2.touch()
208+
file2.write_bytes(b"hello world")
209+
210+
def test_fsspec_compat(self):
211+
fs = self.path.fs
212+
scheme = self.path._url.scheme
213+
content = b"a,b,c\n1,2,3\n4,5,6"
214+
215+
p1 = f"{scheme}:///tmp/output1.csv"
216+
upath1 = UPath(p1)
217+
upath1.write_bytes(content)
218+
with fs.open(p1) as f:
219+
assert f.read() == content
220+
upath1.unlink()
221+
222+
# write with fsspec, read with upath
223+
p2 = f"{scheme}:///tmp/output2.csv"
224+
with fs.open(p2, "wb") as f:
225+
f.write(content)
226+
upath2 = UPath(p2)
227+
assert upath2.read_bytes() == content
228+
upath2.unlink()

0 commit comments

Comments
 (0)