forked from qt-creator/qt-creator
Change-Id: I8f7a80e1b136f03a1437dd9c7ae0e6f4db0e2bcc Reviewed-by: Niels Weber <niels.weber@theqtcompany.com>
135 lines
4.4 KiB
C++
135 lines
4.4 KiB
C++
/****************************************************************************
|
|
**
|
|
** Copyright (C) 2015 The Qt Company Ltd
|
|
** All rights reserved.
|
|
** For any questions to The Qt Company, please use contact form at
|
|
** http://www.qt.io/contact-us
|
|
**
|
|
** 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 The Qt Company.
|
|
**
|
|
** If you have questions regarding the use of this file, please use
|
|
** contact form at http://www.qt.io/contact-us
|
|
**
|
|
****************************************************************************/
|
|
|
|
#ifndef TESTCODEPARSER_H
|
|
#define TESTCODEPARSER_H
|
|
|
|
#include "testtreeitem.h"
|
|
#include "testtreemodel.h"
|
|
|
|
#include <cplusplus/CppDocument.h>
|
|
|
|
#include <qmljs/qmljsdocument.h>
|
|
|
|
#include <QObject>
|
|
#include <QMap>
|
|
|
|
namespace Core {
|
|
class Id;
|
|
}
|
|
|
|
namespace Autotest {
|
|
namespace Internal {
|
|
|
|
struct TestCodeLocationAndType;
|
|
class TestInfo;
|
|
class UnnamedQuickTestInfo;
|
|
class GTestInfo;
|
|
|
|
class TestCodeParser : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
enum State {
|
|
Idle,
|
|
PartialParse,
|
|
FullParse,
|
|
Disabled
|
|
};
|
|
|
|
explicit TestCodeParser(TestTreeModel *parent = 0);
|
|
virtual ~TestCodeParser();
|
|
void setState(State state);
|
|
State state() const { return m_parserState; }
|
|
void setDirty() { m_dirty = true; }
|
|
|
|
#ifdef WITH_TESTS
|
|
int autoTestsCount() const;
|
|
int namedQuickTestsCount() const;
|
|
int unnamedQuickTestsCount() const;
|
|
#endif
|
|
|
|
signals:
|
|
void cacheCleared();
|
|
void testItemCreated(TestTreeItem *item, TestTreeModel::Type type);
|
|
void testItemModified(TestTreeItem *tItem, TestTreeModel::Type type, const QStringList &file);
|
|
void testItemsRemoved(const QString &filePath, TestTreeModel::Type type);
|
|
void unnamedQuickTestsUpdated(const QString &mainFile,
|
|
const QMap<QString, TestCodeLocationAndType> &functions);
|
|
void unnamedQuickTestsRemoved(const QString &filePath);
|
|
void gTestsRemoved(const QString &filePath);
|
|
void parsingStarted();
|
|
void parsingFinished();
|
|
void parsingFailed();
|
|
void partialParsingFinished();
|
|
|
|
public slots:
|
|
void emitUpdateTestTree();
|
|
void updateTestTree();
|
|
void checkDocumentForTestCode(CPlusPlus::Document::Ptr document);
|
|
void handleQtQuickTest(CPlusPlus::Document::Ptr document);
|
|
void handleGTest(const QString &filePath, const QSet<QString> &names);
|
|
|
|
void onCppDocumentUpdated(const CPlusPlus::Document::Ptr &document);
|
|
void onQmlDocumentUpdated(const QmlJS::Document::Ptr &document);
|
|
void onStartupProjectChanged(ProjectExplorer::Project *);
|
|
void onProjectPartsUpdated(ProjectExplorer::Project *project);
|
|
void removeFiles(const QStringList &files);
|
|
|
|
private:
|
|
bool postponed(const QStringList &fileList);
|
|
void scanForTests(const QStringList &fileList = QStringList());
|
|
void clearCache();
|
|
void removeTestsIfNecessary(const QString &fileName);
|
|
|
|
void onTaskStarted(Core::Id type);
|
|
void onAllTasksFinished(Core::Id type);
|
|
void onFinished();
|
|
void onPartialParsingFinished();
|
|
void updateUnnamedQuickTests(const QString &fileName, const QString &mainFile,
|
|
const QMap<QString, TestCodeLocationAndType> &functions);
|
|
void updateModelAndCppDocMap(CPlusPlus::Document::Ptr document,
|
|
const QString &declaringFile, TestTreeItem *testItem);
|
|
void updateModelAndQuickDocMap(QmlJS::Document::Ptr document,
|
|
const QString &referencingFile, TestTreeItem *testItem);
|
|
void updateGTests(const CPlusPlus::Document::Ptr &doc,
|
|
const QMap<QString, TestCodeLocationList> &tests);
|
|
void removeUnnamedQuickTestsByName(const QString &fileName);
|
|
void removeGTestsByName(const QString &fileName);
|
|
|
|
TestTreeModel *m_model;
|
|
QMap<QString, TestInfo> m_cppDocMap;
|
|
QMap<QString, TestInfo> m_quickDocMap;
|
|
QMap<QString, TestInfo> m_gtestDocMap;
|
|
QList<UnnamedQuickTestInfo> m_unnamedQuickDocList;
|
|
QList<GTestInfo> m_gtestDocList;
|
|
bool m_codeModelParsing;
|
|
bool m_fullUpdatePostponed;
|
|
bool m_partialUpdatePostponed;
|
|
bool m_dirty;
|
|
bool m_singleShotScheduled;
|
|
QSet<QString> m_postponedFiles;
|
|
State m_parserState;
|
|
};
|
|
|
|
} // namespace Internal
|
|
} // Autotest
|
|
|
|
#endif // TESTCODEPARSER_H
|