22import subprocess
33import sys
44
5+ import pytest
6+
57from swift .codegen .generators import qlgen
68from swift .codegen .lib import ql
79from swift .codegen .test .utils import *
@@ -36,17 +38,22 @@ def children_file(): return ql_output_path() / "GetImmediateParent.qll"
3638
3739
3840@pytest .fixture
39- def generate ( input , opts , renderer ):
41+ def qlgen_opts ( opts ):
4042 opts .ql_stub_output = stub_path ()
4143 opts .ql_output = ql_output_path ()
4244 opts .ql_test_output = ql_test_output_path ()
4345 opts .ql_format = True
4446 opts .swift_dir = paths .swift_dir
47+ return opts
48+
49+
50+ @pytest .fixture
51+ def generate (input , qlgen_opts , renderer ):
4552 renderer .written = []
4653
4754 def func (classes ):
4855 input .classes = classes
49- return run_generation (qlgen .generate , opts , renderer )
56+ return run_generation (qlgen .generate , qlgen_opts , renderer )
5057
5158 return func
5259
@@ -349,7 +356,7 @@ def test_empty_cleanup(generate, renderer):
349356 assert renderer .mock_calls [- 1 ] == mock .call .cleanup (set ())
350357
351358
352- def test_non_empty_cleanup (opts , generate , renderer , tmp_path ):
359+ def test_non_empty_cleanup (opts , generate , renderer ):
353360 ql_a = opts .ql_output / "A.qll"
354361 ql_b = opts .ql_output / "B.qll"
355362 stub_a = opts .ql_stub_output / "A.qll"
@@ -369,6 +376,13 @@ def test_non_empty_cleanup(opts, generate, renderer, tmp_path):
369376 {ql_a , ql_b , stub_a , test_a , test_b })
370377
371378
379+ def test_modified_stub_still_generated (qlgen_opts , renderer ):
380+ stub = qlgen_opts .ql_stub_output / "A.qll"
381+ write (stub , "// generated\n \n \n \n something\n " )
382+ with pytest .raises (qlgen .ModifiedStubMarkedAsGeneratedError ):
383+ run_generation (qlgen .generate , qlgen_opts , renderer )
384+
385+
372386def test_test_missing_source (generate_tests ):
373387 generate_tests ([
374388 schema .Class ("A" ),
0 commit comments