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

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], "path": root} 

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 assert str(obj["path"]).endswith( 

20 f"{root.parent.stem}/{root.stem}" 

21 ) # "pathier/tests" 

22 

23 

24def test__pathier__is_this_thing_on(): 

25 path = Pathier("dummy.json") 

26 

27 

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" 

33 

34 

35def test__pathier__json_loads(): 

36 path = root / "dummy.json" 

37 obj = path.json_loads() 

38 assert_dummy(obj) 

39 

40 

41def test__pathier__toml_loads(): 

42 path = root / "dummy.toml" 

43 obj = path.toml_loads() 

44 assert_dummy(obj) 

45 

46 

47def test__pathier__loads(): 

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

49 path = root / file 

50 obj = path.loads() 

51 assert_dummy(obj) 

52 

53 

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) 

59 

60 

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) 

66 

67 

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

77 

78 

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 

84 

85 

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) 

93 

94 

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) 

106 

107 

108def test__pathier__delete(): 

109 path = root / "dummy" 

110 path.delete() 

111 assert not path.exists() 

112 

113 

114def test__pathier__moveup(): 

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

116 

117 

118def test__pathier__sub(): 

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

120 

121 

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

128 

129 

130def test__size(): 

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

132 assert root.size > 0 

133 

134 

135def test__format_size(): 

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

137 

138 

139def test__formatted_size(): 

140 path = Pathier(__file__) 

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

142 

143 

144def test__age(): 

145 if root.age: 

146 assert root.age > 0 

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

148 

149 

150def test__dob(): 

151 assert root.dob is not None 

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

153 

154 

155def test__mod_date(): 

156 assert root.mod_date is not None 

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

158 

159 

160def test__mod_delta(): 

161 assert root.mod_delta is not None 

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

163 

164 

165def test__is_larger(): 

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

167 

168 

169def test__is_older(): 

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

171 

172 

173def test__modified_more_recently(): 

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

175 

176 

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

182 

183 

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

188 

189 

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) 

199 

200 

201def test__add_to_PATH(): 

202 path = str(root) 

203 

204 assert path not in sys.path 

205 assert not root.in_PATH 

206 

207 root.add_to_PATH() 

208 assert sys.path[0] == path 

209 assert root.in_PATH 

210 

211 root.add_to_PATH(1) 

212 assert sys.path[1] != path 

213 

214 root.remove_from_PATH() 

215 assert path not in sys.path 

216 assert not root.in_PATH 

217 

218 root.add_to_PATH(1) 

219 assert sys.path[1] == path 

220 assert root.in_PATH 

221 

222 root.append_to_PATH() 

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

224 

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

230 

231 

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

245 

246 

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) 

254 

255 

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

266 

267 

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

274 

275 

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