| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library test; | 5 library test; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'package:path/path.dart' as p; | 9 import 'package:path/path.dart' as p; |
| 10 | 10 |
| 11 import 'src/backend/declarer.dart'; | 11 import 'src/backend/declarer.dart'; |
| 12 import 'src/backend/test_platform.dart'; | 12 import 'src/backend/test_platform.dart'; |
| 13 import 'src/frontend/timeout.dart'; | 13 import 'src/frontend/timeout.dart'; |
| 14 import 'src/runner/engine.dart'; | 14 import 'src/runner/engine.dart'; |
| 15 import 'src/runner/reporter/expanded.dart'; | 15 import 'src/runner/reporter/expanded.dart'; |
| 16 import 'src/runner/runner_suite.dart'; | 16 import 'src/runner/runner_suite.dart'; |
| 17 import 'src/runner/vm/environment.dart'; | 17 import 'src/runner/vm/environment.dart'; |
| 18 import 'src/utils.dart'; | 18 import 'src/utils.dart'; |
| 19 | 19 |
| 20 export 'package:matcher/matcher.dart'; | 20 export 'package:matcher/matcher.dart'; |
| 21 | 21 |
| 22 export 'src/frontend/expect.dart'; | 22 export 'src/frontend/expect.dart'; |
| 23 export 'src/frontend/expect_async.dart'; | 23 export 'src/frontend/expect_async.dart'; |
| 24 export 'src/frontend/future_matchers.dart'; | 24 export 'src/frontend/future_matchers.dart'; |
| 25 export 'src/frontend/on_platform.dart'; | 25 export 'src/frontend/on_platform.dart'; |
| 26 export 'src/frontend/prints_matcher.dart'; | 26 export 'src/frontend/prints_matcher.dart'; |
| 27 export 'src/frontend/skip.dart'; | 27 export 'src/frontend/skip.dart'; |
| 28 export 'src/frontend/tags.dart'; |
| 28 export 'src/frontend/test_on.dart'; | 29 export 'src/frontend/test_on.dart'; |
| 29 export 'src/frontend/throws_matcher.dart'; | 30 export 'src/frontend/throws_matcher.dart'; |
| 30 export 'src/frontend/throws_matchers.dart'; | 31 export 'src/frontend/throws_matchers.dart'; |
| 31 export 'src/frontend/timeout.dart'; | 32 export 'src/frontend/timeout.dart'; |
| 32 | 33 |
| 33 /// The global declarer. | 34 /// The global declarer. |
| 34 /// | 35 /// |
| 35 /// This is used if a test file is run directly, rather than through the runner. | 36 /// This is used if a test file is run directly, rather than through the runner. |
| 36 Declarer _globalDeclarer; | 37 Declarer _globalDeclarer; |
| 37 | 38 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 /// "windows": new Timeout.factor(2), | 106 /// "windows": new Timeout.factor(2), |
| 106 /// "browser": [ | 107 /// "browser": [ |
| 107 /// new Skip("TODO: add browser support"), | 108 /// new Skip("TODO: add browser support"), |
| 108 /// // This will be slow on browsers once it works on them. | 109 /// // This will be slow on browsers once it works on them. |
| 109 /// new Timeout.factor(2) | 110 /// new Timeout.factor(2) |
| 110 /// ] | 111 /// ] |
| 111 /// }); | 112 /// }); |
| 112 /// | 113 /// |
| 113 /// If multiple platforms match, the annotations apply in order as through | 114 /// If multiple platforms match, the annotations apply in order as through |
| 114 /// they were in nested groups. | 115 /// they were in nested groups. |
| 115 void test(String description, body(), {String testOn, Timeout timeout, | 116 void test(String description, body(), |
| 116 skip, Map<String, dynamic> onPlatform, String tag, | 117 {String testOn, |
| 117 List<String> tags}) => _declarer.test(description, body, | 118 Timeout timeout, |
| 118 testOn: testOn, timeout: timeout, skip: skip, | 119 skip, |
| 119 onPlatform: onPlatform, tags: _deconvenienceTags(tag, tags)); | 120 Map<String, dynamic> onPlatform, |
| 121 tags}) => |
| 122 _declarer.test(description, body, |
| 123 testOn: testOn, |
| 124 timeout: timeout, |
| 125 skip: skip, |
| 126 onPlatform: onPlatform, |
| 127 tags: tags); |
| 120 | 128 |
| 121 /// Creates a group of tests. | 129 /// Creates a group of tests. |
| 122 /// | 130 /// |
| 123 /// A group's description is included in the descriptions of any tests or | 131 /// A group's description is included in the descriptions of any tests or |
| 124 /// sub-groups it contains. [setUp] and [tearDown] are also scoped to the | 132 /// sub-groups it contains. [setUp] and [tearDown] are also scoped to the |
| 125 /// containing group. | 133 /// containing group. |
| 126 /// | 134 /// |
| 127 /// If [testOn] is passed, it's parsed as a [platform selector][]; the test will | 135 /// If [testOn] is passed, it's parsed as a [platform selector][]; the test will |
| 128 /// only be run on matching platforms. | 136 /// only be run on matching platforms. |
| 129 /// | 137 /// |
| (...skipping 20 matching lines...) Expand all Loading... |
| 150 /// "windows": new Timeout.factor(2), | 158 /// "windows": new Timeout.factor(2), |
| 151 /// "browser": [ | 159 /// "browser": [ |
| 152 /// new Skip("TODO: add browser support"), | 160 /// new Skip("TODO: add browser support"), |
| 153 /// // They'll be slow on browsers once it works on them. | 161 /// // They'll be slow on browsers once it works on them. |
| 154 /// new Timeout.factor(2) | 162 /// new Timeout.factor(2) |
| 155 /// ] | 163 /// ] |
| 156 /// }); | 164 /// }); |
| 157 /// | 165 /// |
| 158 /// If multiple platforms match, the annotations apply in order as through | 166 /// If multiple platforms match, the annotations apply in order as through |
| 159 /// they were in nested groups. | 167 /// they were in nested groups. |
| 160 void group(String description, void body(), {String testOn, Timeout timeout, | 168 void group(String description, void body(), |
| 161 skip, Map<String, dynamic> onPlatform, String tag, | 169 {String testOn, |
| 162 List<String> tags}) => _declarer.group(description, body, | 170 Timeout timeout, |
| 163 testOn: testOn, timeout: timeout, skip: skip, | 171 skip, |
| 164 tags: _deconvenienceTags(tag, tags)); | 172 Map<String, dynamic> onPlatform, |
| 173 tags}) => |
| 174 _declarer.group(description, body, |
| 175 testOn: testOn, timeout: timeout, skip: skip, tags: tags); |
| 165 | 176 |
| 166 /// Registers a function to be run before tests. | 177 /// Registers a function to be run before tests. |
| 167 /// | 178 /// |
| 168 /// This function will be called before each test is run. [callback] may be | 179 /// This function will be called before each test is run. [callback] may be |
| 169 /// asynchronous; if so, it must return a [Future]. | 180 /// asynchronous; if so, it must return a [Future]. |
| 170 /// | 181 /// |
| 171 /// If this is called within a test group, it applies only to tests in that | 182 /// If this is called within a test group, it applies only to tests in that |
| 172 /// group. [callback] will be run after any set-up callbacks in parent groups or | 183 /// group. [callback] will be run after any set-up callbacks in parent groups or |
| 173 /// at the top level. | 184 /// at the top level. |
| 174 /// | 185 /// |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 /// prefer [tearDown], and only use [tearDOwnAll] if the callback is | 227 /// prefer [tearDown], and only use [tearDOwnAll] if the callback is |
| 217 /// prohibitively slow. | 228 /// prohibitively slow. |
| 218 void tearDownAll(callback()) => _declarer.tearDownAll(callback); | 229 void tearDownAll(callback()) => _declarer.tearDownAll(callback); |
| 219 | 230 |
| 220 /// Registers an exception that was caught for the current test. | 231 /// Registers an exception that was caught for the current test. |
| 221 void registerException(error, [StackTrace stackTrace]) { | 232 void registerException(error, [StackTrace stackTrace]) { |
| 222 // This will usually forward directly to [Invoker.current.handleError], but | 233 // This will usually forward directly to [Invoker.current.handleError], but |
| 223 // going through the zone API allows other zones to consistently see errors. | 234 // going through the zone API allows other zones to consistently see errors. |
| 224 Zone.current.handleUncaughtError(error, stackTrace); | 235 Zone.current.handleUncaughtError(error, stackTrace); |
| 225 } | 236 } |
| 226 | |
| 227 List<String> _deconvenienceTags(String tag, List<String> tags) { | |
| 228 var result = const[]; | |
| 229 if (tag != null || (tags != null && tags.isNotEmpty)) { | |
| 230 result = []; | |
| 231 if (tag != null) result.add(tag); | |
| 232 if (tags != null && tags.isNotEmpty) result.addAll(tags); | |
| 233 } | |
| 234 return result; | |
| 235 } | |
| OLD | NEW |