Skip to content

Commit abe0d5a

Browse files
committed
Add unittest for external interpreter use
1 parent 6b91054 commit abe0d5a

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

unittests/CppInterOp/InterpreterTest.cpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
1+
12
#include "Utils.h"
23

34
#include "clang/Interpreter/CppInterOp.h"
5+
6+
#ifdef USE_CLING
7+
#include "cling/Interpreter/Interpreter.h"
8+
#endif // USE_CLING
9+
10+
#ifdef USE_REPL
11+
#include "clang/Interpreter/Interpreter.h"
12+
#endif // USE_REPL
13+
414
#include "clang/Basic/Version.h"
515

616
#include "llvm/ADT/SmallString.h"
@@ -162,3 +172,35 @@ TEST(InterpreterTest, CodeCompletion) {
162172
GTEST_SKIP();
163173
#endif
164174
}
175+
176+
TEST(InterpreterTest, ExternalInterpreterTest) {
177+
178+
#ifdef USE_REPL
179+
llvm::ExitOnError ExitOnErr;
180+
clang::IncrementalCompilerBuilder CB;
181+
CB.SetCompilerArgs({"-std=c++20"});
182+
183+
// Create the incremental compiler instance.
184+
std::unique_ptr<clang::CompilerInstance> CI;
185+
CI = ExitOnErr(CB.CreateCpp());
186+
187+
// Create the interpreter instance.
188+
std::unique_ptr<clang::Interpreter> I =
189+
ExitOnErr(clang::Interpreter::create(std::move(CI)));
190+
#endif
191+
192+
#ifdef USE_CLING
193+
std::string MainExecutableName = sys::fs::getMainExecutable(nullptr, nullptr);
194+
std::string ResourceDir = compat::MakeResourceDir(LLVM_BINARY_DIR);
195+
std::vector<const char *> ClingArgv = {"-resource-dir", ResourceDir.c_str(),
196+
"-std=c++14"};
197+
ClingArgv.insert(ClingArgv.begin(), MainExecutableName.c_str());
198+
std::unique_ptr<cling::Interpreter> I(ClingArgv.size(), &ClingArgv[0]);
199+
#endif
200+
201+
auto ExtInterp = I.get();
202+
EXPECT_NE(ExtInterp, nullptr);
203+
Cpp::UseExternalInterpreter(ExtInterp);
204+
EXPECT_FALSE(Cpp::OwnsInterpreter());
205+
I.release();
206+
}

0 commit comments

Comments
 (0)