diff --git a/approvaltests-tests/src/test/java/org/approvaltests/CheckedExceptionsTest.java b/approvaltests-tests/src/test/java/org/approvaltests/CheckedExceptionsTest.java index 433cf49f1..31cf0d29b 100644 --- a/approvaltests-tests/src/test/java/org/approvaltests/CheckedExceptionsTest.java +++ b/approvaltests-tests/src/test/java/org/approvaltests/CheckedExceptionsTest.java @@ -1,5 +1,6 @@ package org.approvaltests; +import com.spun.util.ClassUtils; import org.junit.jupiter.api.Test; import org.lambda.query.Query; import org.lambda.query.Queryable; @@ -27,7 +28,7 @@ private List getMethodsWithCheckedExceptions(Class aClass) } private Queryable> getAllClasses() { - return getClasses("..", p -> p.contains("main"), + return getClasses(ClassUtils.getProjectRootPath() + "/..", p -> p.contains("main"), p1 -> p1.contains(".approvaltests.src.") || p1.contains(".approvaltests-util.")); } } diff --git a/approvaltests-tests/src/test/java/org/approvaltests/ParserUtilities.java b/approvaltests-tests/src/test/java/org/approvaltests/ParserUtilities.java index b69162033..6d48a8709 100644 --- a/approvaltests-tests/src/test/java/org/approvaltests/ParserUtilities.java +++ b/approvaltests-tests/src/test/java/org/approvaltests/ParserUtilities.java @@ -9,6 +9,7 @@ import com.github.javaparser.ast.type.Type; import com.github.javaparser.ast.type.TypeParameter; import com.github.javaparser.utils.SourceRoot; +import com.spun.util.ClassUtils; import com.spun.util.FormattedException; import org.lambda.query.Query; @@ -22,8 +23,8 @@ public class ParserUtilities public static final List SOURCE_PATHS = new ArrayList<>(); static { - SOURCE_PATHS.add("src/main/java"); - SOURCE_PATHS.add("src/test/java"); + SOURCE_PATHS.add(ClassUtils.getProjectRootPath() + "/src/main/java"); + SOURCE_PATHS.add(ClassUtils.getProjectRootPath() + "/src/test/java"); } public static Range getLineNumbersForMethod(Method method) { @@ -71,6 +72,7 @@ public static CompilationUnit getCompilationUnit(Method method) ParseProblemException parseException = null; for (String sourceRootPath : SOURCE_PATHS) { + System.out.println("Trying to parse from: " + sourceRootPath); SourceRoot sourceRoot = new SourceRoot(Paths.get(sourceRootPath)); try { diff --git a/approvaltests-tests/src/test/java/org/approvaltests/ParsingFilesTest.java b/approvaltests-tests/src/test/java/org/approvaltests/ParsingFilesTest.java index 0537225ca..f54d3b685 100644 --- a/approvaltests-tests/src/test/java/org/approvaltests/ParsingFilesTest.java +++ b/approvaltests-tests/src/test/java/org/approvaltests/ParsingFilesTest.java @@ -1,6 +1,7 @@ package org.approvaltests; import com.github.javaparser.Range; +import com.spun.util.ClassUtils; import org.approvaltests.core.Options; import org.junit.jupiter.api.Test; @@ -10,7 +11,7 @@ public class ParsingFilesTest { public static void addApprovalTestPath() { - ParserUtilities.SOURCE_PATHS.add("../approvaltests/src/main/java"); + ParserUtilities.SOURCE_PATHS.add(ClassUtils.getProjectRootPath() + "/../approvaltests/src/main/java"); } @Test public void getLineNumberOfThisMethod() throws Exception @@ -23,4 +24,4 @@ public void getLineNumberOfThisMethod() throws Exception Range r = ParserUtilities.getLineNumbersForMethod(method); Approvals.verify(r, new Options().inline(expected)); } -} \ No newline at end of file +} diff --git a/approvaltests-tests/src/test/java/org/approvaltests/namer/NamerSamplesTest.java b/approvaltests-tests/src/test/java/org/approvaltests/namer/NamerSamplesTest.java index 31b08489b..cebdd1912 100644 --- a/approvaltests-tests/src/test/java/org/approvaltests/namer/NamerSamplesTest.java +++ b/approvaltests-tests/src/test/java/org/approvaltests/namer/NamerSamplesTest.java @@ -1,5 +1,6 @@ package org.approvaltests.namer; +import com.spun.util.ClassUtils; import com.spun.util.tests.TestUtils; import com.spun.util.tests.TestUtils.SourceDirectoryRestorer; import org.approvaltests.Approvals; @@ -19,7 +20,8 @@ void useAlternativeSourceFileFinder() @Override public File call(Class clazz, String fileName) { - return new File("src/test/java/" + clazz.getPackage().getName().replaceAll("\\.", "/")); + return new File(ClassUtils.getProjectRootPath() + "/src/test/java/" + + clazz.getPackage().getName().replaceAll("\\.", "/")); } }; // end-snippet diff --git a/approvaltests-util/src/main/java/com/spun/util/ClassUtils.java b/approvaltests-util/src/main/java/com/spun/util/ClassUtils.java index 82e26fb61..e888d688c 100644 --- a/approvaltests-util/src/main/java/com/spun/util/ClassUtils.java +++ b/approvaltests-util/src/main/java/com/spun/util/ClassUtils.java @@ -17,6 +17,7 @@ public class ClassUtils { + public static final String APPROVALTESTS_PROJECT_DIRECTORY = "APPROVALTESTS_PROJECT_DIRECTORY"; public static String getClassName(Class clazz) { String name = clazz.getName(); @@ -98,11 +99,23 @@ public static File getSourceDirectory(Class clazz, Function1 final String name = clazz.getName(); String[] split = name.split("\\."); split[split.length - 1] = createLastFileName.call(split[split.length - 1]); - File found = find(new File("."), Arrays.asList(split)); + String baseSourcePath = getProjectRootPath(); + File found = find(new File(baseSourcePath), Arrays.asList(split)); if (found == null) { throw new FormattedException("Didn't find %s under %s", name, FileUtils.getCurrentDirectory()); } return found.getParentFile(); } + /** + * This returns the {@link com.spun.util.ClassUtils#APPROVALTESTS_PROJECT_DIRECTORY APPROVALTESTS_PROJECT_DIRECTORY} system property if it is set, otherwise it returns the working directory. + */ + public static String getProjectRootPath() + { + if (System.getProperties().containsKey(APPROVALTESTS_PROJECT_DIRECTORY)) + { return System.getProperty(APPROVALTESTS_PROJECT_DIRECTORY); } + if (System.getenv().containsKey(APPROVALTESTS_PROJECT_DIRECTORY)) + { return System.getenv(APPROVALTESTS_PROJECT_DIRECTORY); } + return "."; + } public static File getSourceDirectory(Class clazz, final String fileName) { return getSourceDirectory(clazz, __ -> fileName); diff --git a/pom.xml b/pom.xml index 41012e635..7448028b8 100644 --- a/pom.xml +++ b/pom.xml @@ -103,6 +103,11 @@ 3.5.2 -Duser.language=en -Duser.region=US + methods + target/fork_dir_${surefire.forkNumber} + + ${project.basedir} +