Index: tests/compiler/dart2js/type_representation_test.dart |
diff --git a/tests/compiler/dart2js/type_representation_test.dart b/tests/compiler/dart2js/type_representation_test.dart |
index 8c651f697d756b5dbb32802c55921be6c39112c7..5e6b7c5e2885ebd95e1c949c08a5d55b3214f2a3 100644 |
--- a/tests/compiler/dart2js/type_representation_test.dart |
+++ b/tests/compiler/dart2js/type_representation_test.dart |
@@ -5,6 +5,7 @@ |
library subtype_test; |
import 'package:expect/expect.dart'; |
+import "package:async_helper/async_helper.dart"; |
import 'type_test_helper.dart'; |
import '../../../sdk/lib/_internal/compiler/implementation/dart_types.dart'; |
import '../../../sdk/lib/_internal/compiler/implementation/js/js.dart'; |
@@ -18,7 +19,7 @@ void main() { |
} |
void testTypeRepresentations() { |
- var env = new TypeEnvironment(r""" |
+ asyncTest(() => TypeEnvironment.create(r""" |
typedef void Typedef(); |
void m1() {} |
@@ -31,133 +32,133 @@ void testTypeRepresentations() { |
m8(int a, {String b}) {} |
m9(int a, String b, {List<int> c, d}) {} |
m10(void f(int a, [b])) {} |
- """); |
- |
- TypeRepresentationGenerator typeRepresentation = |
- new TypeRepresentationGenerator(env.compiler); |
- |
- Expression onVariable(TypeVariableType variable) { |
- return new VariableUse(variable.name.slowToString()); |
- } |
- |
- String stringify(Expression expression) { |
- return prettyPrint(expression, env.compiler).buffer.toString(); |
- } |
- |
- void expect(String expectedRepresentation, DartType type) { |
- Expression expression = |
- typeRepresentation.getTypeRepresentation(type, onVariable); |
- Expect.stringEquals(expectedRepresentation, stringify(expression)); |
- } |
- |
- String getJsName(ClassElement cls) { |
- Expression name = typeRepresentation.getJavaScriptClassName(cls); |
- return stringify(name); |
- } |
- |
- JavaScriptBackend backend = env.compiler.backend; |
- String func = backend.namer.functionTypeTag(); |
- String retvoid = backend.namer.functionTypeVoidReturnTag(); |
- String ret = backend.namer.functionTypeReturnTypeTag(); |
- String args = backend.namer.functionTypeRequiredParametersTag(); |
- String opt = backend.namer.functionTypeOptionalParametersTag(); |
- String named = backend.namer.functionTypeNamedParametersTag(); |
- |
- ClassElement List_ = env.getElement('List'); |
- TypeVariableType List_E = List_.typeVariables.head; |
- ClassElement Map_ = env.getElement('Map'); |
- TypeVariableType Map_K = Map_.typeVariables.head; |
- TypeVariableType Map_V = Map_.typeVariables.tail.head; |
- |
- DartType Object_ = env['Object']; |
- DartType int_ = env['int']; |
- DartType String_ = env['String']; |
- DartType dynamic_ = env['dynamic']; |
- DartType Typedef_ = env['Typedef']; |
- |
- String List_rep = getJsName(List_); |
- String List_E_rep = stringify(onVariable(List_E)); |
- String Map_rep = getJsName(Map_); |
- String Map_K_rep = stringify(onVariable(Map_K)); |
- String Map_V_rep = stringify(onVariable(Map_V)); |
- |
- String Object_rep = getJsName(Object_.element); |
- String int_rep = getJsName(int_.element); |
- String String_rep = getJsName(String_.element); |
- |
- expect('$int_rep', int_); |
- expect('$String_rep', String_); |
- expect('null', dynamic_); |
- |
- // List<E> |
- expect('[$List_rep, $List_E_rep]', List_.computeType(env.compiler)); |
- // List |
- expect('$List_rep', List_.rawType); |
- // List<dynamic> |
- expect('[$List_rep, null]', instantiate(List_, [dynamic_])); |
- // List<int> |
- expect('[$List_rep, $int_rep]', instantiate(List_, [int_])); |
- // List<Typedef> |
- expect('[$List_rep, {$func: "void_", $retvoid: true}]', |
- instantiate(List_, [Typedef_])); |
- |
- // Map<K,V> |
- expect('[$Map_rep, $Map_K_rep, $Map_V_rep]', Map_.computeType(env.compiler)); |
- // Map |
- expect('$Map_rep', Map_.rawType); |
- // Map<dynamic,dynamic> |
- expect('[$Map_rep, null, null]', instantiate(Map_, [dynamic_, dynamic_])); |
- // Map<int,String> |
- expect('[$Map_rep, $int_rep, $String_rep]', |
- instantiate(Map_, [int_, String_])); |
- |
- // void m1() {} |
- expect('{$func: "void_", $retvoid: true}', |
- env.getElement('m1').computeType(env.compiler)); |
- |
- // int m2() => 0; |
- expect('{$func: "int_", $ret: $int_rep}', |
- env.getElement('m2').computeType(env.compiler)); |
- |
- // List<int> m3() => null; |
- expect('{$func: "List_", $ret: [$List_rep, $int_rep]}', |
- env.getElement('m3').computeType(env.compiler)); |
- |
- // m4() {} |
- expect('{$func: "args0"}', |
- env.getElement('m4').computeType(env.compiler)); |
- |
- // m5(int a, String b) {} |
- expect('{$func: "dynamic__int_String", $args: [$int_rep, $String_rep]}', |
- env.getElement('m5').computeType(env.compiler)); |
- |
- // m6(int a, [String b]) {} |
- expect('{$func: "dynamic__int__String", $args: [$int_rep],' |
- ' $opt: [$String_rep]}', |
- env.getElement('m6').computeType(env.compiler)); |
- |
- // m7(int a, String b, [List<int> c, d]) {} |
- expect('{$func: "dynamic__int_String__List_dynamic",' |
- ' $args: [$int_rep, $String_rep],' |
- ' $opt: [[$List_rep, $int_rep], null]}', |
- env.getElement('m7').computeType(env.compiler)); |
- |
- // m8(int a, {String b}) {} |
- expect('{$func: "dynamic__int__String0",' |
- ' $args: [$int_rep], $named: {b: $String_rep}}', |
- env.getElement('m8').computeType(env.compiler)); |
- |
- // m9(int a, String b, {List<int> c, d}) {} |
- expect('{$func: "dynamic__int_String__List_dynamic0",' |
- ' $args: [$int_rep, $String_rep],' |
- ' $named: {c: [$List_rep, $int_rep], d: null}}', |
- env.getElement('m9').computeType(env.compiler)); |
- |
- // m10(void f(int a, [b])) {} |
- expect('{$func: "dynamic__void__int__dynamic", $args:' |
- ' [{$func: "void__int__dynamic",' |
- ' $retvoid: true, $args: [$int_rep], $opt: [null]}]}', |
- env.getElement('m10').computeType(env.compiler)); |
+ """).then((env) { |
+ TypeRepresentationGenerator typeRepresentation = |
+ new TypeRepresentationGenerator(env.compiler); |
+ |
+ Expression onVariable(TypeVariableType variable) { |
+ return new VariableUse(variable.name.slowToString()); |
+ } |
+ |
+ String stringify(Expression expression) { |
+ return prettyPrint(expression, env.compiler).buffer.toString(); |
+ } |
+ |
+ void expect(String expectedRepresentation, DartType type) { |
+ Expression expression = |
+ typeRepresentation.getTypeRepresentation(type, onVariable); |
+ Expect.stringEquals(expectedRepresentation, stringify(expression)); |
+ } |
+ |
+ String getJsName(ClassElement cls) { |
+ Expression name = typeRepresentation.getJavaScriptClassName(cls); |
+ return stringify(name); |
+ } |
+ |
+ JavaScriptBackend backend = env.compiler.backend; |
+ String func = backend.namer.functionTypeTag(); |
+ String retvoid = backend.namer.functionTypeVoidReturnTag(); |
+ String ret = backend.namer.functionTypeReturnTypeTag(); |
+ String args = backend.namer.functionTypeRequiredParametersTag(); |
+ String opt = backend.namer.functionTypeOptionalParametersTag(); |
+ String named = backend.namer.functionTypeNamedParametersTag(); |
+ |
+ ClassElement List_ = env.getElement('List'); |
+ TypeVariableType List_E = List_.typeVariables.head; |
+ ClassElement Map_ = env.getElement('Map'); |
+ TypeVariableType Map_K = Map_.typeVariables.head; |
+ TypeVariableType Map_V = Map_.typeVariables.tail.head; |
+ |
+ DartType Object_ = env['Object']; |
+ DartType int_ = env['int']; |
+ DartType String_ = env['String']; |
+ DartType dynamic_ = env['dynamic']; |
+ DartType Typedef_ = env['Typedef']; |
+ |
+ String List_rep = getJsName(List_); |
+ String List_E_rep = stringify(onVariable(List_E)); |
+ String Map_rep = getJsName(Map_); |
+ String Map_K_rep = stringify(onVariable(Map_K)); |
+ String Map_V_rep = stringify(onVariable(Map_V)); |
+ |
+ String Object_rep = getJsName(Object_.element); |
+ String int_rep = getJsName(int_.element); |
+ String String_rep = getJsName(String_.element); |
+ |
+ expect('$int_rep', int_); |
+ expect('$String_rep', String_); |
+ expect('null', dynamic_); |
+ |
+ // List<E> |
+ expect('[$List_rep, $List_E_rep]', List_.computeType(env.compiler)); |
+ // List |
+ expect('$List_rep', List_.rawType); |
+ // List<dynamic> |
+ expect('[$List_rep, null]', instantiate(List_, [dynamic_])); |
+ // List<int> |
+ expect('[$List_rep, $int_rep]', instantiate(List_, [int_])); |
+ // List<Typedef> |
+ expect('[$List_rep, {$func: "void_", $retvoid: true}]', |
+ instantiate(List_, [Typedef_])); |
+ |
+ // Map<K,V> |
+ expect('[$Map_rep, $Map_K_rep, $Map_V_rep]', Map_.computeType(env.compiler)); |
+ // Map |
+ expect('$Map_rep', Map_.rawType); |
+ // Map<dynamic,dynamic> |
+ expect('[$Map_rep, null, null]', instantiate(Map_, [dynamic_, dynamic_])); |
+ // Map<int,String> |
+ expect('[$Map_rep, $int_rep, $String_rep]', |
+ instantiate(Map_, [int_, String_])); |
+ |
+ // void m1() {} |
+ expect('{$func: "void_", $retvoid: true}', |
+ env.getElement('m1').computeType(env.compiler)); |
+ |
+ // int m2() => 0; |
+ expect('{$func: "int_", $ret: $int_rep}', |
+ env.getElement('m2').computeType(env.compiler)); |
+ |
+ // List<int> m3() => null; |
+ expect('{$func: "List_", $ret: [$List_rep, $int_rep]}', |
+ env.getElement('m3').computeType(env.compiler)); |
+ |
+ // m4() {} |
+ expect('{$func: "args0"}', |
+ env.getElement('m4').computeType(env.compiler)); |
+ |
+ // m5(int a, String b) {} |
+ expect('{$func: "dynamic__int_String", $args: [$int_rep, $String_rep]}', |
+ env.getElement('m5').computeType(env.compiler)); |
+ |
+ // m6(int a, [String b]) {} |
+ expect('{$func: "dynamic__int__String", $args: [$int_rep],' |
+ ' $opt: [$String_rep]}', |
+ env.getElement('m6').computeType(env.compiler)); |
+ |
+ // m7(int a, String b, [List<int> c, d]) {} |
+ expect('{$func: "dynamic__int_String__List_dynamic",' |
+ ' $args: [$int_rep, $String_rep],' |
+ ' $opt: [[$List_rep, $int_rep], null]}', |
+ env.getElement('m7').computeType(env.compiler)); |
+ |
+ // m8(int a, {String b}) {} |
+ expect('{$func: "dynamic__int__String0",' |
+ ' $args: [$int_rep], $named: {b: $String_rep}}', |
+ env.getElement('m8').computeType(env.compiler)); |
+ |
+ // m9(int a, String b, {List<int> c, d}) {} |
+ expect('{$func: "dynamic__int_String__List_dynamic0",' |
+ ' $args: [$int_rep, $String_rep],' |
+ ' $named: {c: [$List_rep, $int_rep], d: null}}', |
+ env.getElement('m9').computeType(env.compiler)); |
+ |
+ // m10(void f(int a, [b])) {} |
+ expect('{$func: "dynamic__void__int__dynamic", $args:' |
+ ' [{$func: "void__int__dynamic",' |
+ ' $retvoid: true, $args: [$int_rep], $opt: [null]}]}', |
+ env.getElement('m10').computeType(env.compiler)); |
+ })); |
} |