chaokunyang commented on code in PR #3723:
URL: https://github.com/apache/fory/pull/3723#discussion_r3418589588
##########
compiler/fory_compiler/tests/test_service_codegen.py:
##########
@@ -2863,3 +2866,254 @@ def test_rust_grpc_rejects_unsafe_refs():
)
with pytest.raises(ValueError, match=message):
generator.generate_services()
+
+
+def test_dart_grpc_streaming_shapes():
+ from fory_compiler.generators.dart import DartGenerator
+
+ schema = parse_fdl(
+ dedent(
+ """
+ package demo.streams;
+
+ message Req {}
+ message Res {}
+
+ service Streamer {
+ rpc UnaryMessage (Req) returns (Res);
+ rpc ServerStreamMessage (Req) returns (stream Res);
+ rpc ClientStreamMessage (stream Req) returns (Res);
+ rpc BidiStreamMessage (stream Req) returns (stream Res);
+ }
+ """
+ )
+ )
+
+ content = generate_service_files(schema, DartGenerator)[
+ "demo/streams/demo_streams_grpc.dart"
+ ]
+
+ assert "ResponseFuture<_models.Res> unaryMessage(" in content
+ assert "$createUnaryCall(_$unaryMessage, request, options: options);" in
content
+
+ assert "ResponseStream<_models.Res> serverStreamMessage(" in content
+ assert (
+ " return $createStreamingCall(\n"
+ " _$serverStreamMessage,\n"
+ " Stream.value(request),\n"
+ " options: options,\n"
+ " );"
+ ) in content
+
+ assert "ResponseFuture<_models.Res> clientStreamMessage(" in content
+ assert "Stream<_models.Req> request, {" in content
+ assert (
+ " return $createStreamingCall(\n"
+ " _$clientStreamMessage,\n"
+ " request,\n"
+ " options: options,\n"
+ " ).single;"
+ ) in content
+
+ assert "ResponseStream<_models.Res> bidiStreamMessage(" in content
+ assert (
+ "$createStreamingCall(_$bidiStreamMessage, request, options: options);"
+ ) in content
+
+ assert (
+ "'UnaryMessage',\n unaryMessage_Pre,\n false,\n
false,"
+ ) in content
+ assert (
+ "'ServerStreamMessage',\n serverStreamMessage_Pre,\n"
+ " false,\n true,"
+ ) in content
+ assert (
+ "'ClientStreamMessage',\n clientStreamMessage_Pre,\n"
+ " true,\n false,"
+ ) in content
+ assert (
+ "'BidiStreamMessage',\n bidiStreamMessage_Pre,\n"
+ " true,\n true,"
+ ) in content
+
+ assert "Future<_models.Res> unaryMessage_Pre(" in content
+ assert "Stream<_models.Res> serverStreamMessage_Pre(" in content
+ assert (
+ " ) async* {\n yield* serverStreamMessage($call, await $request);"
+ ) in content
+ assert "Future<_models.Res> clientStreamMessage_Pre(" in content
+ assert " ) {\n return clientStreamMessage($call, $request);" in content
+ assert "Stream<_models.Res> bidiStreamMessage_Pre(" in content
+
+ assert (
+ "Future<_models.Res> unaryMessage(\n ServiceCall call,\n"
+ " _models.Req request,\n );"
+ ) in content
+ assert (
+ "Stream<_models.Res> serverStreamMessage(\n ServiceCall call,\n"
+ " _models.Req request,\n );"
+ ) in content
+ assert (
+ "Future<_models.Res> clientStreamMessage(\n ServiceCall call,\n"
+ " Stream<_models.Req> request,\n );"
+ ) in content
+ assert (
+ "Stream<_models.Res> bidiStreamMessage(\n ServiceCall call,\n"
+ " Stream<_models.Req> request,\n );"
+ ) in content
+
+
+def test_dart_grpc_service_codegen_uses_fory_codec():
+ from fory_compiler.generators.dart import DartGenerator
+
+ schema = parse_fdl(_GREETER_WITH_SERVICE)
+ files = generate_service_files(schema, DartGenerator)
+ assert set(files) == {"demo/greeter/demo_greeter_grpc.dart"}
+ content = files["demo/greeter/demo_greeter_grpc.dart"]
+
+ assert "This file is generated by Apache Fory compiler." in content
+ assert "library;" not in content
+
+ assert "import 'dart:typed_data';" in content
+ assert "import 'package:grpc/grpc.dart';" in content
+ assert "import 'demo_greeter.dart' as _models;" in content
+
+ assert (
+ "_models.DemoGreeterForyModule.getFory().serialize(value, trackRef:
true)"
Review Comment:
These assertions pin the same manual `DemoGreeterForyModule.getFory()`
ownership path that the generated gRPC companion should avoid. Once the
generator owns or obtains a ready Fory runtime automatically, this test needs
to assert that new generated path rather than preserving the startup-only
`install(Fory())` dependency.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]