diff --git a/main.ts b/main.ts index 6bcd4b4..2c0021a 100644 --- a/main.ts +++ b/main.ts @@ -341,6 +341,28 @@ class Translator { this.visitClassLike(ifDecl); break; + case ts.SyntaxKind.EnumDeclaration: + var decl = node; + this.emit('enum'); + this.visit(decl.name); + this.emit('{'); + // Enums can be empty in TS ... + if (decl.members.length === 0) { + // ... but not in Dart. + this.reportError(node, 'empty enums are not supported'); + } + this.visitList(decl.members); + this.emit('}'); + break; + + case ts.SyntaxKind.EnumMember: + var member = node; + this.visit(member.name); + if (member.initializer) { + this.reportError(node, 'enum initializers are not supported'); + } + break; + case ts.SyntaxKind.HeritageClause: var heritageClause = node; if (heritageClause.token === ts.SyntaxKind.ExtendsKeyword) { diff --git a/test/DartTest.ts b/test/DartTest.ts index 4c3be36..edcd22c 100644 --- a/test/DartTest.ts +++ b/test/DartTest.ts @@ -1,4 +1,5 @@ /// +/// /// import sms = require('source-map-support'); @@ -107,6 +108,24 @@ describe('transpile to dart', () => { }); }); + describe('enums', () => { + it('should support basic enum declaration', () => { + expectTranslate('enum Color { Red, Green, Blue }') + .to.equal(' enum Color { Red , Green , Blue }'); + }); + it('does not support empty enum', () => { + chai.expect(() => translateSource('enum Empty { }')) + .to.throw('empty enums are not supported'); + }); + it('does not support enum with initializer', () => { + chai.expect(() => translateSource('enum Color { Red = 1, Green, Blue = 4 }')) + .to.throw('enum initializers are not supported'); + }); + it('should support switch over enum', () => { + expectTranslate('switch(c) { case Color.Red: break; default: break; }') + .to.equal(' switch ( c ) { case Color . Red : break ; default : break ; }'); + }); + }); describe('functions', () => { it('supports declarations',