blob: fe306151c9d341e3a3164acc72b9d70ba59eb738 [file] [log] [blame]
// 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 "package:expect/expect.dart";
import 'package:front_end/src/fasta/scanner.dart';
Token scan(String text) =>
new StringScanner(text, includeComments: true).tokenize();
check(String text) {
Token token = scan(text);
while (token.kind != EOF_TOKEN) {
Expect.equals(token.lexeme.length, token.charCount);
var start = token.charOffset;
var end = token.charOffset + token.charCount;
Expect.isTrue(start < text.length,
'start=$start < text.length=${text.length}: $text');
Expect.isTrue(
end <= text.length, 'end=$end <= text.length=${text.length}: $text');
Expect.isTrue(start <= end, 'start=$end <= end=$end: $text');
var substring = text.substring(start, end);
Expect.stringEquals(
token.lexeme,
substring,
'token.value=${token.lexeme} == '
'text.substring(start,end)=${substring}: $text');
print('$text: [$start,$end]:$token');
token = token.next;
}
}
main() {
check('foo'); // identifier
check('\'\''); // empty string
check('\'foo\''); // simple string
check('\'\$foo\''); // interpolation, identifier
check('\'\${foo}\''); // interpolation, expression
check('//'); // single line comment
check('/**/'); // multi line comment
}