package ql_test; import static org.junit.Assert.fail; import java.io.File; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.nio.file.Files; import java.util.ArrayList; import java.util.Collection; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import ql_test.ast.AstTest; /** * @author orosu */ @RunWith(Parameterized.class) public abstract class QlTest { public static final String testFilesPath = System.getProperty("user.dir") + File.separator + "src" + File.separator + "ql_test" + File.separator + "parser_test_files" + File.separator; public static final String expectedResultsPath = System.getProperty("user.dir") + File.separator + "src" + File.separator + "ql_test" + File.separator + "expected_results" + File.separator; protected final File _testFile; protected final File _expectedResultFile; /** * JUnit Test Runner will instantiate this class once for every element * in the Collection returned by the method annotated with @Parameters */ public QlTest(File in, File out) { this._testFile = in; this._expectedResultFile = out; } public static String readFile(File file, Charset encoding) throws IOException { byte[] encoded = Files.readAllBytes(file.toPath()); return encoding.decode(ByteBuffer.wrap(encoded)).toString(); } public static boolean checkFile(File file) { if (!file.isFile() || !file.canRead()) { fail("ATTENTION! This '" + file.getAbsolutePath() + "' is not a readable file!"); return false; } return true; } public static Collection<Object[]> getData(String directoryName) { Collection<Object[]> data = new ArrayList<Object[]>(); String testFilesPath = AstTest.testFilesPath + directoryName + File.separator; String expectedResultsPath = AstTest.expectedResultsPath + directoryName + File.separator; File directory = new File(testFilesPath); if (!directory.isDirectory()) { fail("ATTENTION! The test files path '" + testFilesPath + "' is not a directory!"); return data; } File[] listOfFiles = directory.listFiles(); for (int i = 0; i < listOfFiles.length; i++) { File in = listOfFiles[i]; File out = new File(expectedResultsPath + in.getName()); data.add(new Object[] {in, out}); } return data; } }