Skip to content

Commit 40f21ca

Browse files
committed
Improve the test coverage of the C API -- Take 3
1 parent 2406c42 commit 40f21ca

File tree

4 files changed

+40
-7
lines changed

4 files changed

+40
-7
lines changed

lib/Interpreter/CXCppInterOp.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ enum CXErrorCode clang_Interpreter_declare(CXInterpreter I, const char* code,
337337
const auto result = interp->declare(code);
338338
diag.setSuppressAllDiagnostics(is_silent_old);
339339

340-
if (result)
340+
if (result != Cpp::Interpreter::kSuccess)
341341
return CXError_Failure;
342342

343343
return CXError_Success;

unittests/CppInterOp/FunctionReflectionTest.cpp

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
#include "clang/Interpreter/CppInterOp.h"
77
#include "clang/Sema/Sema.h"
88

9+
#include "clang-c/CXCppInterOp.h"
10+
911
#include "gtest/gtest.h"
1012

1113
#include <string>
@@ -163,7 +165,7 @@ TEST(FunctionReflectionTest, HasDefaultConstructor) {
163165
EXPECT_FALSE(Cpp::HasDefaultConstructor(Decls[3]));
164166

165167
// C API
166-
auto I = clang_createInterpreterFromRawPtr(Cpp::GetInterpreter());
168+
auto* I = clang_createInterpreterFromRawPtr(Cpp::GetInterpreter());
167169
EXPECT_TRUE(clang_hasDefaultConstructor(make_scope(Decls[0], I)));
168170
EXPECT_TRUE(clang_hasDefaultConstructor(make_scope(Decls[1], I)));
169171
EXPECT_FALSE(clang_hasDefaultConstructor(make_scope(Decls[3], I)));
@@ -200,7 +202,7 @@ TEST(FunctionReflectionTest, GetDestructor) {
200202
EXPECT_FALSE(Cpp::GetDestructor(Decls[3]));
201203

202204
// C API
203-
auto I = clang_createInterpreterFromRawPtr(Cpp::GetInterpreter());
205+
auto* I = clang_createInterpreterFromRawPtr(Cpp::GetInterpreter());
204206
EXPECT_TRUE(clang_getDestructor(make_scope(Decls[0], I)).data[0]);
205207
EXPECT_TRUE(clang_getDestructor(make_scope(Decls[1], I)).data[0]);
206208
// Clean up resources
@@ -528,7 +530,7 @@ TEST(FunctionReflectionTest, IsTemplatedFunction) {
528530
EXPECT_TRUE(Cpp::IsTemplatedFunction(SubDeclsC1[2]));
529531

530532
// C API
531-
auto I = clang_createInterpreterFromRawPtr(Cpp::GetInterpreter());
533+
auto* I = clang_createInterpreterFromRawPtr(Cpp::GetInterpreter());
532534
EXPECT_FALSE(clang_isTemplatedFunction(make_scope(Decls[0], I)));
533535
EXPECT_TRUE(clang_isTemplatedFunction(make_scope(Decls[1], I)));
534536
EXPECT_FALSE(clang_isTemplatedFunction(make_scope(Decls[3], I)));
@@ -559,7 +561,7 @@ TEST(FunctionReflectionTest, ExistsFunctionTemplate) {
559561
EXPECT_FALSE(Cpp::ExistsFunctionTemplate("f", Decls[2]));
560562

561563
// C API
562-
auto I = clang_createInterpreterFromRawPtr(Cpp::GetInterpreter());
564+
auto* I = clang_createInterpreterFromRawPtr(Cpp::GetInterpreter());
563565
EXPECT_TRUE(clang_existsFunctionTemplate("f", make_scope(Decls[1], I)));
564566
EXPECT_FALSE(clang_existsFunctionTemplate("f", make_scope(Decls[2], I)));
565567
// Clean up resources
@@ -1200,6 +1202,20 @@ TEST(FunctionReflectionTest, Construct) {
12001202
Cpp::Deallocate(scope, where);
12011203
output = testing::internal::GetCapturedStdout();
12021204
EXPECT_EQ(output, "Constructor Executed");
1205+
output.clear();
1206+
1207+
// C API
1208+
testing::internal::CaptureStdout();
1209+
auto* I = clang_createInterpreterFromRawPtr(Cpp::GetInterpreter());
1210+
auto scope_c = make_scope(static_cast<clang::Decl*>(scope), I);
1211+
auto object_c = clang_construct(scope_c, nullptr);
1212+
EXPECT_TRUE(object_c != nullptr);
1213+
output = testing::internal::GetCapturedStdout();
1214+
EXPECT_EQ(output, "Constructor Executed");
1215+
output.clear();
1216+
// Clean up resources
1217+
clang_Interpreter_takeInterpreterAsPtr(I);
1218+
clang_Interpreter_dispose(I);
12031219
}
12041220

12051221
TEST(FunctionReflectionTest, Destruct) {
@@ -1240,4 +1256,17 @@ TEST(FunctionReflectionTest, Destruct) {
12401256
Cpp::Deallocate(scope, object);
12411257
output = testing::internal::GetCapturedStdout();
12421258
EXPECT_EQ(output, "Destructor Executed");
1259+
1260+
// C API
1261+
testing::internal::CaptureStdout();
1262+
auto* I = clang_createInterpreterFromRawPtr(Cpp::GetInterpreter());
1263+
auto scope_c = make_scope(static_cast<clang::Decl*>(scope), I);
1264+
auto object_c = clang_construct(scope_c, nullptr);
1265+
clang_destruct(object_c, scope_c, true);
1266+
output = testing::internal::GetCapturedStdout();
1267+
EXPECT_EQ(output, "Destructor Executed");
1268+
output.clear();
1269+
// Clean up resources
1270+
clang_Interpreter_takeInterpreterAsPtr(I);
1271+
clang_Interpreter_dispose(I);
12431272
}

unittests/CppInterOp/ScopeReflectionTest.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
#include "clang/AST/DeclBase.h"
1212
#include "clang/AST/ASTDumper.h"
1313

14+
#include "clang-c/CXCppInterOp.h"
15+
1416
#include "gtest/gtest.h"
1517

1618
using namespace TestUtils;
@@ -758,7 +760,7 @@ TEST(ScopeReflectionTest, InstantiateNNTPClassTemplate) {
758760
/*type_size*/ args1.size()));
759761

760762
// C API
761-
auto I = clang_createInterpreterFromRawPtr(Cpp::GetInterpreter());
763+
auto* I = clang_createInterpreterFromRawPtr(Cpp::GetInterpreter());
762764
CXTemplateArgInfo Args1[] = {{IntTy, "5"}};
763765
auto C_API_SHIM = [&](auto Decl) {
764766
return clang_instantiateTemplate(make_scope(Decl, I), Args1, 1).data[0];

unittests/CppInterOp/TypeReflectionTest.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
#include "clang/Frontend/CompilerInstance.h"
66
#include "clang/Sema/Sema.h"
77

8+
#include "clang-c/CXCppInterOp.h"
9+
810
#include "gtest/gtest.h"
911

1012
using namespace TestUtils;
@@ -351,7 +353,7 @@ TEST(TypeReflectionTest, GetComplexType) {
351353
EXPECT_EQ(get_complex_type_as_string("double"), "_Complex double");
352354

353355
// C API
354-
auto I = clang_createInterpreterFromRawPtr(Cpp::GetInterpreter());
356+
auto* I = clang_createInterpreterFromRawPtr(Cpp::GetInterpreter());
355357
auto C_API_SHIM = [&](const std::string& element_type) {
356358
auto ElementQT = Cpp::GetType(element_type);
357359
CXQualType EQT = {CXType_Unexposed, {ElementQT, I}};

0 commit comments

Comments
 (0)