@@ -76,6 +76,24 @@ def test_managed_render(pystache_renderer, sut):
7676 ]
7777
7878
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+
7997def test_managed_render_with_post_processing (pystache_renderer , sut ):
8098 data = mock .Mock (spec = ("template" ,))
8199 text = "some text"
@@ -192,6 +210,45 @@ def test_managed_render_with_modified_stub_file_not_marked_as_generated(pystache
192210 assert_file (registry , "" )
193211
194212
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+
195252def test_render_with_extensions (pystache_renderer , sut ):
196253 data = mock .Mock (spec = ("template" , "extensions" ))
197254 data .template = "test_template"
@@ -210,5 +267,70 @@ def test_render_with_extensions(pystache_renderer, sut):
210267 assert_file (expected_output , expected_contents )
211268
212269
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+
213335if __name__ == '__main__' :
214336 sys .exit (pytest .main ([__file__ ] + sys .argv [1 :]))
0 commit comments