[java] use javaparser library to detect syntax errors in the tests (#3715)

This commit is contained in:
sullis 2019-08-22 01:34:28 -04:00 committed by Jérémie Bresson
parent d09e097e4e
commit 1a808dd644
3 changed files with 35 additions and 3 deletions

View File

@ -268,6 +268,12 @@
<!-- <version>${testng-version}</version> -->
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.github.javaparser</groupId>
<artifactId>javaparser-core</artifactId>
<version>3.14.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>

View File

@ -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<String, String> 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);
}
}
}

View File

@ -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"));