StringDescription class
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; /** Initialize the description with initial contents [init]. */ StringDescription([String init = '']) { _out = init; } /** 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; } /** Change the value of the description. */ Description replace(String text) { _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; } }
Implements
Constructors
Methods
Description add(String text) #
Append some plain text to the description.
Description add(String text) { _out = '${_out}${text}'; return this; }
Description addAll(String start, String separator, String end, Iterable list) #
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; }
Description addDescriptionOf(value) #
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; }
Description replace(String text) #
Change the value of the description.
Description replace(String text) { _out = text; return this; }