Skip to content

Commit

Permalink
Merge pull request #34 from ryan10132/ryan10132/enum-constants
Browse files Browse the repository at this point in the history
Added enum constants extension
  • Loading branch information
vojtechhabarta committed Mar 20, 2016
2 parents 5363c9f + ab85019 commit b426370
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@

package cz.habarta.typescript.generator.ext;

import cz.habarta.typescript.generator.Settings;
import cz.habarta.typescript.generator.emitter.EmitterExtension;
import cz.habarta.typescript.generator.emitter.TsEnumModel;
import cz.habarta.typescript.generator.emitter.TsModel;


public class EnumConstantsExtension extends EmitterExtension {

@Override
public boolean generatesRuntimeCode() {
return true;
}

@Override
public void emitElements(Writer writer, Settings settings, boolean exportKeyword, TsModel model) {
String exportString = exportKeyword ? "export " : "";
for (TsEnumModel tsEnum : model.getEnums()) {
writer.writeIndentedLine("");
writer.writeIndentedLine(exportString + "const " + tsEnum.getName() + " = {");
for (String value : tsEnum.getValues()) {
writer.writeIndentedLine(settings.indentString + value + ": " + "<" + tsEnum.getName() + ">\"" + value + "\",");
}
writer.writeIndentedLine("}");
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@

package cz.habarta.typescript.generator;

import java.util.ArrayList;
import java.util.List;

import org.junit.Assert;
import org.junit.Test;

import cz.habarta.typescript.generator.EnumTest.Direction;
import cz.habarta.typescript.generator.emitter.EmitterExtension;
import cz.habarta.typescript.generator.emitter.TsModel;
import cz.habarta.typescript.generator.ext.EnumConstantsExtension;
import cz.habarta.typescript.generator.parser.Jackson2Parser;
import cz.habarta.typescript.generator.parser.Model;


public class EnumConstantsExtensionTest {

@Test
public void basicTest() {
final List<String> lines = new ArrayList<>();
final EmitterExtension.Writer writer = new EmitterExtension.Writer() {
@Override
public void writeIndentedLine(String line) {
lines.add(line);
}
};
final Settings settings = new Settings();
settings.sortDeclarations = true;
final TypeProcessor typeProcessor = new DefaultTypeProcessor();
final Model model = new Jackson2Parser(settings, typeProcessor).parseModel(Direction.class);
final TsModel tsModel = new ModelCompiler(settings, typeProcessor).javaToTypeScript(model);
new EnumConstantsExtension().emitElements(writer, settings, false, tsModel);
String indent = settings.indentString;
Assert.assertEquals(7, lines.size());
Assert.assertEquals("", lines.get(0));
Assert.assertEquals("const Direction = {", lines.get(1));
Assert.assertEquals(indent + "North: <Direction>\"North\",", lines.get(2));
Assert.assertEquals(indent + "East: <Direction>\"East\",", lines.get(3));
Assert.assertEquals(indent + "South: <Direction>\"South\",", lines.get(4));
Assert.assertEquals(indent + "West: <Direction>\"West\",", lines.get(5));
Assert.assertEquals("}", lines.get(6));
}

@Test
public void testInTypeScriptGenerator() {
final Settings settings = new Settings();
settings.newline = "\n";
settings.outputFileType = TypeScriptFileType.implementationFile;
settings.outputKind = TypeScriptOutputKind.global;
settings.jsonLibrary = JsonLibrary.jackson2;
settings.extensions.add(new EnumConstantsExtension());
final String actual = new TypeScriptGenerator(settings).generateTypeScript(Input.from(Direction.class));
Assert.assertTrue(actual.contains("const Direction"));
Assert.assertTrue(actual.contains("North"));
}
}

0 comments on commit b426370

Please sign in to comment.