Fix bugs in camelcase lambda, add tests for pascalcase (#12639)

* fix bugs in lambda, add tests for pascalcase

* add tests for empty string to confirm no npe
This commit is contained in:
William Cheng
2022-06-20 17:01:19 +08:00
committed by GitHub
parent decb96b98b
commit 995f7ced13
3 changed files with 85 additions and 1 deletions
@@ -62,7 +62,7 @@ public class CamelCaseLambda implements Mustache.Lambda {
@Override
public void execute(Template.Fragment fragment, Writer writer) throws IOException {
String text = camelize(fragment.execute(), lowercaseFirstLetter);
String text = camelize(fragment.execute().replace(" ", "_"), lowercaseFirstLetter);
if (generator != null) {
text = generator.sanitizeName(text);
if (generator.reservedWords().contains(text)) {
@@ -33,6 +33,15 @@ public class CamelCaseLambdaTest extends LambdaTest {
test("inputText", "{{#camelcase}}Input-text{{/camelcase}}", ctx);
}
@Test
public void camelCaseSpaceTest() {
// Given
Map<String, Object> ctx = context("camelcase", new CamelCaseLambda());
// When & Then
test("inputTextApi", "{{#camelcase}}Input text api{{/camelcase}}", ctx);
}
@Test
public void camelCaseReservedWordTest() {
// Given
@@ -0,0 +1,75 @@
package org.openapitools.codegen.templating.mustache;
import static org.mockito.AdditionalAnswers.returnsFirstArg;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.when;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Map;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.openapitools.codegen.CodegenConfig;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class PascalCaseLambdaTest extends LambdaTest {
@Mock
CodegenConfig generator;
@BeforeMethod
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Test
public void pascalCaseTest() {
// Given
Map<String, Object> ctx = context("pascalcase", new CamelCaseLambda(false));
// When & Then
test("InputText", "{{#pascalcase}}Input-text{{/pascalcase}}", ctx);
test("InputText", "{{#pascalcase}}Input_text{{/pascalcase}}", ctx);
test("", "{{#pascalcase}}{{/pascalcase}}", ctx);
}
@Test
public void pascalCaseSpaceTest() {
// Given
Map<String, Object> ctx = context("pascalcase", new CamelCaseLambda(false));
// When & Then
test("InputTextApi", "{{#pascalcase}}Input text api{{/pascalcase}}", ctx);
}
@Test
public void pascalCaseReservedWordTest() {
// Given
Map<String, Object> ctx = context("pascalcase", new CamelCaseLambda(false).generator(generator));
when(generator.sanitizeName(anyString())).then(returnsFirstArg());
when(generator.reservedWords()).thenReturn(new HashSet<String>(Arrays.asList("ReservedWord")));
when(generator.escapeReservedWord("ReservedWord")).thenReturn("escapedReservedWord");
// When & Then
test("escapedReservedWord", "{{#pascalcase}}reserved-word{{/pascalcase}}", ctx);
}
@Test
public void pascalCaseEscapeParamTest() {
// Given
Map<String, Object> ctx = context("pascalcase", new CamelCaseLambda(false)
.generator(generator).escapeAsParamName(true));
when(generator.sanitizeName(anyString())).then(returnsFirstArg());
when(generator.reservedWords()).thenReturn(new HashSet<String>());
when(generator.toParamName("InputText")).thenReturn("inputTextAsParam");
// When & Then
test("inputTextAsParam", "{{#pascalcase}}Input_text{{/pascalcase}}", ctx);
}
}