Skip to content

Commit 47ce6f9

Browse files
Add tests for the directories-jni module
Running on both JDK 8 and 23 too
1 parent 3787c59 commit 47ce6f9

File tree

6 files changed

+135
-8
lines changed

6 files changed

+135
-8
lines changed

build.sc

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,22 @@ object `directories-jni` extends JavaModule with DirectoriesPublishModule {
9090
def javacOptions = super.javacOptions() ++ Seq(
9191
"--release", "8"
9292
)
93+
94+
def localRepo = Task {
95+
val dest = Task.dest
96+
97+
new LocalIvyPublisher(T.dest).publishLocal(
98+
jar = jar().path,
99+
sourcesJar = sourceJar().path,
100+
docJar = docJar().path,
101+
pom = pom().path,
102+
ivy = ivy().path,
103+
artifact = artifactMetadata(),
104+
extras = extraPublish()
105+
)
106+
107+
PathRef(dest)
108+
}
93109
}
94110

95111
object jdk23 extends JavaModule {
@@ -131,4 +147,38 @@ trait Tests extends Cross.Module[String] with JavaModule {
131147
}
132148
}
133149

134-
object tests extends Cross[Tests]("8", "default")
150+
trait TestsJni extends Cross.Module[String] with JavaModule {
151+
def zincWorker = crossValue match {
152+
case "8" => ModuleRef(java8ZincWorker)
153+
case "default" => super.zincWorker
154+
}
155+
156+
def ivyDeps = Agg(
157+
ivy"${`directories-jni`.pomSettings().organization}:directories-jni:${`directories-jni`.publishVersion()}"
158+
)
159+
def repositoriesTask = Task.Anon {
160+
Seq(
161+
coursier.parse.RepositoryParser.repository(
162+
"ivy:" + directories.localRepo().path.toNIO.toUri.toASCIIString + "[defaultPattern]"
163+
).fold(err => throw new Exception(err), x => x),
164+
coursier.parse.RepositoryParser.repository(
165+
"ivy:" + `directories-jni`.localRepo().path.toNIO.toUri.toASCIIString + "[defaultPattern]"
166+
).fold(err => throw new Exception(err), x => x)
167+
) ++ super.repositoriesTask()
168+
}
169+
170+
object test extends JavaTests {
171+
def ivyDeps = super.ivyDeps() ++ Agg(
172+
ivy"junit:junit:4.13",
173+
ivy"com.novocode:junit-interface:0.11"
174+
)
175+
def testFramework = "com.novocode.junit.JUnitFramework"
176+
}
177+
}
178+
179+
object tests extends Cross[Tests]("8", "default")
180+
181+
object `tests-jni` extends Cross[TestsJni](
182+
if (Properties.isWin) Seq("8", "default")
183+
else Seq.empty[String]
184+
)

directories-jni/src/dev/dirs/jni/WindowsJni.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,13 @@ public String[] winDirs(String... folderIds) {
1616
}
1717

