/**************************************************************************** ** ** 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 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "gtest-qt-printing.h" using ClangBackEnd::Cursor; using ClangBackEnd::HighlightingInformation; using ClangBackEnd::HighlightingInformations; using ClangBackEnd::HighlightingType; using ClangBackEnd::TranslationUnit; using ClangBackEnd::UnsavedFiles; using ClangBackEnd::ProjectPart; using ClangBackEnd::TranslationUnits; using ClangBackEnd::ClangString; using ClangBackEnd::SourceRange; using testing::PrintToString; using testing::IsNull; using testing::NotNull; using testing::Gt; using testing::Contains; using testing::EndsWith; using testing::AllOf; using testing::Not; using testing::IsEmpty; using testing::SizeIs; namespace { MATCHER_P4(IsHighlightingInformation, line, column, length, type, std::string(negation ? "isn't " : "is ") + PrintToString(HighlightingInformation(line, column, length, type)) ) { const HighlightingInformation expected(line, column, length, type); return arg == expected; } MATCHER_P(HasType, type, std::string(negation ? "isn't " : "is ") + PrintToString(type) ) { return arg.hasType(type); } struct Data { ClangBackEnd::ProjectParts projects; ClangBackEnd::UnsavedFiles unsavedFiles; ClangBackEnd::TranslationUnits translationUnits{projects, unsavedFiles}; TranslationUnit translationUnit{Utf8StringLiteral(TESTDATA_DIR"/highlightinginformations.cpp"), ProjectPart(Utf8StringLiteral("projectPartId"), {Utf8StringLiteral("-std=c++14")}), {}, translationUnits}; }; class HighlightingInformations : public ::testing::Test { public: static void SetUpTestCase(); static void TearDownTestCase(); SourceRange sourceRange(uint line, uint columnEnd) const; protected: static Data *d; const TranslationUnit &translationUnit = d->translationUnit; }; TEST_F(HighlightingInformations, CreateNullInformations) { ::HighlightingInformations infos; ASSERT_TRUE(infos.isNull()); } TEST_F(HighlightingInformations, NullInformationsAreEmpty) { ::HighlightingInformations infos; ASSERT_TRUE(infos.isEmpty()); } TEST_F(HighlightingInformations, IsNotNull) { const auto aRange = translationUnit.sourceRange(3, 1, 5, 1); const auto infos = translationUnit.highlightingInformationsInRange(aRange); ASSERT_FALSE(infos.isNull()); } TEST_F(HighlightingInformations, IteratorBeginEnd) { const auto aRange = translationUnit.sourceRange(3, 1, 5, 1); const auto infos = translationUnit.highlightingInformationsInRange(aRange); const auto endIterator = std::next(infos.begin(), infos.size()); ASSERT_THAT(infos.end(), endIterator); } TEST_F(HighlightingInformations, ForFullTranslationUnitRange) { const auto infos = translationUnit.highlightingInformations(); ASSERT_THAT(infos, AllOf(Contains(IsHighlightingInformation(1u, 1u, 4u, HighlightingType::Keyword)), Contains(IsHighlightingInformation(277u, 5u, 15u, HighlightingType::Function)))); } TEST_F(HighlightingInformations, Size) { const auto range = translationUnit.sourceRange(5, 5, 5, 10); const auto infos = translationUnit.highlightingInformationsInRange(range); ASSERT_THAT(infos.size(), 1); } TEST_F(HighlightingInformations, DISABLED_Keyword) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(5, 12)); ASSERT_THAT(infos[0], IsHighlightingInformation(5u, 5u, 6u, HighlightingType::Keyword)); } TEST_F(HighlightingInformations, StringLiteral) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(1, 29)); ASSERT_THAT(infos[4], IsHighlightingInformation(1u, 24u, 10u, HighlightingType::StringLiteral)); } TEST_F(HighlightingInformations, Utf8StringLiteral) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(2, 33)); ASSERT_THAT(infos[4], IsHighlightingInformation(2u, 24u, 12u, HighlightingType::StringLiteral)); } TEST_F(HighlightingInformations, RawStringLiteral) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(3, 34)); ASSERT_THAT(infos[4], IsHighlightingInformation(3u, 24u, 13u, HighlightingType::StringLiteral)); } TEST_F(HighlightingInformations, CharacterLiteral) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(4, 28)); ASSERT_THAT(infos[3], IsHighlightingInformation(4u, 24u, 3u, HighlightingType::StringLiteral)); } TEST_F(HighlightingInformations, IntegerLiteral) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(23, 26)); ASSERT_THAT(infos[3], IsHighlightingInformation(23u, 24u, 1u, HighlightingType::NumberLiteral)); } TEST_F(HighlightingInformations, FloatLiteral) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(24, 29)); ASSERT_THAT(infos[3], IsHighlightingInformation(24u, 24u, 4u, HighlightingType::NumberLiteral)); } TEST_F(HighlightingInformations, FunctionDefinition) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(45, 20)); ASSERT_THAT(infos[1], IsHighlightingInformation(45u, 5u, 8u, HighlightingType::Function)); } TEST_F(HighlightingInformations, MemberFunctionDefinition) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(52, 29)); ASSERT_THAT(infos[1], IsHighlightingInformation(52u, 10u, 14u, HighlightingType::Function)); } TEST_F(HighlightingInformations, FunctionDeclaration) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(55, 32)); ASSERT_THAT(infos[1], IsHighlightingInformation(55u, 5u, 19u, HighlightingType::Function)); } TEST_F(HighlightingInformations, MemberFunctionDeclaration) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(59, 27)); ASSERT_THAT(infos[1], IsHighlightingInformation(59u, 10u, 14u, HighlightingType::Function)); } TEST_F(HighlightingInformations, MemberFunctionReference) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(104, 35)); ASSERT_THAT(infos[0], IsHighlightingInformation(104u, 9u, 23u, HighlightingType::Function)); } TEST_F(HighlightingInformations, FunctionCall) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(64, 16)); ASSERT_THAT(infos[0], IsHighlightingInformation(64u, 5u, 8u, HighlightingType::Function)); } TEST_F(HighlightingInformations, TypeConversionFunction) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(68, 20)); ASSERT_THAT(infos[1], IsHighlightingInformation(68u, 14u, 3u, HighlightingType::Type)); } TEST_F(HighlightingInformations, InbuiltTypeConversionFunction) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(69, 20)); ASSERT_THAT(infos[1], IsHighlightingInformation(69u, 14u, 3u, HighlightingType::Keyword)); } TEST_F(HighlightingInformations, TypeReference) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(74, 13)); ASSERT_THAT(infos[0], IsHighlightingInformation(74u, 5u, 3u, HighlightingType::Type)); } TEST_F(HighlightingInformations, LocalVariable) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(79, 13)); ASSERT_THAT(infos[1], IsHighlightingInformation(79u, 9u, 3u, HighlightingType::LocalVariable)); } TEST_F(HighlightingInformations, LocalVariableDeclaration) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(79, 13)); ASSERT_THAT(infos[1], IsHighlightingInformation(79u, 9u, 3u, HighlightingType::LocalVariable)); } TEST_F(HighlightingInformations, LocalVariableReference) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(81, 26)); ASSERT_THAT(infos[0], IsHighlightingInformation(81u, 5u, 3u, HighlightingType::LocalVariable)); } TEST_F(HighlightingInformations, LocalVariableFunctionArgumentDeclaration) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(84, 45)); ASSERT_THAT(infos[5], IsHighlightingInformation(84u, 41u, 3u, HighlightingType::LocalVariable)); } TEST_F(HighlightingInformations, LocalVariableFunctionArgumentReference) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(86, 26)); ASSERT_THAT(infos[0], IsHighlightingInformation(86u, 5u, 3u, HighlightingType::LocalVariable)); } TEST_F(HighlightingInformations, ClassVariableDeclaration) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(90, 21)); ASSERT_THAT(infos[1], IsHighlightingInformation(90u, 9u, 11u, HighlightingType::Field)); } TEST_F(HighlightingInformations, ClassVariableReference) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(94, 23)); ASSERT_THAT(infos[0], IsHighlightingInformation(94u, 9u, 11u, HighlightingType::Field)); } TEST_F(HighlightingInformations, StaticMethodDeclaration) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(110, 25)); ASSERT_THAT(infos[1], IsHighlightingInformation(110u, 10u, 12u, HighlightingType::Function)); } TEST_F(HighlightingInformations, StaticMethodReference) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(114, 30)); ASSERT_THAT(infos[2], IsHighlightingInformation(114u, 15u, 12u, HighlightingType::Function)); } TEST_F(HighlightingInformations, Enumeration) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(118, 17)); ASSERT_THAT(infos[1], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, Enumerator) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(120, 15)); ASSERT_THAT(infos[0], HasType(HighlightingType::Enumeration)); } TEST_F(HighlightingInformations, EnumerationReferenceDeclarationType) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(125, 28)); ASSERT_THAT(infos[0], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, EnumerationReferenceDeclarationVariable) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(125, 28)); ASSERT_THAT(infos[1], HasType(HighlightingType::LocalVariable)); } TEST_F(HighlightingInformations, EnumerationReference) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(127, 30)); ASSERT_THAT(infos[0], HasType(HighlightingType::LocalVariable)); } TEST_F(HighlightingInformations, EnumeratorReference) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(127, 30)); ASSERT_THAT(infos[2], HasType(HighlightingType::Enumeration)); } TEST_F(HighlightingInformations, ClassForwardDeclaration) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(130, 12)); ASSERT_THAT(infos[1], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, ConstructorDeclaration) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(134, 13)); ASSERT_THAT(infos[0], HasType(HighlightingType::Function)); } TEST_F(HighlightingInformations, DestructorDeclaration) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(135, 15)); ASSERT_THAT(infos[1], HasType(HighlightingType::Function)); } TEST_F(HighlightingInformations, ClassForwardDeclarationReference) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(138, 23)); ASSERT_THAT(infos[0], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, ClassTypeReference) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(140, 32)); ASSERT_THAT(infos[0], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, ConstructorReferenceVariable) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(140, 32)); ASSERT_THAT(infos[1], HasType(HighlightingType::LocalVariable)); } TEST_F(HighlightingInformations, UnionDeclaration) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(145, 12)); ASSERT_THAT(infos[1], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, UnionDeclarationReference) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(150, 33)); ASSERT_THAT(infos[0], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, GlobalVariable) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(150, 33)); ASSERT_THAT(infos[1], HasType(HighlightingType::GlobalVariable)); } TEST_F(HighlightingInformations, StructDeclaration) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(50, 11)); ASSERT_THAT(infos[1], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, NameSpace) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(160, 22)); ASSERT_THAT(infos[1], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, NameSpaceAlias) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(164, 38)); ASSERT_THAT(infos[1], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, UsingStructInNameSpace) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(165, 36)); ASSERT_THAT(infos[3], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, NameSpaceReference) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(166, 35)); ASSERT_THAT(infos[0], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, StructInNameSpaceReference) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(166, 35)); ASSERT_THAT(infos[2], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, VirtualFunction) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(170, 35)); ASSERT_THAT(infos[2], HasType(HighlightingType::VirtualFunction)); } TEST_F(HighlightingInformations, DISABLED_NonVirtualFunctionCall) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(177, 46)); ASSERT_THAT(infos[2], HasType(HighlightingType::Function)); } TEST_F(HighlightingInformations, DISABLED_NonVirtualFunctionCallPointer) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(180, 54)); ASSERT_THAT(infos[2], HasType(HighlightingType::Function)); } TEST_F(HighlightingInformations, VirtualFunctionCallPointer) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(192, 51)); ASSERT_THAT(infos[2], HasType(HighlightingType::VirtualFunction)); } TEST_F(HighlightingInformations, FinalVirtualFunctionCallPointer) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(202, 61)); ASSERT_THAT(infos[2], HasType(HighlightingType::Function)); } TEST_F(HighlightingInformations, NonFinalVirtualFunctionCallPointer) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(207, 61)); ASSERT_THAT(infos[2], HasType(HighlightingType::VirtualFunction)); } TEST_F(HighlightingInformations, PlusOperator) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(224, 49)); ASSERT_THAT(infos[6], HasType(HighlightingType::Operator)); } TEST_F(HighlightingInformations, PlusAssignOperator) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(226, 24)); ASSERT_THAT(infos[1], HasType(HighlightingType::Operator)); } TEST_F(HighlightingInformations, Comment) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(229, 14)); ASSERT_THAT(infos[0], HasType(HighlightingType::Comment)); } TEST_F(HighlightingInformations, PreprocessingDirective) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(231, 37)); ASSERT_THAT(infos[1], HasType(HighlightingType::Preprocessor)); } TEST_F(HighlightingInformations, PreprocessorMacroDefinition) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(231, 37)); ASSERT_THAT(infos[2], HasType(HighlightingType::PreprocessorDefinition)); } TEST_F(HighlightingInformations, PreprocessorFunctionMacroDefinition) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(232, 47)); ASSERT_THAT(infos[2], HasType(HighlightingType::PreprocessorDefinition)); } TEST_F(HighlightingInformations, PreprocessorMacroExpansion) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(236, 27)); ASSERT_THAT(infos[0], HasType(HighlightingType::PreprocessorExpansion)); } TEST_F(HighlightingInformations, PreprocessorMacroExpansionArgument) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(236, 27)); ASSERT_THAT(infos[2], HasType(HighlightingType::NumberLiteral)); } TEST_F(HighlightingInformations, PreprocessorInclusionDirective) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(239, 18)); ASSERT_THAT(infos[1], HasType(HighlightingType::StringLiteral)); } TEST_F(HighlightingInformations, GotoLabelStatement) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(242, 12)); ASSERT_THAT(infos[0], HasType(HighlightingType::Label)); } TEST_F(HighlightingInformations, GotoLabelStatementReference) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(244, 21)); ASSERT_THAT(infos[1], HasType(HighlightingType::Label)); } TEST_F(HighlightingInformations, TemplateReference) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(254, 25)); ASSERT_THAT(infos[0], HasType(HighlightingType::Function)); } TEST_F(HighlightingInformations, TemplateTypeParameter) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(265, 135)); ASSERT_THAT(infos[3], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, TemplateDefaultParameter) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(265, 135)); ASSERT_THAT(infos[5], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, NonTypeTemplateParameter) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(265, 135)); ASSERT_THAT(infos[8], HasType(HighlightingType::LocalVariable)); } TEST_F(HighlightingInformations, NonTypeTemplateParameterDefaultArgument) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(265, 135)); ASSERT_THAT(infos[10], HasType(HighlightingType::NumberLiteral)); } TEST_F(HighlightingInformations, TemplateTemplateParameter) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(265, 135)); ASSERT_THAT(infos[17], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, TemplateTemplateParameterDefaultArgument) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(265, 135)); ASSERT_THAT(infos[19], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, TemplateFunctionDeclaration) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(266, 63)); ASSERT_THAT(infos[1], HasType(HighlightingType::Function)); } TEST_F(HighlightingInformations, TemplateTypeParameterReference) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(268, 58)); ASSERT_THAT(infos[0], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, TemplateTypeParameterDeclarationReference) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(268, 58)); ASSERT_THAT(infos[1], HasType(HighlightingType::LocalVariable)); } TEST_F(HighlightingInformations, NonTypeTemplateParameterReference) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(269, 71)); ASSERT_THAT(infos[3], HasType(HighlightingType::LocalVariable)); } TEST_F(HighlightingInformations, NonTypeTemplateParameterReferenceReference) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(269, 71)); ASSERT_THAT(infos[1], HasType(HighlightingType::LocalVariable)); } TEST_F(HighlightingInformations, TemplateTemplateParameterReference) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(270, 89)); ASSERT_THAT(infos[0], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, TemplateTemplateContainerParameterReference) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(270, 89)); ASSERT_THAT(infos[2], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, TemplateTemplateParameterReferenceVariable) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(270, 89)); ASSERT_THAT(infos[4], HasType(HighlightingType::LocalVariable)); } TEST_F(HighlightingInformations, ClassFinalVirtualFunctionCallPointer) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(212, 61)); ASSERT_THAT(infos[2], HasType(HighlightingType::Function)); } TEST_F(HighlightingInformations, ClassFinalVirtualFunctionCall) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(277, 23)); ASSERT_THAT(infos[0], HasType(HighlightingType::Function)); } TEST_F(HighlightingInformations, HasFunctionArguments) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(286, 29)); ASSERT_TRUE(infos[1].hasFunctionArguments()); } TEST_F(HighlightingInformations, NoOutputFunctionArguments) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(285, 13)); auto outputFunctionArguments = infos[1].outputFunctionArguments(); ASSERT_THAT(outputFunctionArguments, IsEmpty()); } TEST_F(HighlightingInformations, DISABLED_OneOutputFunctionArguments) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(285, 13)); auto outputFunctionArguments = infos[1].outputFunctionArguments(); ASSERT_THAT(outputFunctionArguments, SizeIs(1)); } TEST_F(HighlightingInformations, PreprocessorInclusionDirectiveWithAngleBrackets ) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(289, 38)); ASSERT_THAT(infos[3], HasType(HighlightingType::StringLiteral)); } TEST_F(HighlightingInformations, ArgumentInMacroExpansionIsKeyword) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(302, 36)); ASSERT_THAT(infos[2], HasType(HighlightingType::Keyword)); } TEST_F(HighlightingInformations, DISABLED_FirstArgumentInMacroExpansionIsLocalVariable) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(302, 36)); ASSERT_THAT(infos[3], HasType(HighlightingType::Invalid)); } TEST_F(HighlightingInformations, DISABLED_SecondArgumentInMacroExpansionIsLocalVariable) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(302, 36)); ASSERT_THAT(infos[5], HasType(HighlightingType::Invalid)); } TEST_F(HighlightingInformations, DISABLED_SecondArgumentInMacroExpansionIsField) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(310, 40)); ASSERT_THAT(infos[5], HasType(HighlightingType::Invalid)); } TEST_F(HighlightingInformations, DISABLED_EnumerationType) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(316, 30)); ASSERT_THAT(infos[3], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, TypeInStaticCast) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(328, 64)); ASSERT_THAT(infos[4], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, StaticCastIsKeyword) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(328, 64)); ASSERT_THAT(infos[0], HasType(HighlightingType::Keyword)); } TEST_F(HighlightingInformations, StaticCastPunctationIsInvalid) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(328, 64)); ASSERT_THAT(infos[1], HasType(HighlightingType::Invalid)); ASSERT_THAT(infos[3], HasType(HighlightingType::Invalid)); ASSERT_THAT(infos[5], HasType(HighlightingType::Invalid)); } TEST_F(HighlightingInformations, TypeInReinterpretCast) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(329, 69)); ASSERT_THAT(infos[4], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, IntegerAliasDeclaration) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(333, 41)); ASSERT_THAT(infos[1], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, IntegerAlias) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(341, 31)); ASSERT_THAT(infos[0], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, SecondIntegerAlias) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(342, 43)); ASSERT_THAT(infos[0], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, IntegerTypedef) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(343, 35)); ASSERT_THAT(infos[0], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, FunctionAlias) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(344, 16)); ASSERT_THAT(infos[0], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, FriendTypeDeclaration) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(350, 28)); ASSERT_THAT(infos[2], HasType(HighlightingType::Invalid)); } TEST_F(HighlightingInformations, FriendArgumentTypeDeclaration) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(351, 65)); ASSERT_THAT(infos[6], HasType(HighlightingType::Invalid)); } TEST_F(HighlightingInformations, FriendArgumentDeclaration) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(351, 65)); ASSERT_THAT(infos[8], HasType(HighlightingType::Invalid)); } TEST_F(HighlightingInformations, FieldInitialization) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(358, 18)); ASSERT_THAT(infos[0], HasType(HighlightingType::Field)); } TEST_F(HighlightingInformations, TemplateFunctionCall) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(372, 29)); ASSERT_THAT(infos[0], HasType(HighlightingType::Function)); } TEST_F(HighlightingInformations, TemplatedType) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(377, 21)); ASSERT_THAT(infos[1], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, TemplatedTypeDeclaration) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(384, 49)); ASSERT_THAT(infos[0], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, NoOperator) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(389, 24)); ASSERT_THAT(infos[2], HasType(HighlightingType::Invalid)); } TEST_F(HighlightingInformations, ScopeOperator) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(400, 33)); ASSERT_THAT(infos[1], HasType(HighlightingType::Invalid)); } TEST_F(HighlightingInformations, TemplateClassNamespace) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(413, 78)); ASSERT_THAT(infos[0], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, TemplateClass) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(413, 78)); ASSERT_THAT(infos[2], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, TemplateClassParameter) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(413, 78)); ASSERT_THAT(infos[4], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, TemplateClassDeclaration) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(413, 78)); ASSERT_THAT(infos[6], HasType(HighlightingType::LocalVariable)); } TEST_F(HighlightingInformations, TypeDefDeclaration) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(418, 36)); ASSERT_THAT(infos[2], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, TypeDefDeclarationUsage) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(419, 48)); ASSERT_THAT(infos[0], HasType(HighlightingType::Type)); } TEST_F(HighlightingInformations, DISABLED_EnumerationTypeDef) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(424, 41)); ASSERT_THAT(infos[3], HasType(HighlightingType::Type)); } // QTCREATORBUG-15473 TEST_F(HighlightingInformations, DISABLED_ArgumentToUserDefinedIndexOperator) { const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(434, 19)); ASSERT_THAT(infos[2], HasType(HighlightingType::LocalVariable)); } Data *HighlightingInformations::d; void HighlightingInformations::SetUpTestCase() { d = new Data; } void HighlightingInformations::TearDownTestCase() { delete d; d = nullptr; } ClangBackEnd::SourceRange HighlightingInformations::sourceRange(uint line, uint columnEnd) const { return translationUnit.sourceRange(line, 1, line, columnEnd); } }