summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/unittests/cpp11-migrate
diff options
context:
space:
mode:
authorEdwin Vane <edwin.vane@intel.com>2013-06-17 18:18:15 +0000
committerEdwin Vane <edwin.vane@intel.com>2013-06-17 18:18:15 +0000
commit4e11abb59b44dc9eab2f50e6e29f16d3d029bda6 (patch)
treec1d39bb0e772f9bb62a4987f8937a0779a59e4d9 /clang-tools-extra/unittests/cpp11-migrate
parent862c4a06ee0cfb7662bdba9d8dbb853342975bbf (diff)
downloadbcm5719-llvm-4e11abb59b44dc9eab2f50e6e29f16d3d029bda6.tar.gz
bcm5719-llvm-4e11abb59b44dc9eab2f50e6e29f16d3d029bda6.zip
cpp11-migrate: Transform now responsible for file content overriding
To better support per-translation unit replacements, any real work is being moved out of ActionFactory and into Transform. In this revision, that means file override application. For simplification, Transform no longer inherits from SourceFileCallbacks. TransformTest required updating as a result. llvm-svn: 184098
Diffstat (limited to 'clang-tools-extra/unittests/cpp11-migrate')
-rw-r--r--clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp41
1 files changed, 37 insertions, 4 deletions
diff --git a/clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp b/clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp
index 2a5689898a4..eeadbf1ecba 100644
--- a/clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp
+++ b/clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp
@@ -2,6 +2,7 @@
#include "Core/Transform.h"
#include "clang/AST/ASTConsumer.h"
#include "clang/AST/DeclGroup.h"
+#include "clang/Tooling/Tooling.h"
#include "llvm/Support/Process.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/PathV1.h"
@@ -27,6 +28,11 @@ public:
void setDeferredChanges(unsigned Changes) {
Transform::setDeferredChanges(Changes);
}
+
+ void setOverrides(const FileOverrides &Overrides) {
+ Transform::setOverrides(Overrides);
+ }
+
};
TEST(Transform, Interface) {
@@ -58,9 +64,9 @@ TEST(Transform, Interface) {
ASSERT_TRUE(T.getChangesNotMade());
}
-class FindTopLevelDeclConsumer : public ASTConsumer {
+class TimePassingASTConsumer : public ASTConsumer {
public:
- FindTopLevelDeclConsumer(bool *Called) : Called(Called) {}
+ TimePassingASTConsumer(bool *Called) : Called(Called) {}
virtual bool HandleTopLevelDecl(DeclGroupRef DeclGroup) {
llvm::sys::TimeValue UserStart;
@@ -83,11 +89,25 @@ public:
struct ConsumerFactory {
ASTConsumer *newASTConsumer() {
- return new FindTopLevelDeclConsumer(&Called);
+ return new TimePassingASTConsumer(&Called);
}
bool Called;
};
+struct CallbackForwarder : public clang::tooling::SourceFileCallbacks {
+ CallbackForwarder(Transform &Callee) : Callee(Callee) {}
+
+ virtual bool handleBeginSource(CompilerInstance &CI, StringRef Filename) {
+ return Callee.handleBeginSource(CI, Filename);
+ }
+
+ virtual void handleEndSource() {
+ Callee.handleEndSource();
+ }
+
+ Transform &Callee;
+};
+
TEST(Transform, Timings) {
TransformOptions Options;
Options.EnableTiming = true;
@@ -115,8 +135,21 @@ TEST(Transform, Timings) {
Tool.mapVirtualFile(FileAName, "void a() {}");
Tool.mapVirtualFile(FileBName, "void b() {}");
+ // Factory to create TimePassingASTConsumer for each source file the tool
+ // runs on.
ConsumerFactory Factory;
- Tool.run(newFrontendActionFactory(&Factory, &T));
+
+ // We don't care about any of Transform's functionality except to get it to
+ // record timings. For that, we need to forward handleBeginSource() and
+ // handleEndSource() calls to it.
+ CallbackForwarder Callbacks(T);
+
+ // Transform's handle* functions require FileOverrides to be set, even if
+ // there aren't any.
+ FileOverrides Overrides;
+ T.setOverrides(Overrides);
+
+ Tool.run(clang::tooling::newFrontendActionFactory(&Factory, &Callbacks));
EXPECT_TRUE(Factory.Called);
Transform::TimingVec::const_iterator I = T.timing_begin();
OpenPOWER on IntegriCloud