|
6 | 6 | #include "clang/Interpreter/CppInterOp.h" |
7 | 7 | #include "clang/Sema/Sema.h" |
8 | 8 |
|
| 9 | +#include "clang-c/CXCppInterOp.h" |
| 10 | + |
9 | 11 | #include "gtest/gtest.h" |
10 | 12 |
|
11 | 13 | #include <string> |
@@ -163,7 +165,7 @@ TEST(FunctionReflectionTest, HasDefaultConstructor) { |
163 | 165 | EXPECT_FALSE(Cpp::HasDefaultConstructor(Decls[3])); |
164 | 166 |
|
165 | 167 | // C API |
166 | | - auto I = clang_createInterpreterFromRawPtr(Cpp::GetInterpreter()); |
| 168 | + auto* I = clang_createInterpreterFromRawPtr(Cpp::GetInterpreter()); |
167 | 169 | EXPECT_TRUE(clang_hasDefaultConstructor(make_scope(Decls[0], I))); |
168 | 170 | EXPECT_TRUE(clang_hasDefaultConstructor(make_scope(Decls[1], I))); |
169 | 171 | EXPECT_FALSE(clang_hasDefaultConstructor(make_scope(Decls[3], I))); |
@@ -200,7 +202,7 @@ TEST(FunctionReflectionTest, GetDestructor) { |
200 | 202 | EXPECT_FALSE(Cpp::GetDestructor(Decls[3])); |
201 | 203 |
|
202 | 204 | // C API |
203 | | - auto I = clang_createInterpreterFromRawPtr(Cpp::GetInterpreter()); |
| 205 | + auto* I = clang_createInterpreterFromRawPtr(Cpp::GetInterpreter()); |
204 | 206 | EXPECT_TRUE(clang_getDestructor(make_scope(Decls[0], I)).data[0]); |
205 | 207 | EXPECT_TRUE(clang_getDestructor(make_scope(Decls[1], I)).data[0]); |
206 | 208 | // Clean up resources |
@@ -528,7 +530,7 @@ TEST(FunctionReflectionTest, IsTemplatedFunction) { |
528 | 530 | EXPECT_TRUE(Cpp::IsTemplatedFunction(SubDeclsC1[2])); |
529 | 531 |
|
530 | 532 | // C API |
531 | | - auto I = clang_createInterpreterFromRawPtr(Cpp::GetInterpreter()); |
| 533 | + auto* I = clang_createInterpreterFromRawPtr(Cpp::GetInterpreter()); |
532 | 534 | EXPECT_FALSE(clang_isTemplatedFunction(make_scope(Decls[0], I))); |
533 | 535 | EXPECT_TRUE(clang_isTemplatedFunction(make_scope(Decls[1], I))); |
534 | 536 | EXPECT_FALSE(clang_isTemplatedFunction(make_scope(Decls[3], I))); |
@@ -559,7 +561,7 @@ TEST(FunctionReflectionTest, ExistsFunctionTemplate) { |
559 | 561 | EXPECT_FALSE(Cpp::ExistsFunctionTemplate("f", Decls[2])); |
560 | 562 |
|
561 | 563 | // C API |
562 | | - auto I = clang_createInterpreterFromRawPtr(Cpp::GetInterpreter()); |
| 564 | + auto* I = clang_createInterpreterFromRawPtr(Cpp::GetInterpreter()); |
563 | 565 | EXPECT_TRUE(clang_existsFunctionTemplate("f", make_scope(Decls[1], I))); |
564 | 566 | EXPECT_FALSE(clang_existsFunctionTemplate("f", make_scope(Decls[2], I))); |
565 | 567 | // Clean up resources |
@@ -1200,6 +1202,20 @@ TEST(FunctionReflectionTest, Construct) { |
1200 | 1202 | Cpp::Deallocate(scope, where); |
1201 | 1203 | output = testing::internal::GetCapturedStdout(); |
1202 | 1204 | 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); |
1203 | 1219 | } |
1204 | 1220 |
|
1205 | 1221 | TEST(FunctionReflectionTest, Destruct) { |
@@ -1240,4 +1256,17 @@ TEST(FunctionReflectionTest, Destruct) { |
1240 | 1256 | Cpp::Deallocate(scope, object); |
1241 | 1257 | output = testing::internal::GetCapturedStdout(); |
1242 | 1258 | 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); |
1243 | 1272 | } |
0 commit comments