Passed
Push — master ( 053708...13ca70 )
by srz
04:23
created

WandboxPreprocessor.remove_redudant_pragma()   A

Complexity

Conditions 4

Size

Total Lines 10
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 10
nop 2
dl 0
loc 10
rs 9.9
c 0
b 0
f 0
1
#!/usr/bin/env python
2
#
3
# iuwandbox_pp.py
4
#
5
# Copyright (C) 2018, Takazumi Shirayanagi
6
# This software is released under the new BSD License,
7
# see LICENSE
8
#
9
10
import os
11
import sys
12
import codecs
13
import re
14
import collections
15
from iutest_pp_strip import IutestPreprocessor
16
from iutest_pp_strip import UNUSED_
17
18
predefined_macros = {
19
    '__WANDBOX__': '1',
20
    'NULL': '0',
21
    'IUTEST_USE_GTEST': None,
22
    'IUTEST_BUILD_DOXYGEN': None,
23
    '_IUTEST_DEBUG': None,
24
    '__CYGWIN__': None,
25
    'IUTEST_OS_CYGWIN': None,
26
    '__MINGW__': None,
27
    '__MINGW32__': None,
28
    '__MINGW64__': None,
29
    '__linux__': '1',
30
    '__arm__': None,
31
    'IUTEST_OS_ARM': None,
32
    '__ARMCC_VERSION': None,
33
    '__AVR32__': None,
34
    '__avr32__': None,
35
    'IUTEST_OS_AVR32': None,
36
    'ANDROID': None,
37
    '__ANDROID__': None,
38
    'IUTEST_OS_LINUX_ANDROID': None,
39
    '__APPLE__': None,
40
    'IUTEST_OS_IOS': None,
41
    'IUTEST_OS_MAC': None,
42
    '__INTEL_COMPILER': None,
43
    '__BORLANDC__': None,
44
    '__CUDACC__': None,
45
    '__IBMCPP__': None,
46
    'COMPILER_ICC': None,
47
    '_MSC_VER': None,
48
    '_MSC_FULL_VER': None,
49
    '_MSVC_LANG': None,
50
    '_WIN32': None,
51
    'WIN32': None,
52
    '__WIN32__': None,
53
    'UNICODE': None,
54
    'WINAPI_FAMILY': None,
55
    '__AFX_H__': None,
56
    '__MWERKS__': None,
57
    '__FreeBSD__': None,
58
    'sun': None,
59
    '__sun': None,
60
    '__MAC_OS_X_VERSION_MIN_REQUIRED': None,
61
    '_STLPORT_VERSION': None,
62
    '_BSD_SOURCE': None,
63
    '__USE_MINGW_ANSI_STDIO': None,
64
    '__GLIBCPP__': None,
65
    'MAX_PATH': None,
66
    'PATH_MAX': None,
67
    'IUTEST_OS_WINDOWS': None,
68
    'IUTEST_OS_WINDOWS_MINGW': None,
69
    'IUTEST_OS_WINDOWS_MOBILE': None,
70
    'IUTEST_OS_WINDOWS_PHONE': None,
71
    'IUTEST_OS_WINDOWS_RT': None,
72
    'IUTEST_OS_WINDOWS_WINE': None,
73
    'IUTEST_NO_UTIL_ASSERTION_GTEST_COMPATIBLE': '1',
74
    'IUTEST_NO_TWO_PHASE_NAME_LOOKUP': None,
75
    'IUTEST_NO_FUNCTION_TEMPLATE_ORDERING': None,
76
    'IUTEST_NO_INCLASS_MEMBER_INITIALIZATION': None,
77
    'IUTEST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS': None,
78
    'IUTEST_NO_SFINAE': None,
79
    'IUTEST_NO_TEMPLATE_PARTIAL_SPECIALIZATION': None,
80
    'IUTEST_NO_TEMPLATE_TEMPLATES': None,
81
    'IUTEST_NO_VOID_RETURNS': None,
82
    'IUTEST_NO_ARGUMENT_DEPENDENT_LOOKUP': None,
83
    'IUTEST_NO_PRIVATE_IN_AGGREGATE': None,
84
    'IUTEST_NO_VARIADIC_MACROS': None,
85
    'IUTEST_NO_UNITEST_AD_HOC_TEST_RESULT_ACCESSOR': None,
86
    'IUTEST_NO_TESTCASE_AD_HOC_TEST_RESULT_ACCESSOR': None,
87
    'IUTEST_NO_LAMBDA_SCOPE_RESOLUTION': None,
88
    'IUTEST_NO_GETENV': None,
89
    'IUTEST_NO_PUTENV': None,
90
    'IUTEST_NO_SETENV': None,
91
    'IUTEST_NO_GETCWD': None,
92
    'IUTEST_NOT_SUPPORT_STOPWATCH': None,
93
    'IUTEST_HAS_CXX_HDR_CHARCONV': '0',
94
    'IUTEST_HAS_WANT_SECURE_LIB': '0',
95
    'IUTEST_HAS_MS_EXTENSIONS': '0',
96
    'IUTEST_HAS_MS_CXX_MODULE': '0',
97
    'IUTEST_HAS_CATCH_SEH_EXCEPTION_ASSERTION': '0',
98
    'MS_CPP_UNITTESTFRAMEWORK': None,
99
    'IUTEST_EXPLICIT_INSTANTIATION_ACCESS_PRIVATE_MEMBER_FUNCTION': '1',
100
    'IUTEST_EXPLICIT_INSTANTIATION_ACCESS_PRIVATE_STATIC_MEMBER_FUNCTION': '1',
101
    '__native_client__': None,
102
    'IUTEST_OS_NACL': None,
103
    'IUTEST_HAS_INVALID_PARAMETER_HANDLER': '0',
104
    '__clang_analyzer__': None,
105
    'IUTEST_ANALYSIS_ASSUME_DELEGATE': None,
106
    'IUTEST_MBS_CODE': '0',
107
    'IUTEST_USE_EXTERNAL_STD_TUPLE': '0',
108
    'IUTEST_USE_EXTERNAL_TR1_TUPLE': '0',
109
    'IUTEST_USE_CXX_FILESYSTEM': '0',
110
    'IUTEST_HAS_TESTSUITE': '1',
111
    'IUTEST_HAS_TESTCASE': '1',
112
    'IUTEST_CXX_NOEXCEPT': UNUSED_,
113
    'IUTEST_CXX_NOEXCEPT_AS': UNUSED_,
114
    'IUTEST_CXX_NOTHROW': UNUSED_,
115
    'IUTEST_PRAGMA_WARN_DISABLE_EMPTY_BODY': UNUSED_,
116
    'IUTEST_PRAGMA_WARN_FORMAT_NONLITERAL': UNUSED_,
117
    'IUTEST_PRAGMA_WARN_CXX14_CONSTEXPR_NOT_IMPLY_CONST': UNUSED_,
118
    'IUTEST_MAKE_ASSERTIONRESULT_': UNUSED_,
119
    'IUTEST_COND_LIKELY': UNUSED_,
120
    'IUTEST_COND_UNLIKELY': UNUSED_,
121
    'IUTEST_ATTRIBUTE_LIKELY_': '',
122
    'IUTEST_ATTRIBUTE_UNLIKELY_': '',
123
    # no overridable
124
    'IUTEST_SUCCEED': None,
125
    'IUTEST_FAIL': None,
126
    'IUTEST_ADD_FAILURE': None,
127
    'IUTEST_ADD_FAILURE_AT': None,
128
    'IUTEST_SKIP': None,
129
    'IUTEST_ASSERT': None,
130
    'IUTEST_ASSERT_NOT': None,
131
    'IUTEST_ASSERT_THAT': None,
132
    'IUTEST_ASSERT_EQ': None,
133
    'IUTEST_ASSERT_ALMOST_EQ': None,
134
    'IUTEST_ASSERT_NE': None,
135
    'IUTEST_ASSERT_LT': None,
136
    'IUTEST_ASSERT_LE': None,
137
    'IUTEST_ASSERT_GT': None,
138
    'IUTEST_ASSERT_GE': None,
139
    'IUTEST_ASSERT_TRUE': None,
140
    'IUTEST_ASSERT_FALSE': None,
141
    'IUTEST_ASSERT_NULL': None,
142
    'IUTEST_ASSERT_NOTNULL': None,
143
    'IUTEST_ASSERT_SAME': None,
144
    'IUTEST_ASSERT_FLOAT_EQ': None,
145
    'IUTEST_ASSERT_DOUBLE_EQ': None,
146
    'IUTEST_ASSERT_LONG_DOUBLE_EQ': None,
147
    'IUTEST_ASSERT_NEAR': None,
148
    'IUTEST_ASSERT_STREQ': None,
149
    'IUTEST_ASSERT_STRNE': None,
150
    'IUTEST_ASSERT_STRCASEEQ': None,
151
    'IUTEST_ASSERT_STRCASENE': None,
152
    'IUTEST_ASSERT_THROW': None,
153
    'IUTEST_ASSERT_THROW_VALUE_EQ': None,
154
    'IUTEST_ASSERT_THROW_VALUE_NE': None,
155
    'IUTEST_ASSERT_THROW_VALUE_STREQ': None,
156
    'IUTEST_ASSERT_THROW_VALUE_STRCASEEQ': None,
157
    'IUTEST_ASSERT_ANY_THROW': None,
158
    'IUTEST_ASSERT_NO_THROW': None,
159
    'IUTEST_ASSERT_NO_FAILURE': None,
160
    'IUTEST_ASSERT_NO_FATAL_FAILURE': None,
161
    'IUTEST_ASSERT_FAIL': None,
162
    'IUTEST_ASSERT_EQ_COLLECTIONS': None,
163
    'IUTEST_ASSERT_NE_COLLECTIONS': None,
164
    'IUTEST_ASSERT_EQ_RANGE': None,
165
    'IUTEST_ASSERT_NE_RANGE': None,
166
    'IUTEST_ASSERT_STRLNEQ': None,
167
    'IUTEST_ASSERT_STRIN': None,
168
    'IUTEST_ASSERT_STRNOTIN': None,
169
    'IUTEST_ASSERT_MATCHES_REGEXEQ': None,
170
    'IUTEST_ASSERT_MATCHES_REGEXNE': None,
171
    'IUTEST_ASSERT_CONTAINS_REGEXEQ': None,
172
    'IUTEST_ASSERT_CONTAINS_REGEXNE': None,
173
    'IUTEST_EXPECT': None,
174
    'IUTEST_EXPECT_NOT': None,
175
    'IUTEST_EXPECT_THAT': None,
176
    'IUTEST_EXPECT_EQ': None,
177
    'IUTEST_EXPECT_ALMOST_EQ': None,
178
    'IUTEST_EXPECT_NE': None,
179
    'IUTEST_EXPECT_LT': None,
180
    'IUTEST_EXPECT_LE': None,
181
    'IUTEST_EXPECT_GT': None,
182
    'IUTEST_EXPECT_GE': None,
183
    'IUTEST_EXPECT_TRUE': None,
184
    'IUTEST_EXPECT_FALSE': None,
185
    'IUTEST_EXPECT_NULL': None,
186
    'IUTEST_EXPECT_NOTNULL': None,
187
    'IUTEST_EXPECT_SAME': None,
188
    'IUTEST_EXPECT_FLOAT_EQ': None,
189
    'IUTEST_EXPECT_DOUBLE_EQ': None,
190
    'IUTEST_EXPECT_LONG_DOUBLE_EQ': None,
191
    'IUTEST_EXPECT_NEAR': None,
192
    'IUTEST_EXPECT_STREQ': None,
193
    'IUTEST_EXPECT_STRNE': None,
194
    'IUTEST_EXPECT_STRCASEEQ': None,
195
    'IUTEST_EXPECT_STRCASENE': None,
196
    'IUTEST_EXPECT_THROW': None,
197
    'IUTEST_EXPECT_THROW_VALUE_EQ': None,
198
    'IUTEST_EXPECT_THROW_VALUE_NE': None,
199
    'IUTEST_EXPECT_THROW_VALUE_STREQ': None,
200
    'IUTEST_EXPECT_THROW_VALUE_STRCASEEQ': None,
201
    'IUTEST_EXPECT_ANY_THROW': None,
202
    'IUTEST_EXPECT_NO_THROW': None,
203
    'IUTEST_EXPECT_NO_FAILURE': None,
204
    'IUTEST_EXPECT_NO_FATAL_FAILURE': None,
205
    'IUTEST_EXPECT_FAIL': None,
206
    'IUTEST_EXPECT_EQ_COLLECTIONS': None,
207
    'IUTEST_EXPECT_NE_COLLECTIONS': None,
208
    'IUTEST_EXPECT_EQ_RANGE': None,
209
    'IUTEST_EXPECT_NE_RANGE': None,
210
    'IUTEST_EXPECT_STRLNEQ': None,
211
    'IUTEST_EXPECT_STRIN': None,
212
    'IUTEST_EXPECT_STRNOTIN': None,
213
    'IUTEST_EXPECT_MATCHES_REGEXEQ': None,
214
    'IUTEST_EXPECT_MATCHES_REGEXNE': None,
215
    'IUTEST_EXPECT_CONTAINS_REGEXEQ': None,
216
    'IUTEST_EXPECT_CONTAINS_REGEXNE': None,
217
    'IUTEST_INFORM': None,
218
    'IUTEST_INFORM_NOT': None,
219
    'IUTEST_INFORM_THAT': None,
220
    'IUTEST_INFORM_EQ': None,
221
    'IUTEST_INFORM_ALMOST_EQ': None,
222
    'IUTEST_INFORM_NE': None,
223
    'IUTEST_INFORM_LT': None,
224
    'IUTEST_INFORM_LE': None,
225
    'IUTEST_INFORM_GT': None,
226
    'IUTEST_INFORM_GE': None,
227
    'IUTEST_INFORM_TRUE': None,
228
    'IUTEST_INFORM_FALSE': None,
229
    'IUTEST_INFORM_NULL': None,
230
    'IUTEST_INFORM_NOTNULL': None,
231
    'IUTEST_INFORM_SAME': None,
232
    'IUTEST_INFORM_FLOAT_EQ': None,
233
    'IUTEST_INFORM_DOUBLE_EQ': None,
234
    'IUTEST_INFORM_LONG_DOUBLE_EQ': None,
235
    'IUTEST_INFORM_NEAR': None,
236
    'IUTEST_INFORM_STREQ': None,
237
    'IUTEST_INFORM_STRNE': None,
238
    'IUTEST_INFORM_STRCASEEQ': None,
239
    'IUTEST_INFORM_STRCASENE': None,
240
    'IUTEST_INFORM_THROW': None,
241
    'IUTEST_INFORM_THROW_VALUE_EQ': None,
242
    'IUTEST_INFORM_THROW_VALUE_NE': None,
243
    'IUTEST_INFORM_THROW_VALUE_STREQ': None,
244
    'IUTEST_INFORM_THROW_VALUE_STRCASEEQ': None,
245
    'IUTEST_INFORM_ANY_THROW': None,
246
    'IUTEST_INFORM_NO_THROW': None,
247
    'IUTEST_INFORM_NO_FAILURE': None,
248
    'IUTEST_INFORM_NO_FATAL_FAILURE': None,
249
    'IUTEST_INFORM_FAIL': None,
250
    'IUTEST_INFORM_EQ_COLLECTIONS': None,
251
    'IUTEST_INFORM_NE_COLLECTIONS': None,
252
    'IUTEST_INFORM_EQ_RANGE': None,
253
    'IUTEST_INFORM_NE_RANGE': None,
254
    'IUTEST_INFORM_STRLNEQ': None,
255
    'IUTEST_INFORM_STRIN': None,
256
    'IUTEST_INFORM_STRNOTIN': None,
257
    'IUTEST_INFORM_MATCHES_REGEXEQ': None,
258
    'IUTEST_INFORM_MATCHES_REGEXNE': None,
259
    'IUTEST_INFORM_CONTAINS_REGEXEQ': None,
260
    'IUTEST_INFORM_CONTAINS_REGEXNE': None,
261
    'IUTEST_ASSUME': None,
262
    'IUTEST_ASSUME_NOT': None,
263
    'IUTEST_ASSUME_THAT': None,
264
    'IUTEST_ASSUME_EQ': None,
265
    'IUTEST_ASSUME_ALMOST_EQ': None,
266
    'IUTEST_ASSUME_NE': None,
267
    'IUTEST_ASSUME_LT': None,
268
    'IUTEST_ASSUME_LE': None,
269
    'IUTEST_ASSUME_GT': None,
270
    'IUTEST_ASSUME_GE': None,
271
    'IUTEST_ASSUME_TRUE': None,
272
    'IUTEST_ASSUME_FALSE': None,
273
    'IUTEST_ASSUME_NULL': None,
274
    'IUTEST_ASSUME_NOTNULL': None,
275
    'IUTEST_ASSUME_SAME': None,
276
    'IUTEST_ASSUME_FLOAT_EQ': None,
277
    'IUTEST_ASSUME_DOUBLE_EQ': None,
278
    'IUTEST_ASSUME_LONG_DOUBLE_EQ': None,
279
    'IUTEST_ASSUME_NEAR': None,
280
    'IUTEST_ASSUME_STREQ': None,
281
    'IUTEST_ASSUME_STRNE': None,
282
    'IUTEST_ASSUME_STRCASEEQ': None,
283
    'IUTEST_ASSUME_STRCASENE': None,
284
    'IUTEST_ASSUME_THROW': None,
285
    'IUTEST_ASSUME_THROW_VALUE_EQ': None,
286
    'IUTEST_ASSUME_THROW_VALUE_NE': None,
287
    'IUTEST_ASSUME_THROW_VALUE_STREQ': None,
288
    'IUTEST_ASSUME_THROW_VALUE_STRCASEEQ': None,
289
    'IUTEST_ASSUME_ANY_THROW': None,
290
    'IUTEST_ASSUME_NO_THROW': None,
291
    'IUTEST_ASSUME_NO_FAILURE': None,
292
    'IUTEST_ASSUME_NO_FATAL_FAILURE': None,
293
    'IUTEST_ASSUME_FAIL': None,
294
    'IUTEST_ASSUME_EQ_COLLECTIONS': None,
295
    'IUTEST_ASSUME_NE_COLLECTIONS': None,
296
    'IUTEST_ASSUME_EQ_RANGE': None,
297
    'IUTEST_ASSUME_NE_RANGE': None,
298
    'IUTEST_ASSUME_STRLNEQ': None,
299
    'IUTEST_ASSUME_STRIN': None,
300
    'IUTEST_ASSUME_STRNOTIN': None,
301
    'IUTEST_ASSUME_MATCHES_REGEXEQ': None,
302
    'IUTEST_ASSUME_MATCHES_REGEXNE': None,
303
    'IUTEST_ASSUME_CONTAINS_REGEXEQ': None,
304
    'IUTEST_ASSUME_CONTAINS_REGEXNE': None,
305
    'IUTEST_VPRINTF': None,
306
    'IUTEST_REMOVE_LEGACY_TEST_CASEAPI_': None,
307
    'IUTEST_HAS_MATCHER_VARIADIC': None,
308
    'IUTEST_HAS_REGEX': None,
309
    'IUTEST_HAS_MATCHER_ELEMENTSAREARRAYFORWARD': None,
310
    'IUTEST_HAS_MATCHER_ELEMENTSARE': None,
311
    'IUTEST_HAS_VARIADIC_PAIRWISE': None,
312
    'IUTEST_HAS_VARIADIC_COMBINE': None,
313
    'IUTEST_HAS_VARIADIC_VALUES': None,
314
    'IUTEST_HAS_PAIRWISE': None,
315
    'IUTEST_HAS_COMBINE': None,
316
    'IUTEST_HAS_BITWISE_EXPRESSION_DECOMPOSE': None,
317
    'IUTEST_USE_THROW_ON_ASSERTION_FAILURE': None,
318
    'IUTEST_HAS_SPI_LAMBDA_SUPPORT': None,
319
    'IUTEST_HAS_LAMBDA_STATEMENTS': None,
320
    'IUTEST_HAS_PEEP_FUNC': None,
321
    'IUTEST_HAS_PEEP_STATIC_FUNC': None,
322
    'IUTEST_HAS_PEEP_CLASS': None,
323
    'IUTEST_HAS_VARIADIC_PRED': None,
324
    'IUTEST_HAS_TYPED_TEST_APPEND_TYPENAME': None,
325
    'IUTEST_HAS_LONG_DOUBLE': None,
326
    'IUTEST_HAS_CLOCK': None,
327
    'IUTEST_HAS_CHAR16_T_PRINTABLE': None,
328
    'IUTEST_HAS_CHAR32_T_PRINTABLE': None,
329
    'IUTEST_USE_OWN_STRING_VIEW': None,
330
}
331
332
iutest_config_macro = {
333
    'IUTEST_HAS_LIB': '0',
334
    'IUTEST_HAS_PARAM_TEST': '1',
335
    'IUTEST_HAS_TYPED_TEST': '1',
336
    'IUTEST_HAS_TYPED_TEST_P': '1',
337
    'IUTEST_TYPED_TEST_P_STRICT': '1',
338
    'IUTEST_HAS_MATCHERS': '1',
339
    'IUTEST_HAS_VALUESGEN': '1',
340
    'IUTEST_HAS_RANDOMVALUES': '1',
341
    'IUTEST_HAS_CONCAT': '1',
342
    'IUTEST_HAS_CSVPARAMS': '1',
343
    'IUTEST_HAS_TESTNAME_ALIAS_JP': '0',
344
    'IUTEST_HAS_TESTFIXTURE_ALIAS_BY_TUPLE': '1',
345
    'IUTEST_HAS_AUTOFIXTURE_PARAM_TEST': '1',
346
    'IUTEST_HAS_ANY_PARAM_TEST': '1',
347
    'IUTEST_HAS_PARAM_TEST_PARAM_NAME_GENERATOR': '1',
348
    'IUTEST_HAS_IF_EXISTS': '0',
349
    'IUTEST_HAS_ANALYSIS_ASSUME': '0',
350
    'IUTEST_HAS_IGNORE_TEST': '0',
351
    'IUTEST_HAS_MINIDUMP': '0',
352
    'IUTEST_HAS_STRSTREAM': '0',
353
    'IUTEST_HAS_STRINGSTREAM': '1',
354
    'IUTEST_HAS_IOMANIP': '1',
355
    'IUTEST_HAS_CTIME': '1',
356
    'IUTEST_HAS_GETTIMEOFDAY': '1',
357
    'IUTEST_HAS_HDR_SYSTIME': '1',
358
    'IUTEST_HAS_FOPEN': '1',
359
    'IUTEST_HAS_FILE_STAT': '1',
360
    'IUTEST_HAS_CLASS_MEMBER_TEMPLATE_SPECIALIZATION': '0',
361
    'IUTEST_HAS_GENERIC': '0',
362
    'IUTEST_HAS_MEMORY_SANITIZER': '0',
363
    'IUTEST_HAS_ADDRESS_SANITIZER': '0',
364
    'IUTEST_HAS_THREAD_SANITIZER': '0',
365
    'IUTEST_HAS_SEH': '0',
366
    'IUTEST_USE_OWN_LIST': '0',
367
    'IUTEST_HAS_MATCHER_FLOATINGPOINT_NEAR': '1',
368
    'IUTEST_HAS_MATCHER_EACH': '1',
369
    'IUTEST_HAS_MATCHER_POINTWISE': '1',
370
    'IUTEST_HAS_GENRAND': '1',
371
    'IUTEST_HAS_PACKAGE': '1',
372
    'IUTEST_HAS_PEEP': '1',
373
    'IUTEST_HAS_SOCKET': '1',
374
    'IUTEST_HAS_PRINT_TO': '1',
375
    'IUTEST_HAS_ARITHMETIC_EXPRESSION_DECOMPOSE': '1',
376
    'IUTEST_HAS_STATIC_ASSERT_TYPEEQ': '1',
377
    'IUTEST_HAS_ASSERTION_RETURN': '1',
378
    'IUTEST_HAS_ASSERTION_NOEQUALTO_OBJECT': '1',
379
    'IUTEST_HAS_TESTNAME_ALIAS': '1',
380
    'IUTEST_HAS_REPORT_SKIPPED': '1',
381
    'IUTEST_HAS_STREAM_BUFFER': '1',
382
    'IUTEST_HAS_STREAM_RESULT': '0',
383
    'IUTEST_HAS_BIGGESTINT_OSTREAM': '1',
384
    'IUTEST_CHECK_STRICT': '1',
385
    'IUTEST_HAS_COLORCONSOLE': '0',
386
    'IUTEST_HAS_ATTRIBUTE_LIKELY_UNLIKELY': '0',
387
    'IUTEST_HAS_BUILTIN_EXPECT': '0',
388
    'IUTEST_HAS_PARAM_METHOD_TEST': '1',
389
    'IUTEST_HAS_MATCHER_OPTIONAL': '1',
390
    'IUTEST_TYPED_TEST_APPEND_TYPENAME': '0',
391
    'IUTEST_HAS_FILENO': '0',
392
}
393
394
expands_macros = [
395
    'IUTEST_IPP_INLINE',
396
    'IUTEST_ATTRIBUTE_DEPRECATED_',
397
    'IUTEST_ATTRIBUTE_PURE_',
398
    'IUTEST_ATTRIBUTE_INIT_PRIORITY_',
399
    'IUTEST_ATTRIBUTE_LIKELY_',
400
    'IUTEST_ATTRIBUTE_UNLIKELY_',
401
    'IUTEST_HAS_ATTRIBUTE_DEPRECATED',
402
    'IUTEST_CXX_MODULE_EXPORT',
403
    'IUTEST_ATTRIBUTE_NO_SANITIZE_MEMORY',
404
    'IUTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS',
405
    'IUTEST_ATTRIBUTE_NO_SANITIZE_THREAD',
406
    'IUTEST_ATTRIBUTE_NO_SANITIZE_ALL',
407
    'IUTEST_HAS_TESTSUITE',
408
    'IUTEST_HAS_TESTCASE',
409
]
410
411
# expand function macros
412
expand_function_macros = [
413
    'IUTEST_PRAGMA_CRT_SECURE_WARN_DISABLE_BEGIN',
414
    'IUTEST_PRAGMA_CRT_SECURE_WARN_DISABLE_END',
415
    'IUTEST_PRAGMA_EXTERN_TEMPLATE_WARN_DISABLE_BEGIN',
416
    'IUTEST_PRAGMA_EXTERN_TEMPLATE_WARN_DISABLE_END',
417
    'IUTEST_PRAGMA_CONSTEXPR_CALLED_AT_RUNTIME_WARN_DISABLE_BEGIN',
418
    'IUTEST_PRAGMA_CONSTEXPR_CALLED_AT_RUNTIME_WARN_DISABLE_END',
419
    'IUTEST_PRAGMA_MSC_WARN_PUSH',
420
    'IUTEST_PRAGMA_MSC_WARN_DISABLE',
421
    'IUTEST_PRAGMA_MSC_WARN_POP',
422
    'IUTEST_PRAGMA_UNUSED_LOCAL_TYPEDEFS_WARN_DISABLE_BEGIN',
423
    'IUTEST_PRAGMA_UNUSED_LOCAL_TYPEDEFS_WARN_DISABLE_END',
424
    'IUTEST_PRAGMA_UNREACHCODE_WARN_DISABLE_BEGIN',
425
    'IUTEST_PRAGMA_UNREACHCODE_WARN_DISABLE_END',
426
    'IUTEST_PRAGMA_WARN_DISABLE_EMPTY_BODY',
427
    'IUTEST_PRAGMA_WARN_FORMAT_NONLITERAL',
428
    'IUTEST_PRAGMA_WARN_CXX14_CONSTEXPR_NOT_IMPLY_CONST',
429
    'IUTEST_WORKAROUND_MSC_STLSTREAM_C4250',
430
    'IUTEST_EXPLICIT_TEMPLATE_TYPE_',
431
    'IUTEST_IF_EXISTS',
432
    'IUTEST_IF_NOT_EXISTS',
433
    'IUTEST_STATIC_EXISTS',
434
    'IUTEST_STATIC_ASSERT_IF_EXISTS',
435
    'IUTEST_STATIC_ASSERT_IF_NOT_EXISTS',
436
    'IUTEST_ANALYSIS_ASSUME',
437
    'IUTEST_PP_ENUM_CASE_RETURN_STRING',
438
    'IUTEST_CLASS_INITIALIZE',
439
    'IUTEST_CLASS_CLEANUP',
440
    'IUTEST_METHOD_INITIALIZE',
441
    'IUTEST_METHOD_CLEANUP',
442
    'IUTEST_PRAGMA_MESSAGE',
443
    'IUTEST_TEST_COMPILEERROR',
444
    'IUTEST_TEST_STATICASSERT',
445
    # 'IUTEST_MAKE_ASSERTIONRESULT_',
446
]
447
448
#
449
has_features = {
450
}
451
452
has_include = {
453
}
454
455
rename_macro = {
456
    'IUTEST_ASSERT_FAILURE': 'II_A_FAIL',
457
    'IUTEST_EXPECT_FAILURE': 'II_E_FAIL',
458
    'IUTEST_INFORM_FAILURE': 'II_I_FAIL',
459
    'IUTEST_ASSUME_FAILURE': 'II_M_FAIL',
460
    'IUTEST_ASSERT_FAILURE_AT': 'II_A_FAIL_AT',
461
    'IUTEST_EXPECT_FAILURE_AT': 'II_E_FAIL_AT',
462
    'IUTEST_INFORM_FAILURE_AT': 'II_I_FAIL_AT',
463
    'IUTEST_ASSUME_FAILURE_AT': 'II_M_FAIL_AT',
464
    'IUTEST_ATTRIBUTE_UNUSED_': 'II_ATR_U',
465
    'IUTEST_ATTRIBUTE_NORETURN_': 'II_ATR_NR',
466
    'IUTEST_ATTRIBUTE_FORMAT_PRINTF': 'II_ATR_F_P',
467
    'IUTEST_ATTRIBUTE_FORMAT': 'II_ATR_F',
468
    'IUTEST_CXX_OVERRIDE': 'II_CXX_O',
469
    'IUTEST_CXX_NOEXCEPT_SPEC': 'II_CXX_NEX_S',
470
    'IUTEST_CXX_DEFAULT_FUNCTION': 'II_CXX_DF_F',
471
    'IUTEST_CXX_DELETED_FUNCTION': 'II_CXX_DL_F',
472
    'IUTEST_CXX_FINAL': 'II_CXX_F',
473
    'IUTEST_CXX_EXPLICIT_CONVERSION': 'II_CXX_E_C',
474
    'IUTEST_CXX_CONSTEXPR': 'II_CXX_CE',
475
    'IUTEST_CXX14_CONSTEXPR': 'II_CXX14_CE',
476
    'IUTEST_CXX_CONSTEXPR_OR_CONST': 'II_CXX_C_O_C',
477
    'IUTEST_AMBIGUOUS_ELSE_BLOCKER_': 'II_AMB_E_B',
478
    'IUTEST_SUPPRESS_UNREACHABLE_CODE_WARNING': 'II_S_UR_C_W',
479
    'IUTEST_APPEND_EXPLICIT_TEMPLATE_TYPE_': 'II_A_E_TT',
480
    'IUTEST_PRAGMA_ASSIGNMENT_OPERATOR_COULD_NOT_GENERATE_WARN_DISABLE_BEGIN': 'II_PGM_A_O_CN_G_W_D_B',
481
    'IUTEST_PRAGMA_ASSIGNMENT_OPERATOR_COULD_NOT_GENERATE_WARN_DISABLE_END': 'II_PGM_A_O_CN_G_W_D_E',
482
    'IUTEST_PRAGMA_WARN_FLOAT_EQUAL': 'II_PGM_W_FE',
483
    'IUTEST_PRAGMA_WARN_CAST_ALIGN': 'II_PGM_W_CA',
484
    'IUTEST_PRAGMA_WARN_DISABLE_NOEXCEPT_TPYE': 'II_PGM_W_D_NE_T',
485
    'IUTEST_PRAGMA_WARN_DISABLE_SIGN_COMPARE': 'II_PGM_W_D_S_C',
486
    'IUTEST_PRAGMA_WARN_DISABLE_DANGLING_ELSE': 'II_PGM_W_D_D_E',
487
    'IUTEST_PRAGMA_CLANG_WARN_PUSH': 'II_PGM_C_W_PU',
488
    'IUTEST_PRAGMA_CLANG_WARN_DISABLE': 'II_PGM_C_W_D',
489
    'IUTEST_PRAGMA_CLANG_WARN_POP': 'II_PGM_C_W_PP',
490
    'IUTEST_PRAGMA_GCC_WARN_PUSH': 'II_PGM_G_W_PU',
491
    'IUTEST_PRAGMA_GCC_WARN_DISABLE': 'II_PGM_G_W_D',
492
    'IUTEST_PRAGMA_GCC_WARN_POP': 'II_PGM_G_W_PP',
493
    'IUTEST_PRAGMA_WARN_PUSH': 'II_PGM_W_PU',
494
    # 'IUTEST_PRAGMA_WARN_DISABLE': 'II_PGM_W_D',
495
    'IUTEST_PRAGMA_WARN_POP': 'II_PGM_W_PP',
496
    'IUTEST_PP_DISALLOW_COPY_AND_ASSIGN': 'IP_DIS_C_A_A',
497
    'IUTEST_PP_DISALLOW_ASSIGN': 'IP_DIS_A',
498
    'IUTEST_PP_DISALLOW_MOVE_AND_COPY_AND_ASSIGN': 'IP_DIS_M_A_C_A_A',
499
    'IUTEST_PP_NAMESPACE_ENUM_CASE_RETURN_STRING': 'IP_NS_E_C_R_S',
500
    'IUTEST_PP_INC': 'IP_INC',
501
    'IUTEST_PP_DEC': 'IP_DEC',
502
    'IUTEST_PP_CAT': 'IP_CAT',
503
    'IUTEST_PP_EMPTY': 'IP_EMPTY',
504
    'IUTEST_PP_IS_BEGIN_PARENS': 'IP_IS_B_PAR',
505
    'IUTEST_LIBSTDCXX_VERSION': 'II_LSTDCXX_V',
506
    'IUTEST_PRED_FORMAT_': 'II_PRD_FMT_',
507
    'IUTEST_PRED_FORMAT1_': 'II_PRD_FMT1_',
508
    'IUTEST_PRED_FORMAT2_': 'II_PRD_FMT2_',
509
    'IUTEST_PRED_FORMAT3_': 'II_PRD_FMT3_',
510
    'IUTEST_PRED_FORMAT4_': 'II_PRD_FMT4_',
511
    'IUTEST_PRED_FORMAT5_': 'II_PRD_FMT5_',
512
    'IUTEST_THROW_PRED_FORMAT2_': 'II_T_PRD_FMT2_',
513
    'IUTEST_PRED_': 'II_PRD_',
514
    'IUTEST_PRED1_': 'II_PRD1_',
515
    'IUTEST_PRED2_': 'II_PRD2_',
516
    'IUTEST_PRED3_': 'II_PRD3_',
517
    'IUTEST_PRED4_': 'II_PRD4_',
518
    'IUTEST_PRED5_': 'II_PRD5_',
519
    'IUTEST_TEST_ASSERT_': 'II_T_ASRT_',
520
    'IUTEST_TEST_CLASS_NAME_': 'II_T_CLS_N_',
521
    'IUTEST_TEST_INSTANCE_NAME_': 'II_T_INST_N_',
522
    'IUTEST_PMZ_TEST_CLASS_NAME_': 'II_P_T_CLS_N_',
523
    'IUTEST_MESSAGE_AT': 'II_MSG_AT',
524
    'IUTEST_MESSAGE': 'II_MSG',
525
    'IUTEST_IS_NULLLITERAL': 'II_IS_NL',
526
    'IUTEST_ALIAS_TESTNAME_F_': 'II_ALS_TN_F_',
527
    'IUTEST_ALIAS_TESTNAME_F': 'II_ALS_TN_F',
528
    'IUTEST_ALIAS_TESTNAME_': 'II_ALS_TN',
529
    'IUTEST_THROUGH_ANALYSIS_ASSUME_': 'II_TRGH_A_A_',
530
    'IUTEST_PP_ENUM_SHIFTED_BINARY_PARAMS': 'IP_ENM_S_B_P',
531
    'IUTEST_PP_ENUM_SHIFTED_BINARY': 'IP_ENM_S_B',
532
    'IUTEST_PP_ENUM_SHIFTED_PARAMS': 'IP_ENM_S_P',
533
    'IUTEST_PP_ENUM_BINARY_PARAMS': 'IP_ENM_B_P',
534
    'IUTEST_PP_ENUM_SHIFTED': 'IP_ENM_S',
535
    'IUTEST_PP_ENUM_BINARY': 'IP_ENM_B',
536
    'IUTEST_PP_ENUM_PARAMS': 'IP_ENM_P',
537
    'IUTEST_PP_ENUM': 'IP_ENM',
538
    'IUTEST_TEST_EQ_COLLECTIONS': 'II_T_EQ_CLCT',
539
    'IUTEST_TEST_NE_COLLECTIONS': 'II_T_NE_CLCT',
540
    'IUTEST_TEST_EQ_RANGE': 'II_T_EQ_RNG',
541
    'IUTEST_TEST_NE_RANGE': 'II_T_NE_RNG',
542
    'IUTEST_TEST_STRLNEQ': 'II_T_SLN',
543
    'IUTEST_TEST_STRIN': 'II_T_SIN',
544
    'IUTEST_TEST_STRNOTIN': 'II_T_SNIN',
545
    'IUTEST_TEST_MATCHES_REGEXEQ': 'II_T_M_RGE',
546
    'IUTEST_TEST_MATCHES_REGEXNE': 'II_T_M_RGN',
547
    'IUTEST_TEST_CONTAINS_REGEXEQ': 'II_T_C_RGE',
548
    'IUTEST_TEST_CONTAINS_REGEXNE': 'II_T_C_RGN',
549
}
550
551
rename_text = {
552
    'backward': 'bkw',
553
    # 'CmpHelper': 'CHlpr',
554
    'IUTEST_MAKE_ASSERTIONRESULT_': '',
555
    'II_DECL_STREQ_COMPARE_HELPER_': 'II_DECL_SE_C_H_',
556
    'II_INSTANTIATE_TEST_CASE_AP_': 'II_INST_TC_AP_',
557
    'II_TEST_AP_FIXTURE_NAME_': 'II_T_AP_FIX_N_',
558
    'II_ALIAS_TESTNAME_AP_': 'II_ALS_TN_AP_',
559
    'IUTEST_GET_PACKAGENAME_': 'II_GET_PKGN_',
560
    'IUTEST_CONCAT_PACKAGE_': 'II_CC_PKG_',
561
    'IUTEST_COND_LIKELY': '',
562
    'IUTEST_COND_UNLIKELY': '',
563
}
564
565
debug = False
566
567
class WandboxPreprocessor:
568
    pp = IutestPreprocessor(predefined_macros
569
        , iutest_config_macro
570
        , expand_function_macros
571
        , expands_macros
572
        , has_features
573
        , has_include)
