diff options
author | Joerg Bornemann <joerg.bornemann@digia.com> | 2012-12-11 15:35:35 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@digia.com> | 2012-12-11 17:55:21 +0100 |
commit | 3f19321c30769ba959c7c2af546811b6dbf8f77c (patch) | |
tree | bd7b3fb9c18d8f6a0392c7587b69ff318fa82733 /tests/auto/language | |
parent | ce2b7abc8a3f52a5dae9407b55e50e0800892a99 (diff) |
add extensive autotest for wildcard expansion
Change-Id: I79bdc75f6e5ce08becc4ca2e8fd9b66ef498f8f5
Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
Diffstat (limited to 'tests/auto/language')
-rw-r--r-- | tests/auto/language/tst_language.cpp | 205 | ||||
-rw-r--r-- | tests/auto/language/tst_language.h | 3 |
2 files changed, 207 insertions, 1 deletions
diff --git a/tests/auto/language/tst_language.cpp b/tests/auto/language/tst_language.cpp index d2e93743d..6b83af547 100644 --- a/tests/auto/language/tst_language.cpp +++ b/tests/auto/language/tst_language.cpp @@ -34,6 +34,7 @@ #include <language/scriptengine.h> #include <parser/qmljslexer_p.h> #include <parser/qmljsparser_p.h> +#include <tools/scripttools.h> #include <tools/error.h> TestLanguage::TestLanguage() @@ -422,4 +423,208 @@ void TestLanguage::fileTags() QCOMPARE(fileTags, expectedFileTags); } +void TestLanguage::wildcards_data() +{ + QTest::addColumn<bool>("useGroup"); + QTest::addColumn<QStringList>("filesToCreate"); + QTest::addColumn<QString>("prefix"); + QTest::addColumn<QStringList>("patterns"); + QTest::addColumn<QStringList>("excludePatterns"); + QTest::addColumn<bool>("recursive"); + QTest::addColumn<QStringList>("expected"); + + const bool useGroup = true; + const bool recursive = true; + + for (int i = 0; i <= 1; ++i) { + const bool useGroup = i; + const QByteArray dataTagSuffix = useGroup ? " group" : " nogroup"; + QTest::newRow(QByteArray("simple 1") + dataTagSuffix) + << useGroup + << (QStringList() << "foo.h" << "foo.cpp" << "bar.h" << "bar.cpp") + << QString() + << (QStringList() << "*.h") + << QStringList() + << !recursive + << (QStringList() << "foo.h" << "bar.h"); + QTest::newRow(QByteArray("simple 2") + dataTagSuffix) + << useGroup + << (QStringList() << "foo.h" << "foo.cpp" << "bar.h" << "bar.cpp") + << QString() + << (QStringList() << "foo.*") + << QStringList() + << !recursive + << (QStringList() << "foo.h" << "foo.cpp"); + QTest::newRow(QByteArray("simple 3") + dataTagSuffix) + << useGroup + << (QStringList() << "foo.h" << "foo.cpp" << "bar.h" << "bar.cpp") + << QString() + << (QStringList() << "*.h" << "*.cpp") + << QStringList() + << !recursive + << (QStringList() << "foo.h" << "foo.cpp" << "bar.h" << "bar.cpp"); + QTest::newRow(QByteArray("exclude 1") + dataTagSuffix) + << useGroup + << (QStringList() << "foo.h" << "foo.cpp" << "bar.h" << "bar.cpp") + << QString() + << (QStringList() << "*.h" << "*.cpp") + << (QStringList() << "bar*") + << !recursive + << (QStringList() << "foo.h" << "foo.cpp"); + QTest::newRow(QByteArray("exclude 2") + dataTagSuffix) + << useGroup + << (QStringList() << "foo.h" << "foo.cpp" << "bar.h" << "bar.cpp") + << QString() + << (QStringList() << "*") + << (QStringList() << "*.qbs") + << !recursive + << (QStringList() << "foo.h" << "foo.cpp" << "bar.h" << "bar.cpp"); + QTest::newRow(QByteArray("multipattern") + dataTagSuffix) + << useGroup + << (QStringList() << "subdir/foo.h" << "subdir/foo.cpp" << "subdir/bar.h" + << "subdir/bar.cpp") + << QString() + << (QStringList() << "s*b?ir/*.h") + << QStringList() + << !recursive + << (QStringList() << "subdir/foo.h" << "subdir/bar.h"); + QTest::newRow(QByteArray("non-recursive") + dataTagSuffix) + << useGroup + << (QStringList() << "a/foo.h" << "a/foo.cpp" << "a/b/bar.h" << "a/b/bar.cpp") + << QString() + << (QStringList() << "a/*") + << QStringList() + << !recursive + << (QStringList() << "a/foo.h" << "a/foo.cpp"); + } + QTest::newRow(QByteArray("recursive")) + << useGroup + << (QStringList() << "a/foo.h" << "a/foo.cpp" << "a/b/bar.h" << "a/b/bar.cpp") + << QString() + << (QStringList() << "a/*") + << QStringList() + << recursive + << (QStringList() << "a/b" << "a/foo.h" << "a/foo.cpp"); + QTest::newRow(QByteArray("prefix")) + << useGroup + << (QStringList() << "subdir/foo.h" << "subdir/foo.cpp" << "subdir/bar.h" + << "subdir/bar.cpp") + << QString("subdir/") + << (QStringList() << "*.h") + << QStringList() + << !recursive + << (QStringList() << "subdir/foo.h" << "subdir/bar.h"); +} + +void TestLanguage::wildcards() +{ + QFETCH(bool, useGroup); + QFETCH(QStringList, filesToCreate); + QFETCH(QString, prefix); + QFETCH(QStringList, patterns); + QFETCH(QStringList, excludePatterns); + QFETCH(bool, recursive); + QFETCH(QStringList, expected); + + if (!useGroup && !excludePatterns.isEmpty()) + QSKIP("Broken. See QBS-176.", SkipSingle); + + // create test directory + const QString wildcardsTestDir = "_wildcards_test_dir_"; + { + QString errorMessage; + if (QFile::exists(wildcardsTestDir)) { + if (!removeDirectoryWithContents(wildcardsTestDir, &errorMessage)) { + qDebug() << errorMessage; + QVERIFY2(false, "removeDirectoryWithContents failed"); + } + } + QDir().mkdir(wildcardsTestDir); + } + + // create project file + const QString groupName = "Keks"; + QString dataTag = QString::fromLocal8Bit(QTest::currentDataTag()); + dataTag.replace(' ', '_'); + const QString projectFilePath = wildcardsTestDir + "/test_" + dataTag + ".qbs"; + { + QFile projectFile(projectFilePath); + QVERIFY(projectFile.open(QIODevice::WriteOnly)); + QTextStream s(&projectFile); + s << "import qbs.base 1.0" << endl << endl + << "Application {" << endl + << " name: \"MyProduct\"" << endl; + if (useGroup) { + s << " Group {" << endl + << " name: " << toJSLiteral(groupName) << endl + << " recursive: " << toJSLiteral(recursive) << endl; + } + if (!prefix.isEmpty()) + s << " prefix: " << toJSLiteral(prefix) << endl; + if (!patterns.isEmpty()) + s << " files: " << toJSLiteral(patterns) << endl; + if (!excludePatterns.isEmpty()) + s << " excludeFiles: " << toJSLiteral(excludePatterns) << endl; + if (useGroup) + s << " }" << endl; + s << "}" << endl << endl; + } + + // create files + { + foreach (QString filePath, filesToCreate) { + filePath.prepend(wildcardsTestDir + '/'); + QFileInfo fi(filePath); + QVERIFY(fi.isRelative()); + if (!QDir(fi.path()).exists()) + QVERIFY(QDir().mkpath(fi.path())); + QFile file(filePath); + QVERIFY(file.open(QIODevice::WriteOnly)); + } + } + + // read the project + bool exceptionCaught = false; + ResolvedProductPtr product; + try { + project = loader->loadProject(projectFilePath, "/some/build/directory", buildConfig); + QVERIFY(project); + const QHash<QString, ResolvedProductPtr> products = productsFromProject(project); + product = products.value("MyProduct"); + QVERIFY(product); + ResolvedGroup::Ptr group; + if (useGroup) { + QCOMPARE(product->groups.count(), 2); + foreach (const ResolvedGroup::Ptr &rg, product->groups) { + if (rg->name == groupName) { + group = rg; + break; + } + } + } else { + QCOMPARE(product->groups.count(), 1); + group = product->groups.first(); + } + QVERIFY(group); + QCOMPARE(group->files.count(), 0); + SourceWildCards::Ptr wildcards = group->wildcards; + QVERIFY(wildcards); + QStringList actualFilePaths; + foreach (const SourceArtifactConstPtr &artifact, wildcards->files) { + QString str = artifact->absoluteFilePath; + int idx = str.indexOf(wildcardsTestDir); + if (idx != -1) + str.remove(0, idx + wildcardsTestDir.count() + 1); + actualFilePaths << str; + } + actualFilePaths.sort(); + expected.sort(); + QCOMPARE(actualFilePaths, expected); + } catch (const Error &e) { + exceptionCaught = true; + qDebug() << e.toString(); + } + QCOMPARE(exceptionCaught, false); +} + QTEST_MAIN(TestLanguage) diff --git a/tests/auto/language/tst_language.h b/tests/auto/language/tst_language.h index 1b4774cfd..ee4752050 100644 --- a/tests/auto/language/tst_language.h +++ b/tests/auto/language/tst_language.h @@ -34,7 +34,6 @@ #include <language/loader.h> #include <logging/consolelogger.h> #include <logging/logger.h> -#include <tools/scripttools.h> #include <QtTest> using namespace qbs; @@ -69,6 +68,8 @@ private slots: void propertiesBlocks(); void fileTags_data(); void fileTags(); + void wildcards_data(); + void wildcards(); }; #endif // TST_LANGUAGE_H |