Skip to content
Snippets Groups Projects
Select Git revision
  • 92e301a054ad8c07fa4656d9671689aa0fdeadd0
  • master default
  • 4.5
  • 4.4
  • 4.1
  • 4.3
  • 4.2
  • wip/clang-query
  • 4.0
  • 3.6
  • at-master
  • qp-master
  • csa-master
  • at-3.6
  • qp-3.6
  • csa-3.6
  • 3.5
  • at-3.5
  • csa-3.5
  • wip/boostbuildprojectmanager
  • 3.4
  • v4.5.0-beta1
  • v4.4.1
  • v4.4.0
  • v4.4.0-rc1
  • v4.4.0-beta1
  • v4.3.1
  • v4.3.0
  • v4.3.0-rc1
  • v4.2.2
  • v4.3.0-beta1
  • v4.2.1
  • v4.2.0
  • v4.2.0-rc1
  • v4.2.0-beta1
  • v4.1.0
  • v4.1.0-rc1
  • v4.0.3
  • v4.1.0-beta1
  • v4.0.2
  • v4.0.1
41 results

clangstaticanalyzerunittests.cpp

Blame
  • clangstaticanalyzerunittests.cpp 4.22 KiB
    /****************************************************************************
    **
    ** Copyright (C) 2016 The Qt Company Ltd.
    ** Contact: https://www.qt.io/licensing/
    **
    ** This file is part of Qt Creator.
    **
    ** Commercial License Usage
    ** Licensees holding valid commercial Qt licenses may use this file in
    ** accordance with the commercial license agreement provided with the
    ** Software or, alternatively, in accordance with the terms contained in
    ** a written agreement between you and The Qt Company. For licensing terms
    ** and conditions see https://www.qt.io/terms-conditions. For further
    ** information use the contact form at https://www.qt.io/contact-us.
    **
    ** GNU General Public License Usage
    ** Alternatively, this file may be used under the terms of the GNU
    ** General Public License version 3 as published by the Free Software
    ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
    ** included in the packaging of this file. Please review the following
    ** information to ensure the GNU General Public License requirements will
    ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
    **
    ****************************************************************************/
    
    #include "clangstaticanalyzerunittests.h"
    
    #include "clangstaticanalyzerdiagnostic.h"
    #include "clangstaticanalyzertool.h"
    #include "clangstaticanalyzerutils.h"
    
    #include <debugger/analyzer/analyzermanager.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 <utils/fileutils.h>
    
    #include <QEventLoop>
    #include <QSignalSpy>
    #include <QTemporaryDir>
    #include <QTimer>
    #include <QtTest>
    
    using namespace Debugger;
    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<Kit *> 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->typeId(), &hasClangExecutable);
        if (!hasClangExecutable)
            QSKIP("No clang suitable for analyzing found");
    
        m_tmpDir = new CppTools::Tests::TemporaryCopiedDir(QLatin1String(":/unit-tests"));
        QVERIFY(m_tmpDir->isValid());
    }
    
    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());
        Debugger::runAction(ClangStaticAnalyzerActionId);
        QSignalSpy waiter(m_analyzerTool, SIGNAL(finished(bool)));
        QVERIFY(waiter.wait(30000));
        const QList<QVariant> arguments = waiter.takeFirst();
        QVERIFY(arguments.first().toBool());
        QCOMPARE(m_analyzerTool->diagnostics().count(), expectedDiagCount);
    }
    
    void ClangStaticAnalyzerUnitTests::testProject_data()
    {
        QTest::addColumn<QString>("projectFilePath");
        QTest::addColumn<int>("expectedDiagCount");
    
        QTest::newRow("simple qbs project")
                << QString(m_tmpDir->absolutePath("simple/simple.qbs")) << 1;
        QTest::newRow("simple qmake project")
                << QString(m_tmpDir->absolutePath("simple/simple.pro")) << 1;
    
        QTest::newRow("qt-widgets-app qbs project")
                << QString(m_tmpDir->absolutePath("qt-widgets-app/qt-widgets-app.qbs")) << 0;
        QTest::newRow("qt-widgets-app qmake project")
                << QString(m_tmpDir->absolutePath("qt-widgets-app/qt-widgets-app.pro")) << 0;
    }
    
    } // namespace Internal
    } // namespace ClangStaticAnalyzerPlugin