feat(transpiler): class fields for Dart
This commit is contained in:
parent
b4ff802e28
commit
d16d6a02ab
@ -25,6 +25,7 @@ var js2es5Options = {
|
|||||||
annotations: true, // parse annotations
|
annotations: true, // parse annotations
|
||||||
types: true, // parse types
|
types: true, // parse types
|
||||||
script: false, // parse as a module
|
script: false, // parse as a module
|
||||||
|
memberVariables: true, // parse class fields
|
||||||
modules: 'instantiate'
|
modules: 'instantiate'
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -42,6 +43,7 @@ var js2dartOptions = {
|
|||||||
annotations: true, // parse annotations
|
annotations: true, // parse annotations
|
||||||
types: true, // parse types
|
types: true, // parse types
|
||||||
script: false, // parse as a module
|
script: false, // parse as a module
|
||||||
|
memberVariables: true, // parse class fields
|
||||||
outputLanguage: 'dart'
|
outputLanguage: 'dart'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -60,6 +60,7 @@ module.exports = function(config) {
|
|||||||
sourceMaps: true,
|
sourceMaps: true,
|
||||||
script: false,
|
script: false,
|
||||||
modules: 'register',
|
modules: 'register',
|
||||||
|
memberVariables: true,
|
||||||
types: true,
|
types: true,
|
||||||
// typeAssertions: true,
|
// typeAssertions: true,
|
||||||
// typeAssertionModule: 'assert',
|
// typeAssertionModule: 'assert',
|
||||||
|
@ -36,6 +36,7 @@ module.exports = function(config) {
|
|||||||
outputLanguage: 'es5',
|
outputLanguage: 'es5',
|
||||||
sourceMaps: true,
|
sourceMaps: true,
|
||||||
script: false,
|
script: false,
|
||||||
|
memberVariables: true,
|
||||||
modules: 'instantiate',
|
modules: 'instantiate',
|
||||||
types: true,
|
types: true,
|
||||||
typeAssertions: true,
|
typeAssertions: true,
|
||||||
|
@ -6,6 +6,8 @@ import 'package:unittest/unittest.dart' hide expect;
|
|||||||
import 'dart:mirrors';
|
import 'dart:mirrors';
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
|
bool IS_DARTIUM = true;
|
||||||
|
|
||||||
Expect expect(actual, [matcher]) {
|
Expect expect(actual, [matcher]) {
|
||||||
final expect = new Expect(actual);
|
final expect = new Expect(actual);
|
||||||
if (matcher != null) expect.to(matcher);
|
if (matcher != null) expect.to(matcher);
|
||||||
|
@ -7,6 +7,7 @@ export var iit = window.iit;
|
|||||||
export var beforeEach = window.beforeEach;
|
export var beforeEach = window.beforeEach;
|
||||||
export var afterEach = window.afterEach;
|
export var afterEach = window.afterEach;
|
||||||
export var expect = window.expect;
|
export var expect = window.expect;
|
||||||
|
export var IS_DARTIUM = false;
|
||||||
|
|
||||||
// To make testing consistent between dart and js
|
// To make testing consistent between dart and js
|
||||||
window.print = function(msg) {
|
window.print = function(msg) {
|
||||||
|
@ -49,6 +49,11 @@ class HasGetters {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class WithFields {
|
||||||
|
name: string;
|
||||||
|
static id: number;
|
||||||
|
}
|
||||||
|
|
||||||
export function main() {
|
export function main() {
|
||||||
describe('classes', function() {
|
describe('classes', function() {
|
||||||
it('should work', function() {
|
it('should work', function() {
|
||||||
@ -89,6 +94,14 @@ export function main() {
|
|||||||
expect(HasGetters.staticGetter).toEqual('getter');
|
expect(HasGetters.staticGetter).toEqual('getter');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('fields', function() {
|
||||||
|
it('should work', function() {
|
||||||
|
var obj = new WithFields();
|
||||||
|
obj.name = 'Vojta';
|
||||||
|
WithFields.id = 12;
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import {describe, it, expect} from 'test_lib/test_lib';
|
import {describe, it, expect, IS_DARTIUM} from 'test_lib/test_lib';
|
||||||
|
|
||||||
class A {}
|
class A {}
|
||||||
class B {}
|
class B {}
|
||||||
@ -48,6 +48,12 @@ class Foo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class WithFields {
|
||||||
|
name: string;
|
||||||
|
static id: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export function main() {
|
export function main() {
|
||||||
describe('types', function() {
|
describe('types', function() {
|
||||||
it('should work', function() {
|
it('should work', function() {
|
||||||
@ -58,5 +64,37 @@ export function main() {
|
|||||||
|
|
||||||
f.typedVariables();
|
f.typedVariables();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('class fields', function() {
|
||||||
|
it('should fail when setting wrong type value', function() {
|
||||||
|
var wf = new WithFields();
|
||||||
|
|
||||||
|
expect(function() {
|
||||||
|
wf.name = true;
|
||||||
|
}).toThrowError(IS_DARTIUM ?
|
||||||
|
// Dart
|
||||||
|
"type 'bool' is not a subtype of type 'String' of 'value'" :
|
||||||
|
// JavaScript
|
||||||
|
// TODO(vojta): Better error, it's not first argument, it's setting a field.
|
||||||
|
'Invalid arguments given!\n' +
|
||||||
|
' - 1st argument has to be an instance of string, got true'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('static class fields', function() {
|
||||||
|
it('should fail when setting wrong type value', function() {
|
||||||
|
expect(function() {
|
||||||
|
WithFields.id = true;
|
||||||
|
}).toThrowError(IS_DARTIUM ?
|
||||||
|
// Dart
|
||||||
|
"type 'bool' is not a subtype of type 'num' of 'id'" :
|
||||||
|
// JavaScript
|
||||||
|
// TODO(vojta): Better error, it's not first argument, it's setting a field.
|
||||||
|
'Invalid arguments given!\n' +
|
||||||
|
' - 1st argument has to be an instance of number, got true'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
@ -32,6 +32,19 @@ export class DartParseTreeWriter extends JavaScriptParseTreeWriter {
|
|||||||
this.libName = moduleName.replace(/\//g, '.').replace(/[^\w.\/]/g, '_');
|
this.libName = moduleName.replace(/\//g, '.').replace(/[^\w.\/]/g, '_');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CLASS FIELDS
|
||||||
|
visitPropertyVariableDeclaration(tree) {
|
||||||
|
if (tree.isStatic) {
|
||||||
|
this.write_(STATIC);
|
||||||
|
this.writeSpace_();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.writeType_(tree.typeAnnotation);
|
||||||
|
this.writeSpace_();
|
||||||
|
this.visitAny(tree.name);
|
||||||
|
this.write_(SEMI_COLON);
|
||||||
|
}
|
||||||
|
|
||||||
// VARIABLES - types
|
// VARIABLES - types
|
||||||
// ```
|
// ```
|
||||||
// var foo:bool = true;
|
// var foo:bool = true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user