Chromium Code Reviews| 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 /** | 5 /** |
| 6 * A library for writing dart unit tests. | 6 * A library for writing dart unit tests. |
| 7 * | 7 * |
| 8 * ## Installing ## | 8 * ## Installing ## |
| 9 * | 9 * |
| 10 * Use [pub][] to install this package. Add the following to your `pubspec.yaml` | 10 * Use [pub][] to install this package. Add the following to your `pubspec.yaml` |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 174 | 174 |
| 175 // TODO(amouravski): We should not need to import mock here, but it's necessary | 175 // TODO(amouravski): We should not need to import mock here, but it's necessary |
| 176 // to enable dartdoc on the mock library, as it's not picked up normally. | 176 // to enable dartdoc on the mock library, as it's not picked up normally. |
| 177 import 'mock.dart'; | 177 import 'mock.dart'; |
| 178 | 178 |
| 179 part 'src/config.dart'; | 179 part 'src/config.dart'; |
| 180 part 'src/test_case.dart'; | 180 part 'src/test_case.dart'; |
| 181 | 181 |
| 182 Configuration _config; | 182 Configuration _config; |
| 183 | 183 |
| 184 /** [Configuration] used by the unittest library. */ | 184 /** |
| 185 Configuration get unittestConfiguration => _config; | 185 * [Configuration] used by the unittest library. Note that if a |
| 186 * configuration has not been set, calling this getter will create | |
| 187 * a default configuration. */ | |
|
Siggi Cherem (dart-lang)
2013/04/27 01:36:08
multiline comment format fix: move */ to it's own
gram
2013/04/29 21:24:18
Done.
| |
| 188 Configuration get unittestConfiguration { | |
| 189 if (_config == null) { | |
| 190 _config = new Configuration(); | |
|
Siggi Cherem (dart-lang)
2013/04/27 01:36:08
this is already done just before onInit, why do we
gram
2013/04/29 21:24:18
Yes, it is so they can set values. I don't want th
Siggi Cherem (dart-lang)
2013/04/30 00:42:33
by option 2 I meant to consider replacing lines 83
gram
2013/04/30 01:00:09
Done.
| |
| 191 } | |
| 192 return _config; | |
| 193 } | |
| 186 | 194 |
| 187 /** | 195 /** |
| 188 * Sets the [Configuration] used by the unittest library. | 196 * Sets the [Configuration] used by the unittest library. |
| 189 * | 197 * |
| 190 * Throws a [StateError] if there is an existing, incompatible value. | 198 * Throws a [StateError] if there is an existing, incompatible value. |
| 191 */ | 199 */ |
| 192 void set unittestConfiguration(Configuration value) { | 200 void set unittestConfiguration(Configuration value) { |
| 193 if(!identical(_config, value)) { | 201 if(!identical(_config, value)) { |
| 194 if(_config != null) { | 202 if(_config != null) { |
| 195 throw new StateError('unittestConfiguration has already been set'); | 203 throw new StateError('unittestConfiguration has already been set'); |
| (...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 852 } | 860 } |
| 853 | 861 |
| 854 /** Enable a test by ID. */ | 862 /** Enable a test by ID. */ |
| 855 void enableTest(int testId) => _setTestEnabledState(testId, true); | 863 void enableTest(int testId) => _setTestEnabledState(testId, true); |
| 856 | 864 |
| 857 /** Disable a test by ID. */ | 865 /** Disable a test by ID. */ |
| 858 void disableTest(int testId) => _setTestEnabledState(testId, false); | 866 void disableTest(int testId) => _setTestEnabledState(testId, false); |
| 859 | 867 |
| 860 /** Signature for a test function. */ | 868 /** Signature for a test function. */ |
| 861 typedef dynamic TestFunction(); | 869 typedef dynamic TestFunction(); |
| 870 | |
| 871 // Stack formatting utility. Strips extraneous content from a stack trace. | |
| 872 // Each original line is of the form #<n> <function> (<location url>). | |
| 873 final _nativeFrameRegExp = new RegExp( | |
| 874 r'^#\d+\s+([^\s].*) (\(.+:\d+:\d+\))$'); | |
| 875 | |
| 876 String _formatStack(stack) { | |
|
Siggi Cherem (dart-lang)
2013/04/27 01:36:08
as we were discussing offline. why can't we use th
gram
2013/04/29 21:24:18
In the latest version they work in Firefox, Dartiu
| |
| 877 var lines; | |
| 878 if (stack is StackTrace) { | |
| 879 lines = stack.toString().split('\n'); | |
| 880 } else if (stack is String) { | |
| 881 lines = stack.split('\n'); | |
| 882 } else { | |
| 883 return stack.toString(); | |
| 884 } | |
| 885 | |
| 886 // We remove all entries that have a location in unittest. | |
| 887 // We strip out anything before _nextBatch too. | |
| 888 var sb = new StringBuffer(); | |
| 889 var maxlen = 0; | |
| 890 for (var pass = 0; pass < 2; pass++) { | |
|
Siggi Cherem (dart-lang)
2013/04/27 01:36:08
I'd prefer if we split this in 2 loops, so that ea
gram
2013/04/29 21:24:18
The filtering is not that conducive to this now th
| |
| 891 for (var i = 0; i < lines.length; i++) { | |
| 892 if (lines[i] == '') continue; | |
| 893 var match = _nativeFrameRegExp.firstMatch(lines[i]); | |
| 894 if (match == null) { | |
| 895 throw new FormatException( | |
| 896 "Couldn't parse stack trace line '${lines[i]}' from $stack."); | |
|
Siggi Cherem (dart-lang)
2013/04/27 01:36:08
I don't think we should throw if we can't parse a
gram
2013/04/29 21:24:18
Done.
| |
| 897 } | |
| 898 var member = match[1]; | |
| 899 var location = match[2]; | |
| 900 if (location.indexOf('unittest/lib/') >= 0) { | |
|
Siggi Cherem (dart-lang)
2013/04/27 01:36:08
when running things outside of the repo, the stack
gram
2013/04/29 21:24:18
I've addressed this.
| |
| 901 if (member == '_nextBatch') break; | |
| 902 } else if (pass == 0) { | |
| 903 // Find max length of first column. | |
| 904 if (member.length > maxlen) maxlen = member.length; | |
| 905 } else { | |
| 906 sb.write(member); | |
| 907 // Pad second column to a fixed position. | |
| 908 for (var j = 0; j <= maxlen - member.length; j++) { | |
| 909 sb.write(' '); | |
| 910 } | |
| 911 sb.write(location); | |
| 912 sb.write('\n'); | |
| 913 } | |
| 914 } | |
| 915 } | |
| 916 return sb.toString(); | |
| 917 } | |
| OLD | NEW |