summaryrefslogtreecommitdiff
path: root/plugins/autotest/autotestunittests.cpp
diff options
context:
space:
mode:
authorChristian Stenger <christian.stenger@theqtcompany.com>2015-02-10 14:20:43 +0100
committerChristian Stenger <christian.stenger@theqtcompany.com>2015-02-17 10:26:28 +0200
commit213a687f454682b8cd1e79fc27762ac6f374502e (patch)
treef4d1fd940546a261862ecdfc389575390c1b24e3 /plugins/autotest/autotestunittests.cpp
parent751d2e2bb1f0f2829fff8dac15b534fbadc25b3c (diff)
downloadqt-creator-213a687f454682b8cd1e79fc27762ac6f374502e.tar.gz
Rework parsing and provide unit test
Handling of parsing has slightly changed. The parser now uses simple states to be capable of postponing triggered parses if there is already a parsing in progress. Furthermore the parser now waits for the current project to be completely scanned. Change-Id: I6d4968d28194ba8d23d3a0ee6ab454d81a549e67 Reviewed-by: Andre Poenitz <andre.poenitz@theqtcompany.com>
Diffstat (limited to 'plugins/autotest/autotestunittests.cpp')
-rw-r--r--plugins/autotest/autotestunittests.cpp123
1 files changed, 123 insertions, 0 deletions
diff --git a/plugins/autotest/autotestunittests.cpp b/plugins/autotest/autotestunittests.cpp
new file mode 100644
index 0000000000..50556d7e00
--- /dev/null
+++ b/plugins/autotest/autotestunittests.cpp
@@ -0,0 +1,123 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the Qt Creator Enterprise Auto Test Add-on.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#include "autotestconstants.h"
+#include "autotestunittests.h"
+#include "testcodeparser.h"
+#include "testtreemodel.h"
+
+#include <cpptools/cppmodelmanager.h>
+#include <cpptools/cpptoolstestcase.h>
+
+#include <projectexplorer/kitinformation.h>
+#include <projectexplorer/kitmanager.h>
+#include <projectexplorer/projectexplorer.h>
+#include <projectexplorer/toolchain.h>
+
+#include <QSignalSpy>
+#include <QTest>
+#include <QTime>
+
+#include <coreplugin/navigationwidget.h>
+
+#include <qtsupport/qtkitinformation.h>
+
+using namespace Core;
+using namespace ProjectExplorer;
+using namespace Utils;
+
+namespace Autotest {
+namespace Internal {
+
+AutoTestUnitTests::AutoTestUnitTests(TestTreeModel *model, QObject *parent)
+ : QObject(parent),
+ m_model(model),
+ m_tmpDir(0),
+ m_isQt4(false)
+{
+}
+
+void AutoTestUnitTests::initTestCase()
+{
+ const QList<Kit *> allKits = KitManager::kits();
+ if (allKits.count() != 1)
+ QSKIP("This test requires exactly one kit to be present");
+ if (auto qtVersion = QtSupport::QtKitInformation::qtVersion(allKits.first()))
+ m_isQt4 = qtVersion->qtVersionString().startsWith(QLatin1Char('4'));
+ else
+ QSKIP("Could not figure out which Qt version is used for default kit.");
+ const ToolChain * const toolchain = ToolChainKitInformation::toolChain(allKits.first());
+ if (!toolchain)
+ QSKIP("This test requires that there is a kit with a toolchain.");
+
+ m_tmpDir = new CppTools::Tests::TemporaryCopiedDir(QLatin1String(":/unit_test"));
+}
+
+void AutoTestUnitTests::cleanupTestCase()
+{
+ delete m_tmpDir;
+}
+
+void AutoTestUnitTests::testCodeParser()
+{
+ QFETCH(QString, projectFilePath);
+ QFETCH(int, expectedAutoTestsCount);
+ QFETCH(int, expectedNamedQuickTestsCount);
+ QFETCH(int, expectedUnnamedQuickTestsCount);
+
+ NavigationWidget *navigation = NavigationWidget::instance();
+ navigation->activateSubWidget(Constants::AUTOTEST_ID);
+
+ CppTools::Tests::ProjectOpenerAndCloser projectManager;
+ const CppTools::ProjectInfo projectInfo = projectManager.open(projectFilePath, true);
+ QVERIFY(projectInfo.isValid());
+
+ QSignalSpy parserSpy(m_model->parser(), SIGNAL(parsingFinished()));
+ QVERIFY(parserSpy.wait(20000));
+
+ if (m_isQt4)
+ expectedNamedQuickTestsCount = expectedUnnamedQuickTestsCount = 0;
+
+ QCOMPARE(m_model->autoTestsCount(), expectedAutoTestsCount);
+ QCOMPARE(m_model->namedQuickTestsCount(), expectedNamedQuickTestsCount);
+ QCOMPARE(m_model->unnamedQuickTestsCount(), expectedUnnamedQuickTestsCount);
+
+ QCOMPARE(m_model->parser()->autoTestsCount(), expectedAutoTestsCount);
+ QCOMPARE(m_model->parser()->namedQuickTestsCount(), expectedNamedQuickTestsCount);
+ QCOMPARE(m_model->parser()->unnamedQuickTestsCount(), expectedUnnamedQuickTestsCount);
+
+}
+
+void AutoTestUnitTests::testCodeParser_data()
+{
+ QTest::addColumn<QString>("projectFilePath");
+ QTest::addColumn<int>("expectedAutoTestsCount");
+ QTest::addColumn<int>("expectedNamedQuickTestsCount");
+ QTest::addColumn<int>("expectedUnnamedQuickTestsCount");
+
+
+ QTest::newRow("plainAutoTest")
+ << QString(m_tmpDir->path() + QLatin1String("/plain/plain.pro"))
+ << 1 << 0 << 0;
+ QTest::newRow("mixedAutoTestAndQuickTests")
+ << QString(m_tmpDir->path() + QLatin1String("/mixed_atp/mixed_atp.pro"))
+ << 3 << 5 << 3;
+}
+
+} // namespace Internal
+} // namespace Autotest