//===- unittest/AST/ASTTypeTraits.cpp - AST type traits unit tests ------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===--------------------------------------------------------------------===// #include "clang/AST/ASTTypeTraits.h" #include "gtest/gtest.h" #include "MatchVerifier.h" using namespace clang::ast_matchers; namespace clang { namespace ast_type_traits { TEST(ASTNodeKind, NoKind) { EXPECT_FALSE(ASTNodeKind().isBaseOf(ASTNodeKind())); EXPECT_FALSE(ASTNodeKind().isSame(ASTNodeKind())); } template static ASTNodeKind DNT() { return ASTNodeKind::getFromNodeKind(); } TEST(ASTNodeKind, Bases) { EXPECT_TRUE(DNT().isBaseOf(DNT())); EXPECT_FALSE(DNT().isSame(DNT())); EXPECT_FALSE(DNT().isBaseOf(DNT())); EXPECT_TRUE(DNT().isSame(DNT())); } TEST(ASTNodeKind, SameBase) { EXPECT_TRUE(DNT().isBaseOf(DNT())); EXPECT_TRUE(DNT().isBaseOf(DNT())); EXPECT_FALSE(DNT().isBaseOf(DNT())); EXPECT_FALSE(DNT().isBaseOf(DNT())); } TEST(ASTNodeKind, DiffBase) { EXPECT_FALSE(DNT().isBaseOf(DNT())); EXPECT_FALSE(DNT().isBaseOf(DNT())); EXPECT_FALSE(DNT().isSame(DNT())); } struct Foo {}; TEST(ASTNodeKind, UnknownKind) { // We can construct one, but it is nowhere in the hierarchy. EXPECT_FALSE(DNT().isSame(DNT())); } TEST(ASTNodeKind, Name) { EXPECT_EQ("Decl", DNT().asStringRef()); EXPECT_EQ("CallExpr", DNT().asStringRef()); EXPECT_EQ("ConstantArrayType", DNT().asStringRef()); EXPECT_EQ("", ASTNodeKind().asStringRef()); } TEST(DynTypedNode, DeclSourceRange) { RangeVerifier Verifier; Verifier.expectRange(1, 1, 1, 11); EXPECT_TRUE(Verifier.match("void f() {}", decl())); } TEST(DynTypedNode, StmtSourceRange) { RangeVerifier Verifier; Verifier.expectRange(1, 10, 1, 11); EXPECT_TRUE(Verifier.match("void f() {}", stmt())); } TEST(DynTypedNode, TypeLocSourceRange) { RangeVerifier Verifier; Verifier.expectRange(1, 1, 1, 8); EXPECT_TRUE(Verifier.match("void f() {}", typeLoc(loc(functionType())))); } TEST(DynTypedNode, NNSLocSourceRange) { RangeVerifier Verifier; Verifier.expectRange(1, 33, 1, 34); EXPECT_TRUE(Verifier.match("namespace N { typedef void T; } N::T f() {}", nestedNameSpecifierLoc())); } TEST(DynTypedNode, DeclDump) { DumpVerifier Verifier; Verifier.expectSubstring("FunctionDecl"); EXPECT_TRUE(Verifier.match("void f() {}", functionDecl())); } TEST(DynTypedNode, StmtDump) { DumpVerifier Verifier; Verifier.expectSubstring("CompoundStmt"); EXPECT_TRUE(Verifier.match("void f() {}", stmt())); } TEST(DynTypedNode, DeclPrint) { PrintVerifier Verifier; Verifier.expectString("void f() {\n}\n\n"); EXPECT_TRUE(Verifier.match("void f() {}", functionDecl())); } TEST(DynTypedNode, StmtPrint) { PrintVerifier Verifier; Verifier.expectString("{\n}\n"); EXPECT_TRUE(Verifier.match("void f() {}", stmt())); } } // namespace ast_type_traits } // namespace clang