Coverage for tests\test_pathier.py: 100%
210 statements
« prev ^ index » next coverage.py v7.2.2, created at 2024-02-16 14:54 -0600
« prev ^ index » next coverage.py v7.2.2, created at 2024-02-16 14:54 -0600
1import os
2import sys
3import time
4from datetime import datetime
5from typing import Any
7import pytest
9from pathier.pathier import Pathier
11root = Pathier(__file__).parent
12dummy_obj = {"str": "yeet", "int": 44, "list": [1, 2, 3, 4, 5], "path": root}
15def assert_dummy(obj: Any):
16 assert obj["str"] == "yeet"
17 assert obj["int"] == 44
18 assert obj["list"] == [1, 2, 3, 4, 5]
19 assert str(obj["path"]).endswith(
20 f"{root.parent.stem}/{root.stem}"
21 ) # "pathier/tests"
24def test__pathier__is_this_thing_on():
25 path = Pathier("dummy.json")
28def test__str():
29 path = Pathier("a/windows/test/path", convert_backslashes=False)
30 assert str(path) == "a\\windows\\test\\path"
31 path = Pathier("a/windows/test/path")
32 assert str(path) == "a/windows/test/path"
35def test__pathier__json_loads():
36 path = root / "dummy.json"
37 obj = path.json_loads()
38 assert_dummy(obj)
41def test__pathier__toml_loads():
42 path = root / "dummy.toml"
43 obj = path.toml_loads()
44 assert_dummy(obj)
47def test__pathier__loads():
48 for file in ["dummy.json", "dummy.toml"]:
49 path = root / file
50 obj = path.loads()
51 assert_dummy(obj)
54def test__pathier__json_dumps():
55 path = root / "dummy" / "dummy.json"
56 path.json_dumps(dummy_obj, indent=2)
57 obj = path.loads()
58 assert_dummy(obj)
61def test__pathier__toml_dumps():
62 path = root / "dummy" / "dummy.toml"
63 path.toml_dumps(dummy_obj)
64 obj = path.loads()
65 assert_dummy(obj)
68def test__pickle_dumps():
69 for name in ["dummy.pickle", "dummy.pkl"]:
70 path = root / "dummy" / name
71 path.pickle_dumps(dummy_obj)
72 assert path.exists()
73 path.delete()
74 assert not path.exists()
75 path.dumps(dummy_obj)
76 assert path.exists()
79def test__pickle_loads():
80 for name in ["dummy.pickle", "dummy.pkl"]:
81 path = root / "dummy" / name
82 obj = path.pickle_loads()
83 assert obj == dummy_obj
86def test__pathier__dumps():
87 base = root / "dummy" / "dummier"
88 for file in ["dummy.json", "dummy.toml"]:
89 path = base / file
90 path.dumps(dummy_obj, indent=2)
91 obj = path.loads()
92 assert_dummy(obj)
95def test__pathier__copy():
96 path = root / "dummy"
97 new_path = path.copy(path / "dummy2")
98 obj = (new_path / "dummy.toml").loads()
99 assert_dummy(obj)
100 obj["str"] = "not yeet"
101 (new_path / "dummy.toml").dumps(obj)
102 new_path.copy(path / "dummy.toml")
103 obj = (path / "dummy.toml").loads()
104 # Will fail if overwrite protection didn't work
105 assert_dummy(obj)
108def test__pathier__delete():
109 path = root / "dummy"
110 path.delete()
111 assert not path.exists()
114def test__pathier__moveup():
115 assert root.moveup("pathier").stem == "pathier"
118def test__pathier__sub():
119 assert (root - 1).stem == "pathier"
122def test__pathier__touch():
123 path = root / "nested" / "touch" / "test" / "folder" / "yeet.txt"
124 assert not path.exists()
125 path.touch()
126 assert path.exists
127 path.moveup("nested").delete()
130def test__size():
131 assert (root / "test_pathier.py").size > 0
132 assert root.size > 0
135def test__format_size():
136 assert Pathier.format_bytes(1234) == "1.23 kb"
139def test__formatted_size():
140 path = Pathier(__file__)
141 assert path.formatted_size == path.format_bytes(path.size)
144def test__age():
145 if root.age:
146 assert root.age > 0
147 assert (root / "yeet").age is None
150def test__dob():
151 assert root.dob is not None
152 assert (root / "yeet").dob is None
155def test__mod_date():
156 assert root.mod_date is not None
157 assert (root / "yeet").mod_date is None
160def test__mod_delta():
161 assert root.mod_delta is not None
162 assert (root / "yeet").mod_date is None
165def test__is_larger():
166 assert (root / "dummy.json").is_larger(root / "blank.txt")
169def test__is_older():
170 assert (root / "dummy.json").is_older(root / "blank.txt")
173def test__modified_more_recently():
174 assert (root / "test_pathier.py").modified_more_recently(root / "blank.txt")
177def test__move_under():
178 path = Pathier("a/b/c/d/e")
179 assert path.move_under("b") == Pathier("a/b/c")
180 assert path.move_under("d") == path
181 assert path.move_under("a") == Pathier("a/b")
184def test__separate():
185 path = Pathier("a/b/c/d/e")
186 assert path.separate("c") == Pathier("d/e")
187 assert path.separate("c", True) == Pathier("c/d/e")
190def test__mkcwd():
191 og_cwd = Pathier.cwd()
192 os.chdir(root)
193 cwd = Pathier.cwd()
194 path = (root - 1) / "src" / "pathier"
195 path.mkcwd()
196 assert Pathier.cwd() != cwd
197 assert Pathier.cwd() == path
198 os.chdir(og_cwd)
201def test__add_to_PATH():
202 path = str(root)
204 assert path not in sys.path
205 assert not root.in_PATH
207 root.add_to_PATH()
208 assert sys.path[0] == path
209 assert root.in_PATH
211 root.add_to_PATH(1)
212 assert sys.path[1] != path
214 root.remove_from_PATH()
215 assert path not in sys.path
216 assert not root.in_PATH
218 root.add_to_PATH(1)
219 assert sys.path[1] == path
220 assert root.in_PATH
222 root.append_to_PATH()
223 assert sys.path[-1] != path
225 root.remove_from_PATH()
226 root.append_to_PATH()
227 assert sys.path[-1] == path
228 assert root.in_PATH
229 root.remove_from_PATH()
232def test__backup():
233 path = root / "dummy.dummy"
234 ret_val = path.backup()
235 assert ret_val is None
236 path = root / "dummy.toml"
237 ret_val = path.backup()
238 assert ret_val
239 assert ret_val.exists()
240 ret_val.delete()
241 ret_val = path.backup(True)
242 assert ret_val
243 assert ret_val.exists()
244 ret_val.delete()
247def test__execute():
248 test_path = root / "test_pathier.py"
249 # Don't want to execute pytest infinitely
250 # Also counts as testing `replace` I guess
251 test_path.replace_strings([("test__execute", "execute")], 1)
252 root.execute("pytest -s")
253 test_path.replace_strings([("execute()", "test__execute()")], 1)
256def test__append():
257 appender = root / "appender.txt"
258 appender.append("1")
259 assert appender.read_text().splitlines() == ["1"]
260 appender.append("2")
261 assert appender.read_text().splitlines() == ["1", "2"]
262 appender.append("3", False)
263 appender.append("4")
264 assert appender.read_text().splitlines() == ["1", "2", "34"]
265 appender.delete()
268def test__split():
269 file = root / "join_split.txt"
270 data = [str(n) for n in range(10)]
271 file.join(data)
272 assert file.split() == data
273 file.delete()
276def test__read_tracking():
277 file = root / "tracker.txt"
278 file.write_text("tracking\n")
279 time.sleep(2)
280 assert not file.last_read_time
281 file.read_text()
282 assert file.last_read_time
283 time.sleep(0.1)
284 assert datetime.now() > file.last_read_time
285 assert not file.modified_since_last_read
286 last_read_time = file.last_read_time
287 file.write_text("tracking\n")
288 time.sleep(2)
289 assert file.modified_since_last_read
290 assert file.last_read_time == last_read_time
291 if file.modified_since_last_read:
292 file.read_text()
293 assert file.last_read_time != last_read_time
294 assert not file.modified_since_last_read
295 file.delete()