574
575
    def preprocess(self, code, add_macros):
576
        self.pp.set_debug_flag(debug)
577
        return self.pp.preprocess(code, add_macros)
578
579
    def remove_empty_ppif(self, code):
580
        return self.pp.remove_empty_ppif(code)
581
582
    def remove_redudant(self, code):
583
        dst = ""
584
        for line in code.splitlines():
585
            if '#define IP_D_' in line:
586
                v = line.split()
587
                try:
588
                    if int(v[2]) > 50:
589
                        continue
590
                except ValueError:
591
                    pass
592
            elif '#define IP_I_' in line:
593
                v = line.split()
594
                try:
595
                    if int(v[2]) > 51:
596
                        continue
597
                except ValueError:
598
                    pass
599
            elif '#define IP_B_' in line:
600
                v = line.split()
601
                v2 = v[1].split('_')
602
                try:
603
                    if int(v2[2]) > 51:
604
                        continue
605
                except ValueError:
606
                    pass
607
            elif 'IUTEST_MBS_CODE' in line:
608
                continue
609
            line += "\n"
610
            dst += line
611
        return dst
612
613
    def rename_macros(self, code):
614
        dst = ""
615
        global rename_macro
616
        found_macros = {}
617
        for k, v in rename_macro.items():
618
            if collections.Counter(rename_macro.values())[v] > 1:
