Coverage for tests\test_pathier.py: 100%
209 statements
« prev ^ index » next coverage.py v7.2.2, created at 2024-01-15 15:38 -0600
« prev ^ index » next coverage.py v7.2.2, created at 2024-01-15 15:38 -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]}
15def assert_dummy(obj: Any):
16 assert obj["str"] == "yeet"
17 assert obj["int"] == 44
18 assert obj["list"] == [1, 2, 3, 4, 5]
21def test__pathier__is_this_thing_on():
22 path = Pathier("dummy.json")
25def test__str():
26 path = Pathier("a/windows/test/path", convert_backslashes=False)
27 assert str(path) == "a\\windows\\test\\path"
28 path = Pathier("a/windows/test/path")
29 assert str(path) == "a/windows/test/path"
32def test__pathier__json_loads():
33 path = root / "dummy.json"
34 obj = path.json_loads()
35 assert_dummy(obj)
38def test__pathier__toml_loads():
39 path = root / "dummy.toml"
40 obj = path.toml_loads()
41 assert_dummy(obj)
44def test__pathier__loads():
45 for file in ["dummy.json", "dummy.toml"]:
46 path = root / file
47 obj = path.loads()
48 assert_dummy(obj)
51def test__pathier__json_dumps():
52 path = root / "dummy" / "dummy.json"
53 path.json_dumps(dummy_obj, indent=2)
54 obj = path.loads()
55 assert_dummy(obj)
58def test__pathier__toml_dumps():
59 path = root / "dummy" / "dummy.toml"
60 path.toml_dumps(dummy_obj)
61 obj = path.loads()
62 assert_dummy(obj)
65def test__pickle_dumps():
66 for name in ["dummy.pickle", "dummy.pkl"]:
67 path = root / "dummy" / name
68 path.pickle_dumps(dummy_obj)
69 assert path.exists()
70 path.delete()
71 assert not path.exists()
72 path.dumps(dummy_obj)
73 assert path.exists()
76def test__pickle_loads():
77 for name in ["dummy.pickle", "dummy.pkl"]:
78 path = root / "dummy" / name
79 obj = path.pickle_loads()
80 assert obj == dummy_obj
83def test__pathier__dumps():
84 base = root / "dummy" / "dummier"
85 for file in ["dummy.json", "dummy.toml"]:
86 path = base / file
87 path.dumps(dummy_obj, indent=2)
88 obj = path.loads()
89 assert_dummy(obj)
92def test__pathier__copy():
93 path = root / "dummy"
94 new_path = path.copy(path / "dummy2")
95 obj = (new_path / "dummy.toml").loads()
96 assert_dummy(obj)
97 obj["str"] = "not yeet"
98 (new_path / "dummy.toml").dumps(obj)
99 new_path.copy(path / "dummy.toml")
100 obj = (path / "dummy.toml").loads()
101 # Will fail if overwrite protection didn't work
102 assert_dummy(obj)
105def test__pathier__delete():
106 path = root / "dummy"
107 path.delete()
108 assert not path.exists()
111def test__pathier__moveup():
112 assert root.moveup("pathier").stem == "pathier"
115def test__pathier__sub():
116 assert (root - 1).stem == "pathier"
119def test__pathier__touch():
120 path = root / "nested" / "touch" / "test" / "folder" / "yeet.txt"
121 assert not path.exists()
122 path.touch()
123 assert path.exists
124 path.moveup("nested").delete()
127def test__size():
128 assert (root / "test_pathier.py").size > 0
129 assert root.size > 0
132def test__format_size():
133 assert Pathier.format_bytes(1234) == "1.23 kb"
136def test__formatted_size():
137 path = Pathier(__file__)
138 assert path.formatted_size == path.format_bytes(path.size)
141def test__age():
142 if root.age:
143 assert root.age > 0
144 assert (root / "yeet").age is None
147def test__dob():
148 assert root.dob is not None
149 assert (root / "yeet").dob is None
152def test__mod_date():
153 assert root.mod_date is not None
154 assert (root / "yeet").mod_date is None
157def test__mod_delta():
158 assert root.mod_delta is not None
159 assert (root / "yeet").mod_date is None
162def test__is_larger():
163 assert (root / "dummy.json").is_larger(root / "blank.txt")
166def test__is_older():
167 assert (root / "dummy.json").is_older(root / "blank.txt")
170def test__modified_more_recently():
171 assert (root / "test_pathier.py").modified_more_recently(root / "blank.txt")
174def test__move_under():
175 path = Pathier("a/b/c/d/e")
176 assert path.move_under("b") == Pathier("a/b/c")
177 assert path.move_under("d") == path
178 assert path.move_under("a") == Pathier("a/b")
181def test__separate():
182 path = Pathier("a/b/c/d/e")
183 assert path.separate("c") == Pathier("d/e")
184 assert path.separate("c", True) == Pathier("c/d/e")
187def test__mkcwd():
188 og_cwd = Pathier.cwd()
189 os.chdir(root)
190 cwd = Pathier.cwd()
191 path = (root - 1) / "src" / "pathier"
192 path.mkcwd()
193 assert Pathier.cwd() != cwd
194 assert Pathier.cwd() == path
195 os.chdir(og_cwd)
198def test__add_to_PATH():
199 path = str(root)
201 assert path not in sys.path
202 assert not root.in_PATH
204 root.add_to_PATH()
205 assert sys.path[0] == path
206 assert root.in_PATH
208 root.add_to_PATH(1)
209 assert sys.path[1] != path
211 root.remove_from_PATH()
212 assert path not in sys.path
213 assert not root.in_PATH
215 root.add_to_PATH(1)
216 assert sys.path[1] == path
217 assert root.in_PATH
219 root.append_to_PATH()
220 assert sys.path[-1] != path
222 root.remove_from_PATH()
223 root.append_to_PATH()
224 assert sys.path[-1] == path
225 assert root.in_PATH
226 root.remove_from_PATH()
229def test__backup():
230 path = root / "dummy.dummy"
231 ret_val = path.backup()
232 assert ret_val is None
233 path = root / "dummy.toml"
234 ret_val = path.backup()
235 assert ret_val
236 assert ret_val.exists()
237 ret_val.delete()
238 ret_val = path.backup(True)
239 assert ret_val
240 assert ret_val.exists()
241 ret_val.delete()
244def test__execute():
245 test_path = root / "test_pathier.py"
246 # Don't want to execute pytest infinitely
247 # Also counts as testing `replace` I guess
248 test_path.replace_strings([("test__execute", "execute")], 1)
249 root.execute("pytest -s")
250 test_path.replace_strings([("execute()", "test__execute()")], 1)
253def test__append():
254 appender = root / "appender.txt"
255 appender.append("1")
256 assert appender.read_text().splitlines() == ["1"]
257 appender.append("2")
258 assert appender.read_text().splitlines() == ["1", "2"]
259 appender.append("3", False)
260 appender.append("4")
261 assert appender.read_text().splitlines() == ["1", "2", "34"]
262 appender.delete()
265def test__split():
266 file = root / "join_split.txt"
267 data = [str(n) for n in range(10)]
268 file.join(data)
269 assert file.split() == data
270 file.delete()
273def test__read_tracking():
274 file = root / "tracker.txt"
275 file.write_text("tracking\n")
276 time.sleep(2)
277 assert not file.last_read_time
278 file.read_text()
279 assert file.last_read_time
280 time.sleep(0.1)
281 assert datetime.now() > file.last_read_time
282 assert not file.modified_since_last_read
283 last_read_time = file.last_read_time
284 file.write_text("tracking\n")
285 time.sleep(2)
286 assert file.modified_since_last_read
287 assert file.last_read_time == last_read_time
288 if file.modified_since_last_read:
289 file.read_text()
290 assert file.last_read_time != last_read_time
291 assert not file.modified_since_last_read
292 file.delete()