@@ -51,10 +51,11 @@ def test_relative_header_1(record_property, tmpdir, with_pragma_once, is_sys):
5151 else :
5252 assert double_include_error in stderr
5353
54+ @pytest .mark .parametrize ("with_pragma_once" , (False , True ))
5455@pytest .mark .parametrize ("inv" , (False , True ))
5556@pytest .mark .parametrize ("source_relative" , (False , True ))
56- def test_relative_header_2 (record_property , tmpdir , inv , source_relative ):
57- header_file , _ = __test_relative_header_create_header (tmpdir )
57+ def test_relative_header_2 (record_property , tmpdir , with_pragma_once , inv , source_relative ):
58+ header_file , double_include_error = __test_relative_header_create_header (tmpdir , with_pragma_once = with_pragma_once )
5859
5960 test_file = __test_relative_header_create_source (tmpdir , "test.h" , header_file , inv = inv )
6061
@@ -63,11 +64,14 @@ def test_relative_header_2(record_property, tmpdir, inv, source_relative):
6364 _ , stdout , stderr = simplecpp (args , cwd = tmpdir )
6465 record_property ("stdout" , stdout )
6566 record_property ("stderr" , stderr )
66- assert stderr == ''
67- if source_relative and not inv :
68- assert '#line 8 "test.h"' in stdout
67+ if with_pragma_once :
68+ assert stderr == ''
69+ if inv :
70+ assert f'#line 8 "{ pathlib .PurePath (tmpdir ).as_posix ()} /test.h"' in stdout
71+ else :
72+ assert '#line 8 "test.h"' in stdout
6973 else :
70- assert f'#line 8 " { pathlib . PurePath ( tmpdir ). as_posix () } /test.h"' in stdout
74+ assert double_include_error in stderr
7175
7276@pytest .mark .parametrize ("is_sys" , (False , True ))
7377@pytest .mark .parametrize ("inv" , (False , True ))
@@ -89,15 +93,16 @@ def test_relative_header_3(record_property, tmpdir, is_sys, inv, source_relative
8993 assert "missing header: Header not found" in stderr
9094 else :
9195 assert stderr == ''
92- if source_relative and not inv :
93- assert '#line 8 "test_subdir/test.h"' in stdout
94- else :
96+ if inv :
9597 assert f'#line 8 "{ pathlib .PurePath (test_subdir ).as_posix ()} /test.h"' in stdout
98+ else :
99+ assert '#line 8 "test_subdir/test.h"' in stdout
96100
97101@pytest .mark .parametrize ("use_short_path" , (False , True ))
102+ @pytest .mark .parametrize ("relative_include_dir" , (False , True ))
98103@pytest .mark .parametrize ("is_sys" , (False , True ))
99104@pytest .mark .parametrize ("inv" , (False , True ))
100- def test_relative_header_4 (record_property , tmpdir , use_short_path , is_sys , inv ):
105+ def test_relative_header_4 (record_property , tmpdir , use_short_path , relative_include_dir , is_sys , inv ):
101106 test_subdir = os .path .join (tmpdir , "test_subdir" )
102107 os .mkdir (test_subdir )
103108 header_file , _ = __test_relative_header_create_header (test_subdir )
@@ -106,17 +111,22 @@ def test_relative_header_4(record_property, tmpdir, use_short_path, is_sys, inv)
106111
107112 test_file = __test_relative_header_create_source (tmpdir , header_file , "test.h" , is_include2_sys = is_sys , inv = inv )
108113
109- args = [format_include_path_arg (test_subdir ), test_file ]
114+ args = [format_include_path_arg ("test_subdir" if relative_include_dir else test_subdir ), test_file ]
110115
111116 _ , stdout , stderr = simplecpp (args , cwd = tmpdir )
112117 record_property ("stdout" , stdout )
113118 record_property ("stderr" , stderr )
114119 assert stderr == ''
120+ if (use_short_path and not inv ) or (relative_include_dir and inv ):
121+ assert '#line 8 "test_subdir/test.h"' in stdout
122+ else :
123+ assert f'#line 8 "{ pathlib .PurePath (test_subdir ).as_posix ()} /test.h"' in stdout
115124
116125@pytest .mark .parametrize ("with_pragma_once" , (False , True ))
126+ @pytest .mark .parametrize ("relative_include_dir" , (False , True ))
117127@pytest .mark .parametrize ("is_sys" , (False , True ))
118128@pytest .mark .parametrize ("inv" , (False , True ))
119- def test_relative_header_5 (record_property , tmpdir , with_pragma_once , is_sys , inv ): # test relative paths with ..
129+ def test_relative_header_5 (record_property , tmpdir , with_pragma_once , relative_include_dir , is_sys , inv ): # test relative paths with ..
120130 ## in this test, the subdir role is the opposite then the previous - it contains the test.c file, while the parent tmpdir contains the header file
121131 header_file , double_include_error = __test_relative_header_create_header (tmpdir , with_pragma_once = with_pragma_once )
122132 if is_sys :
@@ -128,16 +138,42 @@ def test_relative_header_5(record_property, tmpdir, with_pragma_once, is_sys, in
128138 os .mkdir (test_subdir )
129139 test_file = __test_relative_header_create_source (test_subdir , header_file , header_file_second_path , is_include2_sys = is_sys , inv = inv )
130140
131- args = ([format_include_path_arg (tmpdir )] if is_sys else []) + ["test.c" ]
141+ args = ([format_include_path_arg (".." if relative_include_dir else tmpdir )] if is_sys else []) + ["test.c" ]
132142
133143 _ , stdout , stderr = simplecpp (args , cwd = test_subdir )
134144 record_property ("stdout" , stdout )
135145 record_property ("stderr" , stderr )
136146 if with_pragma_once :
137147 assert stderr == ''
138- if inv :
148+ if ( relative_include_dir or not is_sys ) and inv :
139149 assert '#line 8 "../test.h"' in stdout
140150 else :
141151 assert f'#line 8 "{ pathlib .PurePath (tmpdir ).as_posix ()} /test.h"' in stdout
142152 else :
143153 assert double_include_error in stderr
154+
155+ @pytest .mark .parametrize ("with_pragma_once" , (False , True ))
156+ @pytest .mark .parametrize ("relative_include_dir" , (False , True ))
157+ @pytest .mark .parametrize ("is_sys" , (False , True ))
158+ @pytest .mark .parametrize ("inv" , (False , True ))
159+ def test_relative_header_6 (record_property , tmpdir , with_pragma_once , relative_include_dir , is_sys , inv ): # test relative paths with .. that is resolved only by an include dir
160+ ## in this test, both the header and the source file are at the same dir, but there is a dummy inclusion dir as a subdir
161+ header_file , double_include_error = __test_relative_header_create_header (tmpdir , with_pragma_once = with_pragma_once )
162+
163+ test_subdir = os .path .join (tmpdir , "test_subdir" )
164+ os .mkdir (test_subdir )
165+ test_file = __test_relative_header_create_source (tmpdir , header_file , "../test.h" , is_include2_sys = is_sys , inv = inv )
166+
167+ args = [format_include_path_arg ("test_subdir" if relative_include_dir else test_subdir ), "test.c" ]
168+
169+ _ , stdout , stderr = simplecpp (args , cwd = tmpdir )
170+ record_property ("stdout" , stdout )
171+ record_property ("stderr" , stderr )
172+ if with_pragma_once :
173+ assert stderr == ''
174+ if relative_include_dir and inv :
175+ assert '#line 8 "test.h"' in stdout
176+ else :
177+ assert f'#line 8 "{ pathlib .PurePath (tmpdir ).as_posix ()} /test.h"' in stdout
178+ else :
179+ assert double_include_error in stderr
0 commit comments