619
                print('error: duplicated ' + v)
620
                return
621
        RE_DEFINE = re.compile(r'#\s*define\s([\w_]+)(.*)$')
622
        for line in code.splitlines():
623
            m = RE_DEFINE.match(line)
624
            if m:
625
                d = m.group(1)
626
                if d in rename_macro:
627
                    alias = rename_macro[d]
628
                    found_macros[d] = alias
629
                    del rename_macro[d]
630
            if len(rename_macro) == 0:
631
                break
632
        for line in code.splitlines():
633
            for k, v in found_macros.items():
634
                line = re.sub(k + r'(?=[\W]|$)', v, line)
635
                # line = line.replace(k, v)
636
            for k, v in rename_text.items():
637
                line = line.replace(k, v)
638
            for k, v in found_macros.items():
639
                if k in line:
640
                    print(k)
641
            line += "\n"
642
            dst += line
643
        for k, v in found_macros.items():
644
            dst += "#define " + k + " " + v + "\n"
645
        return dst
646
647
    def remove_redudant_pragma(self, code):
648
        dst = ""
649
        RE_PRAGMA_WARN_STRIP = re.compile(r'II_PGM_W_PU\(\)(.*?)II_PGM_W_PP\(\)')
650
        for line in code.splitlines():
651
            for m in RE_PRAGMA_WARN_STRIP.finditer(line):
