diff --git a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp index 1d692496e499698974c0a3f756ebb21c2733d546..4a5c8e17224145ff959bc6969bb6e7406197ddfc 100644 --- a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp +++ b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp @@ -36,6 +36,8 @@ //TESTED_COMPONENT=src/libs/cplusplus using namespace CPlusPlus; +typedef QByteArray _; + #define DUMP_OUTPUT(x) {QByteArray b(x);qDebug("output: [[%s]]", b.replace("\n", "<<\n").constData());} @@ -586,62 +588,59 @@ void tst_Preprocessor::multitokens_argument_data() QTest::addColumn<QByteArray>("input"); QTest::addColumn<QByteArray>("output"); - QByteArray original; - QByteArray expected; - - original = + QTest::newRow("case 1") << _( "#define foo(ARGS) int f(ARGS)\n" - "foo(int a);\n"; - expected = + "foo(int a);\n" + ) << _( "# 1 \"<stdin>\"\n" "\n" "# expansion begin 30,3 ~3 2:4 2:8 ~1\n" "int f(int a)\n" "# expansion end\n" "# 2 \"<stdin>\"\n" - " ;\n"; - QTest::newRow("case 1") << original << expected; + " ;\n" + ); - original = + QTest::newRow("case 2") << _( "#define foo(ARGS) int f(ARGS)\n" "foo(int \n" - " a);\n"; - expected = + " a);\n" + ) << _( "# 1 \"<stdin>\"\n" "\n" "# expansion begin 30,3 ~3 2:4 3:4 ~1\n" "int f(int a)\n" "# expansion end\n" "# 3 \"<stdin>\"\n" - " ;\n"; - QTest::newRow("case 2") << original << expected; + " ;\n" + ); - original = + QTest::newRow("case 3") << _( "#define foo(ARGS) int f(ARGS)\n" - "foo(int a = 0);\n"; - expected = + "foo(int a = 0);\n" + ) << _( "# 1 \"<stdin>\"\n" "\n" "# expansion begin 30,3 ~3 2:4 2:8 2:10 2:12 ~1\n" "int f(int a = 0)\n" "# expansion end\n" "# 2 \"<stdin>\"\n" - " ;\n"; - QTest::newRow("case 3") << original << expected; + " ;\n" + ); - original = + QTest::newRow("case 4") << _( "#define foo(X) int f(X = 0)\n" "foo(int \n" - " a);\n"; - expected = + " a);\n" + ) << _( "# 1 \"<stdin>\"\n" "\n" "# expansion begin 28,3 ~3 2:4 3:4 ~3\n" "int f(int a = 0)\n" "# expansion end\n" "# 3 \"<stdin>\"\n" - " ;\n"; - QTest::newRow("case 4") << original << expected; + " ;\n" + ); } void tst_Preprocessor::multitokens_argument() @@ -1066,40 +1065,39 @@ void tst_Preprocessor::dont_eagerly_expand_data() QTest::addColumn<QByteArray>("input"); QTest::addColumn<QByteArray>("output"); - QByteArray original; - QByteArray expected; - // Expansion must be processed upon invocation of the macro. Therefore a particular // identifier within a define must not be expanded (in the case it matches an // already known macro) during the processor directive handling, but only when // it's actually "used". Naturally, if it's still not replaced after an invocation // it should then be expanded. This is consistent with clang and gcc for example. - original = "#define T int\n" - "#define FOO(T) T\n" - "FOO(double)\n"; - expected = + QTest::newRow("case 1") << _( + "#define T int\n" + "#define FOO(T) T\n" + "FOO(double)\n" + ) << _( "# 1 \"<stdin>\"\n" "\n" "\n" "# expansion begin 31,3 3:4\n" "double\n" "# expansion end\n" - "# 4 \"<stdin>\"\n"; - QTest::newRow("case 1") << original << expected; + "# 4 \"<stdin>\"\n" + ); - original = "#define T int\n" - "#define FOO(X) T\n" - "FOO(double)\n"; - expected = + QTest::newRow("case 2") << _( + "#define T int\n" + "#define FOO(X) T\n" + "FOO(double)\n" + ) << _( "# 1 \"<stdin>\"\n" "\n" "\n" "# expansion begin 31,3 ~1\n" "int\n" "# expansion end\n" - "# 4 \"<stdin>\"\n"; - QTest::newRow("case 2") << original << expected; + "# 4 \"<stdin>\"\n" + ); } void tst_Preprocessor::dont_eagerly_expand() @@ -1116,18 +1114,16 @@ void tst_Preprocessor::comments_within_data() QTest::addColumn<QByteArray>("input"); QTest::addColumn<QByteArray>("output"); - QByteArray original; - QByteArray expected; - - original = "#define FOO int x;\n" - "\n" - " // comment\n" - " // comment\n" - " // comment\n" - " // comment\n" - "FOO\n" - "x = 10\n"; - expected = + QTest::newRow("case 1") << _( + "#define FOO int x;\n" + "\n" + " // comment\n" + " // comment\n" + " // comment\n" + " // comment\n" + "FOO\n" + "x = 10\n" + ) << _( "# 1 \"<stdin>\"\n" "\n" "\n" @@ -1139,19 +1135,19 @@ void tst_Preprocessor::comments_within_data() "int x;\n" "# expansion end\n" "# 8 \"<stdin>\"\n" - "x = 10\n"; - QTest::newRow("case 1") << original << expected; - - - original = "#define FOO int x;\n" - "\n" - " /* comment\n" - " comment\n" - " comment\n" - " comment */\n" - "FOO\n" - "x = 10\n"; - expected = + "x = 10\n" + ); + + QTest::newRow("case 2") << _( + "#define FOO int x;\n" + "\n" + " /* comment\n" + " comment\n" + " comment\n" + " comment */\n" + "FOO\n" + "x = 10\n" + ) << _( "# 1 \"<stdin>\"\n" "\n" "\n" @@ -1163,21 +1159,21 @@ void tst_Preprocessor::comments_within_data() "int x;\n" "# expansion end\n" "# 8 \"<stdin>\"\n" - "x = 10\n"; - QTest::newRow("case 2") << original << expected; - - - original = "#define FOO int x;\n" - "\n" - " // comment\n" - " // comment\n" - " // comment\n" - " // comment\n" - "FOO\n" - "// test\n" - "// test again\n" - "x = 10\n"; - expected = + "x = 10\n" + ); + + QTest::newRow("case 3") << _( + "#define FOO int x;\n" + "\n" + " // comment\n" + " // comment\n" + " // comment\n" + " // comment\n" + "FOO\n" + "// test\n" + "// test again\n" + "x = 10\n" + ) << _( "# 1 \"<stdin>\"\n" "\n" "\n" @@ -1189,21 +1185,21 @@ void tst_Preprocessor::comments_within_data() "int x;\n" "# expansion end\n" "# 10 \"<stdin>\"\n" - "x = 10\n"; - QTest::newRow("case 3") << original << expected; - - - original = "#define FOO int x;\n" - "\n" - " /* comment\n" - " comment\n" - " comment\n" - " comment */\n" - "FOO\n" - "/* \n" - "*/\n" - "x = 10\n"; - expected = + "x = 10\n" + ); + + QTest::newRow("case 4") << _( + "#define FOO int x;\n" + "\n" + " /* comment\n" + " comment\n" + " comment\n" + " comment */\n" + "FOO\n" + "/* \n" + "*/\n" + "x = 10\n" + ) << _( "# 1 \"<stdin>\"\n" "\n" "\n" @@ -1215,17 +1211,18 @@ void tst_Preprocessor::comments_within_data() "int x;\n" "# expansion end\n" "# 10 \"<stdin>\"\n" - "x = 10\n"; - QTest::newRow("case 4") << original << expected; - - original = "#define FOO(x, y) { (void)x; (void)y; }\n" - "\n" - "void foo() {\n" - " FOO(10,\n" - " //comment\n" - " 12\n" - "}\n"; - expected = + "x = 10\n" + ); + + QTest::newRow("case 5") << _( + "#define FOO(x, y) { (void)x; (void)y; }\n" + "\n" + "void foo() {\n" + " FOO(10,\n" + " //comment\n" + " 12\n" + "}\n" + ) << _( "# 1 \"<stdin>\"\n" "\n" "\n" @@ -1233,17 +1230,18 @@ void tst_Preprocessor::comments_within_data() "# expansion begin 57,3 ~4 4:7 ~4 6:7 7:0 ~2\n" "{ (void)10; (void)12}; }\n" "# expansion end\n" - "# 8 \"<stdin>\"\n"; - QTest::newRow("case 5") << original << expected; - - original = "#define FOO(x, y) { (void)x; (void)y; }\n" - "\n" - "void foo() {\n" - " FOO(10,\n" - " //tricky*/comment\n" - " 12\n" - "}\n"; - expected = + "# 8 \"<stdin>\"\n" + ); + + QTest::newRow("case 6") << _( + "#define FOO(x, y) { (void)x; (void)y; }\n" + "\n" + "void foo() {\n" + " FOO(10,\n" + " //tricky*/comment\n" + " 12\n" + "}\n" + ) << _( "# 1 \"<stdin>\"\n" "\n" "\n" @@ -1251,28 +1249,28 @@ void tst_Preprocessor::comments_within_data() "# expansion begin 57,3 ~4 4:7 ~4 6:7 7:0 ~2\n" "{ (void)10; (void)12}; }\n" "# expansion end\n" - "# 8 \"<stdin>\"\n"; - QTest::newRow("case 6") << original << expected; + "# 8 \"<stdin>\"\n" + ); - original = - "#define FOO 0 //coment\n" + QTest::newRow("case 7") << _( + "#define FOO 0 //comment\n" "#define BAR (1 == FOO)\n" "void foo() {\n" " if (BAR) {}\n" - "}\n"; - expected = + "}\n" + ) << _( "# 1 \"<stdin>\"\n" "\n" "\n" "void foo() {\n" " if (\n" - "# expansion begin 67,3 ~5\n" + "# expansion begin 68,3 ~5\n" "(1 == 0)\n" "# expansion end\n" "# 4 \"<stdin>\"\n" " ) {}\n" - "}\n"; - QTest::newRow("case 7") << original << expected; + "}\n" + ); } void tst_Preprocessor::comments_before_args() @@ -1307,18 +1305,16 @@ void tst_Preprocessor::comments_within2_data() QTest::addColumn<QByteArray>("input"); QTest::addColumn<QByteArray>("output"); - QByteArray original; - QByteArray expected; - - original = "#define FOO int x;\n" - "\n" - " // comment\n" - " // comment\n" - " // comment\n" - " // comment\n" - "FOO\n" - "x = 10\n"; - expected = + QTest::newRow("case 1") << _( + "#define FOO int x;\n" + "\n" + " // comment\n" + " // comment\n" + " // comment\n" + " // comment\n" + "FOO\n" + "x = 10\n" + ) << _( "# 1 \"<stdin>\"\n" "\n" "\n" @@ -1330,19 +1326,19 @@ void tst_Preprocessor::comments_within2_data() "int x;\n" "# expansion end\n" "# 8 \"<stdin>\"\n" - "x = 10\n"; - QTest::newRow("case 1") << original << expected; - - - original = "#define FOO int x;\n" - "\n" - " /* comment\n" - " comment\n" - " comment\n" - " comment */\n" - "FOO\n" - "x = 10\n"; - expected = + "x = 10\n" + ); + + QTest::newRow("case 2") << _( + "#define FOO int x;\n" + "\n" + " /* comment\n" + " comment\n" + " comment\n" + " comment */\n" + "FOO\n" + "x = 10\n" + ) << _( "# 1 \"<stdin>\"\n" "\n" "\n" @@ -1354,21 +1350,21 @@ void tst_Preprocessor::comments_within2_data() "int x;\n" "# expansion end\n" "# 8 \"<stdin>\"\n" - "x = 10\n"; - QTest::newRow("case 2") << original << expected; - - - original = "#define FOO int x;\n" - "\n" - " // comment\n" - " // comment\n" - " // comment\n" - " // comment\n" - "FOO\n" - "// test\n" - "// test again\n" - "x = 10\n"; - expected = + "x = 10\n" + ); + + QTest::newRow("case 3") << _( + "#define FOO int x;\n" + "\n" + " // comment\n" + " // comment\n" + " // comment\n" + " // comment\n" + "FOO\n" + "// test\n" + "// test again\n" + "x = 10\n" + ) << _( "# 1 \"<stdin>\"\n" "\n" "\n" @@ -1382,21 +1378,21 @@ void tst_Preprocessor::comments_within2_data() "# 8 \"<stdin>\"\n" "// test\n" "// test again\n" - "x = 10\n"; - QTest::newRow("case 3") << original << expected; - - - original = "#define FOO int x;\n" - "\n" - "void foo() { /* comment\n" - " comment\n" - " comment\n" - " comment */\n" - "FOO\n" - "/* \n" - "*/\n" - "x = 10\n"; - expected = + "x = 10\n" + ); + + QTest::newRow("case 4") << _( + "#define FOO int x;\n" + "\n" + "void foo() { /* comment\n" + " comment\n" + " comment\n" + " comment */\n" + "FOO\n" + "/* \n" + "*/\n" + "x = 10\n" + ) << _( "# 1 \"<stdin>\"\n" "\n" "\n" @@ -1410,18 +1406,18 @@ void tst_Preprocessor::comments_within2_data() "# 8 \"<stdin>\"\n" "/* \n" "*/\n" - "x = 10\n"; - QTest::newRow("case 4") << original << expected; - - - original = "#define FOO(x, y) { (void)x; (void)y; }\n" - "\n" - "void foo() {\n" - " FOO(10,\n" - " //comment\n" - " 12\n" - "}\n"; - expected = + "x = 10\n" + ); + + QTest::newRow("case 5") << _( + "#define FOO(x, y) { (void)x; (void)y; }\n" + "\n" + "void foo() {\n" + " FOO(10,\n" + " //comment\n" + " 12\n" + "}\n" + ) << _( "# 1 \"<stdin>\"\n" "\n" "\n" @@ -1429,17 +1425,18 @@ void tst_Preprocessor::comments_within2_data() "# expansion begin 57,3 ~4 4:7 ~5 6:7 7:0 ~2\n" "{ (void)10; (void)/*comment*/ 12}; }\n" "# expansion end\n" - "# 8 \"<stdin>\"\n"; - QTest::newRow("case 5") << original << expected; - - original = "#define FOO(x, y) { (void)x; (void)y; }\n" - "\n" - "void foo() {\n" - " FOO(10,\n" - " //tricky*/comment\n" - " 12\n" - "}\n"; - expected = + "# 8 \"<stdin>\"\n" + ); + + QTest::newRow("case 6") << _( + "#define FOO(x, y) { (void)x; (void)y; }\n" + "\n" + "void foo() {\n" + " FOO(10,\n" + " //tricky*/comment\n" + " 12\n" + "}\n" + ) << _( "# 1 \"<stdin>\"\n" "\n" "\n" @@ -1447,28 +1444,28 @@ void tst_Preprocessor::comments_within2_data() "# expansion begin 57,3 ~4 4:7 ~5 6:7 7:0 ~2\n" "{ (void)10; (void)/*tricky*|comment*/ 12}; }\n" "# expansion end\n" - "# 8 \"<stdin>\"\n"; - QTest::newRow("case 6") << original << expected; + "# 8 \"<stdin>\"\n" + ); - original = - "#define FOO 0 //coment\n" + QTest::newRow("case 7") << _( + "#define FOO 0 //comment\n" "#define BAR (1 == FOO)\n" "void foo() {\n" " if (BAR) {}\n" - "}\n"; - expected = + "}\n" + ) << _( "# 1 \"<stdin>\"\n" "\n" "\n" "void foo() {\n" " if (\n" - "# expansion begin 67,3 ~5\n" + "# expansion begin 68,3 ~5\n" "(1 == 0)\n" "# expansion end\n" "# 4 \"<stdin>\"\n" " ) {}\n" - "}\n"; - QTest::newRow("case 7") << original << expected; + "}\n" + ); } void tst_Preprocessor::multiline_strings() @@ -1481,15 +1478,14 @@ void tst_Preprocessor::multiline_strings_data() QTest::addColumn<QByteArray>("input"); QTest::addColumn<QByteArray>("output"); - QByteArray original; - QByteArray expected; - - original = "const char *s = \"abc\\\n" - "xyz\";\n"; - expected = "# 1 \"<stdin>\"\n" - "const char *s = \"abc\\\n" - "xyz\";\n"; - QTest::newRow("case 1") << original << expected; + QTest::newRow("case 1") << _( + "const char *s = \"abc\\\n" + "xyz\";\n" + ) << _( + "# 1 \"<stdin>\"\n" + "const char *s = \"abc\\\n" + "xyz\";\n" + ); } void tst_Preprocessor::skip_unknown_directives() @@ -1502,24 +1498,21 @@ void tst_Preprocessor::skip_unknown_directives_data() QTest::addColumn<QByteArray>("input"); QTest::addColumn<QByteArray>("output"); - QByteArray original; - QByteArray expected; - // We should skip "weird" things when preprocessing. Particularly useful when we preprocess // a particular expression from a document which has already been processed. - original = "# foo\n" - "# 10 \"file.cpp\"\n" - "# ()\n" - "#\n"; - expected = + QTest::newRow("case 1") << _( + "# foo\n" + "# 10 \"file.cpp\"\n" + "# ()\n" + "#\n" + ) << _( "# 1 \"<stdin>\"\n" "\n" "\n" "\n" "\n" - ; - QTest::newRow("case 1") << original << expected; + ); } void tst_Preprocessor::include_guard() @@ -1617,10 +1610,7 @@ void tst_Preprocessor::empty_trailing_lines_data() QTest::addColumn<QByteArray>("input"); QTest::addColumn<QByteArray>("output"); - QByteArray original; - QByteArray expected; - - original = + const QByteArray original = "\n" "\n" "\n" @@ -1628,12 +1618,13 @@ void tst_Preprocessor::empty_trailing_lines_data() "\n" "\n" "\n" - "\n" - ; - expected = "# 1 \"<stdin>\"\n" + original; - QTest::newRow("9 empty lines") << original << expected; + "\n"; + + QTest::newRow("9 empty lines") + << original + << _("# 1 \"<stdin>\"\n") + original; - original = + QTest::newRow("11 empty lines") << _( "\n" "\n" "\n" @@ -1644,32 +1635,26 @@ void tst_Preprocessor::empty_trailing_lines_data() "\n" "\n" "\n" - ; - expected = + ) << _( "# 1 \"<stdin>\"\n" "# 11 \"<stdin>\"\n" - ; - QTest::newRow("11 empty lines") << original << expected; + ); - original = + QTest::newRow("1 include") << _( "#include <something>\n" - ; - expected = + ) << _( "# 1 \"<stdin>\"\n" "\n" - ; - QTest::newRow("1 include") << original << expected; + ); - original = + QTest::newRow("1 empty line with 1 include") << _( "#include <something>\n" "\n" - ; - expected = + ) << _( "# 1 \"<stdin>\"\n" "\n" "\n" - ; - QTest::newRow("1 empty line with 1 include") << original << expected; + ); } void tst_Preprocessor::compare_input_output(bool keepComments)