Skip to content

Commit 088fa53

Browse files
committed
F!! DynamicTests now use new naming system
B!! properly detect if dynamic tests are used
1 parent c43207d commit 088fa53

File tree

4 files changed

+37
-4
lines changed

4 files changed

+37
-4
lines changed

approvaltests/src/main/java/org/approvaltests/integrations/junit5/JupiterApprovals.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
11
package org.approvaltests.integrations.junit5;
22

3+
import org.approvaltests.Approvals;
34
import org.approvaltests.core.Experimental;
5+
import org.approvaltests.core.Options;
46
import org.approvaltests.namer.NamedEnvironment;
57
import org.approvaltests.namer.NamerFactory;
68
import org.junit.jupiter.api.DynamicTest;
79
import org.lambda.actions.Action0;
10+
import org.lambda.actions.Action1;
811

912
public class JupiterApprovals
1013
{
14+
/**
15+
* @deprecated Use {@link #dynamicTest(String, Action1<Options>) } instead.
16+
*/
1117
@Experimental
18+
@Deprecated
1219
public static DynamicTest dynamicTest(String displayName, Action0 action0)
1320
{
1421
return DynamicTest.dynamicTest(displayName, () -> {
@@ -18,6 +25,14 @@ public static DynamicTest dynamicTest(String displayName, Action0 action0)
1825
}
1926
});
2027
}
28+
@Experimental
29+
public static DynamicTest dynamicTest(String displayName, Action1<Options> action1)
30+
{
31+
Options options = Approvals.NAMES.withParameters(convertToLegalFileName(displayName));
32+
return DynamicTest.dynamicTest(displayName, () -> {
33+
action1.call(options);
34+
});
35+
}
2136
public static String convertToLegalFileName(String uri)
2237
{
2338
return uri.replaceAll("[^a-zA-Z0-9\\.\\-]", "_");

approvaltests/src/main/java/org/approvaltests/namer/AttributeStackSelector.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.spun.util.FormattedException;
44
import com.spun.util.ObjectUtils;
5+
import com.spun.util.ThreadUtils;
56
import com.spun.util.io.StackElementSelector;
67
import com.spun.util.tests.TestUtils;
78
import org.approvaltests.integrations.junit5.JUnitUtils;
@@ -129,13 +130,23 @@ private static void checkConditionsForAttribute(Class<? extends Annotation> attr
129130
{
130131
if ("org.junit.jupiter.api.TestFactory".equals(attribute.getName()))
131132
{
132-
if (NamerFactory.isEmpty())
133+
if (!isDynamicWrapperPresent())
133134
{
134135
throw new FormattedException("When using dynamic tests and Approvals, you need to use %s instead.",
135136
"org.approvaltests.integrations.junit5.JupiterApprovals.dynamicTest(String, Executable)");
136137
}
137138
}
138139
}
140+
private static boolean isDynamicWrapperPresent()
141+
{
142+
StackTraceElement[] stackTrace = ThreadUtils.getStackTrace();
143+
for (StackTraceElement stackTraceElement : stackTrace)
144+
{
145+
if ("org.approvaltests.integrations.junit5.JupiterApprovals".equals(stackTraceElement.getClassName()))
146+
{ return true; }
147+
}
148+
return false;
149+
}
139150
public static List<Method> getMethodsByName(Class<?> clazz, String methodName)
140151
{
141152
try

approvaltests/src/test/java/org/approvaltests/namer/JUnit5StackTraceNamerTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ Collection<DynamicTest> testFactory()
9999
JupiterApprovals.dynamicTest("test 3",
100100
() -> StackTraceNamerUtils.assertNamerForFramework(this.getClass().getSimpleName(),
101101
"testFactory.test_3")),
102+
JupiterApprovals.dynamicTest("test 3",
103+
(o) -> StackTraceNamerUtils.assertNamerForFramework(this.getClass().getSimpleName(),
104+
"testFactory.test_3", o.forFile().getNamer())),
102105
JupiterApprovals.dynamicTest("test 2", () -> StackTraceNamerUtils
103106
.assertNamerForFramework(this.getClass().getSimpleName(), "testFactory.test_2")));
104107
}

approvaltests/src/test/java/org/approvaltests/namer/StackTraceNamerUtils.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,19 @@ public class StackTraceNamerUtils
99
{
1010
public static void assertNamerForFramework(String className, String methodName)
1111
{
12-
final StackTraceNamer namer = new StackTraceNamer();
12+
final ApprovalNamer namer = new StackTraceNamer();
13+
assertNamerForFramework(className, methodName, namer);
14+
}
15+
public static void assertNamerForFramework(String className, String methodName, ApprovalNamer namer)
16+
{
1317
StackTraceNamerUtils.assertApprovalName(className, methodName, namer);
1418
StackTraceNamerUtils.assertSourceFilePath(className, namer);
1519
}
16-
public static void assertApprovalName(String className, String methodName, StackTraceNamer namer)
20+
public static void assertApprovalName(String className, String methodName, ApprovalNamer namer)
1721
{
1822
Assert.assertEquals(className + "." + methodName, namer.getApprovalName());
1923
}
20-
public static void assertSourceFilePath(String className, StackTraceNamer name)
24+
public static void assertSourceFilePath(String className, ApprovalNamer name)
2125
{
2226
File file = new File(name.getSourceFilePath() + className + ".java");
2327
Assert.assertTrue(file.exists());

0 commit comments

Comments
 (0)