diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2022-06-22 12:05:59 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2022-06-23 13:54:14 +0000 |
commit | 67a08683d153ea7192b72b25c56d01e1c20e7c4f (patch) | |
tree | 8af4d0c837e8107217cfa6df8274e529cfe8cd73 /src | |
parent | 7dfbe785e9e748da90c088866d1f3beb5c47117f (diff) | |
download | qt-creator-67a08683d153ea7192b72b25c56d01e1c20e7c4f.tar.gz |
ClangCodeModel: Move a test over from unittest
Change-Id: Iac295216fff274fbe4a109477b1a4c2bd2c98d5d
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src')
5 files changed, 244 insertions, 1 deletions
diff --git a/src/plugins/clangcodemodel/CMakeLists.txt b/src/plugins/clangcodemodel/CMakeLists.txt index e64d17b5f0..9205ba340b 100644 --- a/src/plugins/clangcodemodel/CMakeLists.txt +++ b/src/plugins/clangcodemodel/CMakeLists.txt @@ -46,6 +46,7 @@ extend_qtc_plugin(ClangCodeModel extend_qtc_plugin(ClangCodeModel CONDITION WITH_TESTS SOURCES + test/activationsequenceprocessortest.cpp test/activationsequenceprocessortest.h test/clangbatchfileprocessor.cpp test/clangbatchfileprocessor.h test/clangdtests.cpp test/clangdtests.h test/clangfixittest.cpp test/clangfixittest.h diff --git a/src/plugins/clangcodemodel/clangcodemodel.qbs b/src/plugins/clangcodemodel/clangcodemodel.qbs index bd0f341cc5..dc85b9d96d 100644 --- a/src/plugins/clangcodemodel/clangcodemodel.qbs +++ b/src/plugins/clangcodemodel/clangcodemodel.qbs @@ -92,6 +92,8 @@ QtcPlugin { condition: qtc.testsEnabled prefix: "test/" files: [ + "activationsequenceprocessortest.cpp", + "activationsequenceprocessortest.h", "clangbatchfileprocessor.cpp", "clangbatchfileprocessor.h", "clangdtests.cpp", diff --git a/src/plugins/clangcodemodel/clangcodemodelplugin.cpp b/src/plugins/clangcodemodel/clangcodemodelplugin.cpp index 675ee4e0e9..4a1d53a8ac 100644 --- a/src/plugins/clangcodemodel/clangcodemodelplugin.cpp +++ b/src/plugins/clangcodemodel/clangcodemodelplugin.cpp @@ -29,6 +29,7 @@ #include "clangutils.h" #ifdef WITH_TESTS +# include "test/activationsequenceprocessortest.h" # include "test/clangbatchfileprocessor.h" # include "test/clangdtests.h" # include "test/clangfixittest.h" @@ -203,6 +204,7 @@ void ClangCodeModelPlugin::maybeHandleBatchFileAndExit() const QVector<QObject *> ClangCodeModelPlugin::createTestObjects() const { return { + new Tests::ActivationSequenceProcessorTest, new Tests::ClangdTestCompletion, new Tests::ClangdTestExternalChanges, new Tests::ClangdTestFindReferences, @@ -215,6 +217,5 @@ QVector<QObject *> ClangCodeModelPlugin::createTestObjects() const } #endif - } // namespace Internal } // namespace Clang diff --git a/src/plugins/clangcodemodel/test/activationsequenceprocessortest.cpp b/src/plugins/clangcodemodel/test/activationsequenceprocessortest.cpp new file mode 100644 index 0000000000..491289096d --- /dev/null +++ b/src/plugins/clangcodemodel/test/activationsequenceprocessortest.cpp @@ -0,0 +1,180 @@ +/**************************************************************************** +** +** Copyright (C) 2022 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 "activationsequenceprocessortest.h" + +#include "../clangactivationsequenceprocessor.h" + +#include <cplusplus/Token.h> + +#include <QtTest> + +using namespace CPlusPlus; + +namespace ClangCodeModel::Internal::Tests { + +static bool resultIs(const ActivationSequenceProcessor &processor, Kind expectedKind, + int expectedOffset, int expectedNewPos) +{ + return processor.completionKind() == expectedKind + && processor.offset() == expectedOffset + && processor.operatorStartPosition() == expectedNewPos; +} + +void ActivationSequenceProcessorTest::testCouldNotProcesseRandomCharacters() +{ + ActivationSequenceProcessor processor(QStringLiteral("xxx"), 3, false); + QVERIFY(resultIs(processor, T_EOF_SYMBOL, 0, 3)); +} + +void ActivationSequenceProcessorTest::testCouldNotProcesseEmptyString() +{ + ActivationSequenceProcessor processor(QStringLiteral(""), 0, true); + QVERIFY(resultIs(processor, T_EOF_SYMBOL, 0, 0)); +} + +void ActivationSequenceProcessorTest::testDot() +{ + ActivationSequenceProcessor processor(QStringLiteral("."), 1, true); + QVERIFY(resultIs(processor, T_DOT, 1, 0)); +} + +void ActivationSequenceProcessorTest::testComma() +{ + ActivationSequenceProcessor processor(QStringLiteral(","), 2, false); + QVERIFY(resultIs(processor, T_COMMA, 1, 1)); +} + +void ActivationSequenceProcessorTest::testLeftParenAsFunctionCall() +{ + ActivationSequenceProcessor processor(QStringLiteral("("), 3, true); + QVERIFY(resultIs(processor, T_LPAREN, 1, 2)); +} + +void ActivationSequenceProcessorTest::testLeftParenNotAsFunctionCall() +{ + ActivationSequenceProcessor processor(QStringLiteral("("), 3, false); + QVERIFY(resultIs(processor, T_EOF_SYMBOL, 0, 3)); +} + +void ActivationSequenceProcessorTest::testColonColon() +{ + ActivationSequenceProcessor processor(QStringLiteral("::"), 20, true); + + QVERIFY(resultIs(processor, T_COLON_COLON, 2, 18)); +} + +void ActivationSequenceProcessorTest::testArrow() +{ + ActivationSequenceProcessor processor(QStringLiteral("->"), 2, true); + + QVERIFY(resultIs(processor, T_ARROW, 2, 0)); +} + +void ActivationSequenceProcessorTest::testDotStar() +{ + ActivationSequenceProcessor processor(QStringLiteral(".*"), 3, true); + + QVERIFY(resultIs(processor, T_DOT_STAR, 2, 1)); +} + +void ActivationSequenceProcessorTest::testArrowStar() +{ + ActivationSequenceProcessor processor(QStringLiteral("->*"), 3, true); + + QVERIFY(resultIs(processor, T_ARROW_STAR, 3, 0)); +} + +void ActivationSequenceProcessorTest::testDoxyGenCommentBackSlash() +{ + ActivationSequenceProcessor processor(QStringLiteral(" \\"), 3, true); + + QVERIFY(resultIs(processor, T_DOXY_COMMENT, 1, 2)); +} + +void ActivationSequenceProcessorTest::testDoxyGenCommentAt() +{ + ActivationSequenceProcessor processor(QStringLiteral(" @"), 2, true); + + QVERIFY(resultIs(processor, T_DOXY_COMMENT, 1, 1)); +} + +void ActivationSequenceProcessorTest::testAngleStringLiteral() +{ + ActivationSequenceProcessor processor(QStringLiteral("<"), 1, true); + + QVERIFY(resultIs(processor, T_ANGLE_STRING_LITERAL, 1, 0)); +} + +void ActivationSequenceProcessorTest::testStringLiteral() +{ + ActivationSequenceProcessor processor(QStringLiteral("\""), 1, true); + + QVERIFY(resultIs(processor, T_STRING_LITERAL, 1, 0)); +} + +void ActivationSequenceProcessorTest::testSlash() +{ + ActivationSequenceProcessor processor(QStringLiteral("/"), 1, true); + + QVERIFY(resultIs(processor, T_SLASH, 1, 0)); +} + +void ActivationSequenceProcessorTest::testPound() +{ + ActivationSequenceProcessor processor(QStringLiteral("#"), 1, true); + + QVERIFY(resultIs(processor, T_POUND, 1, 0)); +} + +void ActivationSequenceProcessorTest::testPositionIsOne() +{ + ActivationSequenceProcessor processor(QStringLiteral("<xx"), 1, false); + + QVERIFY(resultIs(processor, T_ANGLE_STRING_LITERAL, 1, 0)); +} + +void ActivationSequenceProcessorTest::testPositionIsTwo() +{ + ActivationSequenceProcessor processor(QStringLiteral(" @x"), 2, true); + + QVERIFY(resultIs(processor, T_DOXY_COMMENT, 1, 1)); +} + +void ActivationSequenceProcessorTest::testPositionIsTwoWithASingleSign() +{ + ActivationSequenceProcessor processor(QStringLiteral("x<x"), 2, false); + + QVERIFY(resultIs(processor, T_ANGLE_STRING_LITERAL, 1, 1)); +} + +void ActivationSequenceProcessorTest::testPositionIsThree() +{ + ActivationSequenceProcessor processor(QStringLiteral("xx<"), 3, false); + + QVERIFY(resultIs(processor, T_ANGLE_STRING_LITERAL, 1, 2)); +} + +} // namespace ClangCodeModel::Internal::Tests diff --git a/src/plugins/clangcodemodel/test/activationsequenceprocessortest.h b/src/plugins/clangcodemodel/test/activationsequenceprocessortest.h new file mode 100644 index 0000000000..3d356f57b1 --- /dev/null +++ b/src/plugins/clangcodemodel/test/activationsequenceprocessortest.h @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2022 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. +** +****************************************************************************/ + +#pragma once + +#include <QObject> + +namespace ClangCodeModel::Internal::Tests { + +class ActivationSequenceProcessorTest : public QObject +{ + Q_OBJECT + +private slots: + void testCouldNotProcesseRandomCharacters(); + void testCouldNotProcesseEmptyString(); + void testDot(); + void testComma(); + void testLeftParenAsFunctionCall(); + void testLeftParenNotAsFunctionCall(); + void testColonColon(); + void testArrow(); + void testDotStar(); + void testArrowStar(); + void testDoxyGenCommentBackSlash(); + void testDoxyGenCommentAt(); + void testAngleStringLiteral(); + void testStringLiteral(); + void testSlash(); + void testPound(); + void testPositionIsOne(); + void testPositionIsTwo(); + void testPositionIsTwoWithASingleSign(); + void testPositionIsThree(); +}; + +} // namespace ClangCodeModel::Internal::Tests |