Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(58)

Side by Side Diff: pkg/unittest/lib/src/test_case.dart

Issue 18892003: Roll forward "Use package:stack_trace in unittest." (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Merge head. Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « pkg/unittest/lib/src/config.dart ('k') | pkg/unittest/lib/src/utils.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 part of unittest; 5 part of unittest;
6 6
7 /** 7 /**
8 * Represents the state for an individual unit test. 8 * Represents the state for an individual unit test.
9 * 9 *
10 * Create by calling [test] or [solo_test]. 10 * Create by calling [test] or [solo_test].
(...skipping 23 matching lines...) Expand all
34 String _message = ''; 34 String _message = '';
35 /** Error or failure message. */ 35 /** Error or failure message. */
36 String get message => _message; 36 String get message => _message;
37 37
38 String _result; 38 String _result;
39 /** 39 /**
40 * One of [PASS], [FAIL], [ERROR], or [null] if the test hasn't run yet. 40 * One of [PASS], [FAIL], [ERROR], or [null] if the test hasn't run yet.
41 */ 41 */
42 String get result => _result; 42 String get result => _result;
43 43
44 String _stackTrace; 44 Trace _stackTrace;
45 /** Stack trace associated with this test, or [null] if it succeeded. */ 45 /** Stack trace associated with this test, or [null] if it succeeded. */
46 String get stackTrace => _stackTrace; 46 Trace get stackTrace => _stackTrace;
47 47
48 /** The group (or groups) under which this test is running. */ 48 /** The group (or groups) under which this test is running. */
49 final String currentGroup; 49 final String currentGroup;
50 50
51 DateTime _startTime; 51 DateTime _startTime;
52 DateTime get startTime => _startTime; 52 DateTime get startTime => _startTime;
53 53
54 Duration _runningTime; 54 Duration _runningTime;
55 Duration get runningTime => _runningTime; 55 Duration get runningTime => _runningTime;
56 56
57 bool enabled = true; 57 bool enabled = true;
58 58
59 bool _doneTeardown = false; 59 bool _doneTeardown = false;
60 60
61 Completer _testComplete; 61 Completer _testComplete;
62 62
63 TestCase._internal(this.id, this.description, this.testFunction) 63 TestCase._internal(this.id, this.description, this.testFunction)
64 : currentGroup = _currentContext.fullName, 64 : currentGroup = _currentContext.fullName,
65 setUp = _currentContext.testSetup, 65 setUp = _currentContext.testSetup,
66 tearDown = _currentContext.testTeardown; 66 tearDown = _currentContext.testTeardown;
67 67
68 bool get isComplete => !enabled || result != null; 68 bool get isComplete => !enabled || result != null;
69 69
70 Function _errorHandler(String stage) => (e) { 70 Function _errorHandler(String stage) => (e) {
71 var stack = getAttachedStackTrace(e); 71 var stack = getAttachedStackTrace(e);
72 stack = (stack == null) ? '' : '$stack';
73 if (result == null || result == PASS) { 72 if (result == null || result == PASS) {
74 if (e is TestFailure) { 73 if (e is TestFailure) {
75 fail("$e", stack); 74 fail("$e", stack);
76 } else { 75 } else {
77 error("$stage failed: Caught $e", stack); 76 error("$stage failed: Caught $e", stack);
78 } 77 }
79 } 78 }
80 }; 79 };
81 80
82 /** 81 /**
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 }).catchError(_errorHandler('Teardown')); 114 }).catchError(_errorHandler('Teardown'));
116 } else if (tearDown != null) { 115 } else if (tearDown != null) {
117 return tearDown(); 116 return tearDown();
118 } 117 }
119 }) 118 })
120 .catchError(_errorHandler('Teardown')); 119 .catchError(_errorHandler('Teardown'));
121 } 120 }
122 121
123 // Set the results, notify the config, and return true if this 122 // Set the results, notify the config, and return true if this
124 // is the first time the result is being set. 123 // is the first time the result is being set.
125 void _setResult(String testResult, String messageText, String stack) { 124 void _setResult(String testResult, String messageText, stack) {
126 _message = messageText; 125 _message = messageText;
127 _stackTrace = _formatStack(stack); 126 _stackTrace = _getTrace(stack);
128 if (result == null) { 127 if (result == null) {
129 _result = testResult; 128 _result = testResult;
130 _config.onTestResult(this); 129 _config.onTestResult(this);
131 } else { 130 } else {
132 _result = testResult; 131 _result = testResult;
133 _config.onTestResultChanged(this); 132 _config.onTestResultChanged(this);
134 } 133 }
135 } 134 }
136 135
137 void _complete(String testResult, 136 void _complete(String testResult, [String messageText = '', stack]) {
138 [String messageText = '',
139 String stack = '']) {
140 if (runningTime == null) { 137 if (runningTime == null) {
141 // The startTime can be `null` if an error happened during setup. In this 138 // The startTime can be `null` if an error happened during setup. In this
142 // case we simply report a running time of 0. 139 // case we simply report a running time of 0.
143 if (startTime != null) { 140 if (startTime != null) {
144 _runningTime = new DateTime.now().difference(startTime); 141 _runningTime = new DateTime.now().difference(startTime);
145 } else { 142 } else {
146 _runningTime = const Duration(seconds: 0); 143 _runningTime = const Duration(seconds: 0);
147 } 144 }
148 } 145 }
149 _setResult(testResult, messageText, stack); 146 _setResult(testResult, messageText, stack);
150 if (_testComplete != null) { 147 if (_testComplete != null) {
151 var t = _testComplete; 148 var t = _testComplete;
152 _testComplete = null; 149 _testComplete = null;
153 t.complete(this); 150 t.complete(this);
154 } 151 }
155 } 152 }
156 153
157 void pass() { 154 void pass() {
158 _complete(PASS); 155 _complete(PASS);
159 } 156 }
160 157
161 void fail(String messageText, [String stack = '']) { 158 void fail(String messageText, [stack]) {
162 assert(stack != null);
163 if (result != null) { 159 if (result != null) {
164 String newMessage = (result == PASS) 160 String newMessage = (result == PASS)
165 ? 'Test failed after initially passing: $messageText' 161 ? 'Test failed after initially passing: $messageText'
166 : 'Test failed more than once: $messageText'; 162 : 'Test failed more than once: $messageText';
167 // TODO(gram): Should we combine the stack with the old one? 163 // TODO(gram): Should we combine the stack with the old one?
168 _complete(ERROR, newMessage, stack); 164 _complete(ERROR, newMessage, stack);
169 } else { 165 } else {
170 _complete(FAIL, messageText, stack); 166 _complete(FAIL, messageText, stack);
171 } 167 }
172 } 168 }
173 169
174 void error(String messageText, [String stack = '']) { 170 void error(String messageText, [stack]) {
175 assert(stack != null);
176 _complete(ERROR, messageText, stack); 171 _complete(ERROR, messageText, stack);
177 } 172 }
178 173
179 void _markCallbackComplete() { 174 void _markCallbackComplete() {
180 if (--_callbackFunctionsOutstanding == 0 && !isComplete) { 175 if (--_callbackFunctionsOutstanding == 0 && !isComplete) {
181 pass(); 176 pass();
182 } 177 }
183 } 178 }
184 } 179 }
OLDNEW
« no previous file with comments | « pkg/unittest/lib/src/config.dart ('k') | pkg/unittest/lib/src/utils.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698