package scribtest;
import java.io.File;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
public class Harness
{
//private static final SuffixFileFilter SCRIBBLE_EXT = new SuffixFileFilter(".scr");
private static final String SCRIBBLE_EXT = ".scr";
protected static final String DIR_IGNORE_FILE = "IGNORE";
protected static final String TEST_DIR_FLAG = "test.dir";
/*/**
* Returns the java builder with the default settings to use JArmus.
*
* @param className
* @return
* /
// Currently unused
@Deprecated
public static JavaProcessBuilder java(String className)
{
JavaProcessBuilder java = new JavaProcessBuilder(className);
// java.appendClasspath("lib/antlr-3.5.2-complete.jar");
// java.appendClasspath("bin/");
java.appendClasspath("target/classes/");
java.appendClasspath("c:/Users/Raymond/.m2/repository/org/antlr/antlr-runtime/3.2/antlr-runtime-3.2.jar/");
java.appendClasspath("../core/target/classes/");
java.appendClasspath("../parser/target/classes/");
/*java.appendClasspath("../validation/target/classes/");
java.appendClasspath("../projection/target/classes/");
java.appendClasspath("../trace/target/classes/");*/
/*java.appendClasspath("C:/Users/Raymond/.m2/repository/org/codehaus/jackson/jackson-mapper-asl/1.9.9/jackson-mapper-asl-1.9.9.jar/");
java.appendClasspath("C:/Users/Raymond/.m2/repository/org/codehaus/jackson/jackson-core-asl/1.9.9/jackson-core-asl-1.9.9.jar/");* /
// java.appendClasspath("org.scribble2.cli.CommandLine -path modules/validation/src/test/scrib/src modules/validation/src/test/scrib/src/Test.scr/");
return java;
}
//*/
/**
* Returns all Scribble files in a given directory.
*
* @param dir
* @return
*/
private static Collection<String> getScribbleFilePaths(String dir)
{
/* // Broken: somehow interfering with JUnit results (e.g., bad.efsm.grecursion.unfair.Test01)
NameFileFilter ignore = new NameFileFilter("IGNORE");
TreeSet<String> result = new TreeSet<>();
FileUtils.listFiles(new File(directory), SCRIBBLE_EXT, new IgnoredDirectoryWhenFilter(ignore)).stream().forEach((file) -> result.add(file.getPath()));
*/
/*return getAllScrFilesUnderDirectory(dir).stream() // Debugging AllTest/BadTest bad.efsm.grecursion.unfair.Test01; problem
.map((f) -> f.getAbsolutePath().toString())
.collect(Collectors.toList());*/
List<String> res = new LinkedList<>();
for (File f : getAllScrFilesUnderDirectory(dir))
{
res.add(f.getAbsolutePath().toString());
}
return res;
}
private static List<File> getAllScrFilesUnderDirectory(String path)
{
List<File> res = new LinkedList<>();
for (File f : new File(path).listFiles())
{
if (f.isFile())
{
if (f.getName().equals(Harness.DIR_IGNORE_FILE))
{
return Collections.emptyList();
}
else if (f.getName().endsWith(Harness.SCRIBBLE_EXT))
{
res.add(f);
}
}
else if (f.isDirectory())
{
res.addAll(getAllScrFilesUnderDirectory(f.getAbsolutePath()));
}
}
return res;
}
public static Collection<String> findTests(String path)
{
return getScribbleFilePaths(path);
//return Collections.emptyList();
}
// dir should be full path
public static Collection<Object[]> makeTests(boolean isBadTest, String dir)
{
/*return findTests(dir).stream() // Debugging AllTest/BadTest bad.efsm.grecursion.unfair.Test01; problem
.map((e) -> new Object[] { e, isBadTest })
.collect(Collectors.toList());*/
List<Object[]> res = new LinkedList<>();
for (String t : findTests(dir))
{
res.add(new Object[] { t, isBadTest });
}
return res;
}
// root is relative path from cli/src/test/resources
// This is for "Good/BarTest (test.dir)", i.e., running single test from inside Eclipse
// root is used as a default if the test.dir property is not present
public static Collection<Object[]> checkTestDirProperty(boolean isBadTest, String root)
{
String dir = System.getProperty(Harness.TEST_DIR_FLAG);
if (dir == null)
{
dir = ClassLoader.getSystemResource(root).getFile();
}
return makeTests(isBadTest, dir);
}
}