Skip to content

Commit 132a5a3

Browse files
authored
improved setting of platform in tests / also improved platform tests (#4787)
* fixture.h: added TODO * TestPlatform: improved tests for built-in platforms * TestPlatform: changed tests to TODO asserts * testfilelister.cpp: added TODO * fixture.h: added `PLATFORM` macro to load platform / use `PLATFORM` in tests * platform.h: corrected capitalization in `Platform::platformString(PlatformType)` and bail on unknown type * fixture.h: fixed `readability-redundant-string-cstr` clang-tidy warning * testplatform.cpp: fixed `functionConst` selfcheck warnings
1 parent 2be1e36 commit 132a5a3

21 files changed

Lines changed: 154 additions & 69 deletions

lib/platform.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "config.h"
2525

2626
#include <climits>
27+
#include <stdexcept>
2728
#include <string>
2829
#include <vector>
2930

@@ -149,9 +150,9 @@ namespace cppcheck {
149150
static const char *platformString(PlatformType pt) {
150151
switch (pt) {
151152
case Unspecified:
152-
return "Unspecified";
153+
return "unspecified";
153154
case Native:
154-
return "Native";
155+
return "native";
155156
case Win32A:
156157
return "win32A";
157158
case Win32W:
@@ -165,7 +166,7 @@ namespace cppcheck {
165166
case PlatformFile:
166167
return "platformFile";
167168
default:
168-
return "unknown";
169+
throw std::runtime_error("unknown platform");
169170
}
170171
}
171172

test/fixture.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ extern std::ostringstream errout;
141141
// NOLINTNEXTLINE(readability-redundant-declaration)
142142
extern std::ostringstream output;
143143

144+
// TODO: most asserts do not actually assert i.e. do not return
144145
#define TEST_CASE( NAME ) do { if (prepareTest(#NAME)) { setVerbose(false); NAME(); } } while (false)
145146
#define ASSERT( CONDITION ) if (!assert_(__FILE__, __LINE__, (CONDITION))) return
146147
#define ASSERT_LOC( CONDITION, FILE_, LINE_ ) assert_(FILE_, LINE_, (CONDITION))
@@ -165,4 +166,6 @@ extern std::ostringstream output;
165166
} \
166167
} while (false)
167168

169+
#define PLATFORM( S, P ) do { std::string errstr; assertEquals(__FILE__, __LINE__, true, S.platform(cppcheck::Platform::platformString(P), errstr, {exename}), errstr); } while (false)
170+
168171
#endif // fixtureH

test/testcharvar.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class TestCharVar : public TestFixture {
3434
Settings settings;
3535

3636
void run() override {
37-
settings.platform(Settings::Unspecified);
37+
PLATFORM(settings, Settings::Unspecified);
3838
settings.severity.enable(Severity::warning);
3939
settings.severity.enable(Severity::portability);
4040

test/testclangimport.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1052,10 +1052,15 @@ class TestClangImport : public TestFixture {
10521052
#define GET_SYMBOL_DB(AST) \
10531053
Settings settings; \
10541054
settings.clang = true; \
1055-
settings.platform(cppcheck::Platform::PlatformType::Unix64); \
1055+
{ \
1056+
std::string errstr; \
1057+
ASSERT_EQUALS_MSG(true, settings.platform("unix64", errstr, {exename.c_str()}), errstr); \
1058+
} \
10561059
Tokenizer tokenizer(&settings, this); \
1057-
std::istringstream istr(AST); \
1058-
clangimport::parseClangAstDump(&tokenizer, istr); \
1060+
{ \
1061+
std::istringstream istr(AST); \
1062+
clangimport::parseClangAstDump(&tokenizer, istr); \
1063+
} \
10591064
const SymbolDatabase *db = tokenizer.getSymbolDatabase(); \
10601065
ASSERT(db)
10611066

test/testcondition.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ class TestCondition : public TestFixture {
4545

4646
void run() override {
4747
// known platform..
48-
settings0.platform(cppcheck::Platform::PlatformType::Native);
49-
settings1.platform(cppcheck::Platform::PlatformType::Native);
48+
PLATFORM(settings0, cppcheck::Platform::Native);
49+
PLATFORM(settings1, cppcheck::Platform::Native);
5050

5151
LOAD_LIB_2(settings0.library, "qt.cfg");
5252
LOAD_LIB_2(settings0.library, "std.cfg");
@@ -5580,7 +5580,7 @@ class TestCondition : public TestFixture {
55805580
void compareOutOfTypeRange() {
55815581
Settings settingsUnix64;
55825582
settingsUnix64.severity.enable(Severity::style);
5583-
settingsUnix64.platform(cppcheck::Platform::PlatformType::Unix64);
5583+
PLATFORM(settingsUnix64, cppcheck::Platform::PlatformType::Unix64);
55845584

55855585
check("void f(unsigned char c) {\n"
55865586
" if (c == 256) {}\n"

test/testfilelister.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,10 @@ class TestFileLister : public TestFixture {
3737
// bail out if the tests are not executed from the base folder
3838
{
3939
std::ifstream fin("test/testfilelister.cpp");
40-
if (!fin.is_open())
40+
if (!fin.is_open()) {
41+
// TODO: log
4142
return;
43+
}
4244
}
4345

4446
TEST_CASE(isDirectory);

test/testio.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ class TestIO : public TestFixture {
9494
if (portability)
9595
settings.severity.enable(Severity::portability);
9696
settings.certainty.setEnabled(Certainty::inconclusive, inconclusive);
97-
settings.platform(platform);
97+
PLATFORM(settings, platform);
9898

9999
// Tokenize..
100100
Tokenizer tokenizer(&settings, this);

test/testother.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1991,7 +1991,7 @@ class TestOther : public TestFixture {
19911991
ASSERT_EQUALS("", errout.str());
19921992

19931993
Settings settings1;
1994-
settings1.platform(Settings::Win64);
1994+
PLATFORM(settings1, cppcheck::Platform::Win64);
19951995
check("using ui64 = unsigned __int64;\n"
19961996
"ui64 Test(ui64 one, ui64 two) { return one + two; }\n",
19971997
/*filename*/ nullptr, /*experimental*/ false, /*inconclusive*/ true, /*runSimpleChecks*/ true, /*verbose*/ false, &settings1);
@@ -2137,12 +2137,12 @@ class TestOther : public TestFixture {
21372137
"void f(X x) {}";
21382138

21392139
Settings s32(_settings);
2140-
s32.platform(cppcheck::Platform::Unix32);
2140+
PLATFORM(s32, cppcheck::Platform::Unix32);
21412141
check(code, &s32);
21422142
ASSERT_EQUALS("[test.cpp:5]: (performance) Function parameter 'x' should be passed by const reference.\n", errout.str());
21432143

21442144
Settings s64(_settings);
2145-
s64.platform(cppcheck::Platform::Unix64);
2145+
PLATFORM(s64, cppcheck::Platform::Unix64);
21462146
check(code, &s64);
21472147
ASSERT_EQUALS("", errout.str());
21482148
}
@@ -7421,7 +7421,7 @@ class TestOther : public TestFixture {
74217421

74227422
// #9040
74237423
Settings settings1;
7424-
settings1.platform(Settings::Win64);
7424+
PLATFORM(settings1, cppcheck::Platform::Win64);
74257425
check("using BOOL = unsigned;\n"
74267426
"int i;\n"
74277427
"bool f() {\n"

test/testplatform.cpp

Lines changed: 109 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,11 @@ class TestPlatform : public TestFixture {
2929
private:
3030
void run() override {
3131
TEST_CASE(empty);
32-
TEST_CASE(valid_config_native_1);
33-
TEST_CASE(valid_config_native_2);
32+
TEST_CASE(valid_config_win32a);
33+
TEST_CASE(valid_config_unix64);
34+
TEST_CASE(valid_config_win32w);
35+
TEST_CASE(valid_config_unix32);
36+
TEST_CASE(valid_config_win64);
3437
TEST_CASE(valid_config_file_1);
3538
TEST_CASE(valid_config_file_2);
3639
TEST_CASE(valid_config_file_3);
@@ -50,50 +53,133 @@ class TestPlatform : public TestFixture {
5053
// An empty platform file does not change values, only the type.
5154
const char xmldata[] = "<?xml version=\"1.0\"?>\n<platform/>";
5255
cppcheck::Platform platform;
53-
ASSERT(platform.platform(cppcheck::Platform::Win64));
54-
ASSERT(readPlatform(platform, xmldata));
55-
ASSERT_EQUALS(cppcheck::Platform::PlatformFile, platform.platformType);
56-
ASSERT(!platform.isWindowsPlatform());
57-
ASSERT_EQUALS(8, platform.char_bit);
58-
ASSERT_EQUALS('\0', platform.defaultSign);
56+
// TODO: this should fail - platform files need to be complete
57+
TODO_ASSERT(!readPlatform(platform, xmldata));
58+
}
59+
60+
void valid_config_win32a() const {
61+
// Verify if native Win32A platform is loaded correctly
62+
cppcheck::Platform platform;
63+
PLATFORM(platform, cppcheck::Platform::Win32A);
64+
ASSERT_EQUALS(cppcheck::Platform::Win32A, platform.platformType);
65+
ASSERT(platform.isWindowsPlatform());
5966
ASSERT_EQUALS(1, platform.sizeof_bool);
6067
ASSERT_EQUALS(2, platform.sizeof_short);
6168
ASSERT_EQUALS(4, platform.sizeof_int);
6269
ASSERT_EQUALS(4, platform.sizeof_long);
6370
ASSERT_EQUALS(8, platform.sizeof_long_long);
71+
ASSERT_EQUALS(4, platform.sizeof_float);
72+
ASSERT_EQUALS(8, platform.sizeof_double);
73+
ASSERT_EQUALS(8, platform.sizeof_long_double);
74+
ASSERT_EQUALS(2, platform.sizeof_wchar_t);
75+
ASSERT_EQUALS(4, platform.sizeof_size_t);
76+
ASSERT_EQUALS(4, platform.sizeof_pointer);
77+
ASSERT_EQUALS('\0', platform.defaultSign);
78+
ASSERT_EQUALS(8, platform.char_bit);
79+
ASSERT_EQUALS(16, platform.short_bit);
80+
ASSERT_EQUALS(32, platform.int_bit);
81+
ASSERT_EQUALS(32, platform.long_bit);
82+
ASSERT_EQUALS(64, platform.long_long_bit);
6483
}
6584

66-
void valid_config_native_1() const {
67-
// Verify if native Win32A platform is loaded correctly
85+
void valid_config_unix64() const {
86+
// Verify if native Unix64 platform is loaded correctly
6887
cppcheck::Platform platform;
69-
ASSERT(platform.platform(cppcheck::Platform::Win32A));
70-
ASSERT_EQUALS(cppcheck::Platform::Win32A, platform.platformType);
71-
ASSERT(platform.isWindowsPlatform());
88+
PLATFORM(platform, cppcheck::Platform::Unix64);
89+
ASSERT_EQUALS(cppcheck::Platform::Unix64, platform.platformType);
90+
ASSERT(!platform.isWindowsPlatform());
91+
ASSERT_EQUALS(1, platform.sizeof_bool);
92+
ASSERT_EQUALS(2, platform.sizeof_short);
93+
ASSERT_EQUALS(4, platform.sizeof_int);
94+
ASSERT_EQUALS(8, platform.sizeof_long);
95+
ASSERT_EQUALS(8, platform.sizeof_long_long);
96+
ASSERT_EQUALS(4, platform.sizeof_float);
97+
ASSERT_EQUALS(8, platform.sizeof_double);
98+
ASSERT_EQUALS(16, platform.sizeof_long_double);
99+
ASSERT_EQUALS(4, platform.sizeof_wchar_t);
100+
ASSERT_EQUALS(8, platform.sizeof_size_t);
101+
ASSERT_EQUALS(8, platform.sizeof_pointer);
72102
ASSERT_EQUALS('\0', platform.defaultSign);
73103
ASSERT_EQUALS(8, platform.char_bit);
104+
ASSERT_EQUALS(16, platform.short_bit);
105+
ASSERT_EQUALS(32, platform.int_bit);
106+
ASSERT_EQUALS(64, platform.long_bit);
107+
ASSERT_EQUALS(64, platform.long_long_bit);
108+
}
109+
110+
void valid_config_win32w() const {
111+
// Verify if native Win32W platform is loaded correctly
112+
cppcheck::Platform platform;
113+
PLATFORM(platform, cppcheck::Platform::Win32W);
114+
ASSERT_EQUALS(cppcheck::Platform::Win32W, platform.platformType);
115+
ASSERT(platform.isWindowsPlatform());
74116
ASSERT_EQUALS(1, platform.sizeof_bool);
75117
ASSERT_EQUALS(2, platform.sizeof_short);
76118
ASSERT_EQUALS(4, platform.sizeof_int);
77119
ASSERT_EQUALS(4, platform.sizeof_long);
78120
ASSERT_EQUALS(8, platform.sizeof_long_long);
121+
ASSERT_EQUALS(4, platform.sizeof_float);
122+
ASSERT_EQUALS(8, platform.sizeof_double);
123+
ASSERT_EQUALS(8, platform.sizeof_long_double);
124+
ASSERT_EQUALS(2, platform.sizeof_wchar_t);
125+
ASSERT_EQUALS(4, platform.sizeof_size_t);
126+
ASSERT_EQUALS(4, platform.sizeof_pointer);
127+
ASSERT_EQUALS('\0', platform.defaultSign);
128+
ASSERT_EQUALS(8, platform.char_bit);
79129
ASSERT_EQUALS(16, platform.short_bit);
80130
ASSERT_EQUALS(32, platform.int_bit);
81131
ASSERT_EQUALS(32, platform.long_bit);
82132
ASSERT_EQUALS(64, platform.long_long_bit);
83133
}
84134

85-
void valid_config_native_2() const {
86-
// Verify if native Unix64 platform is loaded correctly
135+
void valid_config_unix32() const {
136+
// Verify if native Unix32 platform is loaded correctly
87137
cppcheck::Platform platform;
88-
ASSERT(platform.platform(cppcheck::Platform::Unix64));
89-
ASSERT_EQUALS(cppcheck::Platform::Unix64, platform.platformType);
138+
PLATFORM(platform, cppcheck::Platform::Unix32);
139+
ASSERT_EQUALS(cppcheck::Platform::Unix32, platform.platformType);
90140
ASSERT(!platform.isWindowsPlatform());
141+
ASSERT_EQUALS(1, platform.sizeof_bool);
142+
ASSERT_EQUALS(2, platform.sizeof_short);
143+
ASSERT_EQUALS(4, platform.sizeof_int);
144+
ASSERT_EQUALS(4, platform.sizeof_long);
145+
ASSERT_EQUALS(8, platform.sizeof_long_long);
146+
ASSERT_EQUALS(4, platform.sizeof_float);
147+
ASSERT_EQUALS(8, platform.sizeof_double);
148+
ASSERT_EQUALS(12, platform.sizeof_long_double);
149+
ASSERT_EQUALS(4, platform.sizeof_wchar_t);
150+
ASSERT_EQUALS(4, platform.sizeof_size_t);
151+
ASSERT_EQUALS(4, platform.sizeof_pointer);
91152
ASSERT_EQUALS('\0', platform.defaultSign);
92153
ASSERT_EQUALS(8, platform.char_bit);
154+
ASSERT_EQUALS(16, platform.short_bit);
155+
ASSERT_EQUALS(32, platform.int_bit);
156+
ASSERT_EQUALS(32, platform.long_bit);
157+
ASSERT_EQUALS(64, platform.long_long_bit);
158+
}
159+
160+
void valid_config_win64() const {
161+
// Verify if native Win64 platform is loaded correctly
162+
cppcheck::Platform platform;
163+
PLATFORM(platform, cppcheck::Platform::Win64);
164+
ASSERT_EQUALS(cppcheck::Platform::Win64, platform.platformType);
165+
ASSERT(platform.isWindowsPlatform());
166+
ASSERT_EQUALS(1, platform.sizeof_bool);
167+
ASSERT_EQUALS(2, platform.sizeof_short);
93168
ASSERT_EQUALS(4, platform.sizeof_int);
169+
ASSERT_EQUALS(4, platform.sizeof_long);
170+
ASSERT_EQUALS(8, platform.sizeof_long_long);
171+
ASSERT_EQUALS(4, platform.sizeof_float);
172+
ASSERT_EQUALS(8, platform.sizeof_double);
173+
ASSERT_EQUALS(8, platform.sizeof_long_double);
174+
ASSERT_EQUALS(2, platform.sizeof_wchar_t);
175+
ASSERT_EQUALS(8, platform.sizeof_size_t);
176+
ASSERT_EQUALS(8, platform.sizeof_pointer);
177+
ASSERT_EQUALS('\0', platform.defaultSign);
178+
ASSERT_EQUALS(8, platform.char_bit);
179+
ASSERT_EQUALS(16, platform.short_bit);
94180
ASSERT_EQUALS(32, platform.int_bit);
95-
ASSERT_EQUALS(8, platform.sizeof_long);
96-
ASSERT_EQUALS(64, platform.long_bit);
181+
ASSERT_EQUALS(32, platform.long_bit);
182+
ASSERT_EQUALS(64, platform.long_long_bit);
97183
}
98184

99185
void valid_config_file_1() {
@@ -184,7 +270,7 @@ class TestPlatform : public TestFixture {
184270
ASSERT_EQUALS(100, platform.long_long_bit);
185271
}
186272

187-
void valid_config_file_3() {
273+
void valid_config_file_3() const {
188274
// Valid platform configuration without any usable information.
189275
// Similar like an empty file.
190276
const char xmldata[] = "<?xml version=\"1.0\"?>\n"
@@ -206,17 +292,8 @@ class TestPlatform : public TestFixture {
206292
" </sizeof1>\n"
207293
" </platform>";
208294
cppcheck::Platform platform;
209-
ASSERT(platform.platform(cppcheck::Platform::Win64));
210-
ASSERT(readPlatform(platform, xmldata));
211-
ASSERT_EQUALS(platform.PlatformFile, platform.platformType);
212-
ASSERT(!platform.isWindowsPlatform());
213-
ASSERT_EQUALS(8, platform.char_bit);
214-
ASSERT_EQUALS('\0', platform.defaultSign);
215-
ASSERT_EQUALS(1, platform.sizeof_bool);
216-
ASSERT_EQUALS(2, platform.sizeof_short);
217-
ASSERT_EQUALS(4, platform.sizeof_int);
218-
ASSERT_EQUALS(4, platform.sizeof_long);
219-
ASSERT_EQUALS(8, platform.sizeof_long_long);
295+
// TODO: needs to fail - files need to be complete
296+
TODO_ASSERT(!readPlatform(platform, xmldata));
220297
}
221298

222299
void valid_config_file_4() {
@@ -287,7 +364,7 @@ class TestPlatform : public TestFixture {
287364
ASSERT(!readPlatform(platform, xmldata));
288365
}
289366

290-
void empty_elements() {
367+
void empty_elements() const {
291368
// Valid platform configuration without any usable information.
292369
// Similar like an empty file.
293370
const char xmldata[] = "<?xml version=\"1.0\"?>\n"
@@ -309,10 +386,7 @@ class TestPlatform : public TestFixture {
309386
" </sizeof>\n"
310387
" </platform>";
311388
cppcheck::Platform platform;
312-
ASSERT(platform.platform(cppcheck::Platform::Win64));
313389
ASSERT(!readPlatform(platform, xmldata));
314-
ASSERT_EQUALS(platform.PlatformFile, platform.platformType);
315-
ASSERT(!platform.isWindowsPlatform());
316390
}
317391

318392
void default_platform() {

test/testpreprocessor.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -480,12 +480,12 @@ class TestPreprocessor : public TestFixture {
480480
simplecpp::TokenList tokens(istr, files, "test.c");
481481

482482
// preprocess code with unix32 platform..
483-
settings.platform(Settings::PlatformType::Unix32);
483+
PLATFORM(settings, Settings::PlatformType::Unix32);
484484
preprocessor.setPlatformInfo(&tokens);
485485
ASSERT_EQUALS("\n1", preprocessor.getcode(tokens, "", files, false));
486486

487487
// preprocess code with unix64 platform..
488-
settings.platform(Settings::PlatformType::Unix64);
488+
PLATFORM(settings, Settings::PlatformType::Unix64);
489489
preprocessor.setPlatformInfo(&tokens);
490490
ASSERT_EQUALS("\n\n\n2", preprocessor.getcode(tokens, "", files, false));
491491
}

0 commit comments

Comments
 (0)