| Index: lib/src/matcher/description.dart
 | 
| diff --git a/lib/src/matcher/description.dart b/lib/src/matcher/description.dart
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..3f2862fa45b6ee539ac4dadabb3266e5245c031a
 | 
| --- /dev/null
 | 
| +++ b/lib/src/matcher/description.dart
 | 
| @@ -0,0 +1,68 @@
 | 
| +// 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.
 | 
| +
 | 
| +library unittest.matcher.description;
 | 
| +
 | 
| +import 'interfaces.dart';
 | 
| +import 'pretty_print.dart';
 | 
| +
 | 
| +/// The default implementation of [Description]. This should rarely need
 | 
| +/// substitution, although conceivably it is a place where other languages
 | 
| +/// could be supported.
 | 
| +class StringDescription implements Description {
 | 
| +  final StringBuffer _out = new StringBuffer();
 | 
| +
 | 
| +  /// Initialize the description with initial contents [init].
 | 
| +  StringDescription([String init = '']) {
 | 
| +    _out.write(init);
 | 
| +  }
 | 
| +
 | 
| +  int get length => _out.length;
 | 
| +
 | 
| +  /// Get the description as a string.
 | 
| +  String toString() => _out.toString();
 | 
| +
 | 
| +  /// Append [text] to the description.
 | 
| +  Description add(String text) {
 | 
| +    _out.write(text);
 | 
| +    return this;
 | 
| +  }
 | 
| +
 | 
| +  /// Change the value of the description.
 | 
| +  Description replace(String text) {
 | 
| +    _out.clear();
 | 
| +    return add(text);
 | 
| +  }
 | 
| +
 | 
| +  /// 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 {
 | 
| +      add(prettyPrint(value, maxLineLength: 80, maxItems: 25));
 | 
| +    }
 | 
| +    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;
 | 
| +  }
 | 
| +}
 | 
| 
 |