summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/unittests/clang-rename
diff options
context:
space:
mode:
authorManuel Klimek <klimek@google.com>2014-08-20 01:39:05 +0000
committerManuel Klimek <klimek@google.com>2014-08-20 01:39:05 +0000
commitde23726dbd92b72a84b74725f7561adca0f1cee3 (patch)
tree63aa9d3e63f3a621d508fa7e38cc9049525d6ce5 /clang-tools-extra/unittests/clang-rename
parent0781b860e44add0aa306197c643ebe40087d9dad (diff)
downloadbcm5719-llvm-de23726dbd92b72a84b74725f7561adca0f1cee3.tar.gz
bcm5719-llvm-de23726dbd92b72a84b74725f7561adca0f1cee3.zip
Revert rL215947: "[clang-rename] revert r215839"
Make tests not depend on grep supporting -bo. llvm-svn: 216041
Diffstat (limited to 'clang-tools-extra/unittests/clang-rename')
-rw-r--r--clang-tools-extra/unittests/clang-rename/CMakeLists.txt33
-rw-r--r--clang-tools-extra/unittests/clang-rename/Makefile24
-rw-r--r--clang-tools-extra/unittests/clang-rename/USRLocFindingTest.cpp84
3 files changed, 141 insertions, 0 deletions
diff --git a/clang-tools-extra/unittests/clang-rename/CMakeLists.txt b/clang-tools-extra/unittests/clang-rename/CMakeLists.txt
new file mode 100644
index 00000000000..dca9a80da88
--- /dev/null
+++ b/clang-tools-extra/unittests/clang-rename/CMakeLists.txt
@@ -0,0 +1,33 @@
+set(LLVM_LINK_COMPONENTS
+ support
+ )
+
+get_filename_component(CLANG_RENAME_SOURCE_DIR
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../clang-rename REALPATH)
+include_directories(
+ ${CLANG_RENAME_SOURCE_DIR}
+ )
+
+add_extra_unittest(ClangRenameTests
+ USRLocFindingTest.cpp
+ ${CLANG_RENAME_SOURCE_DIR}/USRFinder.cpp
+ ${CLANG_RENAME_SOURCE_DIR}/USRFindingAction.cpp
+ )
+
+target_link_libraries(ClangRenameTests
+ clangAnalysis
+ clangAST
+ clangBasic
+ clangDriver
+ clangEdit
+ clangFrontend
+ clangFrontendTool
+ clangIndex
+ clangLex
+ clangParse
+ clangRewrite
+ clangRewriteFrontend
+ clangSerialization
+ clangSema
+ clangTooling
+ ) \ No newline at end of file
diff --git a/clang-tools-extra/unittests/clang-rename/Makefile b/clang-tools-extra/unittests/clang-rename/Makefile
new file mode 100644
index 00000000000..c86d13253ab
--- /dev/null
+++ b/clang-tools-extra/unittests/clang-rename/Makefile
@@ -0,0 +1,24 @@
+##===- unittests/clang-rename/Makefile ---------------------*- Makefile -*-===##
+#
+# The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+#
+##===----------------------------------------------------------------------===##
+
+CLANG_LEVEL = ../../../..
+include $(CLANG_LEVEL)/../../Makefile.config
+
+TESTNAME = ClangRenameTests
+LINK_COMPONENTS := asmparser bitreader support MC MCParser option \
+ TransformUtils
+USEDLIBS = clangAnalysis.a clangAST.a clangBasic.a clangDriver.a clangEdit.a \
+ clangFrontend.a clangFrontendTool.a clangIndex.a clangLex.a \
+ clangParse.a clangRewrite.a clangRewriteFrontend.a \
+ clangSerialization.a clangSema.a clangTooling.a
+
+include $(CLANG_LEVEL)/Makefile
+MAKEFILE_UNITTEST_NO_INCLUDE_COMMON := 1
+CPP.Flags += -I(PROJ_SRC_DIR)/../../clang-rename
+include $(LLVM_SRC_ROOT)/unittests/Makefile.unittest
diff --git a/clang-tools-extra/unittests/clang-rename/USRLocFindingTest.cpp b/clang-tools-extra/unittests/clang-rename/USRLocFindingTest.cpp
new file mode 100644
index 00000000000..4f497c6c928
--- /dev/null
+++ b/clang-tools-extra/unittests/clang-rename/USRLocFindingTest.cpp
@@ -0,0 +1,84 @@
+#include "USRFindingAction.h"
+#include "gtest/gtest.h"
+#include "clang/Tooling/Tooling.h"
+#include <stdio.h>
+#include <set>
+#include <map>
+#include <vector>
+
+namespace clang {
+namespace rename {
+namespace test {
+
+// Determines if the symbol group invariants hold. To recap, those invariants
+// are:
+// (1) All symbols in the same symbol group share the same USR.
+// (2) Two symbols from two different groups do not share the same USR.
+static void testOffsetGroups(const char *Code,
+ const std::vector<std::vector<unsigned>> Groups) {
+ std::set<std::string> AllUSRs, CurrUSR;
+
+ for (const auto &Group : Groups) {
+ // Groups the invariants do not hold then the value of USR is also invalid,
+ // but at that point the test has already failed and USR ceases to be
+ // useful.
+ std::string USR;
+ for (const auto &Offset : Group) {
+ USRFindingAction Action(Offset);
+ auto Factory = tooling::newFrontendActionFactory(&Action);
+ EXPECT_TRUE(tooling::runToolOnCode(Factory->create(), Code));
+ const auto &USRs = Action.getUSRs();
+ EXPECT_EQ(1u, USRs.size());
+ USR = USRs[0];
+ CurrUSR.insert(USR);
+ }
+ EXPECT_EQ(1u, CurrUSR.size());
+ CurrUSR.clear();
+ AllUSRs.insert(USR);
+ }
+
+ EXPECT_EQ(Groups.size(), AllUSRs.size());
+}
+
+
+TEST(USRLocFinding, FindsVarUSR) {
+ const char VarTest[] = "\n\
+namespace A {\n\
+int foo;\n\
+}\n\
+int foo;\n\
+int bar = foo;\n\
+int baz = A::foo;\n\
+void fun1() {\n\
+ struct {\n\
+ int foo;\n\
+ } b = { 100 };\n\
+ int foo = 100;\n\
+ baz = foo;\n\
+ {\n\
+ extern int foo;\n\
+ baz = foo;\n\
+ foo = A::foo + baz;\n\
+ A::foo = b.foo;\n\
+ }\n\
+ foo = b.foo;\n\
+}\n";
+ std::vector<std::vector<unsigned>> VarTestOffsets(3);
+ VarTestOffsets[0].push_back(19);
+ VarTestOffsets[0].push_back(63);
+ VarTestOffsets[0].push_back(205);
+ VarTestOffsets[0].push_back(223);
+ VarTestOffsets[1].push_back(30);
+ VarTestOffsets[1].push_back(45);
+ VarTestOffsets[1].push_back(172);
+ VarTestOffsets[1].push_back(187);
+ VarTestOffsets[2].push_back(129);
+ VarTestOffsets[2].push_back(148);
+ VarTestOffsets[2].push_back(242);
+
+ testOffsetGroups(VarTest, VarTestOffsets);
+}
+
+}
+}
+}
OpenPOWER on IntegriCloud