Skip to content

Commit 23f5124

Browse files
committed
Fix enum strings starting with numbers, unique enums in model.mustache
1 parent 1a10163 commit 23f5124

File tree

4 files changed

+68
-12
lines changed

4 files changed

+68
-12
lines changed

modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractGoCodegen.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -486,13 +486,10 @@ public String toEnumVarName(String name, String datatype) {
486486
if ("int".equals(datatype) || "int32".equals(datatype) || "int64".equals(datatype)
487487
|| "uint".equals(datatype) || "uint32".equals(datatype) || "uint64".equals(datatype)
488488
|| "float".equals(datatype) || "float32".equals(datatype) || "float64".equals(datatype)) {
489-
String varName = name;
489+
String varName = "NUMBER_" + name;
490490
varName = varName.replaceAll("-", "MINUS_");
491491
varName = varName.replaceAll("\\+", "PLUS_");
492492
varName = varName.replaceAll("\\.", "_DOT_");
493-
if (varName.matches("\\d.*")) {
494-
return "_" + varName;
495-
}
496493
return varName;
497494
}
498495

@@ -506,7 +503,13 @@ public String toEnumVarName(String name, String datatype) {
506503
enumName = enumName.replaceFirst("^_", "");
507504
enumName = enumName.replaceFirst("_$", "");
508505

509-
if (isReservedWord(enumName) || enumName.matches("\\d.*")) { // reserved word or starts with number
506+
// starts with a number
507+
if (enumName.matches("\\d.*")) {
508+
enumName = "_" + enumName;
509+
}
510+
511+
// reserved word
512+
if (isReservedWord(enumName)) {
510513
return escapeReservedWord(enumName);
511514
} else {
512515
return enumName;

modules/swagger-codegen/src/main/resources/go/model.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ type {{{classname}}} {{^format}}{{dataType}}{{/format}}{{#format}}{{{format}}}{{
1111
const (
1212
{{#allowableValues}}
1313
{{#enumVars}}
14-
{{name}} {{{classname}}} = {{{value}}}
14+
{{name}}_{{{classname}}} {{{classname}}} = {{{value}}}
1515
{{/enumVars}}
1616
{{/allowableValues}}
1717
){{/isEnum}}{{^isEnum}}{{#description}}

modules/swagger-codegen/src/test/java/io/swagger/codegen/go/GoClientCodegenTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.swagger.codegen.go;
22

3+
import io.swagger.codegen.DefaultCodegen;
34
import org.testng.Assert;
45
import org.testng.annotations.Test;
56

@@ -37,4 +38,32 @@ public void testAdditionalPropertiesPutForConfigValues() throws Exception {
3738
Assert.assertEquals(codegen.isHideGenerationTimestamp(), false);
3839
}
3940

41+
@Test(description = "test enum variable names for reserved words")
42+
public void testEnumReservedWord() throws Exception {
43+
final DefaultCodegen codegen = new GoClientCodegen();
44+
Assert.assertEquals(codegen.toEnumVarName("IF", null), "IF_");
45+
Assert.assertEquals(codegen.toEnumVarName("const", null), "CONST_");
46+
Assert.assertEquals(codegen.toEnumVarName("INTERFACE", null), "INTERFACE_");
47+
// should not escape non-reserved
48+
Assert.assertEquals(codegen.toEnumVarName("hello", null), "HELLO");
49+
}
50+
51+
@Test(description = "test enum variable names for numbers")
52+
public void testEnumNumber() throws Exception {
53+
final DefaultCodegen codegen = new GoClientCodegen();
54+
Assert.assertEquals(codegen.toEnumVarName("1", "int32"), "NUMBER_1");
55+
Assert.assertEquals(codegen.toEnumVarName("-1", "int32"), "NUMBER_MINUS_1");
56+
Assert.assertEquals(codegen.toEnumVarName("+1", "int32"), "NUMBER_PLUS_1");
57+
Assert.assertEquals(codegen.toEnumVarName("1.1", "float64"), "NUMBER_1_DOT_1");
58+
Assert.assertEquals(codegen.toEnumVarName("-1.2", "float64"), "NUMBER_MINUS_1_DOT_2");
59+
Assert.assertEquals(codegen.toEnumVarName("+1.2", "float64"), "NUMBER_PLUS_1_DOT_2");
60+
}
61+
62+
@Test(description = "test enum variable names for strings that start with a number")
63+
public void testEnumStringNumber() throws Exception {
64+
final DefaultCodegen codegen = new GoClientCodegen();
65+
Assert.assertEquals(codegen.toEnumVarName("1", null), "_1");
66+
Assert.assertEquals(codegen.toEnumVarName("1_SAMPLE", null), "_1_SAMPLE");
67+
}
68+
4069
}

modules/swagger-codegen/src/test/java/io/swagger/codegen/go/GoModelTest.java

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,23 @@
44
import io.swagger.codegen.CodegenProperty;
55
import io.swagger.codegen.DefaultCodegen;
66
import io.swagger.codegen.languages.GoClientCodegen;
7+
import io.swagger.codegen.languages.JavaClientCodegen;
8+
import io.swagger.codegen.languages.PhpClientCodegen;
79
import io.swagger.models.ArrayModel;
810
import io.swagger.models.Model;
911
import io.swagger.models.ModelImpl;
10-
import io.swagger.models.properties.ArrayProperty;
11-
import io.swagger.models.properties.DateTimeProperty;
12-
import io.swagger.models.properties.LongProperty;
13-
import io.swagger.models.properties.MapProperty;
14-
import io.swagger.models.properties.RefProperty;
15-
import io.swagger.models.properties.StringProperty;
12+
import io.swagger.models.Swagger;
13+
import io.swagger.models.properties.*;
1614

1715
import com.google.common.collect.Sets;
16+
import io.swagger.parser.SwaggerParser;
1817
import org.testng.Assert;
1918
import org.testng.annotations.DataProvider;
2019
import org.testng.annotations.Test;
2120

21+
import java.util.Arrays;
22+
import java.util.HashMap;
23+
2224
@SuppressWarnings("static-method")
2325
public class GoModelTest {
2426

@@ -243,6 +245,28 @@ public void mapModelTest() {
243245
Assert.assertEquals(Sets.intersection(cm.imports, Sets.newHashSet("Children")).size(), 1);
244246
}
245247

248+
@Test(description = "convert a go model with an enum")
249+
public void enumMdoelValueTest() {
250+
final StringProperty enumProperty = new StringProperty();
251+
enumProperty.setEnum(Arrays.asList("VALUE1", "VALUE2", "VALUE3"));
252+
final ModelImpl model = new ModelImpl().property("name", enumProperty);
253+
254+
final DefaultCodegen codegen = new GoClientCodegen();
255+
final CodegenModel cm = codegen.fromModel("sample", model);
256+
257+
Assert.assertEquals(cm.vars.size(), 1);
258+
259+
final CodegenProperty enumVar = cm.vars.get(0);
260+
Assert.assertEquals(enumVar.baseName, "name");
261+
Assert.assertEquals(enumVar.datatype, "string");
262+
Assert.assertEquals(enumVar.datatypeWithEnum, "NAME");
263+
Assert.assertEquals(enumVar.name, "Name");
264+
Assert.assertEquals(enumVar.defaultValue, "null");
265+
Assert.assertEquals(enumVar.baseType, "string");
266+
Assert.assertTrue(enumVar.isEnum);
267+
}
268+
269+
246270
@DataProvider(name = "modelNames")
247271
public static Object[][] primeNumbers() {
248272
return new Object[][] {

0 commit comments

Comments
 (0)