// 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. 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 = StringBuffer(); /// Initialize the description with initial contents [init]. StringDescription([String init = '']) { _out.write(init); } @override int get length => _out.length; /// Get the description as a string. @override String toString() => _out.toString(); /// Append [text] to the description. @override Description add(String text) { _out.write(text); return this; } /// Change the value of the description. @override 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". @override Description addDescriptionOf(Object? 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]. @override 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; } }