652
                if 'II_PGM_W' not in m.group(1):
653
                    line = line.replace(m.group(0), m.group(1))
654
            line += "\n"
655
            dst += line
656
        return dst
657
658
659
def default_pp():
660
    output_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../../fused-src")
661
    output = "iutest.wandbox.min.hpp"
662
    f = codecs.open(os.path.join(output_dir, "iutest.min.hpp"), 'r', 'utf-8-sig')
663
    code = f.read()
664
    f.close()
665
    output_file = codecs.open(os.path.join(output_dir, output), 'w', 'utf-8-sig')
666
    pp = WandboxPreprocessor()
667
    code = pp.preprocess(code, None)
668
    code = pp.remove_empty_ppif(code)
669
    code = pp.remove_redudant(code)
670
    code = pp.rename_macros(code)
671
    code = pp.remove_redudant_pragma(code)
672
    output_file.write(code)
673
    output_file.close()
674
675
676 View Code Duplication
def clang_pp():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
677
    output_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../../fused-src")
678
    output = "iutest.wandbox.min.clang.hpp"
679
    f = codecs.open(os.path.join(output_dir, "iutest.wandbox.min.hpp"), 'r', 'utf-8-sig')
680
    code = f.read()
681
    f.close()
682
    output_file = codecs.open(os.path.join(output_dir, output), 'w', 'utf-8-sig')
