@@ -35,40 +35,48 @@ def __test_relative_header_create_source(dir, include1, include2, is_include1_sy
35
35
36
36
@pytest .mark .parametrize ("with_pragma_once" , (False , True ))
37
37
@pytest .mark .parametrize ("is_sys" , (False , True ))
38
- def test_relative_header_1 (tmpdir , with_pragma_once , is_sys ):
38
+ def test_relative_header_1 (record_property , tmpdir , with_pragma_once , is_sys ):
39
39
_ , double_include_error = __test_relative_header_create_header (tmpdir , with_pragma_once = with_pragma_once )
40
40
41
41
test_file = __test_relative_header_create_source (tmpdir , "test.h" , "test.h" , is_include1_sys = is_sys , is_include2_sys = is_sys )
42
42
43
43
args = ([format_include_path_arg (tmpdir )] if is_sys else []) + [test_file ]
44
44
45
- _ , _ , stderr = simplecpp (args , cwd = tmpdir )
45
+ _ , stdout , stderr = simplecpp (args , cwd = tmpdir )
46
+ record_property ("stdout" , stdout )
47
+ record_property ("stderr" , stderr )
46
48
47
49
if with_pragma_once :
48
50
assert stderr == ''
49
51
else :
50
52
assert double_include_error in stderr
51
53
54
+ @pytest .mark .parametrize ("with_pragma_once" , (False , True ))
52
55
@pytest .mark .parametrize ("inv" , (False , True ))
53
56
@pytest .mark .parametrize ("source_relative" , (False , True ))
54
- def test_relative_header_2 (tmpdir , inv , source_relative ):
55
- 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 )
56
59
57
60
test_file = __test_relative_header_create_source (tmpdir , "test.h" , header_file , inv = inv )
58
61
59
62
args = ["test.c" if source_relative else test_file ]
60
63
61
64
_ , stdout , stderr = simplecpp (args , cwd = tmpdir )
62
- assert stderr == ''
63
- if source_relative and not inv :
64
- assert '#line 8 "test.h"' in stdout
65
+ record_property ("stdout" , stdout )
66
+ record_property ("stderr" , stderr )
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
65
73
else :
66
- assert f'#line 8 " { pathlib . PurePath ( tmpdir ). as_posix () } /test.h"' in stdout
74
+ assert double_include_error in stderr
67
75
68
76
@pytest .mark .parametrize ("is_sys" , (False , True ))
69
77
@pytest .mark .parametrize ("inv" , (False , True ))
70
78
@pytest .mark .parametrize ("source_relative" , (False , True ))
71
- def test_relative_header_3 (tmpdir , is_sys , inv , source_relative ):
79
+ def test_relative_header_3 (record_property , tmpdir , is_sys , inv , source_relative ):
72
80
test_subdir = os .path .join (tmpdir , "test_subdir" )
73
81
os .mkdir (test_subdir )
74
82
header_file , _ = __test_relative_header_create_header (test_subdir )
@@ -78,20 +86,23 @@ def test_relative_header_3(tmpdir, is_sys, inv, source_relative):
78
86
args = ["test.c" if source_relative else test_file ]
79
87
80
88
_ , stdout , stderr = simplecpp (args , cwd = tmpdir )
89
+ record_property ("stdout" , stdout )
90
+ record_property ("stderr" , stderr )
81
91
82
92
if is_sys :
83
93
assert "missing header: Header not found" in stderr
84
94
else :
85
95
assert stderr == ''
86
- if source_relative and not inv :
87
- assert '#line 8 "test_subdir/test.h"' in stdout
88
- else :
96
+ if inv :
89
97
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
90
100
91
101
@pytest .mark .parametrize ("use_short_path" , (False , True ))
102
+ @pytest .mark .parametrize ("relative_include_dir" , (False , True ))
92
103
@pytest .mark .parametrize ("is_sys" , (False , True ))
93
104
@pytest .mark .parametrize ("inv" , (False , True ))
94
- def test_relative_header_4 (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 ):
95
106
test_subdir = os .path .join (tmpdir , "test_subdir" )
96
107
os .mkdir (test_subdir )
97
108
header_file , _ = __test_relative_header_create_header (test_subdir )
@@ -100,7 +111,69 @@ def test_relative_header_4(tmpdir, use_short_path, is_sys, inv):
100
111
101
112
test_file = __test_relative_header_create_source (tmpdir , header_file , "test.h" , is_include2_sys = is_sys , inv = inv )
102
113
103
- 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 ]
104
115
105
- _ , _ , stderr = simplecpp (args , cwd = tmpdir )
116
+ _ , stdout , stderr = simplecpp (args , cwd = tmpdir )
117
+ record_property ("stdout" , stdout )
118
+ record_property ("stderr" , stderr )
106
119
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
124
+
125
+ @pytest .mark .parametrize ("with_pragma_once" , (False , True ))
126
+ @pytest .mark .parametrize ("relative_include_dir" , (False , True ))
127
+ @pytest .mark .parametrize ("is_sys" , (False , True ))
128
+ @pytest .mark .parametrize ("inv" , (False , True ))
129
+ def test_relative_header_5 (record_property , tmpdir , with_pragma_once , relative_include_dir , is_sys , inv ): # test relative paths with ..
130
+ ## 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
131
+ header_file , double_include_error = __test_relative_header_create_header (tmpdir , with_pragma_once = with_pragma_once )
132
+ if is_sys :
133
+ header_file_second_path = "test.h"
134
+ else :
135
+ header_file_second_path = "../test.h"
136
+
137
+ test_subdir = os .path .join (tmpdir , "test_subdir" )
138
+ os .mkdir (test_subdir )
139
+ test_file = __test_relative_header_create_source (test_subdir , header_file , header_file_second_path , is_include2_sys = is_sys , inv = inv )
140
+
141
+ args = ([format_include_path_arg (".." if relative_include_dir else tmpdir )] if is_sys else []) + ["test.c" ]
142
+
143
+ _ , stdout , stderr = simplecpp (args , cwd = test_subdir )
144
+ record_property ("stdout" , stdout )
145
+ record_property ("stderr" , stderr )
146
+ if with_pragma_once :
147
+ assert stderr == ''
148
+ if (relative_include_dir or not is_sys ) and inv :
149
+ assert '#line 8 "../test.h"' in stdout
150
+ else :
151
+ assert f'#line 8 "{ pathlib .PurePath (tmpdir ).as_posix ()} /test.h"' in stdout
152
+ else :
153
+ 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