Polish "Handle Unicode in Project Generation"

See gh-1345
This commit is contained in:
Stephane Nicoll 2022-11-24 11:24:40 +01:00
parent 7b204b1704
commit ade3b0af9e
3 changed files with 42 additions and 13 deletions

View File

@ -100,6 +100,16 @@ public class DefaultProjectRequestToDescriptionConverter
MetadataBuildItemMapper.toDependency(dependency)));
}
/**
* Clean input value to rely on US-ascii character as much as possible.
* @param value the input value to clean
* @return a value that can be used as part of an identifier
*/
protected String cleanInputValue(String value) {
return StringUtils.hasText(value) ? Normalizer.normalize(value, Normalizer.Form.NFKD).replaceAll("\\p{M}", "")
: value;
}
private void validate(ProjectRequest request, InitializrMetadata metadata) {
validatePlatformVersion(request, metadata);
validateType(request.getType(), metadata);
@ -191,11 +201,4 @@ public class DefaultProjectRequestToDescriptionConverter
}).collect(Collectors.toList());
}
private String cleanInputValue(String inputString) {
if (StringUtils.hasText(inputString)) {
return Normalizer.normalize(inputString, Normalizer.Form.NFKD).replaceAll("\\p{M}", "");
}
return inputString;
}
}

View File

@ -36,10 +36,4 @@ public class ProjectGenerationControllerArchiveIntegrationTests extends Abstract
assertDefaultProject(project.resolveModule("demo trial"));
}
@Test
void projectNameWithAccentRemoved() {
ProjectStructure project = downloadZip("/starter.zip?artifactId=demo&baseDir=demo trial&name=Demö");
assertDefaultProject(project.resolveModule("demo trial"));
}
}

View File

@ -47,6 +47,38 @@ class DefaultProjectRequestToDescriptionConverterTests {
private final DefaultProjectRequestToDescriptionConverter converter = new DefaultProjectRequestToDescriptionConverter();
@Test
void convertWhenArtifactIdHasAccentCleanValue() {
ProjectRequest request = createProjectRequest();
request.setArtifactId("tëst-âpp");
ProjectDescription description = this.converter.convert(request, this.metadata);
assertThat(description.getArtifactId()).isEqualTo("test-app");
}
@Test
void convertWhenGroupIdHasAccentCleanValue() {
ProjectRequest request = createProjectRequest();
request.setGroupId("com.êxample.äpp");
ProjectDescription description = this.converter.convert(request, this.metadata);
assertThat(description.getGroupId()).isEqualTo("com.example.app");
}
@Test
void convertWhenNameHasAccentCleanValue() {
ProjectRequest request = createProjectRequest();
request.setName("My Demö");
ProjectDescription description = this.converter.convert(request, this.metadata);
assertThat(description.getName()).isEqualTo("My Demo");
}
@Test
void convertWhenPackageNameHasAccentCleanValue() {
ProjectRequest request = createProjectRequest();
request.setPackageName("com.êxample.äpp");
ProjectDescription description = this.converter.convert(request, this.metadata);
assertThat(description.getPackageName()).isEqualTo("com.example.app");
}
@Test
void convertWhenTypeIsInvalidShouldThrowException() {
ProjectRequest request = createProjectRequest();