683
    clang_predefined_macros = {
684
        '__clang__': '1',
685
        '__GNUC__': None,
686
        '__GXX_EXPERIMENTAL_CXX0X__': None,
687
    }
688
    clang_predefined_macros.update(predefined_macros)
689
    clagn_config_macro = {
690
        'IUTEST_HAS_COUNTER_MACRO': '1',
691
        'IUTEST_EXPLICIT_INSTANTIATION_ACCESS_PRIVATE_OVERLOAD_MEMBER_FUNCTION': '0',
692
    }
693
    clagn_config_macro.update(iutest_config_macro)
694
    pp = IutestPreprocessor(clang_predefined_macros,
695
        clagn_config_macro,
696
        expand_function_macros,
697
        expands_macros,
698
        has_features,
699
        has_include)
700
    code = pp.preprocess(code, None)
701
    code = pp.remove_empty_ppif(code)
702
    output_file.write(code)
703
    output_file.close()
704
705
706 View Code Duplication
def gcc_pp():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
707
    output_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../../fused-src")
708
    output = "iutest.wandbox.min.gcc.hpp"
709
    f = codecs.open(os.path.join(output_dir, "iutest.wandbox.min.hpp"), 'r', 'utf-8-sig')
710
    code = f.read()
711
    f.close()
