Collect template instantiations.
PiperOrigin-RevId: 447450392
diff --git a/rs_bindings_from_cc/generate_bindings_and_metadata_test.cc b/rs_bindings_from_cc/generate_bindings_and_metadata_test.cc
index e0b7dd3..927cba5 100644
--- a/rs_bindings_from_cc/generate_bindings_and_metadata_test.cc
+++ b/rs_bindings_from_cc/generate_bindings_and_metadata_test.cc
@@ -6,19 +6,20 @@
#include "testing/base/public/gmock.h"
#include "testing/base/public/gunit.h"
-#include "common/file_io.h"
+#include "common/test_utils.h"
#include "rs_bindings_from_cc/cmdline.h"
namespace crubit {
namespace {
+using ::testing::StrEq;
+
TEST(GenerateBindingsAndMetadataTest, GeneratingIR) {
constexpr absl::string_view kTargetsAndHeaders = R"([
{"t": "target1", "h": ["a.h"]}
])";
- std::string tmpdir = absl::GetFlag(FLAGS_test_tmpdir);
- ASSERT_OK(SetFileContents(absl::StrCat(tmpdir, "/a.h"), "// empty header"));
+ WriteFileForCurrentTest("a.h", "//empty header");
ASSERT_OK_AND_ASSIGN(
Cmdline cmdline,
Cmdline::CreateForTesting(
@@ -31,12 +32,58 @@
ASSERT_OK_AND_ASSIGN(
BindingsAndMetadata result,
- GenerateBindingsAndMetadata(
- cmdline, /* clang_args= */ {std::string("-I"), std::move(tmpdir)}));
+ GenerateBindingsAndMetadata(cmdline, DefaultClangArgs()));
ASSERT_EQ(result.ir.used_headers.size(), 1);
ASSERT_EQ(result.ir.used_headers.front().IncludePath(), "a.h");
}
+TEST(GenerateBindingsAndMetadataTest, InstantiationsAreEmptyInNormalMode) {
+ constexpr absl::string_view kTargetsAndHeaders = R"([
+ {"t": "target1", "h": ["a.h"]}
+ ])";
+ WriteFileForCurrentTest("a.h", "// empty header");
+ ASSERT_OK_AND_ASSIGN(
+ Cmdline cmdline,
+ Cmdline::CreateForTesting(
+ "cc_out", "rs_out", "ir_out", "crubit_support_path",
+ "external/rustfmt/rustfmt.toml",
+ /* do_nothing= */ false,
+ /* public_headers= */ {"a.h"}, std::string(kTargetsAndHeaders),
+ /* rust_sources= */ {},
+ /* instantiations_out= */ ""));
+
+ ASSERT_OK_AND_ASSIGN(
+ BindingsAndMetadata result,
+ GenerateBindingsAndMetadata(cmdline, DefaultClangArgs()));
+
+ ASSERT_THAT(InstantiationsAsJson(result.ir), StrEq("{}"));
+}
+
+TEST(GenerateBindingsAndMetadataTest, InstantiationsJsonGenerated) {
+ constexpr absl::string_view kTargetsAndHeaders = R"([
+ {"t": "target1", "h": ["a.h"]}
+ ])";
+ WriteFileForCurrentTest("a.h", "// empty header");
+ std::string a_rs_path =
+ WriteFileForCurrentTest("a.rs", "cc_template!(MyTemplate<bool>);");
+ ASSERT_OK_AND_ASSIGN(
+ Cmdline cmdline,
+ Cmdline::CreateForTesting(
+ "cc_out", "rs_out", "ir_out", "crubit_support_path",
+ "external/rustfmt/rustfmt.toml",
+ /* do_nothing= */ false,
+ /* public_headers= */ {"a.h"}, std::string(kTargetsAndHeaders),
+ /* rust_sources= */ {a_rs_path}, "instantiations_out"));
+
+ ASSERT_OK_AND_ASSIGN(
+ BindingsAndMetadata result,
+ GenerateBindingsAndMetadata(cmdline, DefaultClangArgs()));
+
+ // TODO(b/440066049): Actually populate the instantiations map once
+ // cl/430823388 is submitted.
+ ASSERT_THAT(InstantiationsAsJson(result.ir), StrEq("{}"));
+}
+
} // namespace
} // namespace crubit