Dart DocumentationmatcherStringDescription

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 if (description.startsWith("Instance of")) {
       add('<');
       add(description);
       add(':');
       add(value.hashCode.toString());
       add('>');
     } 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

Description

Constructors

new StringDescription([String init = '']) #

Initialize the description with initial contents init.

StringDescription([String init = '']) {
 _out = init;
}

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 if (description.startsWith("Instance of")) {
     add('<');
     add(description);
     add(':');
     add(value.hashCode.toString());
     add('>');
   } 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;
}

String toString() #

Get the description as a string.

String toString() => _out;