Index: lib/unittest/description.dart |
=================================================================== |
--- lib/unittest/description.dart (revision 0) |
+++ lib/unittest/description.dart (revision 0) |
@@ -0,0 +1,92 @@ |
+// 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. |
+ */ |
+ |
+class StringDescription implements Description { |
+ var _out = ''; |
+ |
+ /** |
+ * Get the description as a string. |
+ */ |
+ String toString() => _out; |
+ |
+ /** |
+ * Append some plain [text] to the description. |
+ */ |
+ Description add(String text) { |
+ _out = '${_out}${text}'; |
+ return this; |
+ } |
+ |
+ /** |
+ * Appends a description of [value]. If it is an IMatcher use its |
+ * describe method; if it is a string use its literal value after |
+ * escaping any embedded control characters; otherwise use its |
+ * toString() value and wrap it in angular "quotes". |
+ */ |
+ Description addDescriptionOf(value) { |
+ if (value is Matcher) { |
+ value.describe(this); |
+ } else if (value is String) { |
+ _addEscapedString(value); |
+ } else { |
+ String description = (value == null) ? "null" : value.toString(); |
+ if (description.startsWith('<') && description.endsWith('>')) { |
+ add(description); |
+ } else { |
+ add('<'); |
+ add(description); |
+ add('>'); |
+ } |
+ } |
+ return this; |
+ } |
+ |
+ /** |
+ * Append an [Iterable] [list] of objects to the description, using the |
+ * specified [separator] and framing the list with [start] |
+ * and [end]. |
+ */ |
+ Description addAll(String start, String separator, String end, |
+ Iterable list) { |
+ var separate = false; |
+ add(start); |
+ for (var item in list) { |
+ if (separate) { |
+ add(separator); |
+ } |
+ addDescriptionOf(item); |
+ separate = true; |
+ } |
+ add(end); |
+ return this; |
+ } |
+ |
+ /** Escape the control characters in [string] so that they are visible. */ |
+ _addEscapedString(String string) { |
+ add("'"); |
+ for (var i = 0; i < string.length; i++) { |
+ add(_escape(string[i])); |
+ } |
+ add("'"); |
+ } |
+ |
+ /** 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; |
+ } |
+} |