Skip to content

Commit 8ec7dcf

Browse files
committed
clean: Replace all assert keywords with Assert
Because assert is *VERY* confusing - because (without -ea) it gets optimized out.
1 parent 042ce26 commit 8ec7dcf

10 files changed

Lines changed: 93 additions & 76 deletions

File tree

AGENTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,4 @@ Note: Tests require Java 25 to compile and run due to the use of modern Java fea
3131
- Do not recommend using `java.util.Objects.requireNonNull()` for null safety, assume `@NonNull`
3232
- Use full file extensions (e.g., `*.yaml` not `*.yml`, but `*.md` instead of `*.markdown`) - it's 2025!
3333
- Do not suggest to always use braces `{}` with `if` statements even for single-line blocks
34-
- Do accept and not comment on the use of `assert` in `*Test.java` files
34+
- Do not accept and please comment to flag up any use of the Java `assert` keyword in `*Test.java` or any other files

src/ch/vorburger/jvmtools/ClasspathTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package ch.vorburger.jvmtools;
22

3-
import static ch.vorburger.jvmtools.Assert.assertTrue;
3+
import static ch.vorburger.test.Assert.assertTrue;
44

55
public class ClasspathTest {
66

src/ch/vorburger/jvmtools/JavaCompilerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package ch.vorburger.jvmtools;
22

3-
import static ch.vorburger.jvmtools.Assert.assertExists;
4-
import static ch.vorburger.jvmtools.Assert.assertTrue;
3+
import static ch.vorburger.test.Assert.assertExists;
4+
import static ch.vorburger.test.Assert.assertTrue;
55

66
import java.nio.file.Path;
77

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package ch.vorburger.jvmtools;
22

3+
import static ch.vorburger.test.Assert.assertTrue;
4+
35
import java.io.IOException;
46

57
public class SourcepathTest {
@@ -10,8 +12,8 @@ public static void main(String[] args) throws IOException {
1012
SourcepathTest.class.getClassLoader(), "ch/vorburger/jvmtools/Hello.java");
1113
var iterator = sourcepath.getJavaFileObjects().iterator();
1214
var jfo = iterator.next();
13-
assert jfo.getName().endsWith("/ch/vorburger/jvmtools/Hello.java");
14-
assert jfo.getCharContent(false).toString().contains("public class Hello {");
15-
assert iterator.hasNext() == false;
15+
assertTrue(jfo.getName().endsWith("/ch/vorburger/jvmtools/Hello.java"));
16+
assertTrue(jfo.getCharContent(false).toString().contains("public class Hello {"));
17+
assertTrue(iterator.hasNext() == false);
1618
}
1719
}
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package ch.vorburger.main.test;
22

3+
import static ch.vorburger.test.Assert.assertTrue;
4+
35
import ch.vorburger.main.MainTester;
46

