Skip to content

Commit 99c6546

Browse files
committed
Add and handle test cases
1 parent 8faa27c commit 99c6546

File tree

2 files changed

+114
-8
lines changed

2 files changed

+114
-8
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2000,19 +2000,39 @@ public String toEnumVarName(String value, String datatype) {
20002000
case original:
20012001
// NOTE: This is provided as a last-case allowance, but will still result in reserved words being escaped.
20022002
modified = value;
2003+
if (modified.matches("^[$A-Za-z_][$A-Za-z0-9_]*$") && !reservedWords.contains(modified)) {
2004+
// if it's valid already, skip toVarName
2005+
return modified;
2006+
}
20032007
break;
20042008
case camelCase:
20052009
// NOTE: Removes hyphens and underscores
20062010
modified = camelize(modified, LOWERCASE_FIRST_LETTER);
20072011
break;
20082012
case PascalCase:
20092013
// NOTE: Removes hyphens and underscores
2010-
modified = camelize(modified);
2011-
break;
2014+
modified = camelize(modified, UPPERCASE_FIRST_CHAR);
2015+
modified = escapeReservedWord(modified);
2016+
modified = toVarName(modified);
2017+
// recamelize if first char is not underscore because toVarName will turn PascalCase into camelCase
2018+
if (modified.charAt(0) != '_') {
2019+
modified = camelize(modified, UPPERCASE_FIRST_CHAR);
2020+
}
2021+
return modified;
20122022
case snake_case:
20132023
// NOTE: Removes hyphens
20142024
modified = underscore(modified);
2015-
break;
2025+
if (modified.matches("^[$a-z_][$a-z0-9_]*$") && !reservedWords.contains(modified)) {
2026+
// if it's valid already, skip toVarName
2027+
return modified;
2028+
}
2029+
else {
2030+
modified = escapeReservedWord(modified);
2031+
modified = toVarName(modified);
2032+
// underscore again, because toVarName camelizes
2033+
modified = underscore(modified);
2034+
return modified;
2035+
}
20162036
case UPPERCASE:
20172037
modified = modified.replaceAll("\\W+", "_");
20182038
modified = underscore(modified).toUpperCase(Locale.ROOT);
@@ -2023,6 +2043,10 @@ public String toEnumVarName(String value, String datatype) {
20232043
modified = escapeReservedWord(modified);
20242044
}
20252045

2046+
if ("".equals(modified)) {
2047+
modified = "_";
2048+
}
2049+
20262050
return toVarName(modified);
20272051
}
20282052

modules/openapi-generator/src/test/java/org/openapitools/codegen/java/AbstractJavaCodegenTest.java

Lines changed: 87 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public class AbstractJavaCodegenTest {
6565
@BeforeMethod void mockAbstractCodegen() {
6666
codegen = Mockito.mock(
6767
AbstractJavaCodegen.class, Mockito.withSettings().defaultAnswer(Answers.CALLS_REAL_METHODS).useConstructor()
68-
);
68+
);
6969
}
7070

