| Index: pkg/matcher/lib/src/utils.dart
|
| diff --git a/pkg/matcher/lib/src/utils.dart b/pkg/matcher/lib/src/utils.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c2182c28949b1755d44efea4be99e9dc61befea0
|
| --- /dev/null
|
| +++ b/pkg/matcher/lib/src/utils.dart
|
| @@ -0,0 +1,69 @@
|
| +// Copyright (c) 2013, 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 matcher.utils;
|
| +
|
| +/**
|
| + * Returns the name of the type of [x], or "Unknown" if the type name can't be
|
| + * determined.
|
| + */
|
| +String typeName(x) {
|
| + // dart2js blows up on some objects (e.g. window.navigator).
|
| + // So we play safe here.
|
| + try {
|
| + if (x == null) return "null";
|
| + var type = x.runtimeType.toString();
|
| + // TODO(nweiz): if the object's type is private, find a public superclass to
|
| + // display once there's a portable API to do that.
|
| + return type.startsWith("_") ? "?" : type;
|
| + } catch (e) {
|
| + return "?";
|
| + }
|
| +}
|
| +
|
| +/**
|
| + * Returns [source] with any control characters replaced by their escape
|
| + * sequences.
|
| + *
|
| + * This doesn't add quotes to the string, but it does escape single quote
|
| + * characters so that single quotes can be applied externally.
|
| + */
|
| +String escapeString(String source) =>
|
| + source.split("").map(_escapeChar).join("");
|
| +
|
| +/** Return the escaped form of a character [ch]. */
|
| +String _escapeChar(String 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;
|
| +}
|
| +
|
| +/** Indent each line in [str] by two spaces. */
|
| +String indent(String str) =>
|
| + str.replaceAll(new RegExp("^", multiLine: true), " ");
|
| +
|
| +/** A pair of values. */
|
| +class Pair<E, F> {
|
| + E first;
|
| + F last;
|
| +
|
| + Pair(this.first, this.last);
|
| +
|
| + String toString() => '($first, $last)';
|
| +
|
| + bool operator ==(other) {
|
| + if (other is! Pair) return false;
|
| + return other.first == first && other.last == last;
|
| + }
|
| +
|
| + int get hashCode => first.hashCode ^ last.hashCode;
|
| +}
|
| +
|
|
|