57
public class ExampleTest {
@@ -8,7 +10,7 @@ public class ExampleTest {
810

911
public static void main(String[] args) throws Exception {
1012
var result = t.test(new Example(), "world");
11-
assert result.exitCode() == 123;
12-
assert "hello, world\n".equals(result.stdout());
13+
assertTrue(result.exitCode() == 123);
14+
assertTrue("hello, world\n".equals(result.stdout()));
1315
}
1416
}
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
package ch.vorburger.jvmtools;
1+
package ch.vorburger.test;
22

33
import java.io.File;
44

55
// TODO Replace with Truth once we can depend on it here
6-
final class Assert {
6+
public final class Assert {
77

8-
static void assertTrue(boolean check) {
8+
public static void assertTrue(boolean check) {
99
if (!check) throw new AssertionError();
1010
}
1111

12-
static void assertTrue(boolean check, Object message) {
12+
public static void assertTrue(boolean check, Object message) {
1313
if (!check) throw new AssertionError(message);
1414
}
1515

16-
static void assertExists(File file) {
16+
public static void assertExists(File file) {
1717
if (!file.exists()) throw new AssertionError(file + " does not exist");
1818
}
1919

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
package dev.enola.be.task;
22

3+
import static ch.vorburger.test.Assert.assertTrue;
4+
35
public class StatusTest {
46

57
public static void main(String[] args) {
68
testIsTerminal();
79
}
810

911
private static void testIsTerminal() {
10-
assert !Status.PENDING.isTerminal() : "PENDING should not be terminal";
11-
assert !Status.IN_PROGRESS.isTerminal() : "IN_PROGRESS should not be terminal";
12-
assert Status.COMPLETED.isTerminal() : "COMPLETED should be terminal";
13-
assert Status.FAILED.isTerminal() : "FAILED should be terminal";
14-
assert Status.CANCELLED.isTerminal() : "CANCELLED should be terminal";
12+
assertTrue(!Status.PENDING.isTerminal(), "PENDING should not be terminal");
13+
assertTrue(!Status.IN_PROGRESS.isTerminal(), "IN_PROGRESS should not be terminal");
14+
assertTrue(Status.COMPLETED.isTerminal(), "COMPLETED should be terminal");
15+
assertTrue(Status.FAILED.isTerminal(), "FAILED should be terminal");
16+
assertTrue(Status.CANCELLED.isTerminal(), "CANCELLED should be terminal");
1517
}
1618
}

src/dev/enola/be/task/TaskExecutorTest.java

Lines changed: 52 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package dev.enola.be.task;
22

3+
import static ch.vorburger.test.Assert.assertTrue;
4+
35
import dev.enola.be.task.test.FailingTask;
46
import dev.enola.be.task.test.ImmediateTask;
57
import dev.enola.be.task.test.SlowTask;
@@ -30,15 +32,15 @@ private static void testCompletedTask() throws Exception {
3032
var task = new ImmediateTask("test");
3133
var result = executor.await(task);
3234
var output = task.output().get();
33-
assert result == output : "The result and output objects must be the same";
34-
assert "Result: test".equals(result) : "Result should match expected output";
35+
assertTrue(result == output, "The result and output objects must be the same");
36+
assertTrue("Result: test".equals(result), "Result should match expected output");
3537

3638
var toString = task.toString();
37-
assert toString.contains("ImmediateTask") : "toString should contain class name";
38-
assert toString.contains("id: " + task.id().toString()) : "toString should contain ID";
39-
assert toString.contains("input: test") : "toString should contain input";
40-
assert toString.contains("output: Result: test") : "toString should contain output";
41-
assert toString.contains("status: COMPLETED") : "toString should contain COMPLETED";
39+
assertTrue(toString.contains("ImmediateTask"), "toString should contain class name");
40+
assertTrue(toString.contains("id: " + task.id().toString()), "toString !contains ID");
41+
assertTrue(toString.contains("input: test"), "toString should contain input");
42+
assertTrue(toString.contains("output: Result: test"), "toString should contain output");
43+
assertTrue(toString.contains("status: COMPLETED"), "toString should contain COMPLETED");
4244
}
4345
}
4446

@@ -54,18 +56,17 @@ private static void testFailingTask(FailingTask.FailureMode failureMode) throws
5456

5557
try {
5658
executor.await(task);
57-
assert false : "Should have thrown an exception";
59+
assertTrue(false, "Should have thrown an exception");
5860
} catch (Throwable e) {
5961
// Expected
6062
}
61-
62-
assert task.status() == Status.FAILED : "Status should be FAILED after exception";
63+
assertTrue(task.status() == Status.FAILED, "Status should be FAILED after exception");
6364

6465
var toString = task.toString();
65-
assert !toString.contains("output") : "toString should not contain output";
66-
assert toString.contains("status: FAILED") : "toString should contain FAILED";
67-
assert toString.contains("failure:") : "toString should contain failure:";
68-
assert toString.contains("exception") : "toString should contain exception";
66+
assertTrue(!toString.contains("output"), "toString should not contain output");
67+
assertTrue(toString.contains("status: FAILED"), "toString should contain FAILED");
68+
assertTrue(toString.contains("failure:"), "toString should contain failure:");
69+
assertTrue(toString.contains("exception"), "toString should contain exception");
6970
}
7071
}
7172

@@ -74,19 +75,21 @@ private static void testTimingOutTask() throws Exception {
7475
var task = new SlowTask("test", 1000, Duration.ofMillis(1));
7576
try {
7677
executor.await(task);
77-
assert false : "Should have thrown an exception due to timeout";
78+
assertTrue(false, "Should have thrown an exception due to timeout");
7879

7980
} catch (UncheckedTaskAwaitException e) {
80-
assert e.getCause() instanceof CancellationException
81-
: "Cause should be CancellationException";
81+
assertTrue(
82+
e.getCause() instanceof CancellationException,
83+
"Cause should be CancellationException");
8284
// Expected
8385
}
84-
assert task.status() == Status.CANCELLED
85-
: "Status should now be CANCELLED, but is " + task.status();
86+
assertTrue(
87+
task.status() == Status.CANCELLED,
88+
"Status should now be CANCELLED, but is " + task.status());
8689

8790
var toString = task.toString();
88-
assert !toString.contains("output") : "toString should not contain output";
89-
assert toString.contains("status: CANCELLED") : "toString should contain CANCELLED";
91+
assertTrue(!toString.contains("output"), "toString should not contain output");
92+
assertTrue(toString.contains("status: CANCELLED"), "toString should contain CANCELLED");
9093
}
9194
}
9295

@@ -99,13 +102,14 @@ private static void testCancelTask() throws Exception {
99102

100103
try {
101104
task.await();
102-
assert false : "Should have thrown CancellationException";
105+
assertTrue(false, "Should have thrown CancellationException");
103106
} catch (UncheckedTaskAwaitException e) {
104107
// Expected
105108
}
106109

107-
assert task.status() == Status.CANCELLED
108-
: "Status should be CANCELLED after cancel(), but is " + task.status();
110+
assertTrue(
111+
task.status() == Status.CANCELLED,
112+
"Status should be CANCELLED after cancel(), but is " + task.status());
109113
}
110114
}
111115

@@ -116,7 +120,7 @@ private static void testGetTask() throws Exception {
116120
executor.async(task);
117121

118122
var retrieved = executor.get(taskId);
119-
assert retrieved.id().equals(taskId) : "Retrieved task ID should match";
123+
assertTrue(retrieved.id().equals(taskId), "Retrieved task ID should match");
120124
}
121125
}
122126

