OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. |
| 4 |
| 5 library matcher.utils; |
| 6 |
| 7 /** |
| 8 * Returns the name of the type of [x], or "Unknown" if the type name can't be |
| 9 * determined. |
| 10 */ |
| 11 String typeName(x) { |
| 12 // dart2js blows up on some objects (e.g. window.navigator). |
| 13 // So we play safe here. |
| 14 try { |
| 15 if (x == null) return "null"; |
| 16 var type = x.runtimeType.toString(); |
| 17 // TODO(nweiz): if the object's type is private, find a public superclass to |
| 18 // display once there's a portable API to do that. |
| 19 return type.startsWith("_") ? "?" : type; |
| 20 } catch (e) { |
| 21 return "?"; |
| 22 } |
| 23 } |
| 24 |
| 25 /** |
| 26 * Returns [source] with any control characters replaced by their escape |
| 27 * sequences. |
| 28 * |
| 29 * This doesn't add quotes to the string, but it does escape single quote |
| 30 * characters so that single quotes can be applied externally. |
| 31 */ |
| 32 String escapeString(String source) => |
| 33 source.split("").map(_escapeChar).join(""); |
| 34 |
| 35 /** Return the escaped form of a character [ch]. */ |
| 36 String _escapeChar(String ch) { |
| 37 if (ch == "'") |
| 38 return "\\'"; |
| 39 else if (ch == '\n') |
| 40 return '\\n'; |
| 41 else if (ch == '\r') |
| 42 return '\\r'; |
| 43 else if (ch == '\t') |
| 44 return '\\t'; |
| 45 else |
| 46 return ch; |
| 47 } |
| 48 |
| 49 /** Indent each line in [str] by two spaces. */ |
| 50 String indent(String str) => |
| 51 str.replaceAll(new RegExp("^", multiLine: true), " "); |
| 52 |
| 53 /** A pair of values. */ |
| 54 class Pair<E, F> { |
| 55 E first; |
| 56 F last; |
| 57 |
| 58 Pair(this.first, this.last); |
| 59 |
| 60 String toString() => '($first, $last)'; |
| 61 |
| 62 bool operator ==(other) { |
| 63 if (other is! Pair) return false; |
| 64 return other.first == first && other.last == last; |
| 65 } |
| 66 |
| 67 int get hashCode => first.hashCode ^ last.hashCode; |
| 68 } |
| 69 |
OLD | NEW |