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

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

Issue 14021021: Unit test improvements. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 7 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/test_case.dart ('k') | no next file » | 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 /** 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
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.
188 */
189 Configuration get unittestConfiguration {
190 if (_config == null) {
191 _config = new Configuration();
192 }
193 return _config;
194 }
186 195
187 /** 196 /**
188 * Sets the [Configuration] used by the unittest library. 197 * Sets the [Configuration] used by the unittest library.
189 * 198 *
190 * Throws a [StateError] if there is an existing, incompatible value. 199 * Throws a [StateError] if there is an existing, incompatible value.
191 */ 200 */
192 void set unittestConfiguration(Configuration value) { 201 void set unittestConfiguration(Configuration value) {
193 if(!identical(_config, value)) { 202 if(!identical(_config, value)) {
194 if(_config != null) { 203 if(_config != null) {
195 throw new StateError('unittestConfiguration has already been set'); 204 throw new StateError('unittestConfiguration has already been set');
(...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after
852 } 861 }
853 862
854 /** Enable a test by ID. */ 863 /** Enable a test by ID. */
855 void enableTest(int testId) => _setTestEnabledState(testId, true); 864 void enableTest(int testId) => _setTestEnabledState(testId, true);
856 865
857 /** Disable a test by ID. */ 866 /** Disable a test by ID. */
858 void disableTest(int testId) => _setTestEnabledState(testId, false); 867 void disableTest(int testId) => _setTestEnabledState(testId, false);
859 868
860 /** Signature for a test function. */ 869 /** Signature for a test function. */
861 typedef dynamic TestFunction(); 870 typedef dynamic TestFunction();
871
872 // Stack formatting utility. Strips extraneous content from a stack trace.
873 // Stack fram lines are parsed with a regexp, which has been tested
Siggi Cherem (dart-lang) 2013/04/30 00:42:33 fram => frame
gram 2013/04/30 01:00:09 Done.
874 // in Chrome, Firefox and the VM. If a line fails to be parsed it is
875 // included in the output to be conservative.
876 //
877 // The output stack consists of everything after the call to TestCase._run.
878 // If we see an 'expect' in the frame we will prune everything above that
879 // as well.
880 final _frameRegExp = new RegExp(
881 r'^\s*(?:(?:#\d+\s*)|(?:at )|(?:))(.+)\s*[@\(]((?:.+:\/\/.+\/[^:]*)|(?:dart: [^:]*)|(?:package:[^:]*)):([:\d]+)[\)]?$');
Siggi Cherem (dart-lang) 2013/04/30 00:42:33 is there a way to split this string in pieces to m
gram 2013/04/30 01:00:09 Done.
882
883 String _formatStack(stack) {
884 var lines;
885 if (stack is StackTrace) {
886 lines = stack.toString().split('\n');
887 } else if (stack is String) {
888 lines = stack.split('\n');
889 } else {
890 return stack.toString();
891 }
892
893 // Calculate the max width of first column so we can
894 // pad to align the second columns.
895 int padding = lines.fold(0, (n, line) {
896 var match = _frameRegExp.firstMatch(line);
897 if (match == null) return n;
898 return match[1].length + 1;
Siggi Cherem (dart-lang) 2013/04/30 00:42:33 missing call to max(n, *) here?
gram 2013/04/30 01:00:09 Done.
899 });
900
901 // We remove all entries that have a location in unittest.
902 // We strip out anything before _nextBatch too.
903 var sb = new StringBuffer();
904 for (var i = 0; i < lines.length; i++) {
905 var line = lines[i];
906 if (line == '') continue;
907 var match = _frameRegExp.firstMatch(line);
908 if (match == null) {
909 sb.write(line);
910 sb.write('\n');
911 } else {
912 var member = match[1];
913 var location = match[2];
914 var position = match[3];
915 if (member.indexOf('TestCase._runTest') >= 0) {
916 // Don't include anything after this.
917 break;
918 } else if (member.indexOf('expect') >= 0) {
919 // It looks like this was an expect() failure;
920 // drop all the frames up to here.
921 sb.clear();
922 } else {
923 sb.write(member);
924 // Pad second column to a fixed position.
925 for (var j = 0; j <= padding - member.length; j++) {
926 sb.write(' ');
927 }
928 sb.write(location);
929 sb.write(' ');
930 sb.write(position);
931 sb.write('\n');
932 }
933 }
934 }
935 return sb.toString();
936 }
OLDNEW
« no previous file with comments | « pkg/unittest/lib/src/test_case.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698