From ab85019a08de21fe04e917f1879ddf32560ce2f7 Mon Sep 17 00:00:00 2001 From: Ryan McNamara Date: Fri, 18 Mar 2016 23:58:54 -0700 Subject: [PATCH] Added enum constants extension Added extension that generates constants for enums. --- .../generator/ext/EnumConstantsExtension.java | 29 ++++++++++ .../generator/EnumConstantsExtensionTest.java | 58 +++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 typescript-generator-core/src/main/java/cz/habarta/typescript/generator/ext/EnumConstantsExtension.java create mode 100644 typescript-generator-core/src/test/java/cz/habarta/typescript/generator/EnumConstantsExtensionTest.java diff --git a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/ext/EnumConstantsExtension.java b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/ext/EnumConstantsExtension.java new file mode 100644 index 000000000..3c8f25bf1 --- /dev/null +++ b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/ext/EnumConstantsExtension.java @@ -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("}"); + } + } +} diff --git a/typescript-generator-core/src/test/java/cz/habarta/typescript/generator/EnumConstantsExtensionTest.java b/typescript-generator-core/src/test/java/cz/habarta/typescript/generator/EnumConstantsExtensionTest.java new file mode 100644 index 000000000..b13f41535 --- /dev/null +++ b/typescript-generator-core/src/test/java/cz/habarta/typescript/generator/EnumConstantsExtensionTest.java @@ -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 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: \"North\",", lines.get(2)); + Assert.assertEquals(indent + "East: \"East\",", lines.get(3)); + Assert.assertEquals(indent + "South: \"South\",", lines.get(4)); + Assert.assertEquals(indent + "West: \"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")); + } +}