1 //===- unittest/AST/ASTTypeTraits.cpp - AST type traits unit tests ------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===--------------------------------------------------------------------===//
9
10
11 #include "clang/AST/ASTTypeTraits.h"
12 #include "gtest/gtest.h"
13
14 namespace clang {
15 namespace ast_type_traits {
16
TEST(ASTNodeKind,NoKind)17 TEST(ASTNodeKind, NoKind) {
18 EXPECT_FALSE(ASTNodeKind().isBaseOf(ASTNodeKind()));
19 EXPECT_FALSE(ASTNodeKind().isSame(ASTNodeKind()));
20 }
21
DNT()22 template <typename T> static ASTNodeKind DNT() {
23 return ASTNodeKind::getFromNodeKind<T>();
24 }
25
TEST(ASTNodeKind,Bases)26 TEST(ASTNodeKind, Bases) {
27 EXPECT_TRUE(DNT<Decl>().isBaseOf(DNT<VarDecl>()));
28 EXPECT_FALSE(DNT<Decl>().isSame(DNT<VarDecl>()));
29 EXPECT_FALSE(DNT<VarDecl>().isBaseOf(DNT<Decl>()));
30
31 EXPECT_TRUE(DNT<Decl>().isSame(DNT<Decl>()));
32 }
33
TEST(ASTNodeKind,SameBase)34 TEST(ASTNodeKind, SameBase) {
35 EXPECT_TRUE(DNT<Expr>().isBaseOf(DNT<CallExpr>()));
36 EXPECT_TRUE(DNT<Expr>().isBaseOf(DNT<BinaryOperator>()));
37 EXPECT_FALSE(DNT<CallExpr>().isBaseOf(DNT<BinaryOperator>()));
38 EXPECT_FALSE(DNT<BinaryOperator>().isBaseOf(DNT<CallExpr>()));
39 }
40
TEST(ASTNodeKind,DiffBase)41 TEST(ASTNodeKind, DiffBase) {
42 EXPECT_FALSE(DNT<Expr>().isBaseOf(DNT<ArrayType>()));
43 EXPECT_FALSE(DNT<QualType>().isBaseOf(DNT<FunctionDecl>()));
44 EXPECT_FALSE(DNT<Type>().isSame(DNT<QualType>()));
45 }
46
47 struct Foo {};
48
TEST(ASTNodeKind,UnknownKind)49 TEST(ASTNodeKind, UnknownKind) {
50 // We can construct one, but it is nowhere in the hierarchy.
51 EXPECT_FALSE(DNT<Foo>().isSame(DNT<Foo>()));
52 }
53
TEST(ASTNodeKind,Name)54 TEST(ASTNodeKind, Name) {
55 EXPECT_EQ("Decl", DNT<Decl>().asStringRef());
56 EXPECT_EQ("CallExpr", DNT<CallExpr>().asStringRef());
57 EXPECT_EQ("ConstantArrayType", DNT<ConstantArrayType>().asStringRef());
58 EXPECT_EQ("<None>", ASTNodeKind().asStringRef());
59 }
60
61 } // namespace ast_type_traits
62 } // namespace clang
63