Skip to content

Commit 20f3000

Browse files
committed
Make tests work on all operating systems
1 parent 60fc1ec commit 20f3000

File tree

3 files changed

+51
-32
lines changed

3 files changed

+51
-32
lines changed

src/test/java/org/gradlex/javamodule/packaging/test/JavaModulePackagingOptionsTest.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ void can_configure_java_options() {
9696

9797
build.build(":app:jpackage");
9898

99-
assertThat(build.file("app/build/packages/macos/app.app/Contents/app/app.cfg").getAsPath()).hasContent("""
99+
assertThat(build.appContentsFolder().file("app/app.cfg").getAsPath()).hasContent("""
100100
[Application]
101101
app.mainmodule=org.example.app/org.example.app.Main
102102
@@ -133,7 +133,7 @@ void can_set_verbose_option() {
133133

134134
var result = build.build(":app:jpackage");
135135

136-
assertThat(result.getOutput()).contains("Creating app package: app.app in");
136+
assertThat(result.getOutput()).contains("Creating app package: ");
137137
}
138138

139139
@Test
@@ -199,9 +199,8 @@ void can_build_package_in_one_step() {
199199

200200
build.build(":app:jpackage");
201201

202-
assertThat(build.file("app/build/packages/macos/app-1.0.dmg").getAsPath()).exists();
203-
assertThat(build.file("app/build/packages/macos/app-1.0.dmg.sha256").getAsPath()).exists();
204-
assertThat(build.projectDir.dir("app/build/packages/macos").getAsPath()).isDirectoryNotContaining(
205-
f -> f.toFile().isDirectory());
202+
assertThat(build.appImageFolder().getAsPath()).isDirectoryContaining(f ->
203+
f.getFileName().toString().contains("app") && f.getFileName().toString().contains("1.0"));
204+
assertThat(build.appImageFolder().getAsPath()).isDirectoryNotContaining(f -> f.toFile().isDirectory());
206205
}
207206
}

src/test/java/org/gradlex/javamodule/packaging/test/JavaModulePackagingResourcesTest.java

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121
import org.junit.jupiter.api.Test;
2222

2323
import static org.assertj.core.api.Assertions.assertThat;
24+
import static org.gradlex.javamodule.packaging.test.fixture.GradleBuild.currentTarget;
25+
import static org.gradlex.javamodule.packaging.test.fixture.GradleBuild.runsOnLinux;
26+
import static org.gradlex.javamodule.packaging.test.fixture.GradleBuild.runsOnMacos;
27+
import static org.gradlex.javamodule.packaging.test.fixture.GradleBuild.runsOnWindows;
2428

2529
/**
2630
* Tests for adding custom resources to the image/package.
@@ -97,23 +101,31 @@ void can_add_resources_for_jpackage() {
97101
// Use 'src/main/resourcesPackage', which is the convention
98102

99103
// resources that are not known - will be ignored
100-
build.projectDir.file("app/src/main/resourcesPackage/windows/dummy.txt").writeText("");
101-
build.projectDir.file("app/src/main/resourcesPackage/macos/dummy.txt").writeText("");
102104
build.projectDir.file("app/src/main/resourcesPackage/linux/dummy.txt").writeText("");
105+
build.projectDir.file("app/src/main/resourcesPackage/macos/dummy.txt").writeText("");
106+
build.projectDir.file("app/src/main/resourcesPackage/windows/dummy.txt").writeText("");
103107

104108
// icons will be used
105-
build.projectDir.file("app/src/main/resourcesPackage/windows/icon.png").create();
109+
build.projectDir.file("app/src/main/resourcesPackage/linux/icon.png").create();
106110
build.projectDir.file("app/src/main/resourcesPackage/macos/icon.icns").create();
107-
build.projectDir.file("app/src/main/resourcesPackage/linux/icon.ico").create();
111+
build.projectDir.file("app/src/main/resourcesPackage/windows/icon.ico").create();
108112

109113
build.build(":app:jpackage");
110114

111-
// Intermediate location to collect files
112-
assertThat(build.file("app/build/tmp/jpackage/macos/jpackage-resources/dummy.txt").getAsPath()).exists();
113-
assertThat(build.file("app/build/tmp/jpackage/macos/jpackage-resources/app.icns").getAsPath()).exists();
115+
String icon = "app.icns";
116+
if (runsOnLinux()) icon = "app.png";
117+
if (runsOnWindows()) icon = "app.ico";
114118

115-
// Icons end up in Resources
116-
assertThat(build.file("app/build/packages/macos/app.app/Contents/Resources/app.icns").getAsPath()).hasSize(0);
119+
// Intermediate location to collect files
120+
assertThat(build.file("app/build/tmp/jpackage/%s/jpackage-resources/dummy.txt".formatted(currentTarget()))
121+
.getAsPath()).exists();
122+
assertThat(build.file("app/build/tmp/jpackage/%s/jpackage-resources/%s".formatted(currentTarget(), icon))
123+
.getAsPath()).exists();
124+
125+
// icons end up in Resources
126+
String resourcesFolder = "";
127+
if (runsOnMacos()) resourcesFolder = "Resources/";
128+
assertThat(build.appContentsFolder().file(resourcesFolder + icon).getAsPath()).hasSize(0);
117129
}
118130

119131
@Test
@@ -130,8 +142,7 @@ void can_add_resources_for_app_folder() {
130142

131143
build.build(":app:jpackage");
132144

133-
// Icons end up in Resources
134-
assertThat(build.file("app/build/packages/macos/app.app/Contents/app/dummy.txt").getAsPath()).exists();
145+
assertThat(build.appContentsFolder().file("app/dummy.txt").getAsPath()).exists();
135146
}
136147

137148
@Test
@@ -152,7 +163,6 @@ void can_add_resources_to_image_root() {
152163

153164
build.build(":app:jpackage");
154165

155-
// Icons end up in Resources
156-
assertThat(build.file("app/build/packages/macos/app.app/Contents/customFolder/dummy.txt").getAsPath()).exists();
166+
assertThat(build.appContentsFolder().file("customFolder/dummy.txt").getAsPath()).exists();
157167
}
158168
}

src/test/java/org/gradlex/javamodule/packaging/test/fixture/GradleBuild.java

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -108,19 +108,22 @@ public WritableFile file(String path) {
108108
return new WritableFile(projectDir, path);
109109
}
110110

111-
public BuildResult build(String task) {
112-
return runner(task).build();
111+
public Directory appImageFolder() {
112+
if (runsOnMacos()) return projectDir.dir("app/build/packages/macos");
113+
if (runsOnLinux()) return projectDir.dir("app/build/packages/ubuntu");
114+
if (runsOnWindows()) return projectDir.dir("app/build/packages/windows");
115+
throw new IllegalStateException("unknown os");
113116
}
114117

115-
public BuildResult run() {
116-
return runner("run").build();
118+
public Directory appContentsFolder() {
119+
if (runsOnMacos()) return projectDir.dir("app/build/packages/macos/app.app/Contents");
120+
if (runsOnLinux()) return projectDir.dir("app/build/packages/ubuntu/app/lib");
121+
if (runsOnWindows()) return projectDir.dir("app/build/packages/windows/app");
122+
throw new IllegalStateException("unknown os");
117123
}
118124

119-
public BuildResult printRuntimeJars() {
120-
return runner(":app:printRuntimeJars", "-q").build();
121-
}
122-
public BuildResult printCompileJars() {
123-
return runner(":app:printCompileJars", "-q").build();
125+
public BuildResult build(String task) {
126+
return runner(task).build();
124127
}
125128

126129
public BuildResult fail(String task) {
@@ -162,6 +165,13 @@ private static Path createBuildTmpDir() {
162165
}
163166
}
164167

168+
public static String currentTarget() {
169+
if (runsOnMacos()) return "macos";
170+
if (runsOnLinux()) return "ubuntu";
171+
if (runsOnWindows()) return "windows";
172+
throw new IllegalStateException("unknown os");
173+
}
174+
165175
public static boolean runsOnWindows() {
166176
return hostOs().contains("win");
167177
}
@@ -175,9 +185,9 @@ public static boolean runsOnLinux() {
175185
}
176186

177187
public static String hostOs() {
178-
return System.getProperty("os.name").toLowerCase()
179-
.replace(" ", "")
180-
.replace("macosx", "macos");
188+
String hostOs = System.getProperty("os.name").toLowerCase().replace(" ", "");
189+
if (hostOs.startsWith("mac")) return "macos";
190+
if (hostOs.startsWith("win")) return "windows";
191+
return "linux";
181192
}
182-
183193
}

0 commit comments

Comments
 (0)