7171
@Test
@@ -80,8 +80,8 @@ public void toEnumVarNameShouldNotShortenUnderScore() {
8080
*/
8181
@Test
8282
public void toEnumVarNameShouldNotResultInSingleUnderscore() {
83-
Assert.assertNotEquals(codegen.toEnumVarName(" ", "String"), "_");
84-
Assert.assertNotEquals(codegen.toEnumVarName("==", "String"), "_");
83+
Assert.assertEquals(codegen.toEnumVarName(" ", "String"), "SPACE");
84+
Assert.assertEquals(codegen.toEnumVarName("==", "String"), "DOUBLE_EQUAL");
8585
}
8686

8787
@Test
@@ -98,6 +98,87 @@ public void toVarNameShouldAvoidOverloadingGetClassMethod() {
9898
Assert.assertEquals(codegen.toVarName("__class"), "propertyClass");
9999
}
100100

101+
@Test
102+
public void toEnumVarName_original() {
103+
codegen.setEnumPropertyNaming(CodegenConstants.ENUM_PROPERTY_NAMING_TYPE.original.name());
104+
Assert.assertEquals(codegen.toEnumVarName("enum-value", "String"), "enumValue");
105+
Assert.assertEquals(codegen.toEnumVarName("enumValue", "String"), "enumValue");
106+
Assert.assertEquals(codegen.toEnumVarName("enum**Value", "String"), "enumStarStarValue");
107+
Assert.assertEquals(codegen.toEnumVarName("==", "String"), "equalEqual");
108+
Assert.assertEquals(codegen.toEnumVarName("_,.", "String"), "comma");
109+
Assert.assertEquals(codegen.toEnumVarName("_", "String"), "__");
110+
Assert.assertEquals(codegen.toEnumVarName("___", "String"), "___");
111+
Assert.assertEquals(codegen.toEnumVarName("1a", "String"), "_1a");
112+
Assert.assertEquals(codegen.toEnumVarName("$name", "String"), "$name");
113+
Assert.assertEquals(codegen.toEnumVarName("nam$$e", "String"), "nam$$e");
114+
Assert.assertEquals(codegen.toEnumVarName("user-name", "String"), "userName");
115+
Assert.assertEquals(codegen.toEnumVarName("user_name", "String"), "user_name");
116+
codegen.setCamelCaseDollarSign(false);
117+
Assert.assertEquals(codegen.toEnumVarName("$name", "String"), "$name");
118+
Assert.assertEquals(codegen.toEnumVarName("$NamE", "String"), "$NamE");
119+
codegen.setCamelCaseDollarSign(true);
120+
Assert.assertEquals(codegen.toEnumVarName("$name", "String"), "$name");
121+
}
122+
123+
124+
@Test
125+
public void toEnumVarName_snake_case() {
126+
codegen.setEnumPropertyNaming(CodegenConstants.ENUM_PROPERTY_NAMING_TYPE.snake_case.name());
127+
Assert.assertEquals(codegen.toEnumVarName("enum-value", "String"), "enum_value");
128+
Assert.assertEquals(codegen.toEnumVarName("enumValue", "String"), "enum_value");
129+
Assert.assertEquals(codegen.toEnumVarName("enum**Value", "String"), "enum_star_star_value");
130+
Assert.assertEquals(codegen.toEnumVarName("==", "String"), "double_equal");
131+
Assert.assertEquals(codegen.toEnumVarName("___", "String"), "___");
132+
Assert.assertEquals(codegen.toEnumVarName("1a", "String"), "_1a");
133+
Assert.assertEquals(codegen.toEnumVarName("$name", "String"), "__name");
134+
Assert.assertEquals(codegen.toEnumVarName("$NamE", "String"), "__nam_e");
135+
Assert.assertEquals(codegen.toEnumVarName("$Name", "String"), "__name");
136+
}
137+
138+
@Test
139+
public void toEnumVarName_PascalCase() {
140+
codegen.setEnumPropertyNaming(CodegenConstants.ENUM_PROPERTY_NAMING_TYPE.PascalCase.name());
141+
Assert.assertEquals(codegen.toEnumVarName("enumValue", "String"), "EnumValue");
142+
Assert.assertEquals(codegen.toEnumVarName("1a", "String"), "_1a");
143+
Assert.assertEquals(codegen.toEnumVarName("==", "String"), "DoubleEqual");
144+
Assert.assertEquals(codegen.toEnumVarName("___", "String"), "U");
145+
Assert.assertEquals(codegen.toEnumVarName("enum-value", "String"), "EnumValue");
146+
codegen.setCamelCaseDollarSign(false);
147+
Assert.assertEquals(codegen.toEnumVarName("$name", "String"), "$Name");
148+
Assert.assertEquals(codegen.toEnumVarName("$NamE", "String"), "$NamE");
149+
codegen.setCamelCaseDollarSign(true);
150+
Assert.assertEquals(codegen.toEnumVarName("$name", "String"), "$Name");
151+
Assert.assertEquals(codegen.toEnumVarName("$NamE", "String"), "$NamE");
152+
}
153+
154+
@Test
155+
public void toEnumVarName_camelCase() {
156+
codegen.setEnumPropertyNaming(CodegenConstants.ENUM_PROPERTY_NAMING_TYPE.camelCase.name());
157+
Assert.assertEquals(codegen.toEnumVarName("enum-value", "String"), "enumValue");
158+
Assert.assertEquals(codegen.toEnumVarName("enumValue", "String"), "enumValue");
159+
Assert.assertEquals(codegen.toEnumVarName("ABcD", "String"), "aBcD");
160+
Assert.assertEquals(codegen.toEnumVarName("==", "String"), "doubleEqual");
161+
Assert.assertEquals(codegen.toEnumVarName("___", "String"), "u");
162+
Assert.assertEquals(codegen.toEnumVarName("1a", "String"), "_1a");
163+
codegen.setCamelCaseDollarSign(false);
164+
Assert.assertEquals(codegen.toEnumVarName("$name", "String"), "$name");
165+
codegen.setCamelCaseDollarSign(true);
166+
Assert.assertEquals(codegen.toEnumVarName("$name", "String"), "$Name");
167+
}
168+
169+
@Test
170+
public void toEnumVarName_UPPERCASE() {
171+
codegen.setEnumPropertyNaming(CodegenConstants.ENUM_PROPERTY_NAMING_TYPE.UPPERCASE.name());
172+
Assert.assertEquals(codegen.toEnumVarName("enum-value", "String"), "ENUM_VALUE");
173+
Assert.assertEquals(codegen.toEnumVarName("enumValue", "String"), "ENUM_VALUE");
174+
Assert.assertEquals(codegen.toEnumVarName("___", "String"), "___");
175+
Assert.assertEquals(codegen.toEnumVarName("1a", "String"), "_1A");
176+
Assert.assertEquals(codegen.toEnumVarName("$name", "String"), "_NAME");
177+
Assert.assertEquals(codegen.toEnumVarName("nam$$e", "String"), "NAM_E");
178+
Assert.assertEquals(codegen.toEnumVarName("user-name", "String"), "USER_NAME");
179+
Assert.assertEquals(codegen.toEnumVarName("user_name", "String"), "USER_NAME");
180+
}
181+
101182
@Test
102183
public void toModelNameShouldNotUseProvidedMapping() {
103184
codegen.importMapping().put("json_myclass", "com.test.MyClass");
@@ -124,7 +205,7 @@ public void testPreprocessOpenApiIncludeAllMediaTypesInAcceptHeader() {
124205
@Test
125206
public void testPreprocessOpenAPINumVersion() {
126207
final OpenAPI openAPIOtherNumVersion = TestUtils.parseFlattenSpec("src/test/resources/2_0/duplicateOperationIds.yaml");
127-
208+
128209
codegen.preprocessOpenAPI(openAPIOtherNumVersion);
129210

130211
Assert.assertEquals(codegen.getArtifactVersion(), openAPIOtherNumVersion.getInfo().getVersion());
@@ -147,6 +228,7 @@ public void convertVarName() {
147228
Assert.assertEquals(codegen.toVarName("1A"), "_1A");
148229
Assert.assertEquals(codegen.toVarName("1AAAA"), "_1AAAA");
149230
Assert.assertEquals(codegen.toVarName("1AAaa"), "_1aAaa");
231+
Assert.assertEquals(codegen.toVarName("__"), "__");
150232
}
151233

152234
@Test
@@ -156,7 +238,7 @@ public void convertVarNameWithCaml() {
156238
Assert.assertEquals(codegen.toVarName("$name"), "$Name");
157239
Assert.assertEquals(codegen.toVarName("1AAaa"), "_1AAaa");
158240
}
159-
241+
160242
@Test
161243
public void convertModelName() {
162244
Assert.assertEquals(codegen.toModelName("name"), "Name");

0 commit comments

Comments
 (0)