@@ -125,10 +129,11 @@ private static void testGetNonExistentTask() throws Exception {
125129
var randomId = UUID.randomUUID();
126130
try {
127131
executor.get(randomId);
128-
assert false : "Should have thrown IllegalArgumentException";
132+
assertTrue(false, "Should have thrown IllegalArgumentException");
129133
} catch (IllegalArgumentException e) {
130-
assert e.getMessage().contains("No such task")
131-
: "Error message should mention 'No such task'";
134+
assertTrue(
135+
e.getMessage().contains("No such task"),
136+
"Error message should mention 'No such task'");
132137
}
133138
}
134139
}
@@ -142,29 +147,30 @@ private static void testListTasks() throws Exception {
142147
executor.async(task2);
143148

144149
var taskIds = executor.list();
145-
assert taskIds.size() == 2 : "Should have 2 tasks, got " + taskIds.size();
146-
assert taskIds.contains(task1.id()) : "Should contain task1 ID";
147-
assert taskIds.contains(task2.id()) : "Should contain task2 ID";
150+
assertTrue(taskIds.size() == 2, "Should have 2 tasks, got " + taskIds.size());
151+
assertTrue(taskIds.contains(task1.id()), "Should contain task1 ID");
152+
assertTrue(taskIds.contains(task2.id()), "Should contain task2 ID");
148153
}
149154
}
150155

151156
private static void testTaskStatusProgression() throws Exception {
152157
try (var executor = new TaskExecutor()) {
153158
var task = new SlowTask("test", 1000);
154159

155-
assert task.status() == Status.PENDING : "Status should be PENDING: " + task.status();
156-
assert task.toString().contains("status: PENDING") : "toString !PENDING";
160+
assertTrue(
161+
task.status() == Status.PENDING, "Status should be PENDING: " + task.status());
162+
assertTrue(task.toString().contains("status: PENDING"), "toString !PENDING");
157163

158164
executor.async(task);
159165

160166
var status = task.status();
161-
assert status == Status.IN_PROGRESS : "Status should be IN_PROGRESS, got " + status;
162-
assert task.toString().contains("status: IN_PROGRESS") : "toString !IN_PROGRESS";
167+
assertTrue(status == Status.IN_PROGRESS, "Status should be IN_PROGRESS, got " + status);
168+
assertTrue(task.toString().contains("status: IN_PROGRESS"), "toString !IN_PROGRESS");
163169

164170
task.await();
165171

166-
assert task.status() == Status.COMPLETED : "Final status should be COMPLETED";
167-
assert task.toString().contains("status: COMPLETED") : "toString !COMPLETED";
172+
assertTrue(task.status() == Status.COMPLETED, "Final status should be COMPLETED");
173+
assertTrue(task.toString().contains("status: COMPLETED"), "toString !COMPLETED");
168174
}
169175
}
170176