712
    output_file = codecs.open(os.path.join(output_dir, output), 'w', 'utf-8-sig')
713
    gcc_predefined_macros = {
714
        '__clang__': None,
715
        '__GNUC__': '1',
716
        '_LIBCPP_VERSION': None,
717
    }
718
    gcc_predefined_macros.update(predefined_macros)
719
    clagn_config_macro = {
720
        'IUTEST_HAS_COUNTER_MACRO': '0',
721
        'IUTEST_EXPLICIT_INSTANTIATION_ACCESS_PRIVATE_OVERLOAD_MEMBER_FUNCTION': '1',
722
    }
723
    clagn_config_macro.update(iutest_config_macro)
724
    pp = IutestPreprocessor(gcc_predefined_macros,
725
        iutest_config_macro,
726
        expand_function_macros,
727
        expands_macros,
728
        has_features,
729
        has_include)
730
    code = pp.preprocess(code, None)
731
    code = pp.remove_empty_ppif(code)
732
    output_file.write(code)
733
    output_file.close()
734
735
736
def main():
737
    global debug
738
    argc = len(sys.argv)
739
    if argc == 2:
740
        if sys.argv[1] == 'debug':
741
            debug = True
742
    default_pp()
743
    clang_pp()
744
    gcc_pp()
745
746
if __name__ == '__main__':
747
    main()
748