Index: pkg/analyzer_experimental/test/services/formatter_test.dart |
diff --git a/pkg/analyzer_experimental/test/services/formatter_test.dart b/pkg/analyzer_experimental/test/services/formatter_test.dart |
deleted file mode 100644 |
index 28c328fdff8b04d2e61f88e4cacae10a5f835535..0000000000000000000000000000000000000000 |
--- a/pkg/analyzer_experimental/test/services/formatter_test.dart |
+++ /dev/null |
@@ -1,1076 +0,0 @@ |
-// Copyright (c) 2013, 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:unittest/unittest.dart'; |
- |
-import 'package:analyzer_experimental/src/generated/java_core.dart' show CharSequence; |
-import 'package:analyzer_experimental/src/generated/scanner.dart'; |
-import 'package:analyzer_experimental/src/services/formatter_impl.dart'; |
-import 'package:analyzer_experimental/src/services/writer.dart'; |
- |
-main() { |
- |
- /// Formatter tests |
- group('formatter', () { |
- |
- test('failed parse', () { |
- var formatter = new CodeFormatter(); |
- expect(() => formatter.format(CodeKind.COMPILATION_UNIT, '~'), |
- throwsA(new isInstanceOf<FormatterException>())); |
- }); |
- |
- test('CU (1)', () { |
- expectCUFormatsTo( |
- 'class A {\n' |
- ' var z;\n' |
- ' inc(int x) => ++x;\n' |
- '}\n', |
- 'class A {\n' |
- ' var z;\n' |
- ' inc(int x) => ++x;\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU (2)', () { |
- expectCUFormatsTo( |
- 'class A { \n' |
- '}\n', |
- 'class A {\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU (3)', () { |
- expectCUFormatsTo( |
- 'class A {\n' |
- ' }', |
- 'class A {\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU (4)', () { |
- expectCUFormatsTo( |
- ' class A {\n' |
- '}\n', |
- 'class A {\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU (5)', () { |
- expectCUFormatsTo( |
- 'class A { int meaningOfLife() => 42; }', |
- 'class A {\n' |
- ' int meaningOfLife() => 42;\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU - EOL comments', () { |
- expectCUFormatsTo( |
- '//comment one\n\n' |
- '//comment two\n\n', |
- '//comment one\n\n' |
- '//comment two\n\n' |
- ); |
- expectCUFormatsTo( |
- 'var x; //x\n', |
- 'var x; //x\n' |
- ); |
- expectCUFormatsTo( |
- 'library foo;\n' |
- '\n' |
- '//comment one\n' |
- '\n' |
- 'class C {\n' |
- '}\n', |
- 'library foo;\n' |
- '\n' |
- '//comment one\n' |
- '\n' |
- 'class C {\n' |
- '}\n' |
- ); |
- expectCUFormatsTo( |
- 'library foo;\n' |
- '\n' |
- '//comment one\n' |
- '\n' |
- '//comment two\n' |
- '\n' |
- 'class C {\n' |
- '}\n', |
- 'library foo;\n' |
- '\n' |
- '//comment one\n' |
- '\n' |
- '//comment two\n' |
- '\n' |
- 'class C {\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU - nested functions', () { |
- expectCUFormatsTo( |
- 'x() {\n' |
- ' y() {\n' |
- ' }\n' |
- '}\n', |
- 'x() {\n' |
- ' y() {\n' |
- ' }\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU - top level', () { |
- expectCUFormatsTo( |
- '\n\n' |
- 'foo() {\n' |
- '}\n' |
- 'bar() {\n' |
- '}\n', |
- '\n\n' |
- 'foo() {\n' |
- '}\n' |
- 'bar() {\n' |
- '}\n' |
- ); |
- expectCUFormatsTo( |
- 'const A = 42;\n' |
- 'final foo = 32;\n', |
- 'const A = 42;\n' |
- 'final foo = 32;\n' |
- ); |
- }); |
- |
- test('CU - imports', () { |
- expectCUFormatsTo( |
- 'import "dart:io";\n\n' |
- 'import "package:unittest/unittest.dart";\n' |
- 'foo() {\n' |
- '}\n', |
- 'import "dart:io";\n\n' |
- 'import "package:unittest/unittest.dart";\n' |
- 'foo() {\n' |
- '}\n' |
- ); |
- expectCUFormatsTo( |
- 'library a; class B { }', |
- 'library a;\n' |
- 'class B {\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU - method invocations', () { |
- expectCUFormatsTo( |
- 'class A {\n' |
- ' foo() {\n' |
- ' bar();\n' |
- ' for (int i = 0; i < 42; i++) {\n' |
- ' baz();\n' |
- ' }\n' |
- ' }\n' |
- '}\n', |
- 'class A {\n' |
- ' foo() {\n' |
- ' bar();\n' |
- ' for (int i = 0; i < 42; i++) {\n' |
- ' baz();\n' |
- ' }\n' |
- ' }\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU w/class decl comment', () { |
- expectCUFormatsTo( |
- 'import "foo";\n\n' |
- '//Killer class\n' |
- 'class A {\n' |
- '}', |
- 'import "foo";\n\n' |
- '//Killer class\n' |
- 'class A {\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU (method body)', () { |
- expectCUFormatsTo( |
- 'class A {\n' |
- ' foo(path) {\n' |
- ' var buffer = new StringBuffer();\n' |
- ' var file = new File(path);\n' |
- ' return file;\n' |
- ' }\n' |
- '}\n', |
- 'class A {\n' |
- ' foo(path) {\n' |
- ' var buffer = new StringBuffer();\n' |
- ' var file = new File(path);\n' |
- ' return file;\n' |
- ' }\n' |
- '}\n' |
- ); |
- expectCUFormatsTo( |
- 'class A {\n' |
- ' foo(files) {\n' |
- ' for (var file in files) {\n' |
- ' print(file);\n' |
- ' }\n' |
- ' }\n' |
- '}\n', |
- 'class A {\n' |
- ' foo(files) {\n' |
- ' for (var file in files) {\n' |
- ' print(file);\n' |
- ' }\n' |
- ' }\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU (method indent)', () { |
- expectCUFormatsTo( |
- 'class A {\n' |
- 'void x(){\n' |
- '}\n' |
- '}\n', |
- 'class A {\n' |
- ' void x() {\n' |
- ' }\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU (method indent - 2)', () { |
- expectCUFormatsTo( |
- 'class A {\n' |
- ' static bool x(){\n' |
- 'return true; }\n' |
- ' }\n', |
- 'class A {\n' |
- ' static bool x() {\n' |
- ' return true;\n' |
- ' }\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU (method indent - 3)', () { |
- expectCUFormatsTo( |
- 'class A {\n' |
- ' int x() => 42 + 3 ; \n' |
- ' }\n', |
- 'class A {\n' |
- ' int x() => 42 + 3;\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU (method indent - 4)', () { |
- expectCUFormatsTo( |
- 'class A {\n' |
- ' int x() { \n' |
- 'if (true) {\n' |
- 'return 42;\n' |
- '} else {\n' |
- 'return 13;\n }\n' |
- ' }' |
- '}\n', |
- 'class A {\n' |
- ' int x() {\n' |
- ' if (true) {\n' |
- ' return 42;\n' |
- ' } else {\n' |
- ' return 13;\n' |
- ' }\n' |
- ' }\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU (multiple members)', () { |
- expectCUFormatsTo( |
- 'class A {\n' |
- '}\n' |
- 'class B {\n' |
- '}\n', |
- 'class A {\n' |
- '}\n' |
- 'class B {\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU (multiple members w/blanks)', () { |
- expectCUFormatsTo( |
- 'class A {\n' |
- '}\n\n' |
- 'class B {\n\n\n' |
- ' int b() => 42;\n\n' |
- ' int c() => b();\n\n' |
- '}\n', |
- 'class A {\n' |
- '}\n\n' |
- 'class B {\n\n\n' |
- ' int b() => 42;\n\n' |
- ' int c() => b();\n\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU - Block comments', () { |
- expectCUFormatsTo( |
- '/** Old school class comment */\n' |
- 'class C {\n' |
- ' /** Foo! */ int foo() => 42;\n' |
- '}\n', |
- '/** Old school class comment */\n' |
- 'class C {\n' |
- ' /** Foo! */\n' |
- ' int foo() => 42;\n' |
- '}\n' |
- ); |
- expectCUFormatsTo( |
- 'library foo;\n' |
- 'class C /* is cool */ {\n' |
- ' /* int */ foo() => 42;\n' |
- '}\n', |
- 'library foo;\n' |
- 'class C /* is cool */ {\n' |
- ' /* int */ foo() => 42;\n' |
- '}\n' |
- ); |
- expectCUFormatsTo( |
- 'library foo;\n' |
- '/* A long\n' |
- ' * Comment\n' |
- '*/\n' |
- 'class C /* is cool */ {\n' |
- ' /* int */ foo() => 42;\n' |
- '}\n', |
- 'library foo;\n' |
- '/* A long\n' |
- ' * Comment\n' |
- '*/\n' |
- 'class C /* is cool */ {\n' |
- ' /* int */ foo() => 42;\n' |
- '}\n' |
- ); |
- expectCUFormatsTo( |
- 'library foo;\n' |
- '/* A long\n' |
- ' * Comment\n' |
- '*/\n' |
- '\n' |
- '/* And\n' |
- ' * another...\n' |
- '*/\n' |
- '\n' |
- '// Mixing it up\n' |
- '\n' |
- 'class C /* is cool */ {\n' |
- ' /* int */ foo() => 42;\n' |
- '}\n', |
- 'library foo;\n' |
- '/* A long\n' |
- ' * Comment\n' |
- '*/\n' |
- '\n' |
- '/* And\n' |
- ' * another...\n' |
- '*/\n' |
- '\n' |
- '// Mixing it up\n' |
- '\n' |
- 'class C /* is cool */ {\n' |
- ' /* int */ foo() => 42;\n' |
- '}\n' |
- ); |
- expectCUFormatsTo( |
- '/// Copyright info\n' |
- '\n' |
- 'library foo;\n' |
- '/// Class comment\n' |
- '//TODO: implement\n' |
- 'class C {\n' |
- '}\n', |
- '/// Copyright info\n' |
- '\n' |
- 'library foo;\n' |
- '/// Class comment\n' |
- '//TODO: implement\n' |
- 'class C {\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU - mixed comments', () { |
- expectCUFormatsTo( |
- 'library foo;\n' |
- '\n' |
- '\n' |
- '/* Comment 1 */\n' |
- '\n' |
- '// Comment 2\n' |
- '\n' |
- '/* Comment 3 */', |
- 'library foo;\n' |
- '\n' |
- '\n' |
- '/* Comment 1 */\n' |
- '\n' |
- '// Comment 2\n' |
- '\n' |
- '/* Comment 3 */\n' |
- ); |
- }); |
- |
- test('CU - comments (EOF)', () { |
- expectCUFormatsTo( |
- 'library foo; //zamm', |
- 'library foo; //zamm\n' //<-- note extra NEWLINE |
- ); |
- }); |
- |
- test('CU - comments (0)', () { |
- expectCUFormatsTo( |
- 'library foo; //zamm\n' |
- '\n' |
- 'class A {\n' |
- '}\n', |
- 'library foo; //zamm\n' |
- '\n' |
- 'class A {\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU - comments (1)', () { |
- expectCUFormatsTo( |
- '/* foo */ /* bar */\n', |
- '/* foo */ /* bar */\n' |
- ); |
- }); |
- |
- test('CU - comments (2)', () { |
- expectCUFormatsTo( |
- '/** foo */ /** bar */\n', |
- '/** foo */\n' |
- '/** bar */\n' |
- ); |
- }); |
- |
- test('CU - comments (3)', () { |
- expectCUFormatsTo( |
- 'var x; //x\n', |
- 'var x; //x\n' |
- ); |
- }); |
- |
- test('CU - comments (4)', () { |
- expectCUFormatsTo( |
- 'class X { //X!\n' |
- '}', |
- 'class X { //X!\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU - comments (5)', () { |
- expectCUFormatsTo( |
- '//comment one\n\n' |
- '//comment two\n\n', |
- '//comment one\n\n' |
- '//comment two\n\n' |
- ); |
- }); |
- |
- test('CU - comments (6)', () { |
- expectCUFormatsTo( |
- 'var x; //x\n', |
- 'var x; //x\n' |
- ); |
- }); |
- |
- test('CU - comments (6)', () { |
- expectCUFormatsTo( |
- 'var /* int */ x; //x\n', |
- 'var /* int */ x; //x\n' |
- ); |
- }); |
- |
- test('CU - comments (7)', () { |
- expectCUFormatsTo( |
- 'library foo;\n' |
- '\n' |
- '/// Docs\n' |
- '/// spanning\n' |
- '/// lines.\n' |
- 'class A {\n' |
- '}\n' |
- '\n' |
- '/// ... and\n' |
- '\n' |
- '/// Dangling ones too\n' |
- 'int x;\n', |
- 'library foo;\n' |
- '\n' |
- '/// Docs\n' |
- '/// spanning\n' |
- '/// lines.\n' |
- 'class A {\n' |
- '}\n' |
- '\n' |
- '/// ... and\n' |
- '\n' |
- '/// Dangling ones too\n' |
- 'int x;\n' |
- ); |
- }); |
- |
- test('CU - EOF nl', () { |
- expectCUFormatsTo( |
- 'var x = 1;', |
- 'var x = 1;\n' |
- ); |
- }); |
- |
- test('CU - constructor', () { |
- expectCUFormatsTo( |
- 'class A {\n' |
- ' const _a;\n' |
- ' A();\n' |
- ' int a() => _a;\n' |
- '}\n', |
- 'class A {\n' |
- ' const _a;\n' |
- ' A();\n' |
- ' int a() => _a;\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU - method decl w/ named params', () { |
- expectCUFormatsTo( |
- 'class A {\n' |
- ' int a(var x, {optional: null}) => null;\n' |
- '}\n', |
- 'class A {\n' |
- ' int a(var x, {optional: null}) => null;\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU - method decl w/ optional params', () { |
- expectCUFormatsTo( |
- 'class A {\n' |
- ' int a(var x, [optional = null]) => null;\n' |
- '}\n', |
- 'class A {\n' |
- ' int a(var x, [optional = null]) => null;\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU - factory constructor redirects', () { |
- expectCUFormatsTo( |
- 'class A {\n' |
- ' const factory A() = B;\n' |
- '}\n', |
- 'class A {\n' |
- ' const factory A() = B;\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU - constructor initializers', () { |
- expectCUFormatsTo( |
- 'class A {\n' |
- ' int _a;\n' |
- ' A(a) : _a = a;\n' |
- '}\n', |
- 'class A {\n' |
- ' int _a;\n' |
- ' A(a)\n' |
- ' : _a = a;\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU - constructor auto field inits', () { |
- expectCUFormatsTo( |
- 'class A {\n' |
- ' int _a;\n' |
- ' A(this._a);\n' |
- '}\n', |
- 'class A {\n' |
- ' int _a;\n' |
- ' A(this._a);\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU - parts', () { |
- expectCUFormatsTo( |
- 'part of foo;', |
- 'part of foo;\n' |
- ); |
- }); |
- |
- test('CU (cons inits)', () { |
- expectCUFormatsTo('class X {\n' |
- ' var x, y;\n' |
- ' X() : x = 1, y = 2;\n' |
- '}\n', |
- 'class X {\n' |
- ' var x, y;\n' |
- ' X()\n' |
- ' : x = 1,\n' |
- ' y = 2;\n' |
- '}\n' |
- ); |
- }); |
- |
- test('CU (empty cons bodies)', () { |
- expectCUFormatsTo( |
- 'class A {\n' |
- ' A() {\n' |
- ' }\n' |
- '}\n', |
- 'class A {\n' |
- ' A();\n' |
- '}\n', |
- transforms: true |
- ); |
- expectCUFormatsTo( |
- 'class A {\n' |
- ' A() {\n' |
- ' }\n' |
- '}\n', |
- 'class A {\n' |
- ' A() {\n' |
- ' }\n' |
- '}\n', |
- transforms: false |
- ); |
- }); |
- |
- test('stmt', () { |
- expectStmtFormatsTo( |
- 'if (true){\n' |
- 'if (true){\n' |
- 'if (true){\n' |
- 'return true;\n' |
- '} else{\n' |
- 'return false;\n' |
- '}\n' |
- '}\n' |
- '}else{\n' |
- 'return false;\n' |
- '}', |
- 'if (true) {\n' |
- ' if (true) {\n' |
- ' if (true) {\n' |
- ' return true;\n' |
- ' } else {\n' |
- ' return false;\n' |
- ' }\n' |
- ' }\n' |
- '} else {\n' |
- ' return false;\n' |
- '}' |
- ); |
- }); |
- |
- test('stmt (switch)', () { |
- expectStmtFormatsTo( |
- 'switch (fruit) {\n' |
- 'case "apple":\n' |
- 'print("delish");\n' |
- 'break;\n' |
- 'case "fig":\n' |
- 'print("bleh");\n' |
- 'break;\n' |
- '}', |
- 'switch (fruit) {\n' |
- ' case "apple":\n' |
- ' print("delish");\n' |
- ' break;\n' |
- ' case "fig":\n' |
- ' print("bleh");\n' |
- ' break;\n' |
- '}' |
- ); |
- }); |
- |
- test('stmt (cascades)', () { |
- expectStmtFormatsTo( |
- '"foo"\n' |
- '..toString()\n' |
- '..toString();', |
- '"foo"\n' |
- ' ..toString()\n' |
- ' ..toString();' |
- ); |
- }); |
- |
- test('stmt (generics)', () { |
- expectStmtFormatsTo( |
- 'var numbers = <int>[1, 2, (3 + 4)];', |
- 'var numbers = <int>[1, 2, (3 + 4)];' |
- ); |
- }); |
- |
- test('stmt (lists)', () { |
- expectStmtFormatsTo( |
- 'var l = [1,2,3,4];', |
- 'var l = [1, 2, 3, 4];' |
- ); |
- //Dangling ',' |
- expectStmtFormatsTo( |
- 'var l = [1,];', |
- 'var l = [1,];' |
- ); |
- }); |
- |
- test('stmt (maps)', () { |
- expectStmtFormatsTo( |
- 'var map = const {"foo": "bar", "fuz": null};', |
- 'var map = const {"foo": "bar", "fuz": null};' |
- ); |
- |
- //Dangling ',' |
- expectStmtFormatsTo( |
- 'var map = {"foo": "bar",};', |
- 'var map = {"foo": "bar",};' |
- ); |
- }); |
- |
- test('stmt (try/catch)', () { |
- expectStmtFormatsTo( |
- 'try {\n' |
- 'doSomething();\n' |
- '} catch (e) {\n' |
- 'print(e);\n' |
- '}', |
- 'try {\n' |
- ' doSomething();\n' |
- '} catch (e) {\n' |
- ' print(e);\n' |
- '}' |
- ); |
- }); |
- |
- test('stmt (binary/ternary ops)', () { |
- expectStmtFormatsTo( |
- 'var a = 1 + 2 / (3 * -b);', |
- 'var a = 1 + 2 / (3 * -b);' |
- ); |
- expectStmtFormatsTo( |
- 'var c = !condition == a > b;', |
- 'var c = !condition == a > b;' |
- ); |
- expectStmtFormatsTo( |
- 'var d = condition ? b : object.method(a, b, c);', |
- 'var d = condition ? b : object.method(a, b, c);' |
- ); |
- expectStmtFormatsTo( |
- 'var d = obj is! SomeType;', |
- 'var d = obj is! SomeType;' |
- ); |
- }); |
- |
- test('stmt (for in)', () { |
- expectStmtFormatsTo( |
- 'for (Foo foo in bar.foos) {\n' |
- ' print(foo);\n' |
- '}', |
- 'for (Foo foo in bar.foos) {\n' |
- ' print(foo);\n' |
- '}' |
- ); |
- expectStmtFormatsTo( |
- 'for (final Foo foo in bar.foos) {\n' |
- ' print(foo);\n' |
- '}', |
- 'for (final Foo foo in bar.foos) {\n' |
- ' print(foo);\n' |
- '}' |
- ); |
- expectStmtFormatsTo( |
- 'for (final foo in bar.foos) {\n' |
- ' print(foo);\n' |
- '}', |
- 'for (final foo in bar.foos) {\n' |
- ' print(foo);\n' |
- '}' |
- ); |
- }); |
- |
- test('Statement (if)', () { |
- expectStmtFormatsTo('if (true) print("true!");', |
- 'if (true) print("true!");'); |
- expectStmtFormatsTo('if (true) { print("true!"); }', |
- 'if (true) {\n' |
- ' print("true!");\n' |
- '}'); |
- expectStmtFormatsTo('if (true) print("true!"); else print("false!");', |
- 'if (true) {\n' |
- ' print("true!");\n' |
- '} else {\n' |
- ' print("false!");\n' |
- '}'); |
- expectStmtFormatsTo('if (true) print("true!"); else print("false!");', |
- 'if (true) print("true!"); else print("false!");', |
- transforms: false); |
- }); |
- |
- test('initialIndent', () { |
- var formatter = new CodeFormatter( |
- new FormatterOptions(initialIndentationLevel: 2)); |
- var formattedSource = |
- formatter.format(CodeKind.STATEMENT, 'var x;').source; |
- expect(formattedSource, startsWith(' ')); |
- }); |
- |
- test('selections', () { |
- expectSelectedPostFormat('class X {}', '}'); |
- expectSelectedPostFormat('class X{}', '{'); |
- expectSelectedPostFormat('class X{int y;}', ';'); |
- expectSelectedPostFormat('class X{int y;}', '}'); |
- expectSelectedPostFormat('class X {}', ' {'); |
- }); |
- |
- }); |
- |
- |
- /// Token streams |
- group('token streams', () { |
- |
- test('string tokens', () { |
- expectTokenizedEqual('class A{}', 'class A{ }'); |
- expectTokenizedEqual('class A{}', 'class A{\n }\n'); |
- expectTokenizedEqual('class A {}', 'class A{ }'); |
- expectTokenizedEqual(' class A {}', 'class A{ }'); |
- }); |
- |
- test('string tokens - w/ comments', () { |
- expectTokenizedEqual('//foo\nint bar;', '//foo\nint bar;'); |
- expectTokenizedNotEqual('int bar;', '//foo\nint bar;'); |
- expectTokenizedNotEqual('//foo\nint bar;', 'int bar;'); |
- }); |
- |
- test('INDEX', () { |
- /// '[' ']' => '[]' |
- var t1 = openSqBracket()..setNext(closeSqBracket()..setNext(eof())); |
- var t2 = index()..setNext(eof()); |
- expectStreamsEqual(t1, t2); |
- }); |
- |
- test('GT_GT', () { |
- /// '>' '>' => '>>' |
- var t1 = gt()..setNext(gt()..setNext(eof())); |
- var t2 = gt_gt()..setNext(eof()); |
- expectStreamsEqual(t1, t2); |
- }); |
- |
- test('t1 < t2', () { |
- var t1 = string('foo')..setNext(eof()); |
- var t2 = string('foo')..setNext(string('bar')..setNext(eof())); |
- expectStreamsNotEqual(t1, t2); |
- }); |
- |
- test('t1 > t2', () { |
- var t1 = string('foo')..setNext(string('bar')..setNext(eof())); |
- var t2 = string('foo')..setNext(eof()); |
- expectStreamsNotEqual(t1, t2); |
- }); |
- |
- }); |
- |
- |
- /// Line tests |
- group('line', () { |
- |
- test('space', () { |
- var line = new Line(indent: 0); |
- line.addSpaces(2); |
- expect(line.toString(), equals(' ')); |
- }); |
- |
- test('initial indent', () { |
- var line = new Line(indent: 2); |
- expect(line.toString(), equals(' ')); |
- }); |
- |
- test('initial indent (tabbed)', () { |
- var line = new Line(indent:1, useTabs: true); |
- expect(line.toString(), equals('\t')); |
- }); |
- |
- test('addToken', () { |
- var line = new Line(); |
- line.addToken(new LineToken('foo')); |
- expect(line.toString(), equals('foo')); |
- }); |
- |
- test('addToken (2)', () { |
- var line = new Line(indent: 1); |
- line.addToken(new LineToken('foo')); |
- expect(line.toString(), equals(' foo')); |
- }); |
- |
- test('isWhitespace', () { |
- var line = new Line(indent: 1); |
- expect(line.isWhitespace(), isTrue); |
- }); |
- |
- }); |
- |
- |
- /// Writer tests |
- group('writer', () { |
- |
- test('basic print', () { |
- var writer = new SourceWriter(); |
- writer.print('foo'); |
- writer.print(' '); |
- writer.print('bar'); |
- expect(writer.toString(), equals('foo bar')); |
- }); |
- |
- test('newline', () { |
- var writer = new SourceWriter(); |
- writer.print('foo'); |
- writer.newline(); |
- expect(writer.toString(), equals('foo\n')); |
- }); |
- |
- test('newline trims whitespace', () { |
- var writer = new SourceWriter(indentCount:2); |
- writer.newline(); |
- expect(writer.toString(), equals('\n')); |
- }); |
- |
- test('basic print (with indents)', () { |
- var writer = new SourceWriter(); |
- writer.print('foo'); |
- writer.indent(); |
- writer.newline(); |
- writer.print('bar'); |
- writer.unindent(); |
- writer.newline(); |
- writer.print('baz'); |
- expect(writer.toString(), equals('foo\n bar\nbaz')); |
- }); |
- |
- }); |
- |
- |
- /// Helper method tests |
- group('helpers', () { |
- |
- test('indentString', () { |
- expect(getIndentString(0), ''); |
- expect(getIndentString(1), ' '); |
- expect(getIndentString(4), ' '); |
- }); |
- |
- test('indentString (tabbed)', () { |
- expect(getIndentString(0, useTabs: true), ''); |
- expect(getIndentString(1, useTabs: true), '\t'); |
- expect(getIndentString(3, useTabs: true), '\t\t\t'); |
- }); |
- |
- test('repeat', () { |
- expect(repeat('x', 0), ''); |
- expect(repeat('x', 1), 'x'); |
- expect(repeat('x', 4), 'xxxx'); |
- }); |
- |
- }); |
- |
-} |
- |
-Token closeSqBracket() => new Token(TokenType.CLOSE_SQUARE_BRACKET, 0); |
- |
-Token eof() => new Token(TokenType.EOF, 0); |
- |
-Token gt() => new Token(TokenType.GT, 0); |
- |
-Token gt_gt() => new Token(TokenType.GT_GT, 0); |
- |
-Token index() => new Token(TokenType.INDEX, 0); |
- |
-Token openSqBracket() => new BeginToken(TokenType.OPEN_SQUARE_BRACKET, 0); |
- |
-Token string(String lexeme) => new StringToken(TokenType.STRING, lexeme, 0); |
- |
-Token classKeyword(int offset) => new KeywordToken(Keyword.CLASS, offset); |
- |
-Token identifier(String value, int offset) => |
- new StringToken(TokenType.IDENTIFIER, value, offset); |
- |
-Token openParen(int offset) => |
- new StringToken(TokenType.OPEN_PAREN, '{', offset); |
- |
-Token closeParen(int offset) => |
- new StringToken(TokenType.CLOSE_PAREN, '}', offset); |
- |
-Token chain(List<Token> tokens) { |
- for (var i = 0; i < tokens.length - 1; ++i) { |
- tokens[i].setNext(tokens[i + 1]); |
- } |
- return tokens[0]; |
-} |
- |
-FormattedSource formatCU(src, {options: const FormatterOptions(), selection}) => |
- new CodeFormatter(options).format( |
- CodeKind.COMPILATION_UNIT, src, selection: selection); |
- |
-String formatStatement(src, {options: const FormatterOptions()}) => |
- new CodeFormatter(options).format(CodeKind.STATEMENT, src).source; |
- |
-Token tokenize(String str) { |
- var reader = new CharSequenceReader(new CharSequence(str)); |
- return new Scanner(null, reader, null).tokenize(); |
-} |
- |
-expectSelectedPostFormat(src, token) { |
- var preOffset = src.indexOf(token); |
- var length = token.length; |
- var formatted = formatCU(src, selection: new Selection(preOffset, length)); |
- var postOffset = formatted.selection.offset; |
- expect(formatted.source.substring(postOffset, postOffset + length), |
- equals(src.substring(preOffset, preOffset + length))); |
-} |
- |
-expectTokenizedEqual(String s1, String s2) => |
- expectStreamsEqual(tokenize(s1), tokenize(s2)); |
- |
-expectTokenizedNotEqual(String s1, String s2) => |
- expect(()=> expectStreamsEqual(tokenize(s1), tokenize(s2)), |
- throwsA(new isInstanceOf<FormatterException>())); |
- |
-expectStreamsEqual(Token t1, Token t2) => |
- new TokenStreamComparator(null, t1, t2).verifyEquals(); |
- |
-expectStreamsNotEqual(Token t1, Token t2) => |
- expect(() => new TokenStreamComparator(null, t1, t2).verifyEquals(), |
- throwsA(new isInstanceOf<FormatterException>())); |
- |
-expectCUFormatsTo(src, expected, {transforms: true}) => |
- expect(formatCU(src, options: new FormatterOptions( |
- codeTransforms: transforms)).source, equals(expected)); |
- |
-expectStmtFormatsTo(src, expected, {transforms: true}) => |
- expect(formatStatement(src, options: |
- new FormatterOptions(codeTransforms: transforms)), equals(expected)); |