File indexing completed on 2024-06-02 04:43:56

0001 /*
0002     SPDX-FileCopyrightText: 2007 Andreas Pakulat <apaku@gmx.de>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "scopetest.h"
0008 #include "ast.h"
0009 #include "qmakedriver.h"
0010 #include "testhelpers.h"
0011 
0012 QTEST_GUILESS_MAIN(ScopeTest)
0013 
0014 ScopeTest::ScopeTest(QObject* parent)
0015     : QObject(parent)
0016 {
0017 }
0018 
0019 ScopeTest::~ScopeTest()
0020 {
0021 }
0022 
0023 void ScopeTest::init()
0024 {
0025     ast = new QMake::ProjectAST();
0026     QVERIFY(ast != nullptr);
0027 }
0028 
0029 void ScopeTest::cleanup()
0030 {
0031     delete ast;
0032     ast = nullptr;
0033     QVERIFY(ast == nullptr);
0034 }
0035 
0036 BEGINTESTFUNCIMPL(ScopeTest, basicScope, 1)
0037     auto* scope = dynamic_cast<QMake::SimpleScopeAST*>(ast->statements.first());
0038     TESTSCOPENAME(scope, "foobar")
0039     QList<QMake::StatementAST*> testlist;
0040     auto tst = new QMake::AssignmentAST(scope->body);
0041     auto val = new QMake::ValueAST(tst);
0042     val->value = QStringLiteral("VARIABLE");
0043     tst->identifier = val;
0044     val = new QMake::ValueAST(tst);
0045     val->value = QStringLiteral("=");
0046     tst->op = val;
0047     val = new QMake::ValueAST(tst);
0048     val->value = QStringLiteral("FOO");
0049     tst->values.append(val);
0050     testlist.append(tst);
0051     TESTSCOPEBODY(scope, testlist, 1)
0052 ENDTESTFUNCIMPL
0053 
0054 DATAFUNCIMPL(ScopeTest, basicScope, "foobar : VARIABLE = FOO\n")
0055 
0056 BEGINTESTFUNCIMPL(ScopeTest, basicScopeBrace, 1)
0057     auto* scope = dynamic_cast<QMake::SimpleScopeAST*>(ast->statements.first());
0058     TESTSCOPENAME(scope, "foobar")
0059     QList<QMake::StatementAST*> testlist;
0060     auto tst = new QMake::AssignmentAST(scope->body);
0061     auto val = new QMake::ValueAST(tst);
0062     val->value = QStringLiteral("VARIABLE");
0063     tst->identifier = val;
0064     val = new QMake::ValueAST(tst);
0065     val->value = QStringLiteral("=");
0066     tst->op = val;
0067     val = new QMake::ValueAST(tst);
0068     val->value = QStringLiteral("FOO");
0069     tst->values.append(val);
0070     testlist.append(tst);
0071     TESTSCOPEBODY(scope, testlist, 1)
0072 ENDTESTFUNCIMPL
0073 
0074 DATAFUNCIMPL(ScopeTest, basicScopeBrace, "foobar {\n  VARIABLE = FOO\n}\n")
0075 
0076 BEGINTESTFUNCIMPL(ScopeTest, nestedScope, 1)
0077     auto* scope = dynamic_cast<QMake::SimpleScopeAST*>(ast->statements.first());
0078     TESTSCOPENAME(scope, "foobar")
0079     QList<QMake::StatementAST*> testlist;
0080     auto simple = new QMake::SimpleScopeAST(scope->body);
0081     auto val = new QMake::ValueAST(simple);
0082     val->value = QStringLiteral("barfoo");
0083     simple->identifier = val;
0084     auto body = new QMake::ScopeBodyAST(simple);
0085     auto tst = new QMake::AssignmentAST(body);
0086     val = new QMake::ValueAST(tst);
0087     val->value = QStringLiteral("VARIABLE");
0088     tst->identifier = val;
0089     val = new QMake::ValueAST(tst);
0090     val->value = QStringLiteral("=");
0091     tst->op = val;
0092     val = new QMake::ValueAST(tst);
0093     val->value = QStringLiteral("FOO");
0094     tst->values.append(val);
0095     body->ifStatements.append(tst);
0096     simple->body = body;
0097     testlist.append(simple);
0098 
0099     TESTSCOPEBODY(scope, testlist, 1)
0100 ENDTESTFUNCIMPL
0101 
0102 DATAFUNCIMPL(ScopeTest, nestedScope, "foobar :barfoo : VARIABLE = FOO\n")
0103 
0104 BEGINTESTFUNCIMPL(ScopeTest, missingStatement, 1)
0105     auto* scope = dynamic_cast<QMake::SimpleScopeAST*>(ast->statements.first());
0106     TESTSCOPENAME(scope, "eval")
0107 ENDTESTFUNCIMPL
0108 
0109 DATAFUNCIMPL(ScopeTest, missingStatement, "eval :\n")
0110 
0111 BEGINTESTFAILFUNCIMPL(ScopeTest, missingColon, "No colon")
0112 ENDTESTFUNCIMPL
0113 
0114 DATAFUNCIMPL(ScopeTest, missingColon, "eval \n")
0115 
0116 void ScopeTest::strangeScopeNames()
0117 {
0118     QMake::Driver d;
0119     d.setContent(QStringLiteral("linux-gcc++-* {\n  VARIABLE = FOO\n}\n"));
0120     bool ret = d.parse(&ast);
0121     QVERIFY(ret);
0122 }
0123 
0124 void ScopeTest::testIfElse()
0125 {
0126     QMake::Driver d;
0127     d.setContent(QStringLiteral("isEmpty(foo) { A = 1 } else { B = 2 }\n"));
0128     bool ret = d.parse(&ast);
0129     QVERIFY(ret);
0130 }
0131 
0132 #include "moc_scopetest.cpp"