@@ -175,10 +181,11 @@ private static void testResubmitTaskFailure() throws Exception {
175181

176182
try {
177183
executor.async(task);
178-
assert false : "Should have thrown IllegalStateException on resubmit";
184+
assertTrue(false, "Should have thrown IllegalStateException on resubmit");
179185
} catch (IllegalStateException e) {
180-
assert e.getMessage().contains("already submitted")
181-
: "Error message should mention 'already submitted'";
186+
assertTrue(
187+
e.getMessage().contains("already submitted"),
188+
"Error message should mention 'already submitted'");
182189
}
183190
}
184191
}
@@ -191,10 +198,11 @@ private static void testSubmitTaskToAnotherExecutorFailure() throws Exception {
191198
try (var executor2 = new TaskExecutor()) {
192199
try {
193200
executor2.async(task);
194-
assert false : "Should have thrown IllegalStateException on resubmit";
201+
assertTrue(false, "Should have thrown IllegalStateException on resubmit");
195202
} catch (IllegalStateException e) {
196-
assert e.getMessage().contains("not PENDING")
197-
: "Error message should mention 'not PENDING'";
203+
assertTrue(
204+
e.getMessage().contains("not PENDING"),
205+
"Error message should mention 'not PENDING'");
198206
}
199207
}
200208
}
@@ -216,7 +224,7 @@ protected String execute() {
216224
}
217225
};
218226
var threadName = executor.await(task);
219-
assert threadName.equals(task.id().toString());
227+
assertTrue(threadName.equals(task.id().toString()));
220228
}
221229
}
222230
}

src/dev/enola/be/task/TaskTest.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package dev.enola.be.task;
22

3+
import static ch.vorburger.test.Assert.assertTrue;
4+
35
import dev.enola.be.task.test.ImmediateTask;
46

57
public class TaskTest {
@@ -13,23 +15,24 @@ public static void main(String[] args) throws Exception {
1315

1416
private static void testTaskHasNonNullId() {
1517
var task = new ImmediateTask("test");
16-
assert task.id() != null : "Task ID should not be null";
18+
assertTrue(task.id() != null, "Task ID should not be null");
1719
}
1820

1921
private static void testTaskInputIsStored() {
2022
var task = new ImmediateTask("test input");
21-
assert "test input".equals(task.input()) : "Task input should match";
23+
assertTrue("test input".equals(task.input()), "Task input should match");
2224
}
2325

2426
private static void testInitialStatusIsPending() {
2527
var task = new ImmediateTask("test");
26-
assert task.status() == Status.PENDING
27-
: "Initial status should be PENDING, got " + task.status();
28+
assertTrue(
29+
task.status() == Status.PENDING,
30+
"Initial status should be PENDING, got " + task.status());
2831
}
2932

3033
private static void testMultipleTasksHaveDifferentIds() {
3134
var task1 = new ImmediateTask("test1");
3235
var task2 = new ImmediateTask("test2");
33-
assert !task1.id().equals(task2.id()) : "Different tasks should have different IDs";
36+
assertTrue(!task1.id().equals(task2.id()), "Different tasks should have different IDs");
3437
}
3538
}

test.sh

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,16 @@ find src -name '*.java' ! -name '*Test.java' ! -name 'Test*.java' -print0 \
1010
find src \( -name '*Test.java' -o -name 'Test*.java' \) -print0 \
1111
| xargs -0 javac -cp .build/classes -d .build/test-classes
1212

13-
java -ea -cp .build/classes:.build/test-classes:src ch.vorburger.main.test.ExampleTest
13+
java -cp .build/classes:.build/test-classes:src ch.vorburger.main.test.ExampleTest
1414

15-
java -ea -cp .build/classes:.build/test-classes:src ch.vorburger.jvmtools.ClasspathTest
16-
java -ea -cp .build/classes:.build/test-classes:src ch.vorburger.jvmtools.SourcepathTest
17-
java -ea -cp .build/classes:.build/test-classes:src ch.vorburger.jvmtools.JavaCompilerTest
18-
java -ea -cp .build/classes:.build/test-classes:src ch.vorburger.jvmtools.Bootstrap
15+
java -cp .build/classes:.build/test-classes:src ch.vorburger.jvmtools.ClasspathTest
16+
java -cp .build/classes:.build/test-classes:src ch.vorburger.jvmtools.SourcepathTest
17+
java -cp .build/classes:.build/test-classes:src ch.vorburger.jvmtools.JavaCompilerTest
18+
java -cp .build/classes:.build/test-classes:src ch.vorburger.jvmtools.Bootstrap
1919

20-
java -ea -cp .build/classes:.build/test-classes dev.enola.be.task.StatusTest
21-
java -ea -cp .build/classes:.build/test-classes dev.enola.be.task.TaskTest
22-
java -ea -cp .build/classes:.build/test-classes dev.enola.be.task.TaskExecutorTest
20+
java -cp .build/classes:.build/test-classes dev.enola.be.task.StatusTest
21+
java -cp .build/classes:.build/test-classes dev.enola.be.task.TaskTest
22+
java -cp .build/classes:.build/test-classes dev.enola.be.task.TaskExecutorTest
2323

2424
if command -v pre-commit &> /dev/null
2525
then

0 commit comments

Comments
 (0)