| Index: test/browser/runtime_tests.js
|
| diff --git a/test/browser/runtime_tests.js b/test/browser/runtime_tests.js
|
| index 67706b50672c0d189aaff98ecf83befac4227505..d7ab321c301774bdce328e1a12c7b4d6625769fb 100644
|
| --- a/test/browser/runtime_tests.js
|
| +++ b/test/browser/runtime_tests.js
|
| @@ -1052,6 +1052,109 @@ suite('subtyping', function() {
|
|
|
| });
|
|
|
| +suite('canonicalization', function() {
|
| + 'use strict';
|
| + let functionType = dart.functionType;
|
| + let definiteFunctionType = dart.definiteFunctionType;
|
| + let typedef = dart.typedef;
|
| + let generic = dart.generic;
|
| +
|
| + let Object = core.Object;
|
| + let String = core.String;
|
| + let int = core.int;
|
| + let dynamic = dart.dynamic;
|
| + let bottom = dart.bottom;
|
| + let Map = core.Map;
|
| + let Map$ = core.Map$;
|
| +
|
| + class A {}
|
| +
|
| + let AA$ = generic((T, U) => class AA extends core.Object {});
|
| + let AA = AA$();
|
| +
|
| + let Func2 = typedef('Func2', () => functionType(dynamic, [dynamic, dynamic]));
|
| +
|
| + let FuncG$ = generic((T, U) => typedef('FuncG', () => functionType(T, [T, U])))
|
| + let FuncG = FuncG$();
|
| +
|
| + test('base types', () => {
|
| + assert.equal(Object, Object);
|
| + assert.equal(String, String);
|
| + assert.equal(dynamic, dynamic);
|
| + });
|
| +
|
| + test('class types', () => {
|
| + assert.equal(A, A);
|
| + });
|
| +
|
| + test('generic class types', () => {
|
| + assert.equal(AA, AA);
|
| + assert.equal(AA, AA$(dynamic, dynamic));
|
| + assert.equal(AA$(dynamic, dynamic), AA$(dynamic, dynamic));
|
| + assert.equal(AA$(AA, Object), AA$(AA, Object));
|
| + assert.equal(Map, Map);
|
| + assert.equal(Map$(dynamic, dynamic), Map);
|
| + assert.equal(Map$(int, Map$(int, int)), Map$(int, Map$(int, int)));
|
| + });
|
| +
|
| + test('typedefs', () => {
|
| + assert.equal(Func2, Func2);
|
| + assert.equal(FuncG, FuncG$(dynamic, dynamic));
|
| + assert.equal(FuncG$(dynamic, dynamic), FuncG$(dynamic, dynamic));
|
| + assert.equal(FuncG$(String, Func2), FuncG$(String, Func2));
|
| + });
|
| +
|
| + test('function types', () => {
|
| + assert.equal(functionType(dynamic, [dynamic, dynamic]),
|
| + functionType(dynamic, [dynamic, dynamic]))
|
| +
|
| + assert.notEqual(definiteFunctionType(dynamic, [dynamic, dynamic]),
|
| + functionType(dynamic, [dynamic, dynamic]))
|
| +
|
| + assert.equal(functionType(dynamic, [dynamic, dynamic]),
|
| + functionType(dynamic, [bottom, bottom]))
|
| +
|
| + assert.equal(functionType(dynamic, [], [dynamic, dynamic]),
|
| + functionType(dynamic, [], [dynamic, dynamic]))
|
| +
|
| + assert.notEqual(definiteFunctionType(dynamic, [], [dynamic, dynamic]),
|
| + functionType(dynamic, [], [dynamic, dynamic]))
|
| +
|
| + assert.equal(functionType(dynamic, [], [dynamic, dynamic]),
|
| + functionType(dynamic, [], [bottom, bottom]))
|
| +
|
| + assert.equal(functionType(dynamic, [], {extra: dynamic}),
|
| + functionType(dynamic, [], {extra: dynamic}))
|
| +
|
| + assert.notEqual(definiteFunctionType(dynamic, [], {extra: dynamic}),
|
| + functionType(dynamic, [], {extra: dynamic}))
|
| +
|
| + assert.equal(functionType(dynamic, [], {extra: dynamic}),
|
| + functionType(dynamic, [], {extra: bottom}))
|
| +
|
| + assert.equal(functionType(int, [int, int]),
|
| + functionType(int, [int, int]))
|
| +
|
| + assert.equal(functionType(int, [], [int, int]),
|
| + functionType(int, [], [int, int]))
|
| +
|
| + assert.equal(functionType(int, [int, int], {extra: int}),
|
| + functionType(int, [int, int], {extra: int}))
|
| +
|
| + assert.equal(functionType(int, [int, int, int, int, int]),
|
| + functionType(int, [int, int, int, int, int]))
|
| +
|
| + assert.notEqual(functionType(int, [int, int, int, int, int]),
|
| + functionType(int, [int, int, int], [int, int]))
|
| +
|
| + assert.notEqual(functionType(String, [int, int, int, int, int]),
|
| + functionType(int, [int, int, int, int, int]))
|
| +
|
| + assert.notEqual(functionType(String, []),
|
| + functionType(int, []))
|
| + });
|
| +});
|
| +
|
| suite('primitives', function() {
|
| 'use strict';
|
|
|
|
|