Skip to content

Commit b426370

Browse files
Merge pull request #34 from ryan10132/ryan10132/enum-constants
Added enum constants extension
2 parents 5363c9f + ab85019 commit b426370

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
2+
package cz.habarta.typescript.generator.ext;
3+
4+
import cz.habarta.typescript.generator.Settings;
5+
import cz.habarta.typescript.generator.emitter.EmitterExtension;
6+
import cz.habarta.typescript.generator.emitter.TsEnumModel;
7+
import cz.habarta.typescript.generator.emitter.TsModel;
8+
9+
10+
public class EnumConstantsExtension extends EmitterExtension {
11+
12+
@Override
13+
public boolean generatesRuntimeCode() {
14+
return true;
15+
}
16+
17+
@Override
18+
public void emitElements(Writer writer, Settings settings, boolean exportKeyword, TsModel model) {
19+
String exportString = exportKeyword ? "export " : "";
20+
for (TsEnumModel tsEnum : model.getEnums()) {
21+
writer.writeIndentedLine("");
22+
writer.writeIndentedLine(exportString + "const " + tsEnum.getName() + " = {");
23+
for (String value : tsEnum.getValues()) {
24+
writer.writeIndentedLine(settings.indentString + value + ": " + "<" + tsEnum.getName() + ">\"" + value + "\",");
25+
}
26+
writer.writeIndentedLine("}");
27+
}
28+
}
29+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
2+
package cz.habarta.typescript.generator;
3+
4+
import java.util.ArrayList;
5+
import java.util.List;
6+
7+
import org.junit.Assert;
8+
import org.junit.Test;
9+
10+
import cz.habarta.typescript.generator.EnumTest.Direction;
11+
import cz.habarta.typescript.generator.emitter.EmitterExtension;
12+
import cz.habarta.typescript.generator.emitter.TsModel;
13+
import cz.habarta.typescript.generator.ext.EnumConstantsExtension;
14+
import cz.habarta.typescript.generator.parser.Jackson2Parser;
15+
import cz.habarta.typescript.generator.parser.Model;
16+
17+
18+
public class EnumConstantsExtensionTest {
19+
20+
@Test
21+
public void basicTest() {
22+
final List<String> lines = new ArrayList<>();
23+
final EmitterExtension.Writer writer = new EmitterExtension.Writer() {
24+
@Override
25+
public void writeIndentedLine(String line) {
26+
lines.add(line);
27+
}
28+
};
29+
final Settings settings = new Settings();
30+
settings.sortDeclarations = true;
31+
final TypeProcessor typeProcessor = new DefaultTypeProcessor();
32+
final Model model = new Jackson2Parser(settings, typeProcessor).parseModel(Direction.class);
33+
final TsModel tsModel = new ModelCompiler(settings, typeProcessor).javaToTypeScript(model);
34+
new EnumConstantsExtension().emitElements(writer, settings, false, tsModel);
35+
String indent = settings.indentString;
36+
Assert.assertEquals(7, lines.size());
37+
Assert.assertEquals("", lines.get(0));
38+
Assert.assertEquals("const Direction = {", lines.get(1));
39+
Assert.assertEquals(indent + "North: <Direction>\"North\",", lines.get(2));
40+
Assert.assertEquals(indent + "East: <Direction>\"East\",", lines.get(3));
41+
Assert.assertEquals(indent + "South: <Direction>\"South\",", lines.get(4));
42+
Assert.assertEquals(indent + "West: <Direction>\"West\",", lines.get(5));
43+
Assert.assertEquals("}", lines.get(6));
44+
}
45+
46+
@Test
47+
public void testInTypeScriptGenerator() {
48+
final Settings settings = new Settings();
49+
settings.newline = "\n";
50+
settings.outputFileType = TypeScriptFileType.implementationFile;
51+
settings.outputKind = TypeScriptOutputKind.global;
52+
settings.jsonLibrary = JsonLibrary.jackson2;
53+
settings.extensions.add(new EnumConstantsExtension());
54+
final String actual = new TypeScriptGenerator(settings).generateTypeScript(Input.from(Direction.class));
55+
Assert.assertTrue(actual.contains("const Direction"));
56+
Assert.assertTrue(actual.contains("North"));
57+
}
58+
}

0 commit comments

Comments
 (0)