diff --git a/assets/demo_project/source/packages/package.pkb b/assets/demo_project/source/packages/package.pkb new file mode 100644 index 0000000..e69de29 diff --git a/assets/demo_project/source/packages/package.pks b/assets/demo_project/source/packages/package.pks new file mode 100644 index 0000000..e69de29 diff --git a/assets/demo_project/source/script.sql b/assets/demo_project/source/script.sql new file mode 100644 index 0000000..e69de29 diff --git a/assets/demo_project/source/triggers/trigger.trg b/assets/demo_project/source/triggers/trigger.trg new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/io/github/utplsql/cli/FileWalker.java b/src/main/java/io/github/utplsql/cli/FileWalker.java new file mode 100644 index 0000000..2fb108c --- /dev/null +++ b/src/main/java/io/github/utplsql/cli/FileWalker.java @@ -0,0 +1,48 @@ +package io.github.utplsql.cli; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Vinicius on 18/06/2017. + */ +public class FileWalker { + + public List getFileList(File baseDir, String inspectPath) { + return getFileList(baseDir, inspectPath, true); + } + + public List getFileList(File baseDir, String inspectPath, boolean relative) { + File inspectDir = new File(baseDir, inspectPath); + + if (!inspectDir.isDirectory()) + throw new IllegalArgumentException(inspectPath + " is not a directory."); + + List fileList = new ArrayList<>(); + listDirFiles(baseDir, inspectDir, fileList, relative); + + return fileList; + } + + private void listDirFiles(File baseDir, File directory, List fileList, boolean relative) { + File[] directoryFiles = directory.listFiles(); + + if (directoryFiles == null) + return; + + for (File file : directoryFiles) { + if (file.isFile()) { + String absolutePath = file.getAbsolutePath(); + + if (relative) + absolutePath = absolutePath.substring(baseDir.getAbsolutePath().length() + 1); + + fileList.add(absolutePath); + } else { + listDirFiles(baseDir, file, fileList, relative); + } + } + } + +} diff --git a/src/main/java/io/github/utplsql/cli/RunCommand.java b/src/main/java/io/github/utplsql/cli/RunCommand.java index fe80f2f..55def57 100644 --- a/src/main/java/io/github/utplsql/cli/RunCommand.java +++ b/src/main/java/io/github/utplsql/cli/RunCommand.java @@ -8,6 +8,7 @@ import io.github.utplsql.api.reporter.Reporter; import io.github.utplsql.api.reporter.ReporterFactory; +import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintStream; @@ -49,6 +50,12 @@ public class RunCommand { description = "enables printing of test results in colors as defined by ANSICONSOLE standards") private boolean colorConsole = false; + @Parameter(names = {"-source_path"}, description = "path to project source files") + private String sourcePath; + + @Parameter(names = {"-test_path"}, description = "path to project test files") + private String testPath; + public ConnectionInfo getConnectionInfo() { return connectionInfoList.get(0); } @@ -91,6 +98,19 @@ public void run() throws Exception { final List testPaths = getTestPaths(); final List reporterList = new ArrayList<>(); + final File baseDir = new File("").getAbsoluteFile(); + List sourceFilesTmp = null; + List testFilesTmp = null; + + if (this.sourcePath != null) + sourceFilesTmp = new FileWalker().getFileList(baseDir, this.sourcePath); + + if (this.testPath != null) + testFilesTmp = new FileWalker().getFileList(baseDir, this.testPath); + + final List sourceFiles = sourceFilesTmp; + final List testFiles = testFilesTmp; + if (testPaths.isEmpty()) testPaths.add(ci.getUser()); // Do the reporters initialization, so we can use the id to run and gather results. @@ -108,11 +128,14 @@ public void run() throws Exception { ExecutorService executorService = Executors.newFixedThreadPool(1 + reporterList.size()); + // Run tests. executorService.submit(() -> { try (Connection conn = ci.getConnection()){ new TestRunner() .addPathList(testPaths) .addReporterList(reporterList) + .withSourceFiles(sourceFiles) + .withTestFiles(testFiles) .colorConsole(colorConsole) .run(conn); } catch (SQLException e) { @@ -121,7 +144,7 @@ public void run() throws Exception { } }); - + // Gather each reporter results on a separate thread. for (ReporterOptions ro : reporterOptionsList) { executorService.submit(() -> { List printStreams = new ArrayList<>(); diff --git a/src/test/java/io/github/utplsql/cli/FileWalkerTest.java b/src/test/java/io/github/utplsql/cli/FileWalkerTest.java new file mode 100644 index 0000000..4752df6 --- /dev/null +++ b/src/test/java/io/github/utplsql/cli/FileWalkerTest.java @@ -0,0 +1,41 @@ +package io.github.utplsql.cli; + +import org.junit.Assert; +import org.junit.Test; + +import java.io.File; +import java.util.Collections; +import java.util.List; + +/** + * Created by Vinicius on 18/06/2017. + */ +public class FileWalkerTest { + + private final File BASE_DIR = new File(new File("").getAbsolutePath(), "assets/demo_project"); + + @Test + public void fileWalker_Relative() { + List fileList = new FileWalker().getFileList(BASE_DIR, "source"); + Collections.sort(fileList); + Assert.assertArrayEquals(new Object[] { + "source/packages/package.pkb".replace('/', File.separatorChar), + "source/packages/package.pks".replace('/', File.separatorChar), + "source/script.sql".replace('/', File.separatorChar), + "source/triggers/trigger.trg".replace('/', File.separatorChar), + }, fileList.toArray()); + } + + @Test + public void fileWalker_Absolute() { + List fileList = new FileWalker().getFileList(BASE_DIR, "source", false); + Collections.sort(fileList); + Assert.assertArrayEquals(new Object[] { + BASE_DIR.getAbsolutePath() + "/source/packages/package.pkb".replace('/', File.separatorChar), + BASE_DIR.getAbsolutePath() + "/source/packages/package.pks".replace('/', File.separatorChar), + BASE_DIR.getAbsolutePath() + "/source/script.sql".replace('/', File.separatorChar), + BASE_DIR.getAbsolutePath() + "/source/triggers/trigger.trg".replace('/', File.separatorChar), + }, fileList.toArray()); + } + +}