@@ -76,6 +76,24 @@ def test_managed_render(pystache_renderer, sut):
76
76
]
77
77
78
78
79
+ def test_managed_render_with_no_registry (pystache_renderer , sut ):
80
+ data = mock .Mock (spec = ("template" ,))
81
+ text = "some text"
82
+ pystache_renderer .render_name .side_effect = (text ,)
83
+ output = paths .swift_dir / "some/output.txt"
84
+ registry = paths .swift_dir / "a/registry.list"
85
+
86
+ with sut .manage (generated = (), stubs = (), registry = registry ) as renderer :
87
+ renderer .render (data , output )
88
+ assert renderer .written == {output }
89
+ assert_file (output , text )
90
+
91
+ assert_file (registry , f"some/output.txt { hash (text )} { hash (text )} \n " )
92
+ assert pystache_renderer .mock_calls == [
93
+ mock .call .render_name (data .template , data , generator = paths .exe_file .relative_to (paths .swift_dir )),
94
+ ]
95
+
96
+
79
97
def test_managed_render_with_post_processing (pystache_renderer , sut ):
80
98
data = mock .Mock (spec = ("template" ,))
81
99
text = "some text"
@@ -192,6 +210,45 @@ def test_managed_render_with_modified_stub_file_not_marked_as_generated(pystache
192
210
assert_file (registry , "" )
193
211
194
212
213
+ class MyError (Exception ):
214
+ pass
215
+
216
+
217
+ def test_managed_render_exception_drops_written_from_registry (pystache_renderer , sut ):
218
+ data = mock .Mock (spec = ("template" ,))
219
+ text = "some text"
220
+ pystache_renderer .render_name .side_effect = (text ,)
221
+ output = paths .swift_dir / "some/output.txt"
222
+ registry = paths .swift_dir / "a/registry.list"
223
+ write (output , text )
224
+ write (registry , "a a a\n "
225
+ f"some/output.txt whatever { hash (text )} \n "
226
+ "b b b" )
227
+
228
+ with pytest .raises (MyError ):
229
+ with sut .manage (generated = (), stubs = (), registry = registry ) as renderer :
230
+ renderer .render (data , output )
231
+ raise MyError
232
+
233
+ assert_file (registry , "a a a\n b b b\n " )
234
+
235
+
236
+ def test_managed_render_exception_does_not_erase (pystache_renderer , sut ):
237
+ output = paths .swift_dir / "some/output.txt"
238
+ stub = paths .swift_dir / "some/stub.txt"
239
+ registry = paths .swift_dir / "a/registry.list"
240
+ write (output )
241
+ write (stub , "// generated bla bla" )
242
+ write (registry )
243
+
244
+ with pytest .raises (MyError ):
245
+ with sut .manage (generated = (output ,), stubs = (stub ,), registry = registry ) as renderer :
246
+ raise MyError
247
+
248
+ assert output .is_file ()
249
+ assert stub .is_file ()
250
+
251
+
195
252
def test_render_with_extensions (pystache_renderer , sut ):
196
253
data = mock .Mock (spec = ("template" , "extensions" ))
197
254
data .template = "test_template"
@@ -210,5 +267,70 @@ def test_render_with_extensions(pystache_renderer, sut):
210
267
assert_file (expected_output , expected_contents )
211
268
212
269
270
+ def test_managed_render_with_force_not_skipping_generated_file (pystache_renderer , sut ):
271
+ data = mock .Mock (spec = ("template" ,))
272
+ output = paths .swift_dir / "some/output.txt"
273
+ some_output = "some output"
274
+ registry = paths .swift_dir / "a/registry.list"
275
+ write (output , some_output )
276
+ write (registry , f"some/output.txt { hash (some_output )} { hash (some_output )} \n " )
277
+
278
+ pystache_renderer .render_name .side_effect = (some_output ,)
279
+
280
+ with sut .manage (generated = (output ,), stubs = (), registry = registry , force = True ) as renderer :
281
+ renderer .render (data , output )
282
+ assert renderer .written == {output }
283
+ assert_file (output , some_output )
284
+
285
+ assert_file (registry , f"some/output.txt { hash (some_output )} { hash (some_output )} \n " )
286
+ assert pystache_renderer .mock_calls == [
287
+ mock .call .render_name (data .template , data , generator = paths .exe_file .relative_to (paths .swift_dir )),
288
+ ]
289
+
290
+
291
+ def test_managed_render_with_force_not_skipping_stub_file (pystache_renderer , sut ):
292
+ data = mock .Mock (spec = ("template" ,))
293
+ stub = paths .swift_dir / "some/stub.txt"
294
+ some_output = "// generated some output"
295
+ some_processed_output = "// generated some processed output"
296
+ registry = paths .swift_dir / "a/registry.list"
297
+ write (stub , some_processed_output )
298
+ write (registry , f"some/stub.txt { hash (some_output )} { hash (some_processed_output )} \n " )
299
+
300
+ pystache_renderer .render_name .side_effect = (some_output ,)
301
+
302
+ with sut .manage (generated = (), stubs = (stub ,), registry = registry , force = True ) as renderer :
303
+ renderer .render (data , stub )
304
+ assert renderer .written == {stub }
305
+ assert_file (stub , some_output )
306
+
307
+ assert_file (registry , f"some/stub.txt { hash (some_output )} { hash (some_output )} \n " )
308
+ assert pystache_renderer .mock_calls == [
309
+ mock .call .render_name (data .template , data , generator = paths .exe_file .relative_to (paths .swift_dir )),
310
+ ]
311
+
312
+
313
+ def test_managed_render_with_force_ignores_modified_generated_file (sut ):
314
+ output = paths .swift_dir / "some/output.txt"
315
+ some_processed_output = "// some processed output"
316
+ registry = paths .swift_dir / "a/registry.list"
317
+ write (output , "// something else" )
318
+ write (registry , f"some/output.txt whatever { hash (some_processed_output )} \n " )
319
+
320
+ with sut .manage (generated = (output ,), stubs = (), registry = registry , force = True ):
321
+ pass
322
+
323
+
324
+ def test_managed_render_with_force_ignores_modified_stub_file_still_marked_as_generated (sut ):
325
+ stub = paths .swift_dir / "some/stub.txt"
326
+ some_processed_output = "// generated some processed output"
327
+ registry = paths .swift_dir / "a/registry.list"
328
+ write (stub , "// generated something else" )
329
+ write (registry , f"some/stub.txt whatever { hash (some_processed_output )} \n " )
330
+
331
+ with sut .manage (generated = (), stubs = (stub ,), registry = registry , force = True ):
332
+ pass
333
+
334
+
213
335
if __name__ == '__main__' :
214
336
sys .exit (pytest .main ([__file__ ] + sys .argv [1 :]))
0 commit comments