anchor.diff:    void test_string_raw_simple_unterminated_eol() {
       // TODO(paulberry,ahe): bad error recovery.
       super.test_string_raw_simple_unterminated_eol();
  -  }
  -
  -  @override
  -  @failingTest
  -  void test_string_simple_interpolation_missingIdentifier() {
  -    // TODO(paulberry,ahe): bad error recovery.
  -    super.test_string_simple_interpolation_missingIdentifier();
  -  }
  -
  -  @override
  -  @failingTest
  -  void test_string_simple_interpolation_nonIdentifier() {
  -    // TODO(paulberry,ahe): bad error recovery.
  -    super.test_string_simple_interpolation_nonIdentifier();
     }
   
     @override
  
positive.code: 
  @reflectiveTest
  class ScannerTest extends ScannerTestBase {
    @override
    Token _scanWithListener(String source, _ErrorListener listener,
        {bool genericMethodComments: false,
  
negative.code:       return new _TestError(charOffset, errorLength, errorCode, arguments);
      }
  
      var errorCode = token.errorCode;
      switch (errorCode) {
        case fasta.ErrorKind.UnterminatedString:
          // TODO(paulberry,ahe): Fasta reports the error location as the entire
          // string; analyzer expects the end of the string.
          charOffset = endOffset;
          return _makeError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, null);
        case fasta.ErrorKind.UnmatchedToken:
          return null;
        case fasta.ErrorKind.UnterminatedComment:
          // TODO(paulberry,ahe): Fasta reports the error location as the entire
          // comment; analyzer expects the end of the comment.
          charOffset = endOffset;
          return _makeError(
              ScannerErrorCode.UNTERMINATED_MULTI_LINE_COMMENT, null);
        case fasta.ErrorKind.MissingExponent:
          // TODO(paulberry,ahe): Fasta reports the error location as the entire
          // number; analyzer expects the end of the number.
          charOffset = endOffset;
          return _makeError(ScannerErrorCode.MISSING_DIGIT, null);
        case fasta.ErrorKind.ExpectedHexDigit:
          // TODO(paulberry,ahe): Fasta reports the error location as the entire
          // number; analyzer expects the end of the number.
          charOffset = endOffset;
          return _makeError(ScannerErrorCode.MISSING_HEX_DIGIT, null);
        case fasta.ErrorKind.NonAsciiIdentifier:
        case fasta.ErrorKind.NonAsciiWhitespace:
          return _makeError(
              ScannerErrorCode.ILLEGAL_CHARACTER, [token.character]);
        case fasta.ErrorKind.UnexpectedDollarInString:
          return null;
        default:
          throw new UnimplementedError('$errorCode');
      }
    }
  
    Keyword _translateKeyword(String syntax) =>
  