| // 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 '../../../sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart'; |
| import '../../../sdk/lib/_internal/compiler/implementation/scanner/scanner_implementation.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.slowToString().length, token.slowCharCount); |
| |
| var start = token.charOffset; |
| var end = token.charOffset + token.slowCharCount; |
| |
| 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.slowToString(), substring, |
| 'token.slowToString()=${token.slowToString()} == ' |
| '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 |
| } |