-
Notifications
You must be signed in to change notification settings - Fork 237
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added extension that generates constants for enums.
- Loading branch information
Ryan McNamara
committed
Mar 20, 2016
1 parent
5363c9f
commit ab85019
Showing
2 changed files
with
87 additions
and
0 deletions.
There are no files selected for viewing
29 changes: 29 additions & 0 deletions
29
...erator-core/src/main/java/cz/habarta/typescript/generator/ext/EnumConstantsExtension.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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("}"); | ||
} | ||
} | ||
} |
58 changes: 58 additions & 0 deletions
58
...erator-core/src/test/java/cz/habarta/typescript/generator/EnumConstantsExtensionTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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")); | ||
} | ||
} |