Index: lib/unittest/description.dart |
=================================================================== |
--- lib/unittest/description.dart (revision 0) |
+++ lib/unittest/description.dart (revision 0) |
@@ -0,0 +1,105 @@ |
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+/** |
+ * The default implementation of IDescription. This should rarely need |
+ * substitution, although conceivably it is a place where other languages |
+ * could be supported. |
+ */ |
+ |
Bob Nystrom
2012/05/30 23:23:51
Remove blank line.
gram
2012/06/01 17:33:15
Done.
|
+class StringDescription implements IDescription { |
+ var _out = ''; |
+ |
+ /** |
+ * Get the description as a string. |
+ */ |
+ String toString() => _out; |
+ |
+ /** |
+ * Append some plain [text] to the description. |
+ */ |
+ |
Bob Nystrom
2012/05/30 23:23:51
Remove blank line, here and elsewhere.
gram
2012/06/01 17:33:15
Done.
|
+ IDescription append(text) { |
Bob Nystrom
2012/05/30 23:23:51
"add" to be consistent with List and StringBuffer.
gram
2012/06/01 17:33:15
Done.
|
+ _out = '${_out}${text}'; |
+ return this; |
+ } |
+ |
+ /** |
+ * Append a description of given [value]. If it is a string just |
Bob Nystrom
2012/05/30 23:23:51
"Append" -> "appends". Remove "given".
gram
2012/06/01 17:33:15
Done.
|
+ * append it with some control characters escaped. Else try |
Bob Nystrom
2012/05/30 23:23:51
This sentence needs some grammar work.
|
+ * call describe on the value itself, which will work for |
+ * IMatchers. If that fails, just quote its toString() value. |
+ */ |
+ |
+ IDescription appendDescriptionOf(value) { |
+ try { |
+ value.describe(this); |
Bob Nystrom
2012/05/30 23:23:51
Instead of just trying to call describe(), why not
gram
2012/06/01 17:33:15
Done.
|
+ } catch(var e) { |
+ if (value is String) { |
+ _appendEscapedString(value); |
+ } else { |
+ String description = value.toString(); |
+ if (description.startsWith('<') && description.endsWith('>')) { |
+ append(description); |
+ } else { |
+ append('<'); |
+ append(description); |
+ append('>'); |
+ } |
+ } |
+ } |
+ return this; |
+ } |
+ |
+ /** |
+ * Append a [list] of objects to the description, using the |
+ * specified [separator] and framing the list with [start] |
+ * and [end]. |
+ */ |
+ |
+ IDescription appendList(start, separator, end, list) { |
+ var separate = false; |
+ append(start); |
+ for (var item in list) { |
+ if (separate) { |
+ append(separator); |
+ } |
+ appendDescriptionOf(item); |
+ separate = true; |
+ } |
+ append(end); |
+ return this; |
+ } |
+ |
+ /** |
+ * Escape the control characters in [string] so that they are visible. |
+ */ |
+ _appendEscapedString(String string) { |
+ append("'"); |
+ for (var i = 0; i < string.length; i++) { |
+ append(_escape(string[i])); |
+ } |
+ append("'"); |
+ } |
+ |
+ /** |
+ * Return the escaped form of a character [ch]. |
+ */ |
+ _escape(ch) { |
+ if (ch == "'") |
+ return "\'"; |
+ else if (ch == '\n') |
+ return '\\n'; |
+ else if (ch == '\r') |
+ return '\\r'; |
+ else if (ch == '\t') |
+ return '\\t'; |
+ else |
+ return ch; |
+ } |
+} |
+ |
+ |
+ |
+ |