| Index: test/type_test.ts
|
| diff --git a/test/type_test.ts b/test/type_test.ts
|
| index 7874c7d7e84fcad1b3b28b236e062bdbcff00272..822f947fcf915e1f8a93f4d9e44e3fed74f82b38 100644
|
| --- a/test/type_test.ts
|
| +++ b/test/type_test.ts
|
| @@ -2,61 +2,107 @@
|
| import {expectTranslate} from './test_support';
|
|
|
| describe('types', () => {
|
| - it('supports qualified names',
|
| - () => { expectTranslate('var x: foo.Bar;').to.equal('foo.Bar x;'); });
|
| - it('drops type literals',
|
| - () => { expectTranslate('var x: {x: string, y: number};').to.equal('dynamic x;'); });
|
| - it('translates string index signatures to dartisms', () => {
|
| - expectTranslate('var x: {[k: string]: any[]};').to.equal('Map<String, List<dynamic>> x;');
|
| - expectTranslate('var x: {[k: number]: number};').to.equal('Map<num, num> x;');
|
| - });
|
| - it('drops type literals with index signatures and other properties',
|
| - () => { expectTranslate('var x: {a: number, [k: string]: number};').to.equal('dynamic x;'); });
|
| - it('allows typecasts', () => { expectTranslate('<MyType>ref').to.equal('(ref as MyType);'); });
|
| - it('translates typecasts to reified types on literals', () => {
|
| - expectTranslate('let x = <string[]>[];').to.equal('var x = <String>[];');
|
| - expectTranslate('let x = <{[k:string]: number}>{};').to.equal('var x = <String, num>{};');
|
| + it('supports qualified names', () => {
|
| + expectTranslate('var x: foo.Bar;').to.equal(`@JS()
|
| +external foo.Bar get x;
|
| +@JS()
|
| +external set x(foo.Bar v);`);
|
| + });
|
| + it('comment type literals', () => {
|
| + expectTranslate('var x: {x: string, y: number};').to.equal(`@JS()
|
| +external dynamic /*{x: string, y: number}*/ get x;
|
| +@JS()
|
| +external set x(dynamic /*{x: string, y: number}*/ v);`);
|
| + });
|
| + it('do not translates string index signatures to dartisms', () => {
|
| + // We wish these could be just Map<String, dynamic> but sadly can't support
|
| + // that yet.
|
| + expectTranslate('var x: {[k: string]: any[]};').to.equal(`@JS()
|
| +external dynamic /*JSMap of <String,List<dynamic>>*/ get x;
|
| +@JS()
|
| +external set x(dynamic /*JSMap of <String,List<dynamic>>*/ v);`);
|
| + expectTranslate('var x: {[k: number]: number};').to.equal(`@JS()
|
| +external dynamic /*JSMap of <num,num>*/ get x;
|
| +@JS()
|
| +external set x(dynamic /*JSMap of <num,num>*/ v);`);
|
| + });
|
| + it('drops type literals with index signatures and other properties', () => {
|
| + expectTranslate('var x: {a: number, [k: string]: number};').to.equal(`@JS()
|
| +external dynamic /*{a: number, [k: string]: number}*/ get x;
|
| +@JS()
|
| +external set x(dynamic /*{a: number, [k: string]: number}*/ v);`);
|
| });
|
| it('does not mangle prototype names', () => {
|
| expectTranslate('import toString = require("./somewhere");')
|
| .to.equal('import "somewhere.dart" as toString;');
|
| });
|
| it('should support union types', () => {
|
| - expectTranslate('var x: number|List<string> = 11;')
|
| - .to.equal('dynamic /* num | List< String > */ x = 11;');
|
| - expectTranslate('function x(): number|List<{[k: string]: any}> { return 11; }')
|
| - .to.equal(
|
| - 'dynamic /* num | List< Map < String , dynamic > > */ x() {\n' +
|
| - ' return 11;\n' +
|
| - '}');
|
| - });
|
| - it('should support array types',
|
| - () => { expectTranslate('var x: string[] = [];').to.equal('List<String> x = [];'); });
|
| - it('should support function types (by ignoring them)', () => {
|
| - expectTranslate('var x: (a: string) => string;')
|
| - .to.equal('dynamic /* (a: string) => string */ x;');
|
| +
|
| + expectTranslate('function foo() : number | number[];').to.equal(`@JS()
|
| +external dynamic /*num|List<num>*/ foo();`);
|
| + expectTranslate('var x: number|List<string>;').to.equal(`@JS()
|
| +external dynamic /*num|List<String>*/ get x;
|
| +@JS()
|
| +external set x(dynamic /*num|List<String>*/ v);`);
|
| + expectTranslate('function x(): number|List<{[k: string]: any}> {};').to.equal(`@JS()
|
| +external dynamic /*num|List<JSMap of <String,dynamic>>*/ x();`);
|
| + });
|
| + it('should support array types', () => {
|
| + expectTranslate('var x: string[] = [];').to.equal(`@JS()
|
| +external List<String> get x;
|
| +@JS()
|
| +external set x(List<String> v);`);
|
| + });
|
| + it('should support function types', () => {
|
| + expectTranslate('var x: (a: string) => string;').to.equal(`import "package:func/func.dart";
|
| +
|
| +@JS()
|
| +external Func1<String, String> get x;
|
| +@JS()
|
| +external set x(Func1<String, String> v);`);
|
| });
|
| });
|
|
|
| describe('type arguments', () => {
|
| it('should support declaration', () => {
|
| - expectTranslate('class X<A, B> { a: A; }').to.equal(`class X<A, B> {
|
| - A a;
|
| + expectTranslate('class X<A, B> { a: A; }').to.equal(`@JS()
|
| +class X<A, B> {
|
| + // @Ignore
|
| + X.fakeConstructor$();
|
| + external A get a;
|
| + external set a(A v);
|
| }`);
|
| });
|
| it('should support nested extends', () => {
|
| - expectTranslate('class X<A extends B<C>> { }').to.equal('class X<A extends B<C>> {}');
|
| + expectTranslate('class X<A extends B<C>> { }').to.equal(`@JS()
|
| +class X<A extends B<C>> {
|
| + // @Ignore
|
| + X.fakeConstructor$();
|
| +}`);
|
| });
|
| it('should multiple extends', () => {
|
| - expectTranslate('class X<A extends A1, B extends B1> { }')
|
| - .to.equal('class X<A extends A1, B extends B1> {}');
|
| + expectTranslate('class X<A extends A1, B extends B1> { }').to.equal(`@JS()
|
| +class X<A extends A1, B extends B1> {
|
| + // @Ignore
|
| + X.fakeConstructor$();
|
| +}`);
|
| });
|
| it('should support use', () => {
|
| - expectTranslate('class X extends Y<A, B> { }').to.equal('class X extends Y<A, B> {}');
|
| + expectTranslate('class X extends Y<A, B> { }').to.equal(`@JS()
|
| +class X extends Y<A, B> {
|
| + // @Ignore
|
| + X.fakeConstructor$() : super.fakeConstructor$();
|
| +}`);
|
| });
|
| it('should remove single <void> generic argument', () => {
|
| - expectTranslate('var x: X<number>;').to.equal('X<num> x;');
|
| - expectTranslate('class X extends Y<void> { }').to.equal('class X extends Y {}');
|
| - expectTranslate('var x = new Promise<void>();').to.equal('var x = new Promise();');
|
| + expectTranslate('var x: X<number>;').to.equal(`@JS()
|
| +external X<num> get x;
|
| +@JS()
|
| +external set x(X<num> v);`);
|
| + expectTranslate('class X extends Y<void> { }').to.equal(`@JS()
|
| +class X extends Y {
|
| + // @Ignore
|
| + X.fakeConstructor$() : super.fakeConstructor$();
|
| +}`);
|
| });
|
| });
|
|
|