From 856e4c414d4a62bf699939b302995d58cfc4e718 Mon Sep 17 00:00:00 2001 From: PKEuS Date: Thu, 8 Oct 2015 12:53:56 +0200 Subject: [PATCH] Refactorization: Reduced code duplication in testsymboldatabase.cpp --- test/testsymboldatabase.cpp | 91 ++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 51 deletions(-) diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index 114323a7f..fc4b31a09 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -23,18 +23,12 @@ #include #define GET_SYMBOL_DB(code) \ - errout.str(""); \ Tokenizer tokenizer(&settings, this); \ - std::istringstream istr(code); \ - tokenizer.tokenize(istr, "test.cpp"); \ - const SymbolDatabase *db = tokenizer.getSymbolDatabase(); + const SymbolDatabase *db = getSymbolDB_inner(tokenizer, code, "test.cpp"); #define GET_SYMBOL_DB_C(code) \ - errout.str(""); \ Tokenizer tokenizer(&settings, this); \ - std::istringstream istr(code); \ - tokenizer.tokenize(istr, "test.c"); \ - const SymbolDatabase *db = tokenizer.getSymbolDatabase(); + const SymbolDatabase *db = getSymbolDB_inner(tokenizer, code, "test.c"); class TestSymbolDatabase: public TestFixture { public: @@ -62,6 +56,13 @@ private: found = false; } + const SymbolDatabase* getSymbolDB_inner(Tokenizer& tokenizer, const char* code, const char* filename) { + errout.str(""); + std::istringstream istr(code); + tokenizer.tokenize(istr, filename); + return tokenizer.getSymbolDatabase(); + } + static const Scope *findFunctionScopeByToken(const SymbolDatabase * db, const Token *tok) { std::list::const_iterator scope; @@ -726,58 +727,49 @@ private: } void arrayMemberVar1() { - const char code[] = "struct Foo {\n" - " int x;\n" - "};\n" - "void f() {\n" - " struct Foo foo[10];\n" - " foo[1].x = 123;\n" // <- x should get a variable() pointer - "}"; - - Tokenizer tokenizer(&settings, this); - std::istringstream istr(code); - tokenizer.tokenize(istr, "test.cpp"); + GET_SYMBOL_DB("struct Foo {\n" + " int x;\n" + "};\n" + "void f() {\n" + " struct Foo foo[10];\n" + " foo[1].x = 123;\n" // <- x should get a variable() pointer + "}"); const Token *tok = Token::findsimplematch(tokenizer.tokens(), ". x"); tok = tok ? tok->next() : nullptr; + ASSERT(db != nullptr); ASSERT(tok && tok->variable() && Token::simpleMatch(tok->variable()->typeStartToken(), "int x ;")); ASSERT(tok && tok->varId() == 0U); // It's possible to set a varId } void arrayMemberVar2() { - const char code[] = "struct Foo {\n" - " int x;\n" - "};\n" - "void f() {\n" - " struct Foo foo[10][10];\n" - " foo[1][2].x = 123;\n" // <- x should get a variable() pointer - "}"; - - Tokenizer tokenizer(&settings, this); - std::istringstream istr(code); - tokenizer.tokenize(istr, "test.cpp"); + GET_SYMBOL_DB("struct Foo {\n" + " int x;\n" + "};\n" + "void f() {\n" + " struct Foo foo[10][10];\n" + " foo[1][2].x = 123;\n" // <- x should get a variable() pointer + "}"); const Token *tok = Token::findsimplematch(tokenizer.tokens(), ". x"); tok = tok ? tok->next() : nullptr; + ASSERT(db != nullptr); ASSERT(tok && tok->variable() && Token::simpleMatch(tok->variable()->typeStartToken(), "int x ;")); ASSERT(tok && tok->varId() == 0U); // It's possible to set a varId } void arrayMemberVar3() { - const char code[] = "struct Foo {\n" - " int x;\n" - "};\n" - "void f() {\n" - " struct Foo foo[10];\n" - " (foo[1]).x = 123;\n" // <- x should get a variable() pointer - "}"; - - Tokenizer tokenizer(&settings, this); - std::istringstream istr(code); - tokenizer.tokenize(istr, "test.cpp"); + GET_SYMBOL_DB("struct Foo {\n" + " int x;\n" + "};\n" + "void f() {\n" + " struct Foo foo[10];\n" + " (foo[1]).x = 123;\n" // <- x should get a variable() pointer + "}"); const Token *tok = Token::findsimplematch(tokenizer.tokens(), ". x"); tok = tok ? tok->next() : nullptr; + ASSERT(db != nullptr); ASSERT(tok && tok->variable() && Token::simpleMatch(tok->variable()->typeStartToken(), "int x ;")); ASSERT(tok && tok->varId() == 0U); // It's possible to set a varId } @@ -1516,7 +1508,6 @@ private: " catch (X::Error4 x) { }\n" "}"; GET_SYMBOL_DB(str); - check(str, false); ASSERT_EQUALS("", errout.str()); ASSERT(db && db->getVariableListSize() == 5); // index 0 + 4 variables ASSERT(db && db->scopeList.size() == 7); // global + function + try + 4 catch @@ -1747,14 +1738,14 @@ private: ASSERT_EQUALS("", errout.str()); } - // #ticket 3437 (segmentation fault) + // ticket 3437 (segmentation fault) void symboldatabase22() { check("template struct A {};\n" "A a;\n"); ASSERT_EQUALS("", errout.str()); } - // #ticket 3435 (std::vector) + // ticket 3435 (std::vector) void symboldatabase23() { GET_SYMBOL_DB("class A { std::vector ints; };"); ASSERT_EQUALS(2U, db->scopeList.size()); @@ -1765,7 +1756,7 @@ private: ASSERT_EQUALS(true, var.isClass()); } - // #ticket 3508 (constructor, destructor) + // ticket 3508 (constructor, destructor) void symboldatabase24() { GET_SYMBOL_DB("struct Fred {\n" " ~Fred();\n" @@ -1807,30 +1798,28 @@ private: } - // #ticket #3561 (throw C++) + // ticket #3561 (throw C++) void symboldatabase25() { const char str[] = "int main() {\n" " foo bar;\n" " throw bar;\n" "}"; GET_SYMBOL_DB(str); - check(str, false); ASSERT_EQUALS("", errout.str()); ASSERT(db && db->getVariableListSize() == 2); // index 0 + 1 variable } - // #ticket #3561 (throw C) + // ticket #3561 (throw C) void symboldatabase26() { const char str[] = "int main() {\n" " throw bar;\n" "}"; GET_SYMBOL_DB_C(str); - check(str, false); ASSERT_EQUALS("", errout.str()); ASSERT(db && db->getVariableListSize() == 2); // index 0 + 1 variable } - // #ticket #3543 (segmentation fault) + // ticket #3543 (segmentation fault) void symboldatabase27() { check("class C : public B1\n" "{\n" @@ -1846,7 +1835,7 @@ private: ASSERT(db && db->getVariableFromVarId(1) && db->getVariableFromVarId(1)->typeScope() && db->getVariableFromVarId(1)->typeScope()->className == "S"); } - // #ticket #4442 (segmentation fault) + // ticket #4442 (segmentation fault) void symboldatabase29() { check("struct B : A {\n" " B() : A {}\n"