Chromium Code Reviews| Index: services/dart/dart_apptests/pingpong_apptests.dart |
| diff --git a/services/dart/dart_apptests/pingpong_apptests.dart b/services/dart/dart_apptests/pingpong_apptests.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..c16caa2d5ad50a8d05a43a8cf59b344d9839f8fb |
| --- /dev/null |
| +++ b/services/dart/dart_apptests/pingpong_apptests.dart |
| @@ -0,0 +1,118 @@ |
| +// Copyright 2015 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +import 'dart:async'; |
| +import 'mojo:application'; |
| +import 'mojo:bindings'; |
| +import 'mojo:core'; |
| + |
| +import 'package:apptest/apptest.dart'; |
| +import 'package:services/dart/test/pingpong_service.mojom.dart'; |
| + |
| +class _TestingPingPongClient extends PingPongClient { |
| + final PingPongClientStub stub; |
| + Completer _completer; |
| + |
| + _TestingPingPongClient.unbound() : stub = new PingPongClientStub.unbound() { |
| + stub.delegate = this; |
| + } |
| + |
| + waitForPong() async { |
| + _completer = new Completer(); |
| + return _completer.future; |
| + } |
| + |
| + void pong(int pongValue) { |
| + _completer.complete(pongValue); |
| + _completer = null; |
| + } |
| +} |
| + |
| +pingpongApptests(Application application) { |
| + group('Ping-Pong Service Apptests', () { |
| + // Verify that "pingpong.dart" implements the PingPongService interface |
| + // and sends responses to our client. |
| + test('Ping Service To Pong Client', () async { |
| + var pingPongServiceProxy = new PingPongServiceProxy.unbound(); |
| + application.connectToService("mojo:dart_pingpong", pingPongServiceProxy); |
| + |
| + var pingPongClient = new _TestingPingPongClient.unbound(); |
| + pingPongServiceProxy.ptr.setClient(pingPongClient.stub); |
| + pingPongClient.stub.listen(); |
| + |
| + pingPongServiceProxy.ptr.ping(1); |
| + var pongValue = await pingPongClient.waitForPong(); |
| + expect(pongValue, equals(2)); |
| + |
| + pingPongServiceProxy.ptr.ping(100); |
| + pongValue = await pingPongClient.waitForPong(); |
| + expect(pongValue, equals(101)); |
| + |
| + pingPongClient.stub.close(); |
| + pingPongServiceProxy.close(); |
| + }); |
| + |
| + // Verify that "pingpong.dart" can connect to "pingpong_target.dart", act as |
| + // its client, and return a Future that only resolves after the |
| + // target.ping() => client.pong() methods have executed 9 times. |
| + test('Ping Target URL', () async { |
| + var pingPongServiceProxy = new PingPongServiceProxy.unbound(); |
| + application.connectToService("mojo:dart_pingpong", pingPongServiceProxy); |
| + |
| + var r = await pingPongServiceProxy.ptr.pingTargetUrl( |
| + "mojo:dart_pingpong_target", 9); |
| + expect(r.ok, equals(true)); |
| + |
| + pingPongServiceProxy.close(); |
| + }); |
| + |
| + // Same as the previous test except that instead of providing the |
| + // pingpong_target.dart URL, we provide a connection to its PingPongService. |
| + test('Ping Target Service', () async { |
| + var pingPongServiceProxy = new PingPongServiceProxy.unbound(); |
| + application.connectToService("mojo:dart_pingpong", pingPongServiceProxy); |
| + |
| + var targetServiceProxy = new PingPongServiceProxy.unbound(); |
| + application.connectToService( |
| + "mojo:dart_pingpong_target", |
| + targetServiceProxy); |
| + |
| + // TODO(erg): This is broken. When I uncomment the following, everything |
| + // just hangs. (It appears to hang even before we run the rest of the |
| + // tests, which is weird. |
|
Elliot Glaysher
2015/03/02 23:33:37
zra: I'd like some guidance here. What further do
zra
2015/03/03 00:45:04
The first argument to pingTargetService is expecte
Elliot Glaysher
2015/03/03 22:06:55
So, why does this work in the C++ version of this
|
| + // |
| + // var r = await pingPongServiceProxy.ptr.pingTargetService( |
| + // targetServiceProxy.impl, 9); |
| + // expect(r.ok, equals(true)); |
| + |
| + targetServiceProxy.close(); |
| + pingPongServiceProxy.close(); |
| + }); |
| + |
| + // Verify that Dart can implement an interface "request" parameter. |
| + test('Get Target Service', () async { |
| + var pingPongServiceProxy = new PingPongServiceProxy.unbound(); |
| + application.connectToService("mojo:dart_pingpong", pingPongServiceProxy); |
| + |
| + var targetServiceProxy = new PingPongServiceProxy.unbound(); |
| + pingPongServiceProxy.ptr.getPingPongService(targetServiceProxy); |
| + |
| + var pingPongClient = new _TestingPingPongClient.unbound(); |
| + targetServiceProxy.ptr.setClient(pingPongClient.stub); |
| + pingPongClient.stub.listen(); |
| + |
| + targetServiceProxy.ptr.ping(1); |
| + var pongValue = await pingPongClient.waitForPong(); |
| + expect(pongValue, equals(2)); |
| + |
| + targetServiceProxy.ptr.ping(100); |
| + pongValue = await pingPongClient.waitForPong(); |
| + expect(pongValue, equals(101)); |
| + |
| + pingPongClient.stub.close(); |
| + targetServiceProxy.close(); |
| + pingPongServiceProxy.close(); |
|
Elliot Glaysher
2015/03/02 23:40:49
There's also a deeper question about if we can mak
zra
2015/03/03 00:45:04
This is correct. I'll start working on the necessa
|
| + }); |
| + }); |
| +} |