OLD | NEW |
| (Empty) |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 library apptest; | |
6 | |
7 import 'dart:async'; | |
8 | |
9 import 'package:mojo/public/dart/application.dart'; | |
10 import 'package:mojo/public/dart/bindings.dart'; | |
11 import 'package:mojo/public/dart/core.dart'; | |
12 | |
13 // Import and reexport the unittest package. We are a *.dartzip file designed to | |
14 // be linked into your_apptest.mojo file and are your main entrypoint. | |
15 import 'package:unittest/unittest.dart'; | |
16 export 'package:unittest/unittest.dart'; | |
17 | |
18 // This class is an application that does nothing but tears down the connections | |
19 // between each test. | |
20 class _ConnectionToShellApplication extends Application { | |
21 final List<Function> _testFunctions; | |
22 | |
23 _ConnectionToShellApplication.fromHandle( | |
24 MojoHandle handle, this._testFunctions) | |
25 : super.fromHandle(handle); | |
26 | |
27 // Only run the test suite passed in once we have received an initialize() | |
28 // call from the shell. We need to first have a valid connection to the shell | |
29 // so that apptests can connect to other applications. | |
30 void initialize(List<String> args, String url) { | |
31 _testFunctions.forEach((f) => f(this, url)); | |
32 } | |
33 } | |
34 | |
35 // A configuration which properly shuts down our application at the end. | |
36 class _CleanShutdownConfiguration extends SimpleConfiguration { | |
37 final _ConnectionToShellApplication _application; | |
38 | |
39 _CleanShutdownConfiguration(this._application) : super() {} | |
40 | |
41 Duration timeout = const Duration(seconds: 10); | |
42 | |
43 void onTestResult(TestCase externalTestCase) { | |
44 super.onTestResult(externalTestCase); | |
45 _application.resetConnections(); | |
46 } | |
47 | |
48 void onDone(bool success) { | |
49 closeApplication(); | |
50 super.onDone(success); | |
51 } | |
52 | |
53 Future closeApplication() async { | |
54 await _application.close(); | |
55 assert(MojoHandle.reportLeakedHandles()); | |
56 } | |
57 } | |
58 | |
59 // The public interface to apptests. | |
60 // | |
61 // In a dart mojo application, |incoming_handle| is args[0]. |testFunction| is a | |
62 // list of functions that actually contains your testing code, and will pass | |
63 // back an application to each of them. | |
64 runAppTests(var incomingHandle, List<Function> testFunction) { | |
65 var appHandle = new MojoHandle(incomingHandle); | |
66 var application = | |
67 new _ConnectionToShellApplication.fromHandle(appHandle, testFunction); | |
68 unittestConfiguration = new _CleanShutdownConfiguration(application); | |
69 } | |
OLD | NEW |