Chromium Code Reviews| Index: test/service_test.dart |
| diff --git a/test/service_test.dart b/test/service_test.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..ce83eed8c4c5e37309d79ee84d45afcb88b44c6e |
| --- /dev/null |
| +++ b/test/service_test.dart |
| @@ -0,0 +1,64 @@ |
| +library service_test; |
| + |
| +import 'dart:async' show Future; |
| + |
| +import 'package:protobuf/protobuf.dart'; |
| +import 'package:unittest/unittest.dart'; |
| + |
| +import '../out/protos/service.pb.dart' as pb; |
| + |
| +class SearchService extends pb.SearchServiceBase { |
| + Future<pb.SearchResponse> search(ServerContext ctx, pb.SearchRequest request) async { |
|
Søren Gjesse
2015/06/25 13:04:49
Long line.
wibling
2015/06/25 13:10:04
Done.
|
| + var out = new pb.SearchResponse(); |
| + if (request.query == 'hello' || request.query == 'world') { |
| + out.result.add('hello, world!'); |
| + } |
| + return out; |
| + } |
| +} |
| + |
| +class FakeJsonServer { |
| + final GeneratedService searchService; |
| + FakeJsonServer(this.searchService); |
| + |
| + Future<String> messageHandler( |
| + String serviceName, String methodName, String requestJson) async { |
| + if (serviceName == 'SearchService') { |
| + GeneratedMessage request = searchService.createRequest(methodName); |
| + request.mergeFromJson(requestJson); |
| + var ctx = new ServerContext(); |
| + var reply = await searchService.handleCall(ctx, methodName, request); |
| + return reply.writeToJson(); |
| + } else { |
| + throw 'unknown service: $serviceName'; |
| + } |
| + } |
| +} |
| + |
| +class FakeJsonClient implements RpcClient { |
| + final FakeJsonServer server; |
| + FakeJsonClient(this.server); |
| + |
| + Future<GeneratedMessage> invoke( |
| + ClientContext ctx, String serviceName, String methodName, |
| + GeneratedMessage request, GeneratedMessage response) async { |
| + |
| + String requestJson = request.writeToJson(); |
| + String replyJson = |
| + await server.messageHandler(serviceName, methodName, requestJson); |
| + response.mergeFromJson(replyJson); |
| + return response; |
| + } |
| +} |
| + |
| +void main() { |
| + var server = new FakeJsonServer(new SearchService()); |
| + var api = new pb.SearchServiceApi(new FakeJsonClient(server)); |
| + |
| + test('end to end RPC using JSON', () async { |
| + var request = new pb.SearchRequest() |
| + ..query = "hello"; |
| + var reply = await api.search(new ClientContext(), request); |
| + expect(reply.result, ["hello, world!"]); |
| + }); |
| +} |