Skip to content

Commit a108caa

Browse files
authored
Merge pull request #184 from rzabini/pr-base
B Make NamerFactory and TestUtils thread safe
2 parents 5529aa6 + 47cd8a5 commit a108caa

File tree

4 files changed

+22
-15
lines changed

4 files changed

+22
-15
lines changed

approvaltests-util/src/main/java/com/spun/util/tests/TestUtils.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,26 +26,27 @@
2626

2727
public class TestUtils
2828
{
29-
private static Random random;
30-
private static Function2<Class, String, File> getSourceDirectory = ClassUtils::getSourceDirectory;
29+
private static Random random;
30+
private static final ThreadLocal<Function2<Class, String, File>> getSourceDirectory = ThreadLocal
31+
.withInitial(() -> ClassUtils::getSourceDirectory);
3132
public static SourceDirectoryRestorer registerSourceDirectoryFinder(
3233
Function2<Class, String, File> sourceDirectoryFinder)
3334
{
3435
SourceDirectoryRestorer c = new SourceDirectoryRestorer();
35-
TestUtils.getSourceDirectory = sourceDirectoryFinder;
36+
TestUtils.getSourceDirectory.set(sourceDirectoryFinder);
3637
return c;
3738
}
3839
public static class SourceDirectoryRestorer implements AutoCloseable
3940
{
4041
private final Function2<Class, String, File> original;
4142
public SourceDirectoryRestorer()
4243
{
43-
this.original = TestUtils.getSourceDirectory;
44+
this.original = TestUtils.getSourceDirectory.get();
4445
}
4546
@Override
4647
public void close()
4748
{
48-
TestUtils.getSourceDirectory = original;
49+
TestUtils.getSourceDirectory.set(original);
4950
}
5051
}
5152
public static File getFile(String startingDir)
@@ -210,7 +211,7 @@ private static StackTraceReflectionResult getInfo(StackTraceElement element) thr
210211
String className = fullClassName.substring(fullClassName.lastIndexOf(".") + 1);
211212
className = handleInnerClasses(className);
212213
String fileName = element.getFileName();
213-
File dir = getSourceDirectory.call(ObjectUtils.loadClass(fullClassName), fileName);
214+
File dir = getSourceDirectory.get().call(ObjectUtils.loadClass(fullClassName), fileName);
214215
String methodName = unrollLambda(element.getMethodName());
215216
return new StackTraceReflectionResult(dir, className, fullClassName, methodName);
216217
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public class NamedEnvironment implements AutoCloseable
88
{
99
public NamedEnvironment(String info)
1010
{
11-
NamerFactory.additionalInformation = info;
11+
NamerFactory.setAdditionalInformation(info);
1212
}
1313
@Override
1414
public void close()
@@ -17,14 +17,14 @@ public void close()
1717
}
1818
public boolean isCurrentEnvironmentValidFor(String... environment)
1919
{
20-
if (Arrays.asList(environment).contains(NamerFactory.additionalInformation))
20+
if (Arrays.asList(environment).contains(NamerFactory.getAdditionalInformation()))
2121
{
2222
return true;
2323
}
2424
else
2525
{
26-
SimpleLogger
27-
.message(String.format("Not valid for current environment: \"%s\"", NamerFactory.additionalInformation));
26+
SimpleLogger.message(
27+
String.format("Not valid for current environment: \"%s\"", NamerFactory.getAdditionalInformation()));
2828
return false;
2929
}
3030
}

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

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,18 @@
99

1010
public class NamerFactory
1111
{
12-
public static String additionalInformation;
12+
private static final ThreadLocal<String> additionalInformation = new ThreadLocal<>();
1313
public static String getAndClearAdditionalInformation()
1414
{
1515
String result = getAdditionalInformation();
16-
additionalInformation = null;
16+
additionalInformation.set(null);
1717
return result;
1818
}
1919
public static String getAdditionalInformation()
2020
{
21-
if (additionalInformation == null)
21+
if (additionalInformation.get() == null)
2222
{ return ""; }
23-
return "." + additionalInformation;
23+
return "." + additionalInformation.get();
2424
}
2525
public static ApprovalResults ApprovalResults = new ApprovalResults();
2626
public static NamedEnvironment asMachineSpecificTest(Function0<String> environmentLabeller)
@@ -57,6 +57,10 @@ public static NamedEnvironment withParameters(Object... parameters)
5757
}
5858
public static boolean isEmpty()
5959
{
60-
return additionalInformation == null;
60+
return additionalInformation.get() == null;
61+
}
62+
public static void setAdditionalInformation(String info)
63+
{
64+
additionalInformation.set(info);
6165
}
6266
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
junit.jupiter.execution.parallel.enabled=true
2+
junit.jupiter.execution.parallel.mode.default = concurrent

0 commit comments

Comments
 (0)