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

1import os 

2import sys 

3import time 

4from datetime import datetime 

5from typing import Any 

6 

7import pytest 

8 

9from pathier.pathier import Pathier 

10 

11root = Pathier(__file__).parent 

12dummy_obj = {"str": "yeet", "int": 44, "list": [1, 2, 3, 4, 5]} 

13 

14 

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 

20 

21def test__pathier__is_this_thing_on(): 

22 path = Pathier("dummy.json") 

23 

24 

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" 

30 

31 

32def test__pathier__json_loads(): 

33 path = root / "dummy.json" 

34 obj = path.json_loads() 

35 assert_dummy(obj) 

36 

37 

38def test__pathier__toml_loads(): 

39 path = root / "dummy.toml" 

40 obj = path.toml_loads() 

41 assert_dummy(obj) 

42 

43 

44def test__pathier__loads(): 

45 for file in ["dummy.json", "dummy.toml"]: 

46 path = root / file 

47 obj = path.loads() 

48 assert_dummy(obj) 

49 

50 

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) 

56 

57 

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) 

63 

64 

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

74 

75 

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 

81 

82 

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) 

90 

91 

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) 

103 

104 

105def test__pathier__delete(): 

106 path = root / "dummy" 

107 path.delete() 

108 assert not path.exists() 

109 

110 

111def test__pathier__moveup(): 

112 assert root.moveup("pathier").stem == "pathier" 

113 

114 

115def test__pathier__sub(): 

116 assert (root - 1).stem == "pathier" 

117 

118 

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

125 

126 

127def test__size(): 

128 assert (root / "test_pathier.py").size > 0 

129 assert root.size > 0 

130 

131 

132def test__format_size(): 

133 assert Pathier.format_bytes(1234) == "1.23 kb" 

134 

135 

136def test__formatted_size(): 

137 path = Pathier(__file__) 

138 assert path.formatted_size == path.format_bytes(path.size) 

139 

140 

141def test__age(): 

142 if root.age: 

143 assert root.age > 0 

144 assert (root / "yeet").age is None 

145 

146 

147def test__dob(): 

148 assert root.dob is not None 

149 assert (root / "yeet").dob is None 

150 

151 

152def test__mod_date(): 

153 assert root.mod_date is not None 

154 assert (root / "yeet").mod_date is None 

155 

156 

157def test__mod_delta(): 

158 assert root.mod_delta is not None 

159 assert (root / "yeet").mod_date is None 

160 

161 

162def test__is_larger(): 

163 assert (root / "dummy.json").is_larger(root / "blank.txt") 

164 

165 

166def test__is_older(): 

167 assert (root / "dummy.json").is_older(root / "blank.txt") 

168 

169 

170def test__modified_more_recently(): 

171 assert (root / "test_pathier.py").modified_more_recently(root / "blank.txt") 

172 

173 

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

179 

180 

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

185 

186 

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) 

196 

197 

198def test__add_to_PATH(): 

199 path = str(root) 

200 

201 assert path not in sys.path 

202 assert not root.in_PATH 

203 

204 root.add_to_PATH() 

205 assert sys.path[0] == path 

206 assert root.in_PATH 

207 

208 root.add_to_PATH(1) 

209 assert sys.path[1] != path 

210 

211 root.remove_from_PATH() 

212 assert path not in sys.path 

213 assert not root.in_PATH 

214 

215 root.add_to_PATH(1) 

216 assert sys.path[1] == path 

217 assert root.in_PATH 

218 

219 root.append_to_PATH() 

220 assert sys.path[-1] != path 

221 

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

227 

228 

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

242 

243 

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) 

251 

252 

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

263 

264 

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

271 

272 

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