diff --git a/modules/openapi-generator/pom.xml b/modules/openapi-generator/pom.xml index e417dad64cd..b6cbfe3b9db 100644 --- a/modules/openapi-generator/pom.xml +++ b/modules/openapi-generator/pom.xml @@ -268,6 +268,12 @@ test + + com.github.javaparser + javaparser-core + 3.14.11 + test + org.reflections reflections diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/TestUtils.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/TestUtils.java index b85c3cdd405..6c1d9a12b1f 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/TestUtils.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/TestUtils.java @@ -1,8 +1,12 @@ package org.openapitools.codegen; -import static org.testng.Assert.assertFalse; +import static org.testng.Assert.fail; import static org.testng.Assert.assertTrue; +import static org.testng.Assert.assertFalse; +import com.github.javaparser.ParseProblemException; +import com.github.javaparser.StaticJavaParser; +import com.github.javaparser.ast.CompilationUnit; import io.swagger.parser.OpenAPIParser; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; @@ -66,7 +70,7 @@ public class TestUtils { File file = new File(root, filename); String absoluteFilename = file.getAbsolutePath().replace("\\", "/"); if (!generatedFiles.containsKey(absoluteFilename)) { - Assert.fail("Could not find '" + absoluteFilename + "' file in list:\n" + + fail("Could not find '" + absoluteFilename + "' file in list:\n" + generatedFiles.keySet().stream().sorted().collect(Collectors.joining(",\n"))); } assertTrue(generatedFiles.containsKey(absoluteFilename), "File '" + absoluteFilename + "' was not found in the list of generated files"); @@ -76,9 +80,28 @@ public class TestUtils { File file = new File(root, filename); String absoluteFilename = file.getAbsolutePath().replace("\\", "/"); if (generatedFiles.containsKey(absoluteFilename)) { - Assert.fail("File '" + absoluteFilename + "' exists in file in list:\n" + + fail("File '" + absoluteFilename + "' exists in file in list:\n" + generatedFiles.keySet().stream().sorted().collect(Collectors.joining(",\n"))); } assertFalse(generatedFiles.containsKey(absoluteFilename), "File '" + absoluteFilename + "' was found in the list of generated files"); } + + public static void validateJavaSourceFiles(Map fileMap) { + fileMap.forEach( (fileName, fileContents) -> { + if (fileName.endsWith(".java")) { + assertValidJavaSourceCode(fileContents, fileName); + } + } + ); + } + + public static void assertValidJavaSourceCode(String javaSourceCode, String filename) { + try { + CompilationUnit compilation = StaticJavaParser.parse(javaSourceCode); + assertTrue(compilation.getTypes().size() > 0, "File: " + filename); + } + catch (ParseProblemException ex) { + fail("Java parse problem: " + filename, ex); + } + } } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java index e26208de14c..02e0df57c47 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java @@ -17,6 +17,7 @@ package org.openapitools.codegen.java; +import static org.openapitools.codegen.TestUtils.*; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; @@ -318,6 +319,8 @@ public class JavaClientCodegenTest { TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/StringUtil.java"); TestUtils.ensureContainsFile(generatedFiles, output, "src/test/java/xyz/abcdef/api/DefaultApiTest.java"); + validateJavaSourceFiles(generatedFiles); + String defaultApiFilename = new File(output, "src/main/java/xyz/abcdef/api/DefaultApi.java").getAbsolutePath().replace("\\", "/"); String defaultApiConent = generatedFiles.get(defaultApiFilename); assertTrue(defaultApiConent.contains("public class DefaultApi"));