From d5fbb2910fe934a61176b94503b0cf495f129253 Mon Sep 17 00:00:00 2001 From: Samuel Benzaquen Date: Wed, 19 Jun 2013 18:45:24 +0000 Subject: Enhancements for the DynTypedNode Added ASTNodeKind as a standalone way to represent node kinds and their hierarchy. This change is to support ongoing work on D815. Reviewers: klimek CC: cfe-commits git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184331 91177308-0d34-0410-b5e6-96231b3b80d8 --- unittests/AST/ASTTypeTraitsTest.cpp | 62 +++++++++++++++++++++++++++++++++++++ unittests/AST/CMakeLists.txt | 1 + 2 files changed, 63 insertions(+) create mode 100644 unittests/AST/ASTTypeTraitsTest.cpp (limited to 'unittests/AST') diff --git a/unittests/AST/ASTTypeTraitsTest.cpp b/unittests/AST/ASTTypeTraitsTest.cpp new file mode 100644 index 0000000000..5e3abe25d1 --- /dev/null +++ b/unittests/AST/ASTTypeTraitsTest.cpp @@ -0,0 +1,62 @@ +//===- 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" + +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()); +} + +} // namespace ast_type_traits +} // namespace clang diff --git a/unittests/AST/CMakeLists.txt b/unittests/AST/CMakeLists.txt index 3ef2a5e153..c414ae3b23 100644 --- a/unittests/AST/CMakeLists.txt +++ b/unittests/AST/CMakeLists.txt @@ -1,5 +1,6 @@ add_clang_unittest(ASTTests ASTContextParentMapTest.cpp + ASTTypeTraitsTest.cpp CommentLexer.cpp CommentParser.cpp DeclPrinterTest.cpp -- cgit v1.2.3