blob: 96c76f07a7b13c9f795a36c507b6a237dd274554 [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 apptest;
import 'dart:async';
import 'package:mojo/application.dart';
import 'package:mojo/bindings.dart';
import 'package:mojo/core.dart';
// Import and reexport the test package.
import 'package:test/test.dart';
export 'package:test/test.dart';
typedef AppTestFunction(Application app, String url);
// This class is an application that does nothing but tears down the connections
// between each test.
class _ConnectionToShellApplication extends Application {
final List<AppTestFunction> _testFunctions;
_ConnectionToShellApplication.fromHandle(
MojoHandle handle, this._testFunctions)
: super.fromHandle(handle);
// Only run the test suite passed in once we have received an initialize()
// call from the shell. We need to first have a valid connection to the shell
// so that apptests can connect to other applications.
void initialize(List<String> args, String url) {
group('dart_apptests', () {
setUp(testSetUp);
tearDown(testTearDown);
for (var testFunction in _testFunctions) {
testFunction(this, url);
}
});
// Append a final test to terminate shell connection.
// TODO(johnmccutchan): Remove this once package 'test' supports a global
// tearDown callback.
test('TERMINATE SHELL CONNECTION', () async {
await close();
assert(MojoHandle.reportLeakedHandles());
});
}
void testSetUp() {
}
void testTearDown() {
// Reset any connections between tests.
resetConnections();
}
}
/// The public interface to apptests.
///
/// In a dart mojo application, [incomingHandle] is `args[0]`. [testFunctions]
/// is list of [AppTestFunction]. Each function will be passed the application
/// and url.
runAppTests(var incomingHandle, List<AppTestFunction> testFunctions) {
var appHandle = new MojoHandle(incomingHandle);
var application =
new _ConnectionToShellApplication.fromHandle(appHandle, testFunctions);
/// [Application]'s [initialize] will be called.
}