| // Copyright (c) 2014, 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. |
| |
| /// Test data for the end2end test. |
| library test.end2end.data; |
| |
| import 'test_helper.dart'; |
| |
| class TestSpec extends TestSpecBase { |
| final String output; |
| |
| const TestSpec(String input, [String output]) |
| : this.output = output != null ? output : input, |
| super(input); |
| } |
| |
| const List<Group> TEST_DATA = const <Group>[ |
| const Group('Empty main', const <TestSpec>[ |
| const TestSpec(''' |
| main() {} |
| '''), |
| |
| const TestSpec(''' |
| main() {} |
| foo() {} |
| ''', ''' |
| main() {} |
| '''), |
| ]), |
| const Group('Simple call-chains', const <TestSpec>[ |
| const TestSpec(''' |
| foo() {} |
| main() { |
| foo(); |
| } |
| '''), |
| |
| const TestSpec(''' |
| bar() {} |
| foo() { |
| bar(); |
| } |
| main() { |
| foo(); |
| } |
| '''), |
| |
| const TestSpec(''' |
| bar() { |
| main(); |
| } |
| foo() { |
| bar(); |
| } |
| main() { |
| foo(); |
| } |
| '''), |
| |
| ]), |
| const Group('Literals', const <TestSpec>[ |
| const TestSpec(''' |
| main() { |
| return 0; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main() { |
| return 1.5; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main() { |
| return true; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main() { |
| return false; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main() { |
| return "a"; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main() { |
| return "a" "b"; |
| } |
| ''', ''' |
| main() { |
| return "ab"; |
| } |
| '''), |
| ]), |
| |
| const Group('Parameters', const <TestSpec>[ |
| const TestSpec(''' |
| main(args) {} |
| '''), |
| |
| const TestSpec(''' |
| main(a, b) {} |
| '''), |
| ]), |
| |
| const Group('Typed parameters', const <TestSpec>[ |
| const TestSpec(''' |
| void main(args) {} |
| '''), |
| |
| const TestSpec(''' |
| main(int a, String b) {} |
| '''), |
| |
| const TestSpec(''' |
| main(Comparator a, List b) {} |
| '''), |
| |
| const TestSpec(''' |
| main(Comparator<dynamic> a, List<dynamic> b) {} |
| ''',''' |
| main(Comparator a, List b) {} |
| '''), |
| |
| const TestSpec(''' |
| main(Map a, Map<dynamic, List<int>> b) {} |
| '''), |
| ]), |
| |
| const Group('Pass arguments', const <TestSpec>[ |
| const TestSpec(''' |
| foo(a) {} |
| main() { |
| foo(null); |
| } |
| '''), |
| |
| const TestSpec(''' |
| bar(b, c) {} |
| foo(a) {} |
| main() { |
| foo(null); |
| bar(0, ""); |
| } |
| '''), |
| |
| const TestSpec(''' |
| bar(b) {} |
| foo(a) { |
| bar(a); |
| } |
| main() { |
| foo(null); |
| } |
| '''), |
| ]), |
| |
| const Group('Top level field', const <TestSpec>[ |
| const TestSpec(''' |
| main(args) { |
| return deprecated; |
| } |
| '''), |
| |
| const TestSpec(''' |
| var field; |
| main(args) { |
| return field; |
| } |
| '''), |
| |
| // TODO(johnniwinther): Eliminate unneeded `null` initializers. |
| const TestSpec(''' |
| var field = null; |
| main(args) { |
| return field; |
| } |
| '''), |
| |
| const TestSpec(''' |
| var field = 0; |
| main(args) { |
| return field; |
| } |
| '''), |
| |
| const TestSpec(''' |
| var field; |
| main(args) { |
| field = args.length; |
| return field; |
| } |
| '''), |
| ]), |
| |
| const Group('Local variables', const <TestSpec>[ |
| const TestSpec(''' |
| main() { |
| var a; |
| return a; |
| } |
| ''',''' |
| main() {} |
| '''), |
| |
| const TestSpec(''' |
| main() { |
| var a = 0; |
| return a; |
| } |
| ''',''' |
| main() { |
| return 0; |
| } |
| '''), |
| ]), |
| |
| const Group('Local variable writes', const <TestSpec>[ |
| const TestSpec(''' |
| main() { |
| var a; |
| a = 10; |
| return a; |
| } |
| ''', ''' |
| main() { |
| return 10; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main() { |
| var a = 0; |
| a = 10; |
| return a; |
| } |
| ''', ''' |
| main() { |
| return 10; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main() { |
| var a = 0; |
| print(a); |
| a = ""; |
| print(a); |
| return a; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| print(a); |
| a = ""; |
| print(a); |
| return a; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| if (a) { |
| a = ""; |
| } |
| print(a); |
| return a; |
| } |
| '''), |
| ]), |
| |
| const Group('Dynamic access', const <TestSpec>[ |
| const TestSpec(''' |
| main(a) { |
| return a.foo; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main() { |
| var a = ""; |
| return a.foo; |
| } |
| ''',''' |
| main() { |
| return "".foo; |
| } |
| '''), |
| ]), |
| |
| const Group('Dynamic invocation', const <TestSpec>[ |
| const TestSpec(''' |
| main(a) { |
| return a.foo(0); |
| } |
| '''), |
| |
| const TestSpec(''' |
| main() { |
| var a = ""; |
| return a.foo(0, 1); |
| } |
| ''',''' |
| main() { |
| return "".foo(0, 1); |
| } |
| '''), |
| ]), |
| |
| const Group('Binary expressions', const <TestSpec>[ |
| const TestSpec(''' |
| main(a) { |
| return a + deprecated; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return a - deprecated; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return a * deprecated; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return a / deprecated; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return a ~/ deprecated; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return a % deprecated; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return a < deprecated; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return a <= deprecated; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return a > deprecated; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return a >= deprecated; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return a << deprecated; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return a >> deprecated; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return a & deprecated; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return a | deprecated; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return a ^ deprecated; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return a == deprecated; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return a != deprecated; |
| } |
| ''',''' |
| main(a) { |
| return !(a == deprecated); |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return a && deprecated; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return a || deprecated; |
| } |
| '''), |
| ]), |
| |
| const Group('If statement', const <TestSpec>[ |
| const TestSpec(''' |
| main(a) { |
| if (a) { |
| print(0); |
| } |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| if (a) { |
| print(0); |
| } else { |
| print(1); |
| } |
| } |
| ''',''' |
| main(a) { |
| a ? print(0) : print(1); |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| if (a) { |
| print(0); |
| } else { |
| print(1); |
| print(2); |
| } |
| } |
| '''), |
| ]), |
| |
| const Group('Conditional expression', const <TestSpec>[ |
| const TestSpec(''' |
| main(a) { |
| return a ? print(0) : print(1); |
| } |
| '''), |
| ]), |
| |
| // These test that unreachable statements are skipped within a block. |
| const Group('Block statements', const <TestSpec>[ |
| const TestSpec(''' |
| main(a) { |
| return 0; |
| return 1; |
| } |
| ''', ''' |
| main(a) { |
| return 0; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| if (a) { |
| return 0; |
| return 1; |
| } else { |
| return 2; |
| return 3; |
| } |
| } |
| ''', ''' |
| main(a) { |
| return a ? 0 : 2; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| if (a) { |
| print(0); |
| return 0; |
| return 1; |
| } else { |
| print(2); |
| return 2; |
| return 3; |
| } |
| } |
| ''', ''' |
| main(a) { |
| if (a) { |
| print(0); |
| return 0; |
| } else { |
| print(2); |
| return 2; |
| } |
| } |
| '''), |
| ]), |
| |
| const Group('List literal', const <TestSpec>[ |
| const TestSpec(''' |
| main() { |
| return []; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main() { |
| return <int>[]; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main() { |
| return <int>[0]; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return <int>[0, 1, a]; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return [0, [1], [a, <int>[3]]]; |
| } |
| '''), |
| ]), |
| |
| const Group('Constructor invocation', const <TestSpec>[ |
| const TestSpec(''' |
| main(a) { |
| new Object(); |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| new Deprecated(""); |
| } |
| '''), |
| ]), |
| |
| const Group('Map literal', const <TestSpec>[ |
| const TestSpec(''' |
| main() { |
| return {}; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main() { |
| return <int, String>{}; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main() { |
| return <String, int>{"a": 0}; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return <String, int>{"a": 0, "b": 1, "c": a}; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return {0: "a", 1: {2: "b"}, a: {3: "c"}}; |
| } |
| '''), |
| ]), |
| const Group('For loop', const <TestSpec>[ |
| const TestSpec(''' |
| main() { |
| for (;;) {} |
| } |
| ''', ''' |
| main() { |
| while (true) {} |
| } |
| '''), |
| |
| const TestSpec(''' |
| main() { |
| for (var i = 0; i < 10; i = i + 1) { |
| print(i); |
| } |
| } |
| ''', ''' |
| main() { |
| var i = 0; |
| while (i < 10) { |
| print(i); |
| ++i; |
| } |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(i) { |
| for (i = 0; i < 10; i = i + 1) { |
| print(i); |
| } |
| } |
| ''', ''' |
| main(i) { |
| i = 0; |
| while (i < 10) { |
| print(i); |
| ++i; |
| } |
| } |
| '''), |
| ]), |
| |
| const Group('While loop', const <TestSpec>[ |
| const TestSpec(''' |
| main() { |
| while (true) {} |
| } |
| '''), |
| |
| const TestSpec(''' |
| main() { |
| var i = 0; |
| while (i < 10) { |
| print(i); |
| i = i + 1; |
| } |
| }''', ''' |
| main() { |
| var i = 0; |
| while (i < 10) { |
| print(i); |
| ++i; |
| } |
| }'''), |
| ]), |
| |
| const Group('Type operators', const <TestSpec>[ |
| const TestSpec(''' |
| main(a) { |
| return a is String; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return a is List<String>; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return a is Comparator<String>; |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return a is! String; |
| } |
| ''', ''' |
| main(a) { |
| return !(a is String); |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return a as String; |
| } |
| '''), |
| ]), |
| |
| const Group('For in loop', const <TestSpec>[ |
| // TODO(johnniwinther): Add tests for `i` as top-level, static and instance |
| // fields. |
| const TestSpec(''' |
| main(a) { |
| for (var i in a) { |
| print(i); |
| } |
| } |
| ''', ''' |
| main(a) { |
| var v0 = a.iterator; |
| while (v0.moveNext()) { |
| print(v0.current); |
| } |
| }'''), |
| |
| const TestSpec(''' |
| main(a) { |
| for (var i in a) { |
| print(i); |
| i = 0; |
| print(i); |
| } |
| } |
| ''', ''' |
| main(a) { |
| var v0 = a.iterator, i; |
| while (v0.moveNext()) { |
| i = v0.current; |
| print(i); |
| i = 0; |
| print(i); |
| } |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| var i; |
| for (i in a) { |
| print(i); |
| } |
| } |
| ''', ''' |
| main(a) { |
| var v0 = a.iterator; |
| while (v0.moveNext()) { |
| print(v0.current); |
| } |
| } |
| '''), |
| ]), |
| |
| const Group('Local functions', const <TestSpec>[ |
| const TestSpec(''' |
| main(a) { |
| local() {} |
| return local(); |
| } |
| ''', ''' |
| main(a) { |
| return (() {})(); |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| local() {} |
| var l = local; |
| return l(); |
| } |
| ''', ''' |
| main(a) { |
| return (() {})(); |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| return () {}(); |
| } |
| ''', ''' |
| main(a) { |
| return (() {})(); |
| } |
| '''), |
| |
| const TestSpec(''' |
| main(a) { |
| var c = a ? () { return 0; } : () { return 1; }; |
| return c(); |
| } |
| ''', ''' |
| main(a) { |
| return (a ? () { |
| return 0; |
| } : () { |
| return 1; |
| })(); |
| } |
| '''), |
| ]), |
| |
| const Group('Constructors', const <TestSpec>[ |
| const TestSpec(''' |
| class C {} |
| main() { |
| return new C(); |
| } |
| '''), |
| |
| const TestSpec(''' |
| class C { |
| C() {} |
| } |
| main() { |
| return new C(); |
| } |
| '''), |
| |
| const TestSpec(''' |
| class B {} |
| class C extends B { |
| C() {} |
| } |
| main() { |
| return new C(); |
| } |
| '''), |
| |
| const TestSpec(''' |
| class B { |
| B() {} |
| } |
| class C extends B {} |
| main() { |
| return new C(); |
| } |
| '''), |
| ]), |
| |
| const Group('Instance method', const <TestSpec>[ |
| const TestSpec(''' |
| class C { |
| C() {} |
| foo() {} |
| } |
| main() { |
| return new C().foo(); |
| } |
| '''), |
| ]), |
| ]; |