/**************************************************************************** ** ** 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 Enterprise Qt Quick Profiler 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 "clangstaticanalyzerunittests.h" #include "clangstaticanalyzerdiagnostic.h" #include "clangstaticanalyzertool.h" #include "clangstaticanalyzerutils.h" #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Analyzer; using namespace ProjectExplorer; using namespace Utils; namespace ClangStaticAnalyzer { namespace Internal { ClangStaticAnalyzerUnitTests::ClangStaticAnalyzerUnitTests(ClangStaticAnalyzerTool *analyzerTool, QObject *parent) : QObject(parent) , m_analyzerTool(analyzerTool) , m_tmpDir(0) { } void ClangStaticAnalyzerUnitTests::initTestCase() { const QList allKits = KitManager::kits(); if (allKits.count() != 1) QSKIP("This test requires exactly one kit to be present"); const ToolChain * const toolchain = ToolChainKitInformation::toolChain(allKits.first()); if (!toolchain) QSKIP("This test requires that there is a kit with a toolchain."); bool hasClangExecutable; clangExecutableFromSettings(toolchain->type(), &hasClangExecutable); if (!hasClangExecutable) QSKIP("No clang suitable for analyzing found"); m_tmpDir = new CppTools::Tests::TemporaryCopiedDir(QLatin1String(":/unit-tests")); } void ClangStaticAnalyzerUnitTests::cleanupTestCase() { delete m_tmpDir; } void ClangStaticAnalyzerUnitTests::testProject() { QFETCH(QString, projectFilePath); QFETCH(int, expectedDiagCount); CppTools::Tests::ProjectOpenerAndCloser projectManager; const CppTools::ProjectInfo projectInfo = projectManager.open(projectFilePath, true); QVERIFY(projectInfo.isValid()); AnalyzerManager::selectTool(ClangStaticAnalyzerToolId); AnalyzerManager::startTool(); if (m_analyzerTool->isRunning()) { QSignalSpy waiter(m_analyzerTool, SIGNAL(finished())); QVERIFY(waiter.wait(30000)); } QCOMPARE(m_analyzerTool->diagnostics().count(), expectedDiagCount); } void ClangStaticAnalyzerUnitTests::testProject_data() { QTest::addColumn("projectFilePath"); QTest::addColumn("expectedDiagCount"); QTest::newRow("simple qbs project") << QString(m_tmpDir->path() + QLatin1String("/simple/simple.qbs")) << 1; QTest::newRow("simple qmake project") << QString(m_tmpDir->path() + QLatin1String("/simple/simple.pro")) << 1; QTest::newRow("qt-widgets-app qbs project") << QString(m_tmpDir->path() + QLatin1String("/qt-widgets-app/qt-widgets-app.qbs")) << 0; QTest::newRow("qt-widgets-app qmake project") << QString(m_tmpDir->path() + QLatin1String("/qt-widgets-app/qt-widgets-app.pro")) << 0; } } // namespace Internal } // namespace ClangStaticAnalyzerPlugin