[fidlc] Document recursive opt request example
FIDL-451 #progress
Test: this is a new test, run it
Change-Id: Ia76ef0073096b956fb7f24144b032dfc8a139ffb
diff --git a/system/utest/fidl-compiler/max_bytes_tests.cpp b/system/utest/fidl-compiler/max_bytes_tests.cpp
index cfa681b..3c0003ef 100644
--- a/system/utest/fidl-compiler/max_bytes_tests.cpp
+++ b/system/utest/fidl-compiler/max_bytes_tests.cpp
@@ -530,6 +530,41 @@
END_TEST;
}
+bool recursive_opt_request() {
+ BEGIN_TEST;
+
+ TestLibrary library(R"FIDL(
+library example;
+
+struct WebMessage {
+ request<MessagePort>? opt_message_port;
+};
+
+interface MessagePort {
+ PostMessage(WebMessage message) -> (bool success);
+};
+)FIDL");
+ ASSERT_TRUE(library.Compile());
+
+ auto web_message = library.LookupStruct("WebMessage");
+ EXPECT_NONNULL(web_message);
+ EXPECT_EQ(web_message->typeshape.Size(), 4);
+ EXPECT_EQ(web_message->typeshape.Alignment(), 4);
+ EXPECT_EQ(web_message->typeshape.MaxOutOfLine(), 0);
+
+ auto message_port = library.LookupInterface("MessagePort");
+ EXPECT_NONNULL(message_port);
+ EXPECT_EQ(message_port->methods.size(), 1);
+ auto& post_message = message_port->methods[0];
+ auto post_message_request = post_message.maybe_request;
+ EXPECT_NONNULL(post_message_request);
+ EXPECT_EQ(post_message_request->typeshape.Size(), 24);
+ EXPECT_EQ(post_message_request->typeshape.Alignment(), 8);
+ EXPECT_EQ(post_message_request->typeshape.MaxOutOfLine(), 0);
+
+ END_TEST;
+}
+
} // namespace
BEGIN_TEST_CASE(max_bytes_tests);
@@ -543,4 +578,5 @@
RUN_TEST(arrays);
RUN_TEST(xunions);
RUN_TEST(interfaces_and_request_of_interfaces);
+RUN_TEST(recursive_opt_request);
END_TEST_CASE(max_bytes_tests);