| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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 part of unittest; | 5 part of unittest; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * testcase.dart: this file is sourced by unittest.dart. It defines [TestCase] | 8 * testcase.dart: this file is sourced by unittest.dart. It defines [TestCase] |
| 9 * and assumes unittest defines the type [TestFunction]. | 9 * and assumes unittest defines the type [TestFunction]. |
| 10 */ | 10 */ |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 return null; | 132 return null; |
| 133 } | 133 } |
| 134 | 134 |
| 135 void _notifyComplete() { | 135 void _notifyComplete() { |
| 136 if (_testComplete != null) { | 136 if (_testComplete != null) { |
| 137 _testComplete.complete(this); | 137 _testComplete.complete(this); |
| 138 _testComplete = null; | 138 _testComplete = null; |
| 139 } | 139 } |
| 140 } | 140 } |
| 141 | 141 |
| 142 void _complete() { | 142 // Set the results, notify the config, and return true if this |
| 143 // is the first time the result is being set. |
| 144 void _setResult(String testResult, String messageText, String stack) { |
| 145 message = messageText; |
| 146 stackTrace = stack; |
| 147 if (result == null) { |
| 148 result = testResult; |
| 149 _config.onTestResult(this); |
| 150 } else { |
| 151 result = testResult; |
| 152 _config.onTestResultChanged(this); |
| 153 } |
| 154 } |
| 155 |
| 156 void _complete(String testResult, |
| 157 [String messageText = '', |
| 158 String stack = '']) { |
| 143 if (runningTime == null) { | 159 if (runningTime == null) { |
| 144 // TODO(gram): currently the duration measurement code is blocked | 160 // TODO(gram): currently the duration measurement code is blocked |
| 145 // by issue 4437. When that is fixed replace the line below with: | 161 // by issue 4437. When that is fixed replace the line below with: |
| 146 // runningTime = new DateTime.now().difference(startTime); | 162 // runningTime = new DateTime.now().difference(startTime); |
| 147 runningTime = new Duration(milliseconds: 0); | 163 runningTime = new Duration(milliseconds: 0); |
| 148 } | 164 } |
| 165 _setResult(testResult, messageText, stack); |
| 149 if (!_doneTeardown) { | 166 if (!_doneTeardown) { |
| 150 _doneTeardown = true; | 167 _doneTeardown = true; |
| 151 if (_tearDown != null) { | 168 if (_tearDown != null) { |
| 152 var rtn = _tearDown(); | 169 var rtn = _tearDown(); |
| 153 if (rtn is Future) { | 170 if (rtn is Future) { |
| 154 rtn.then((_) { | 171 rtn.then((_) { |
| 155 if (result == null) { | |
| 156 // The test passed. In some cases we will already | |
| 157 // have set this result (e.g. if the test was async | |
| 158 // and all callbacks completed). If not, we do it here. | |
| 159 pass(); | |
| 160 } else { | |
| 161 // The test has already been marked as pass/fail. | |
| 162 // Just report the updated result. | |
| 163 _config.onTestResult(this); | |
| 164 } | |
| 165 _notifyComplete(); | 172 _notifyComplete(); |
| 166 }) | 173 }) |
| 167 .catchError((e) { | 174 .catchError((e) { |
| 168 // We don't call fail() as that will potentially result in | 175 // We don't call fail() as that will potentially result in |
| 169 // spurious messages like 'test failed more than once'. | 176 // spurious messages like 'test failed more than once'. |
| 170 result = ERROR; | 177 _setResult(ERROR, "$description: Test teardown failed: ${e.error}", |
| 171 message = "$description: Test teardown failed: ${e.error}"; | 178 e.stackTrace.toString()); |
| 172 _config.onTestResult(this); | |
| 173 _notifyComplete(); | 179 _notifyComplete(); |
| 174 }); | 180 }); |
| 175 return; | 181 return; |
| 176 } | 182 } |
| 177 } | 183 } |
| 178 } | 184 } |
| 179 _config.onTestResult(this); | |
| 180 _notifyComplete(); | 185 _notifyComplete(); |
| 181 } | 186 } |
| 182 | 187 |
| 183 void pass() { | 188 void pass() { |
| 184 result = PASS; | 189 _complete(PASS); |
| 185 _complete(); | |
| 186 } | 190 } |
| 187 | 191 |
| 188 void fail(String messageText, [String stack = '']) { | 192 void fail(String messageText, [String stack = '']) { |
| 189 if (result != null) { | 193 if (result != null) { |
| 190 if (result == PASS) { | 194 String newMessage = (result == PASS) |
| 191 error('Test failed after initially passing: $messageText', stack); | 195 ? 'Test failed after initially passing: $messageText' |
| 192 } else if (result == FAIL) { | 196 : 'Test failed more than once: $messageText'; |
| 193 error('Test failed more than once: $messageText', stack); | 197 // TODO(gram): Should we combine the stack with the old one? |
| 194 } | 198 _complete(ERROR, newMessage, stack); |
| 195 } else { | 199 } else { |
| 196 result = FAIL; | 200 _complete(FAIL, messageText, stack); |
| 197 message = messageText; | |
| 198 stackTrace = stack; | |
| 199 _complete(); | |
| 200 } | 201 } |
| 201 } | 202 } |
| 202 | 203 |
| 203 void error(String messageText, [String stack = '']) { | 204 void error(String messageText, [String stack = '']) { |
| 204 result = ERROR; | 205 _complete(ERROR, messageText, stack); |
| 205 message = messageText; | |
| 206 stackTrace = stack; | |
| 207 _complete(); | |
| 208 } | 206 } |
| 209 } | 207 } |
| OLD | NEW |