CCJSqlParserManagerTest.java
/*-
* #%L
* JSQLParser library
* %%
* Copyright (C) 2004 - 2019 JSQLParser
* %%
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
* #L%
*/
package net.sf.jsqlparser.statement.simpleparsing;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.Objects;
import java.util.stream.Stream;
import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.parser.CCJSqlParserManager;
import net.sf.jsqlparser.statement.create.CreateTableTest;
import net.sf.jsqlparser.test.TestException;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.TestFactory;
public class CCJSqlParserManagerTest {
// Create a DynamicTest stream for every statement in the file simple_parsing.txt
@TestFactory
Stream<DynamicTest> testParsePerStatement() {
BufferedReader in = new BufferedReader(new InputStreamReader(Objects
.requireNonNull(CreateTableTest.class.getResourceAsStream("/simple_parsing.txt"))));
// Convert buffered reader to stream of statements
return Stream.generate(() -> {
try {
return CCJSqlParserManagerTest.getStatement(in);
} catch (Exception e) {
throw new RuntimeException(e);
}
}).takeWhile(Objects::nonNull)
.map(statement -> DynamicTest.dynamicTest("Parsing statement: " + statement, () -> {
testParse(statement);
}));
}
private void testParse(String statement) throws Exception {
CCJSqlParserManager parserManager = new CCJSqlParserManager();
try {
parserManager.parse(new StringReader(statement));
} catch (JSQLParserException e) {
throw new TestException("impossible to parse statement: " + statement, e);
}
}
public static String getStatement(BufferedReader in) throws Exception {
StringBuilder buf = new StringBuilder();
String line;
while ((line = CCJSqlParserManagerTest.getLine(in)) != null) {
if (line.length() == 0) {
break;
}
buf.append(line);
buf.append("\n");
}
if (buf.length() > 0) {
return buf.toString();
} else {
return null;
}
}
public static String getLine(BufferedReader in) throws Exception {
String line;
while (true) {
line = in.readLine();
if (line != null) {
if (line.length() < 2 || !(line.charAt(0) == '/' && line.charAt(1) == '/')) {
break;
}
} else {
break;
}
}
return line;
}
}