1818
public static Supplier<Windows> getJdkAwareSupplier() {
19-
int jdkVersion = Integer.parseInt(System.getProperty("java.version", "0"));
19+
String javaVersion = System.getProperty("java.version", "0");
20+
if (javaVersion.substring(0, "1.".length()).equals("1."))
21+
javaVersion = javaVersion.substring("1.".length());
22+
int dotIdx = javaVersion.indexOf('.');
23+
if (dotIdx >= 0)
24+
javaVersion = javaVersion.substring(0, dotIdx);
25+
int jdkVersion = Integer.parseInt(javaVersion);
2026
if (jdkVersion >= 23)
2127
return Windows.getDefaultSupplier();
2228
else

src/main/java/dev/dirs/BaseDirectories.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import dev.dirs.impl.Util;
55
import dev.dirs.impl.Windows;
66

7+
import java.util.function.Supplier;
8+
79
/** {@code BaseDirectories} provides paths of user-invisible standard directories, following the conventions of the operating system the library is running on.
810
* <p>
911
* To compute the location of cache, config or data directories for individual projects or applications, use {@link ProjectDirectories} instead.
@@ -245,10 +247,14 @@ public final class BaseDirectories {
245247
* @return A new {@code BaseDirectories} instance.
246248
*/
247249
public static BaseDirectories get() {
248-
return new BaseDirectories();
250+
return new BaseDirectories(Windows.getDefaultSupplier());
251+
}
252+
253+
public static BaseDirectories get(Supplier<Windows> windows) {
254+
return new BaseDirectories(windows);
249255
}
250256

251-
private BaseDirectories() {
257+
private BaseDirectories(Supplier<Windows> windows) {
252258
switch (Constants.operatingSystem) {
253259
case Constants.LIN:
254260
case Constants.BSD:
@@ -275,7 +281,7 @@ private BaseDirectories() {
275281
runtimeDir = null;
276282
break;
277283
case Constants.WIN:
278-
String[] winDirs = Windows.getWinDirs("5E6C858F-0E22-4760-9AFE-EA3317B67173", "3EB685DB-65F9-4CF6-A03A-E3EF65729F3D", "F1B32785-6FBA-4FCF-9D55-7B8E7F157091");
284+
String[] winDirs = windows.get().winDirs("5E6C858F-0E22-4760-9AFE-EA3317B67173", "3EB685DB-65F9-4CF6-A03A-E3EF65729F3D", "F1B32785-6FBA-4FCF-9D55-7B8E7F157091");
279285
homeDir = winDirs[0];
280286
dataDir = winDirs[1];
281287
dataLocalDir = winDirs[2];

src/main/java/dev/dirs/UserDirectories.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import dev.dirs.impl.Util;
55
import dev.dirs.impl.Windows;
66

7+
import java.util.function.Supplier;
8+
79
/** {@code UserDirectories} provides paths of user-facing standard directories, following the conventions of the operating system the library is running on.
810
*
911
* <h2>Examples</h2>
@@ -297,10 +299,14 @@ public final class UserDirectories {
297299
* @return A new {@code UserDirectories} instance.
298300
*/
299301
public static UserDirectories get() {
300-
return new UserDirectories();
302+
return get(Windows.getDefaultSupplier());
303+
}
304+
305+
public static UserDirectories get(Supplier<Windows> windows) {
306+
return new UserDirectories(windows);
301307
}
302308

303-
private UserDirectories() {
309+
private UserDirectories(Supplier<Windows> windows) {
304310
switch (Constants.operatingSystem) {
305311
case Constants.LIN:
306312
case Constants.BSD:
@@ -343,7 +349,7 @@ private UserDirectories() {
343349
videoDir = homeDir + "/Movies";
344350
break;
345351
case Constants.WIN:
346-
String[] winDirs = Windows.getWinDirs(
352+
String[] winDirs = windows.get().winDirs(
347353
"5E6C858F-0E22-4760-9AFE-EA3317B67173",
348354
"4BD8D571-6D19-48D3-BE97-422220080E43",
349355
"B4BFCC3A-DB2C-424C-B029-7FE99A87C641",
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package dev.dirs.jni;
2+
3+
import dev.dirs.*;
4+
import org.junit.Test;
5+
6+
public final class DirectoriesJniTest {
7+
8+
@Test
9+
public void testBaseDirectories() {
10+
BaseDirectories baseDirs = BaseDirectories.get(WindowsJni.getJdkAwareSupplier());
11+
System.out.println(baseDirs);
12+
}
13+
14+
@Test
15+
public void testUserDirectories() {
16+
UserDirectories userDirs = UserDirectories.get(WindowsJni.getJdkAwareSupplier());
17+
System.out.println(userDirs);
18+
}
19+
20+
@Test
21+
public void testProjectDirectories() {
22+
ProjectDirectories projDirs = ProjectDirectories.from("org" /*qualifier*/, "Baz Corp" /*organization*/, "Foo Bar-App" /*project*/, WindowsJni.getJdkAwareSupplier());
23+
System.out.println(projDirs);
24+
}
25+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package dev.dirs.jni;
2+
3+
import dev.dirs.Constants;
4+
import org.junit.Test;
5+
6+
import static org.junit.Assert.assertNotNull;
7+
8+
public final class UtilJniTest {
9+
10+
static {
11+
System.out.println("Tests Java version: " + System.getProperty("java.version"));
12+
}
13+
14+
@Test
15+
public void testPowershellOne() {
16+
if (Constants.operatingSystem == 'w') {
17+
String[] winDirs = WindowsJni.getJdkAwareSupplier().get().winDirs("3EB685DB-65F9-4CF6-A03A-E3EF65729F3D");
18+
for (String winDir : winDirs) {
19+
assertNotNull(winDir);
20+
}
21+
}
22+
}
23+
24+
@Test
25+
public void testPowershell() {
26+
if (Constants.operatingSystem == 'w') {
27+
String[] winDirs = WindowsJni.getJdkAwareSupplier().get().winDirs("3EB685DB-65F9-4CF6-A03A-E3EF65729F3D", "F1B32785-6FBA-4FCF-9D55-7B8E7F157091");
28+
for (String winDir : winDirs) {
29+
assertNotNull(winDir);
30+
}
31+
}
32+
}
33+
34+
}

0 commit comments

Comments
 (0)