anchor.diff:        if (stringDifference != null) {
           _fail("Expect.equals($stringDifference$msg) fails.");
         }
  +      _fail("Expect.equals(expected: <${_escapeString(expected)}>"
  +          ", actual: <${_escapeString(actual)}>$msg) fails.");
       }
       _fail("Expect.equals(expected: <$expected>, actual: <$actual>$msg) fails.");
     }
  
positive.code:       if (start < 0) start = 0;
        if (end > string.length) end = string.length;
      }
      if (start == 0 && end == string.length) return string;
      StringBuffer buf = new StringBuffer();
      if (start > 0) buf.write("...");
      for (int i = start; i < end; i++) {
        int code = string.codeUnitAt(i);
        if (code < 0x20) {
          buf.write(r"\x");
          buf.write("0123456789abcdef"[code ~/ 16]);
          buf.write("0123456789abcdef"[code % 16]);
        } else {
          buf.writeCharCode(string.codeUnitAt(i));
        }
      }
      if (end < string.length) buf.write("...");
      return buf.toString();
    }
  
    /**
  
negative.code:    * [start] and increasing [end], up to at most length characters.
     * If the start or end of the slice are not matching the start or end of
     * the string, ellipses are added before or after the slice.
     * Characters other than printable ASCII are escaped.
     */
    static String _truncateString(String string, int start, int end, int length) {
      if (end - start > length) {
  