import 'package:dev_compiler/src/js_ast/js_ast.dart'; import 'package:test/test.dart'; final _prenumberedPlaceholders = RegExp(r'#\d+'); MiniJsParser _parser(String src) => MiniJsParser(src.replaceAll(_prenumberedPlaceholders, '#')); void _check(Node node, String expected) => expect(node.toString(), 'js_ast `$expected`'); void _checkStatement(String src) => _check(_parser(src).parseStatement(), src); void _checkExpression(String src) => _check(_parser(src).parseExpression(), src); void main() { group('MiniJsParser', () { // TODO(ochafik): Add more coverage. test('parses classes with complex members', () { _checkExpression('class Foo {\n' ' [foo](...args) {}\n' ' [#0](x) {}\n' ' static [foo](...args) {}\n' ' static [#1](x) {}\n' ' get [foo]() {}\n' ' get [#2]() {}\n' ' static get [foo]() {}\n' ' static get [#3]() {}\n' ' set [foo](v) {}\n' ' set [#4](v) {}\n' ' static set [foo](v) {}\n' ' static set [#5](v) {}\n' '}'); }); test('parses statements', () { _checkStatement('for (let i = 0; i < 10; i++) {\n}\n'); _checkStatement('for (let i = 0, j = 1; i < 10; i++) {\n}\n'); _checkStatement('var [x, y = []] = list;\n'); _checkStatement('var {x, y = {x: y}} = obj;\n'); }); }); }