blob: 7ed4dea797c981ebb4ce67a03ba3f27a585145a5 [file] [log] [blame]
// 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.
library pingpong_apptests;
import 'dart:async';
import 'dart:mojo.application';
import 'dart:mojo.bindings';
import 'dart: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.impl = this;
}
waitForPong() async {
_completer = new Completer();
return _completer.future;
}
void pong(int pongValue) {
_completer.complete(pongValue);
_completer = null;
}
}
pingpongApptests(Application application, String url) {
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);
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);
var r = await pingPongServiceProxy.ptr.pingTargetService(
targetServiceProxy.impl, 9);
expect(r.ok, equals(true));
// This side no longer has access to the pipe.
expect(targetServiceProxy.impl.isOpen, equals(false));
expect(targetServiceProxy.impl.isBound, equals(false));
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);
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();
});
});
}