You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2026/03/02 17:35:44 UTC

(groovy) 04/04: minor items

This is an automated email from the ASF dual-hosted git repository.

emilles pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 90e7ea2d42595dc5e330574d8f9cfce75e3f10fb
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Mon Mar 2 11:15:20 2026 -0600

    minor items
---
 build.gradle                                       |   1 +
 .../concurrentlinkedhashmap/LinkedDequeTest.java   | 119 +++++++-------
 .../groovy/util/CharSequenceReaderTest.java        | 178 ++++++++++++---------
 .../groovy/cli/CliBuilderTestCase.groovy           |  26 ++-
 .../groovy/groovy/bugs/TestSupport.java            |   8 +-
 .../groovy/groovy/util/HeadlessTestSupport.groovy  |  20 +--
 src/testFixtures/groovy/groovy/util/XmlAssert.java |   8 +-
 .../codehaus/groovy/ast/builder/AstAssert.groovy   |  88 +++++-----
 .../org/codehaus/groovy/classgen/TestSupport.java  |   9 +-
 .../src/spec/test/builder/CliBuilderTest.groovy    |   9 +-
 .../src/spec/test/builder/CliBuilderTest.groovy    |  18 ++-
 11 files changed, 264 insertions(+), 220 deletions(-)

diff --git a/build.gradle b/build.gradle
index ed3f22feaa..f14b9add9e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -125,6 +125,7 @@ dependencies {
 
     testFixturesImplementation projects.groovyXml
     testFixturesImplementation projects.groovyTest
+    testFixturesImplementation "org.junit.jupiter:junit-jupiter-api:${versions.junit5}"
     testFixturesImplementation "xmlunit:xmlunit:${versions.xmlunit}"
 
     tools "com.eed3si9n.jarjar:ant-jarjar:${versions.jarjar}"
diff --git a/src/test/java/org/apache/groovy/util/concurrent/concurrentlinkedhashmap/LinkedDequeTest.java b/src/test/java/org/apache/groovy/util/concurrent/concurrentlinkedhashmap/LinkedDequeTest.java
index cabdcddc65..4e57a15528 100644
--- a/src/test/java/org/apache/groovy/util/concurrent/concurrentlinkedhashmap/LinkedDequeTest.java
+++ b/src/test/java/org/apache/groovy/util/concurrent/concurrentlinkedhashmap/LinkedDequeTest.java
@@ -18,7 +18,6 @@
  */
 package org.apache.groovy.util.concurrent.concurrentlinkedhashmap;
 
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import java.util.ArrayList;
@@ -27,19 +26,19 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.NoSuchElementException;
 
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
- * JUnit 5 tests for LinkedDeque class.
+ * Unit tests for {@link LinkedDeque}.
  */
 class LinkedDequeTest {
 
-    private LinkedDeque<TestNode> deque;
-
-    @BeforeEach
-    void setUp() {
-        deque = new LinkedDeque<>();
-    }
+    private LinkedDeque<TestNode> deque = new LinkedDeque<>();
 
     // Test node implementation
     static class TestNode implements Linked<TestNode> {
@@ -91,7 +90,7 @@ class LinkedDequeTest {
     void testAddFirst() {
         TestNode node = new TestNode("first");
         deque.addFirst(node);
-        
+
         assertFalse(deque.isEmpty());
         assertEquals(1, deque.size());
         assertSame(node, deque.peekFirst());
@@ -101,7 +100,7 @@ class LinkedDequeTest {
     void testAddLast() {
         TestNode node = new TestNode("last");
         deque.addLast(node);
-        
+
         assertFalse(deque.isEmpty());
         assertEquals(1, deque.size());
         assertSame(node, deque.peekLast());
@@ -236,7 +235,7 @@ class LinkedDequeTest {
         TestNode second = new TestNode("second");
         deque.addLast(first);
         deque.addLast(second);
-        
+
         assertSame(first, deque.pollFirst());
         assertEquals(1, deque.size());
         assertSame(second, deque.peekFirst());
@@ -248,7 +247,7 @@ class LinkedDequeTest {
         TestNode second = new TestNode("second");
         deque.addLast(first);
         deque.addLast(second);
-        
+
         assertSame(second, deque.pollLast());
         assertEquals(1, deque.size());
         assertSame(first, deque.peekLast());
@@ -283,7 +282,7 @@ class LinkedDequeTest {
         TestNode second = new TestNode("second");
         deque.addLast(first);
         deque.addLast(second);
-        
+
         assertSame(first, deque.removeFirst());
         assertEquals(1, deque.size());
     }
@@ -294,7 +293,7 @@ class LinkedDequeTest {
         TestNode second = new TestNode("second");
         deque.addLast(first);
         deque.addLast(second);
-        
+
         assertSame(second, deque.removeLast());
         assertEquals(1, deque.size());
     }
@@ -303,7 +302,7 @@ class LinkedDequeTest {
     void testRemoveObject() {
         TestNode node = new TestNode("to-remove");
         deque.addFirst(node);
-        
+
         assertTrue(deque.remove(node));
         assertTrue(deque.isEmpty());
     }
@@ -313,7 +312,7 @@ class LinkedDequeTest {
         TestNode node1 = new TestNode("in-deque");
         TestNode node2 = new TestNode("not-in-deque");
         deque.addFirst(node1);
-        
+
         assertFalse(deque.remove(node2));
         assertEquals(1, deque.size());
     }
@@ -327,7 +326,7 @@ class LinkedDequeTest {
     void testContains() {
         TestNode node = new TestNode("contained");
         deque.addFirst(node);
-        
+
         assertTrue(deque.contains(node));
     }
 
@@ -336,7 +335,7 @@ class LinkedDequeTest {
         TestNode node1 = new TestNode("in-deque");
         TestNode node2 = new TestNode("not-in-deque");
         deque.addFirst(node1);
-        
+
         assertFalse(deque.contains(node2));
     }
 
@@ -350,11 +349,11 @@ class LinkedDequeTest {
         deque.addLast(new TestNode("a"));
         deque.addLast(new TestNode("b"));
         deque.addLast(new TestNode("c"));
-        
+
         assertEquals(3, deque.size());
-        
+
         deque.clear();
-        
+
         assertTrue(deque.isEmpty());
         assertEquals(0, deque.size());
     }
@@ -363,7 +362,7 @@ class LinkedDequeTest {
     void testPush() {
         TestNode node = new TestNode("pushed");
         deque.push(node);
-        
+
         assertSame(node, deque.peekFirst());
     }
 
@@ -371,7 +370,7 @@ class LinkedDequeTest {
     void testPop() {
         TestNode node = new TestNode("popped");
         deque.push(node);
-        
+
         assertSame(node, deque.pop());
         assertTrue(deque.isEmpty());
     }
@@ -386,16 +385,16 @@ class LinkedDequeTest {
         TestNode a = new TestNode("a");
         TestNode b = new TestNode("b");
         TestNode c = new TestNode("c");
-        
+
         deque.addLast(a);
         deque.addLast(b);
         deque.addLast(c);
-        
+
         List<String> values = new ArrayList<>();
         for (TestNode node : deque) {
             values.add(node.value);
         }
-        
+
         assertEquals(Arrays.asList("a", "b", "c"), values);
     }
 
@@ -415,10 +414,10 @@ class LinkedDequeTest {
     void testIteratorRemoveUnsupported() {
         TestNode node = new TestNode("test");
         deque.addFirst(node);
-        
+
         Iterator<TestNode> it = deque.iterator();
         it.next();
-        
+
         assertThrows(UnsupportedOperationException.class, it::remove);
     }
 
@@ -427,17 +426,17 @@ class LinkedDequeTest {
         TestNode a = new TestNode("a");
         TestNode b = new TestNode("b");
         TestNode c = new TestNode("c");
-        
+
         deque.addLast(a);
         deque.addLast(b);
         deque.addLast(c);
-        
+
         List<String> values = new ArrayList<>();
         Iterator<TestNode> it = deque.descendingIterator();
         while (it.hasNext()) {
             values.add(it.next().value);
         }
-        
+
         assertEquals(Arrays.asList("c", "b", "a"), values);
     }
 
@@ -451,7 +450,7 @@ class LinkedDequeTest {
     void testRemoveFirstOccurrence() {
         TestNode node = new TestNode("target");
         deque.addFirst(node);
-        
+
         assertTrue(deque.removeFirstOccurrence(node));
         assertTrue(deque.isEmpty());
     }
@@ -461,7 +460,7 @@ class LinkedDequeTest {
         TestNode node1 = new TestNode("in");
         TestNode node2 = new TestNode("out");
         deque.addFirst(node1);
-        
+
         assertFalse(deque.removeFirstOccurrence(node2));
     }
 
@@ -469,7 +468,7 @@ class LinkedDequeTest {
     void testRemoveLastOccurrence() {
         TestNode node = new TestNode("target");
         deque.addLast(node);
-        
+
         assertTrue(deque.removeLastOccurrence(node));
         assertTrue(deque.isEmpty());
     }
@@ -479,11 +478,11 @@ class LinkedDequeTest {
         TestNode a = new TestNode("a");
         TestNode b = new TestNode("b");
         TestNode c = new TestNode("c");
-        
+
         deque.addLast(a);
         deque.addLast(b);
         deque.addLast(c);
-        
+
         assertTrue(deque.removeAll(Arrays.asList(a, c)));
         assertEquals(1, deque.size());
         assertSame(b, deque.peekFirst());
@@ -499,13 +498,13 @@ class LinkedDequeTest {
         TestNode a = new TestNode("a");
         TestNode b = new TestNode("b");
         TestNode c = new TestNode("c");
-        
+
         deque.addLast(a);
         deque.addLast(b);
         deque.addLast(c);
-        
+
         deque.moveToFront(c);
-        
+
         assertSame(c, deque.peekFirst());
         assertSame(b, deque.peekLast());
     }
@@ -514,12 +513,12 @@ class LinkedDequeTest {
     void testMoveToFrontAlreadyFirst() {
         TestNode a = new TestNode("a");
         TestNode b = new TestNode("b");
-        
+
         deque.addLast(a);
         deque.addLast(b);
-        
+
         deque.moveToFront(a);
-        
+
         assertSame(a, deque.peekFirst());
         assertSame(b, deque.peekLast());
     }
@@ -529,13 +528,13 @@ class LinkedDequeTest {
         TestNode a = new TestNode("a");
         TestNode b = new TestNode("b");
         TestNode c = new TestNode("c");
-        
+
         deque.addLast(a);
         deque.addLast(b);
         deque.addLast(c);
-        
+
         deque.moveToBack(a);
-        
+
         assertSame(b, deque.peekFirst());
         assertSame(a, deque.peekLast());
     }
@@ -544,12 +543,12 @@ class LinkedDequeTest {
     void testMoveToBackAlreadyLast() {
         TestNode a = new TestNode("a");
         TestNode b = new TestNode("b");
-        
+
         deque.addLast(a);
         deque.addLast(b);
-        
+
         deque.moveToBack(b);
-        
+
         assertSame(a, deque.peekFirst());
         assertSame(b, deque.peekLast());
     }
@@ -559,22 +558,22 @@ class LinkedDequeTest {
         TestNode a = new TestNode("a");
         TestNode b = new TestNode("b");
         TestNode c = new TestNode("c");
-        
+
         deque.addLast(a);
         deque.addLast(b);
         deque.addLast(c);
-        
+
         assertEquals(3, deque.size());
-        
+
         deque.removeFirst();
         assertEquals(2, deque.size());
         assertSame(b, deque.peekFirst());
-        
+
         deque.removeLast();
         assertEquals(1, deque.size());
         assertSame(b, deque.peekFirst());
         assertSame(b, deque.peekLast());
-        
+
         deque.remove(b);
         assertTrue(deque.isEmpty());
     }
@@ -583,7 +582,7 @@ class LinkedDequeTest {
     void testAddFirstDuplicateThrows() {
         TestNode node = new TestNode("dup");
         deque.addFirst(node);
-        
+
         assertThrows(IllegalArgumentException.class, () -> deque.addFirst(node));
     }
 
@@ -591,7 +590,7 @@ class LinkedDequeTest {
     void testAddLastDuplicateThrows() {
         TestNode node = new TestNode("dup");
         deque.addLast(node);
-        
+
         assertThrows(IllegalArgumentException.class, () -> deque.addLast(node));
     }
 
@@ -599,7 +598,7 @@ class LinkedDequeTest {
     void testSingleElement() {
         TestNode single = new TestNode("single");
         deque.addFirst(single);
-        
+
         assertSame(single, deque.peekFirst());
         assertSame(single, deque.peekLast());
         assertSame(deque.removeFirst(), deque.peekFirst() == null ? single : null);
@@ -610,13 +609,13 @@ class LinkedDequeTest {
         TestNode a = new TestNode("a");
         TestNode b = new TestNode("b");
         TestNode c = new TestNode("c");
-        
+
         deque.addLast(a);
         deque.addLast(b);
         deque.addLast(c);
-        
+
         assertTrue(deque.remove(b));
-        
+
         assertEquals(2, deque.size());
         assertSame(a, deque.peekFirst());
         assertSame(c, deque.peekLast());
diff --git a/src/test/java/org/codehaus/groovy/util/CharSequenceReaderTest.java b/src/test/java/org/codehaus/groovy/util/CharSequenceReaderTest.java
index 01f5904c0d..2da2e42f83 100644
--- a/src/test/java/org/codehaus/groovy/util/CharSequenceReaderTest.java
+++ b/src/test/java/org/codehaus/groovy/util/CharSequenceReaderTest.java
@@ -20,7 +20,10 @@ package org.codehaus.groovy.util;
 
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Unit tests for {@link CharSequenceReader}.
@@ -29,99 +32,109 @@ class CharSequenceReaderTest {
 
     @Test
     void testReadSingleCharacter() {
-        CharSequenceReader reader = new CharSequenceReader("abc");
-        assertEquals('a', reader.read());
-        assertEquals('b', reader.read());
-        assertEquals('c', reader.read());
-        assertEquals(-1, reader.read());
+        try (var reader = new CharSequenceReader("abc")) {
+            assertEquals('a', reader.read());
+            assertEquals('b', reader.read());
+            assertEquals('c', reader.read());
+            assertEquals(-1, reader.read());
+        }
     }
 
     @Test
     void testReadIntoArray() {
-        CharSequenceReader reader = new CharSequenceReader("hello world");
-        char[] buffer = new char[5];
-        int count = reader.read(buffer, 0, 5);
-        assertEquals(5, count);
-        assertArrayEquals("hello".toCharArray(), buffer);
+        try (var reader = new CharSequenceReader("hello world")) {
+            char[] buffer = new char[5];
+            int count = reader.read(buffer, 0, 5);
+            assertEquals(5, count);
+            assertArrayEquals("hello".toCharArray(), buffer);
+        }
     }
 
     @Test
     void testReadIntoArrayWithOffset() {
-        CharSequenceReader reader = new CharSequenceReader("test");
-        char[] buffer = new char[10];
-        buffer[0] = 'x';
-        buffer[1] = 'y';
-        int count = reader.read(buffer, 2, 4);
-        assertEquals(4, count);
-        assertEquals('x', buffer[0]);
-        assertEquals('y', buffer[1]);
-        assertEquals('t', buffer[2]);
-        assertEquals('e', buffer[3]);
-        assertEquals('s', buffer[4]);
-        assertEquals('t', buffer[5]);
+        try (var reader = new CharSequenceReader("test")) {
+            char[] buffer = new char[10];
+            buffer[0] = 'x';
+            buffer[1] = 'y';
+            int count = reader.read(buffer, 2, 4);
+            assertEquals(4, count);
+            assertEquals('x', buffer[0]);
+            assertEquals('y', buffer[1]);
+            assertEquals('t', buffer[2]);
+            assertEquals('e', buffer[3]);
+            assertEquals('s', buffer[4]);
+            assertEquals('t', buffer[5]);
+        }
     }
 
     @Test
     void testReadBeyondEnd() {
-        CharSequenceReader reader = new CharSequenceReader("ab");
-        char[] buffer = new char[5];
-        int count = reader.read(buffer, 0, 5);
-        assertEquals(2, count);
-        assertEquals('a', buffer[0]);
-        assertEquals('b', buffer[1]);
+        try (var reader = new CharSequenceReader("ab")) {
+            char[] buffer = new char[5];
+            int count = reader.read(buffer, 0, 5);
+            assertEquals(2, count);
+            assertEquals('a', buffer[0]);
+            assertEquals('b', buffer[1]);
 
-        count = reader.read(buffer, 0, 5);
-        assertEquals(-1, count);
+            count = reader.read(buffer, 0, 5);
+            assertEquals(-1, count);
+        }
     }
 
     @Test
     void testMarkAndReset() {
-        CharSequenceReader reader = new CharSequenceReader("abcdef");
-        assertEquals('a', reader.read());
-        assertEquals('b', reader.read());
-        reader.mark(100);
-        assertEquals('c', reader.read());
-        assertEquals('d', reader.read());
-        reader.reset();
-        assertEquals('c', reader.read());
-        assertEquals('d', reader.read());
+        try (var reader = new CharSequenceReader("abcdef")) {
+            assertEquals('a', reader.read());
+            assertEquals('b', reader.read());
+            reader.mark(100);
+            assertEquals('c', reader.read());
+            assertEquals('d', reader.read());
+            reader.reset();
+            assertEquals('c', reader.read());
+            assertEquals('d', reader.read());
+        }
     }
 
     @Test
     void testMarkSupported() {
-        CharSequenceReader reader = new CharSequenceReader("test");
-        assertTrue(reader.markSupported());
+        try (var reader = new CharSequenceReader("test")) {
+            assertTrue(reader.markSupported());
+        }
     }
 
     @Test
     void testSkip() {
-        CharSequenceReader reader = new CharSequenceReader("abcdefgh");
-        assertEquals('a', reader.read());
-        long skipped = reader.skip(3);
-        assertEquals(3, skipped);
-        assertEquals('e', reader.read());
+        try (var reader = new CharSequenceReader("abcdefgh")) {
+            assertEquals('a', reader.read());
+            long skipped = reader.skip(3);
+            assertEquals(3, skipped);
+            assertEquals('e', reader.read());
+        }
     }
 
     @Test
     void testSkipBeyondEnd() {
-        CharSequenceReader reader = new CharSequenceReader("abc");
-        long skipped = reader.skip(10);
-        assertEquals(3, skipped);
-        assertEquals(-1, reader.read());
+        try (var reader = new CharSequenceReader("abc")) {
+            long skipped = reader.skip(10);
+            assertEquals(3, skipped);
+            assertEquals(-1, reader.read());
+        }
     }
 
     @Test
     void testSkipNegativeThrows() {
-        CharSequenceReader reader = new CharSequenceReader("test");
-        assertThrows(IllegalArgumentException.class, () -> reader.skip(-1));
+        try (var reader = new CharSequenceReader("test")) {
+            assertThrows(IllegalArgumentException.class, () -> reader.skip(-1));
+        }
     }
 
     @Test
     void testSkipAtEnd() {
-        CharSequenceReader reader = new CharSequenceReader("a");
-        reader.read();
-        long skipped = reader.skip(5);
-        assertEquals(-1, skipped);
+        try (var reader = new CharSequenceReader("a")) {
+            reader.read();
+            long skipped = reader.skip(5);
+            assertEquals(-1, skipped);
+        }
     }
 
     @Test
@@ -138,52 +151,59 @@ class CharSequenceReaderTest {
     @Test
     void testToString() {
         String input = "hello world";
-        CharSequenceReader reader = new CharSequenceReader(input);
-        assertEquals(input, reader.toString());
+        try (var reader = new CharSequenceReader(input)) {
+            assertEquals(input, reader.toString());
+        }
     }
 
     @Test
     void testNullInput() {
-        CharSequenceReader reader = new CharSequenceReader(null);
-        assertEquals(-1, reader.read());
-        assertEquals("", reader.toString());
+        try (var reader = new CharSequenceReader(null)) {
+            assertEquals(-1, reader.read());
+            assertEquals("", reader.toString());
+        }
     }
 
     @Test
     void testEmptyInput() {
-        CharSequenceReader reader = new CharSequenceReader("");
-        assertEquals(-1, reader.read());
+        try (var reader = new CharSequenceReader("")) {
+            assertEquals(-1, reader.read());
+        }
     }
 
     @Test
     void testReadArrayWithNullThrows() {
-        CharSequenceReader reader = new CharSequenceReader("test");
-        assertThrows(NullPointerException.class, () -> reader.read(null, 0, 1));
+        try (var reader = new CharSequenceReader("test")) {
+            assertThrows(NullPointerException.class, () -> reader.read(null, 0, 1));
+        }
     }
 
     @Test
     void testReadArrayWithInvalidBoundsThrows() {
-        CharSequenceReader reader = new CharSequenceReader("test");
-        char[] buffer = new char[5];
-        assertThrows(IndexOutOfBoundsException.class, () -> reader.read(buffer, -1, 1));
-        assertThrows(IndexOutOfBoundsException.class, () -> reader.read(buffer, 0, -1));
-        assertThrows(IndexOutOfBoundsException.class, () -> reader.read(buffer, 3, 5));
+        try (var reader = new CharSequenceReader("test")) {
+            char[] buffer = new char[5];
+            assertThrows(IndexOutOfBoundsException.class, () -> reader.read(buffer, -1, 1));
+            assertThrows(IndexOutOfBoundsException.class, () -> reader.read(buffer, 0, -1));
+            assertThrows(IndexOutOfBoundsException.class, () -> reader.read(buffer, 3, 5));
+        }
     }
 
     @Test
     void testStringBuilder() {
         StringBuilder sb = new StringBuilder("StringBuilder content");
-        CharSequenceReader reader = new CharSequenceReader(sb);
-        char[] buffer = new char[13];
-        reader.read(buffer, 0, 13);
-        assertEquals("StringBuilder", new String(buffer));
+        try (var reader = new CharSequenceReader(sb)) {
+            char[] buffer = new char[13];
+            reader.read(buffer, 0, 13);
+            assertEquals("StringBuilder", new String(buffer));
+        }
     }
 
     @Test
     void testZeroLengthRead() {
-        CharSequenceReader reader = new CharSequenceReader("test");
-        char[] buffer = new char[5];
-        int count = reader.read(buffer, 0, 0);
-        assertEquals(0, count);
+        try (var reader = new CharSequenceReader("test")) {
+            char[] buffer = new char[5];
+            int count = reader.read(buffer, 0, 0);
+            assertEquals(0, count);
+        }
     }
 }
diff --git a/src/testFixtures/groovy/cli/CliBuilderTestCase.groovy b/src/testFixtures/groovy/cli/CliBuilderTestCase.groovy
index 027598828a..dfcd50fec1 100644
--- a/src/testFixtures/groovy/cli/CliBuilderTestCase.groovy
+++ b/src/testFixtures/groovy/cli/CliBuilderTestCase.groovy
@@ -18,12 +18,15 @@
  */
 package cli
 
-import groovy.test.GroovyTestCase
+import org.junit.jupiter.api.Test
 
-abstract class CliBuilderTestCase extends GroovyTestCase {
+import static groovy.test.GroovyAssert.assertScript
 
-    abstract String getImportCliBuilder()
+abstract class CliBuilderTestCase {
 
+    protected abstract String getImportCliBuilder()
+
+    @Test
     void testAnnotationsInterface() {
         assertScript """
         import cli.GreeterI
@@ -43,6 +46,7 @@ abstract class CliBuilderTestCase extends GroovyTestCase {
         """
     }
 
+    @Test
     void testAnnotationsClass() {
         assertScript """
         import cli.GreeterC
@@ -79,8 +83,8 @@ abstract class CliBuilderTestCase extends GroovyTestCase {
         """
     }
 
+    @Test
     void testParseScript() {
-        def argz = '--audience Groovologist foo'.split()
         new GroovyShell().run("""
             $importCliBuilder
             // tag::annotationScript[]
@@ -95,9 +99,10 @@ abstract class CliBuilderTestCase extends GroovyTestCase {
             assert audience == 'Groovologist'
             assert remaining == ['foo']
             // end::annotationScript[]
-        """, 'TestScript.groovy', argz)
+        """, 'TestScript.groovy', '--audience Groovologist foo'.split())
     }
 
+    @Test
     void testWithArgument() {
         assertScript """
         $importCliBuilder
@@ -124,6 +129,7 @@ abstract class CliBuilderTestCase extends GroovyTestCase {
         """
     }
 
+    @Test
     void testMultipleArgsAndOptionalValueSeparator() {
         assertScript """
         $importCliBuilder
@@ -158,6 +164,7 @@ abstract class CliBuilderTestCase extends GroovyTestCase {
         """
     }
 
+    @Test
     void testWithArgumentInterface() {
         assertScript """
         import cli.WithArgsI
@@ -179,6 +186,7 @@ abstract class CliBuilderTestCase extends GroovyTestCase {
         """
     }
 
+    @Test
     void testMultipleArgsAndOptionalValueSeparatorInterface() {
         assertScript """
         import cli.ValSepI
@@ -209,6 +217,7 @@ abstract class CliBuilderTestCase extends GroovyTestCase {
         """
     }
 
+    @Test
     void testType() {
         assertScript """
         import java.math.RoundingMode
@@ -241,6 +250,7 @@ abstract class CliBuilderTestCase extends GroovyTestCase {
         """
     }
 
+    @Test
     void testTypeMultiple() {
         assertScript """
         $importCliBuilder
@@ -258,6 +268,7 @@ abstract class CliBuilderTestCase extends GroovyTestCase {
         """
     }
 
+    @Test
     void testConvert() {
         assertScript """
         $importCliBuilder
@@ -277,6 +288,7 @@ abstract class CliBuilderTestCase extends GroovyTestCase {
         """
     }
 
+    @Test
     void testConvertInterface() {
         assertScript """
         import cli.WithConvertI
@@ -294,6 +306,7 @@ abstract class CliBuilderTestCase extends GroovyTestCase {
         """
     }
 
+    @Test
     void testDefaultValue() {
         assertScript """
         $importCliBuilder
@@ -317,6 +330,7 @@ abstract class CliBuilderTestCase extends GroovyTestCase {
         """
     }
 
+    @Test
     void testDefaultValueInterface() {
         assertScript """
         $importCliBuilder
@@ -335,6 +349,7 @@ abstract class CliBuilderTestCase extends GroovyTestCase {
         """
     }
 
+    @Test
     void testTypeCheckedInterfaceRunner() {
         assertScript """
         $importCliBuilder
@@ -356,6 +371,7 @@ abstract class CliBuilderTestCase extends GroovyTestCase {
         """
     }
 
+    @Test
     void testTypeCheckedRunner() {
         assertScript """
         $importCliBuilder
diff --git a/src/testFixtures/groovy/groovy/bugs/TestSupport.java b/src/testFixtures/groovy/groovy/bugs/TestSupport.java
index 87a05b1a98..a1730ccb92 100644
--- a/src/testFixtures/groovy/groovy/bugs/TestSupport.java
+++ b/src/testFixtures/groovy/groovy/bugs/TestSupport.java
@@ -19,15 +19,13 @@
 package groovy.bugs;
 
 import groovy.test.GroovyTestCase;
-import org.junit.Ignore;
 
-import java.util.Arrays;
 import java.util.Iterator;
+import java.util.List;
 
 /**
  * Base class for test cases
  */
-@Ignore("base class for tests")
 public abstract class TestSupport extends GroovyTestCase {
 
     public String[] getMockArguments() {
@@ -46,7 +44,7 @@ public abstract class TestSupport extends GroovyTestCase {
         return new int[]{1, 2, 3, 4, 5};
     }
 
-    public Iterator iterator() {
-        return Arrays.asList(getMockArguments()).iterator();
+    public Iterator<String> iterator() {
+        return List.of(getMockArguments()).iterator();
     }
 }
diff --git a/src/testFixtures/groovy/groovy/util/HeadlessTestSupport.groovy b/src/testFixtures/groovy/groovy/util/HeadlessTestSupport.groovy
index 67697822bd..b3f47c0274 100644
--- a/src/testFixtures/groovy/groovy/util/HeadlessTestSupport.groovy
+++ b/src/testFixtures/groovy/groovy/util/HeadlessTestSupport.groovy
@@ -20,8 +20,9 @@ package groovy.util
 
 import java.lang.reflect.Constructor
 
-public abstract class HeadlessTestSupport {
-    private static boolean headless;
+abstract class HeadlessTestSupport {
+
+    private static boolean headless
 
     /**
      * A boolean indicating if we are running in headless mode.
@@ -30,8 +31,8 @@ public abstract class HeadlessTestSupport {
      *
      * @return true if running in headless mode
      */
-    public static boolean isHeadless() {
-        return headless
+    static boolean isHeadless() {
+        headless
     }
 
     /**
@@ -39,20 +40,19 @@ public abstract class HeadlessTestSupport {
      *
      * @return true if running in headless mode
      */
-    public static boolean getHeadless() {
-        return isHeadless()
+    static boolean getHeadless() {
+        isHeadless()
     }
 
     static {
         try {
-            final Class jframe = Class.forName("javax.swing.JFrame")
-            final Constructor constructor = jframe.getConstructor([String] as Class[])
-            constructor.newInstance(["testing"] as String[])
+            Class jframe = Class.forName('javax.swing.JFrame')
+            Constructor constructor = jframe.getConstructor([String] as Class[])
+            constructor.newInstance(['testing'] as String[])
             headless = false
         } catch (Throwable t) {
             // any exception means headless
             headless = true
         }
     }
-
 }
diff --git a/src/testFixtures/groovy/groovy/util/XmlAssert.java b/src/testFixtures/groovy/groovy/util/XmlAssert.java
index 52b5cd5e45..eaf49e1004 100644
--- a/src/testFixtures/groovy/groovy/util/XmlAssert.java
+++ b/src/testFixtures/groovy/groovy/util/XmlAssert.java
@@ -20,15 +20,17 @@ package groovy.util;
 
 import org.custommonkey.xmlunit.Diff;
 import org.custommonkey.xmlunit.XMLUnit;
-import org.junit.Assert;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Helper class for checking XML tests.
  */
 public class XmlAssert {
+
     public static void assertXmlEquals(String expected, String actual) throws Exception {
         XMLUnit.setIgnoreWhitespace(true);
-        Diff diff = new Diff(expected, actual);
-        Assert.assertTrue(diff.toString(), diff.similar());
+        var diff = new Diff(expected, actual);
+        assertTrue(diff.similar(), diff::toString);
     }
 }
diff --git a/src/testFixtures/groovy/org/codehaus/groovy/ast/builder/AstAssert.groovy b/src/testFixtures/groovy/org/codehaus/groovy/ast/builder/AstAssert.groovy
index 6a6f95faae..7bb3018bef 100644
--- a/src/testFixtures/groovy/org/codehaus/groovy/ast/builder/AstAssert.groovy
+++ b/src/testFixtures/groovy/org/codehaus/groovy/ast/builder/AstAssert.groovy
@@ -18,7 +18,10 @@
  */
 package org.codehaus.groovy.ast.builder
 
-import org.junit.Assert
+import static org.junit.jupiter.api.Assertions.assertEquals
+import static org.junit.jupiter.api.Assertions.assertNull
+import static org.junit.jupiter.api.Assertions.assertTrue
+import static org.junit.jupiter.api.Assertions.fail
 
 /**
  * Some useful AST assertion methods.
@@ -44,35 +47,35 @@ class AstAssert {
             },
             CastExpression : { expected, actual ->
                 assertSyntaxTree([expected.expression], [actual.expression])
-                Assert.assertEquals("Wrong type", expected.type, actual.type)
+                assertEquals(expected.type, actual.type, "Wrong type")
             },
             ClosureExpression : { expected, actual ->
                 assertSyntaxTree([expected.parameters], [actual.parameters])
                 assertSyntaxTree([expected.code], [actual.code])
             },
             ConstantExpression : { expected, actual ->
-                Assert.assertEquals("Wrong constant", expected.value, actual.value)
+                assertEquals(expected.value, actual.value, "Wrong constant")
             },
             ArrayExpression : { expected, actual ->
-                Assert.assertEquals("Wrong array type", expected.elementType, actual.elementType)
-                Assert.assertEquals("Wrong # ast nodes", expected.expressions.size(), actual.expressions.size())
+                assertEquals(expected.elementType, actual.elementType, "Wrong array type")
+                assertEquals(expected.expressions.size(), actual.expressions.size(), "Wrong node count")
                 expected.expressions.eachWithIndex { element, index ->
                     assertSyntaxTree([element], [actual.expressions[index]])
                 }
             },
             ListExpression : { expected, actual ->
-                Assert.assertEquals("Wrong # ast nodes", expected.expressions.size(), actual.expressions.size())
+                assertEquals(expected.expressions.size(), actual.expressions.size(), "Wrong node count")
                 expected.expressions.eachWithIndex { element, index ->
                     assertSyntaxTree([element], [actual.expressions[index]])
                 }
             },
             DeclarationExpression : { expected, actual ->
-                Assert.assertEquals("Wrong token", expected.operation.text, actual.operation.text)
+                assertEquals(expected.operation.text, actual.operation.text, "Wrong token")
                 assertSyntaxTree([expected.leftExpression], [actual.leftExpression])
                 assertSyntaxTree([expected.rightExpression], [actual.rightExpression])
             },
             VariableExpression : { expected, actual ->
-                Assert.assertEquals("Wrong variable", expected.variable, actual.variable)
+                assertEquals(expected.variable, actual.variable, "Wrong variable")
             },
             ReturnStatement : { expected, actual ->
                 assertSyntaxTree([expected.expression], [actual.expression])
@@ -91,19 +94,19 @@ class AstAssert {
             AnnotationNode : { expected, actual ->
                 assertSyntaxTree([expected.classNode], [actual.classNode])
                 //    Map<String, Expression>
-                Assert.assertEquals("Wrong keyset", expected.members.keySet(), actual.members.keySet())
+                assertEquals(expected.members.keySet(), actual.members.keySet(), "Wrong keyset")
 
-                Assert.assertEquals("Wrong # members", expected.members.size(), actual.members.size())
+                assertEquals(expected.members.size(), actual.members.size(), "Wrong member count")
                 expected.members.each { key, value ->
-                    Assert.assertTrue("Missing key $key", actual.members.containsKey(key))
+                    assertTrue(actual.members.containsKey(key), "Missing key $key")
                     assertSyntaxTree([expected.members[key]], [actual.members[key]])
                 }
             },
             ClassNode : { expected, actual ->
                 if (expected.superClass) {
-                    Assert.assertEquals("Wrong superClass type", expected.superClass.getName(), actual.superClass.getName())
+                    assertEquals(expected.superClass.getName(), actual.superClass.getName(), "Wrong superClass type")
                 } else {
-                    Assert.assertEquals("Wrong class type", expected.class.getName(), actual.class.getName())
+                    assertEquals(expected.class.getName(), actual.class.getName(), "Wrong class type")
                 }
                 assertSyntaxTree([expected.mixins], [actual.mixins])
 
@@ -125,14 +128,14 @@ class AstAssert {
                 assertSyntaxTree([expected.operation], [actual.operation])
             },
             Token : { expected, actual ->
-                Assert.assertEquals("Wrong token type", expected.type, actual.type)
-                Assert.assertEquals("Wrong token text", expected.text, actual.text)
+                assertEquals(expected.type, actual.type, "Wrong token type")
+                assertEquals(expected.text, actual.text, "Wrong token text")
             },
             Parameter : { expected, actual ->
                 assertSyntaxTree([expected.type], [actual.type])
                 assertSyntaxTree([expected.defaultValue], [actual.defaultValue])
-                Assert.assertEquals("Wrong parameter name", expected.name, actual.name)
-                Assert.assertEquals("Wrong 'hasDefaultValue'", expected.hasDefaultValue, actual.hasDefaultValue)
+                assertEquals(expected.name, actual.name, "Wrong parameter name")
+                assertEquals(expected.hasDefaultValue, actual.hasDefaultValue, "Wrong 'hasDefaultValue'")
             },
             ConstructorCallExpression : { expected, actual ->
                 assertSyntaxTree([expected.arguments], [actual.arguments])
@@ -165,8 +168,8 @@ class AstAssert {
                 assertSyntaxTree([expected.field], [actual.field])
             },
             FieldNode : { expected, actual ->
-                Assert.assertEquals("Wrong name", expected.name, actual.name)
-                Assert.assertEquals("Wrong modifiers", expected.modifiers, actual.modifiers)
+                assertEquals(expected.name, actual.name, "Wrong name")
+                assertEquals(expected.modifiers, actual.modifiers, "Wrong modifiers")
                 assertSyntaxTree([expected.type], [actual.type])
                 assertSyntaxTree([expected.owner], [actual.owner])
                 assertSyntaxTree([expected.initialValueExpression], [actual.initialValueExpression])
@@ -179,7 +182,7 @@ class AstAssert {
                 assertSyntaxTree([expected.valueExpression], [actual.valueExpression])
             },
             GStringExpression : { expected, actual ->
-                Assert.assertEquals("Wrong text", expected.verbatimText, actual.verbatimText)
+                assertEquals(expected.verbatimText, actual.verbatimText, "Wrong text")
                 assertSyntaxTree(expected.strings, actual.strings)
                 assertSyntaxTree(expected.values, actual.values)
             },
@@ -190,7 +193,7 @@ class AstAssert {
             RangeExpression : { expected, actual ->
                 assertSyntaxTree([expected.from], [actual.from])
                 assertSyntaxTree([expected.to], [actual.to])
-                Assert.assertEquals("Wrong inclusive", expected.inclusive, actual.inclusive)
+                assertEquals(expected.inclusive, actual.inclusive, "Wrong inclusive")
             },
             PropertyExpression : { expected, actual ->
                 assertSyntaxTree([expected.objectExpression], [actual.objectExpression])
@@ -209,7 +212,7 @@ class AstAssert {
                 // always successful
             },
             BreakStatement : { expected, actual ->
-                Assert.assertEquals("Wrong label", expected.label, actual.label)
+                assertEquals(expected.label, actual.label, "Wrong label")
             },
             AssertStatement : { expected, actual ->
                 assertSyntaxTree([expected.booleanExpression], [actual.booleanExpression])
@@ -232,7 +235,7 @@ class AstAssert {
                 assertSyntaxTree([expected.expression], [actual.expression])
             },
             StaticMethodCallExpression : { expected, actual ->
-                Assert.assertEquals("Wrong method", expected.method, actual.method)
+                assertEquals(expected.method, actual.method, "Wrong method")
                 assertSyntaxTree([expected.ownerType], [actual.ownerType])
                 assertSyntaxTree([expected.arguments], [actual.arguments])
             },
@@ -256,7 +259,7 @@ class AstAssert {
                 assertSyntaxTree([expected.loopBlock], [actual.loopBlock])
             },
             ContinueStatement : { expected, actual ->
-                Assert.assertEquals("Wrong label", expected.label, actual.label)
+                assertEquals(expected.label, actual.label, "Wrong label")
             },
             TernaryExpression : { expected, actual ->
                 assertSyntaxTree([expected.booleanExpression], [actual.booleanExpression])
@@ -269,16 +272,16 @@ class AstAssert {
                 assertSyntaxTree([expected.falseExpression], [actual.falseExpression])
             },
             PropertyNode : { expected, actual ->
-                Assert.assertEquals("Wrong name", expected.name, actual.name)
-                Assert.assertEquals("Wrong modifiers", expected.modifiers, actual.modifiers)
+                assertEquals(expected.name, actual.name, "Wrong name")
+                assertEquals(expected.modifiers, actual.modifiers, "Wrong modifiers")
                 assertSyntaxTree(expected.annotations, actual.annotations)
                 assertSyntaxTree([expected.field], [actual.field])
                 assertSyntaxTree([expected.getterBlock], [actual.getterBlock])
                 assertSyntaxTree([expected.setterBlock], [actual.setterBlock])
             },
             NullObject : { expected, actual ->
-                Assert.assertNull(expected)
-                Assert.assertNull(actual)
+                assertNull(expected)
+                assertNull(actual)
             },
             MethodNode : { expected, actual ->
                 assertSyntaxTree(expected.annotations, actual.annotations)
@@ -287,8 +290,8 @@ class AstAssert {
                 assertSyntaxTree(expected.parameters, actual.parameters)
                 assertSyntaxTree(expected.exceptions, actual.exceptions)
 
-                Assert.assertEquals("Wrong name", expected.name, actual.name)
-                Assert.assertEquals("Wrong modifiers", expected.modifiers, actual.modifiers)
+                assertEquals(expected.name, actual.name, "Wrong name")
+                assertEquals(expected.modifiers, actual.modifiers, "Wrong modifiers")
             },
             ConstructorNode : { expected, actual ->
                 assertSyntaxTree(expected.annotations, actual.annotations)
@@ -297,13 +300,13 @@ class AstAssert {
                 assertSyntaxTree(expected.parameters, actual.parameters)
                 assertSyntaxTree(expected.exceptions, actual.exceptions)
 
-                Assert.assertEquals("Wrong name", expected.name, actual.name)
-                Assert.assertEquals("Wrong modifiers", expected.modifiers, actual.modifiers)
+                assertEquals(expected.name, actual.name, "Wrong name")
+                assertEquals(expected.modifiers, actual.modifiers, "Wrong modifiers")
             },
             ImportNode : { expected, actual ->
                 assertSyntaxTree(expected.annotations, actual.annotations)
                 assertSyntaxTree([expected.type], [actual.type])
-                Assert.assertEquals("Wrong alias", expected.alias, actual.alias)
+                assertEquals(expected.alias, actual.alias, "Wrong alias")
             },
             RegexExpression : { expected, actual ->
                 assertSyntaxTree([expected.type], [actual.type])
@@ -321,8 +324,8 @@ class AstAssert {
                 assertSyntaxTree([expected.type], [actual.type])
                 assertSyntaxTree([expected.lowerBound], [actual.lowerBound])
                 assertSyntaxTree(expected.upperBounds, actual.upperBounds)
-                Assert.assertEquals("Wrong wildcard", expected.name, actual.name)
-                Assert.assertEquals("Wrong wildcard", expected.wildcard, actual.wildcard)
+                assertEquals(expected.name, actual.name, "Wrong wildcard")
+                assertEquals(expected.wildcard, actual.wildcard, "Wrong wildcard")
             },
             NamedArgumentListExpression : { expected, actual ->
                 assertSyntaxTree(expected.mapEntryExpressions, actual.mapEntryExpressions)
@@ -335,8 +338,8 @@ class AstAssert {
                 assertSyntaxTree(expected.annotations, actual.annotations)
                 assertSyntaxTree(expected.genericsTypes, actual.genericsTypes)
 
-                Assert.assertEquals("Wrong name", expected.name, actual.name)
-                Assert.assertEquals("Wrong modifiers", expected.modifiers, actual.modifiers)
+                assertEquals(expected.name, actual.name, "Wrong name")
+                assertEquals(expected.modifiers, actual.modifiers, "Wrong modifiers")
             },
             InnerClassNode : { expected, actual ->
                 assertSyntaxTree([expected.outerClass], [actual.outerClass])
@@ -347,8 +350,8 @@ class AstAssert {
                 assertSyntaxTree(expected.annotations, actual.annotations)
                 assertSyntaxTree(expected.genericsTypes, actual.genericsTypes)
 
-                Assert.assertEquals("Wrong name", expected.name, actual.name)
-                Assert.assertEquals("Wrong modifiers", expected.modifiers, actual.modifiers)
+                assertEquals(expected.name, actual.name, "Wrong name")
+                assertEquals(expected.modifiers, actual.modifiers, "Wrong modifiers")
             },
     ]
 
@@ -363,13 +366,13 @@ class AstAssert {
         if (expected == null && actual == null) return
 
         if (actual == null || expected == null || expected.size() != actual?.size()) {
-            Assert.fail("AST comparison failure. \nExpected $expected \nReceived $actual")
+            fail("AST comparison failure. \nExpected $expected \nReceived $actual")
         }
         expected.eachWithIndex { item, index ->
             if (item.getClass().isArray() && actual[index].getClass().isArray()) {
                 assertSyntaxTree(item, actual[index])
             } else {
-                Assert.assertEquals("Wrong type in AST Node", item.getClass(), actual[index].getClass())
+                assertEquals(item.getClass(), actual[index].getClass(), "Wrong type in AST Node")
 
                 Class itemType = item.getClass()
                 if (itemType.isAnonymousClass()) {
@@ -379,10 +382,9 @@ class AstAssert {
                     Closure assertion = ASSERTION_MAP.get(itemType.getSimpleName())
                     assertion(item, actual[index])
                 } else {
-                    Assert.fail("Unexpected type: ${itemType} Update the unit test!")
+                    fail("Unexpected type: ${itemType} Update the unit test!")
                 }
             }
         }
     }
-
 }
diff --git a/src/testFixtures/groovy/org/codehaus/groovy/classgen/TestSupport.java b/src/testFixtures/groovy/org/codehaus/groovy/classgen/TestSupport.java
index 2b11eed1ae..f45679ecab 100644
--- a/src/testFixtures/groovy/org/codehaus/groovy/classgen/TestSupport.java
+++ b/src/testFixtures/groovy/org/codehaus/groovy/classgen/TestSupport.java
@@ -34,7 +34,6 @@ import org.codehaus.groovy.ast.expr.MethodCallExpression;
 import org.codehaus.groovy.ast.stmt.ExpressionStatement;
 import org.codehaus.groovy.control.CompilerConfiguration;
 import org.codehaus.groovy.runtime.InvokerHelper;
-import org.junit.Ignore;
 import org.objectweb.asm.Opcodes;
 
 import java.beans.BeanInfo;
@@ -49,14 +48,13 @@ import java.security.PrivilegedAction;
 /**
  * Base class for test cases
  */
-@Ignore("base class for tests")
-public class TestSupport extends GroovyTestCase implements Opcodes {
+public abstract class TestSupport extends GroovyTestCase implements Opcodes {
 
     protected static boolean DUMP_CLASS = false;
 
     final ClassLoader parentLoader = getClass().getClassLoader();
-    protected final GroovyClassLoader loader =
-            createClassLoader();
+
+    protected final GroovyClassLoader loader = createClassLoader();
 
     @SuppressWarnings("removal") // TODO a future Groovy version should perform the operation not as a privileged action
     private GroovyClassLoader createClassLoader() {
@@ -66,6 +64,7 @@ public class TestSupport extends GroovyTestCase implements Opcodes {
     }
 
     final CompileUnit unit = new CompileUnit(loader, new CompilerConfiguration());
+
     final ModuleNode module = new ModuleNode(unit);
 
     protected Class loadClass(ClassNode classNode) {
diff --git a/subprojects/groovy-cli-commons/src/spec/test/builder/CliBuilderTest.groovy b/subprojects/groovy-cli-commons/src/spec/test/builder/CliBuilderTest.groovy
index 7985159375..197beb57ba 100644
--- a/subprojects/groovy-cli-commons/src/spec/test/builder/CliBuilderTest.groovy
+++ b/subprojects/groovy-cli-commons/src/spec/test/builder/CliBuilderTest.groovy
@@ -22,12 +22,14 @@ import cli.CliBuilderTestCase
 import groovy.cli.TypedOption
 import groovy.cli.commons.CliBuilder
 import groovy.transform.TypeChecked
+import org.junit.jupiter.api.Test
 
-class CliBuilderTest extends CliBuilderTestCase {
+final class CliBuilderTest extends CliBuilderTestCase {
 
-    String getImportCliBuilder() { 'import groovy.cli.commons.CliBuilder\n' }
+    final String importCliBuilder = 'import groovy.cli.commons.CliBuilder\n'
 
     // don't expect toString values to be the same, so test per CliBuilder implementation
+    @Test
     void testAnnotationsInterfaceToString() {
         doTestAnnotationsInterfaceToString('usage', '''\
 usage: groovy Greeter
@@ -36,7 +38,7 @@ usage: groovy Greeter
 ''')
     }
 
-    @TypeChecked
+    @TypeChecked @Test
     void testTypeChecked_showingSingleHyphenForLongOptSupport() {
         def cli = new CliBuilder()
         TypedOption<String> name = cli.option(String, opt: 'n', longOpt: 'name', 'name option')
@@ -48,5 +50,4 @@ usage: groovy Greeter
         assert n == 'John' && a == 21
         assert options.arguments() == ['and', 'some', 'more']
     }
-
 }
diff --git a/subprojects/groovy-cli-picocli/src/spec/test/builder/CliBuilderTest.groovy b/subprojects/groovy-cli-picocli/src/spec/test/builder/CliBuilderTest.groovy
index de1c07a21d..7b7ea8aa7e 100644
--- a/subprojects/groovy-cli-picocli/src/spec/test/builder/CliBuilderTest.groovy
+++ b/subprojects/groovy-cli-picocli/src/spec/test/builder/CliBuilderTest.groovy
@@ -22,22 +22,23 @@ import cli.CliBuilderTestCase
 import groovy.cli.TypedOption
 import groovy.cli.picocli.CliBuilder
 import groovy.transform.TypeChecked
+import org.junit.jupiter.api.Test
 
 import java.util.concurrent.TimeUnit
 
-// tag::mapOptionImports[]
-
 import static java.util.concurrent.TimeUnit.DAYS
 import static java.util.concurrent.TimeUnit.HOURS
+import static org.junit.jupiter.api.Assertions.assertEquals
 
 // end::mapOptionImports[]
 
 // Core functionality we expect to remain the same for all implementations is tested in the base test case
 // here we also add any functionality specific to this implementation that we value highly
-class CliBuilderTest extends CliBuilderTestCase {
+final class CliBuilderTest extends CliBuilderTestCase {
 
-    String getImportCliBuilder() { 'import groovy.cli.picocli.CliBuilder\n' }
+    final String importCliBuilder = 'import groovy.cli.picocli.CliBuilder\n'
 
+    @Test
     void testAnnotationsInterfaceToStringWithUsage() {
         doTestAnnotationsInterfaceToString('usage', '''\
 Usage: groovy Greeter
@@ -48,6 +49,7 @@ Usage: groovy Greeter
 ''')
     }
 
+    @Test
     void testAnnotationsInterfaceToStringWithName() {
         doTestAnnotationsInterfaceToString('name', '''\
 Usage: groovy Greeter [-h] [-a=<audience>] [<remaining>...]
@@ -58,7 +60,7 @@ Usage: groovy Greeter [-h] [-a=<audience>] [<remaining>...]
 ''')
     }
 
-    @TypeChecked
+    @TypeChecked @Test
     void testTypeChecked_addingSingleHyphenForLongOptSupport() {
         def cli = new CliBuilder(acceptLongOptionsWithSingleHyphen: true)
         TypedOption<String> name = cli.option(String, opt: 'n', longOpt: 'name', 'name option')
@@ -71,7 +73,7 @@ Usage: groovy Greeter [-h] [-a=<audience>] [<remaining>...]
         assert options.arguments() == ['and', 'some', 'more']
     }
 
-    @TypeChecked
+    @TypeChecked @Test
     void testTypeChecked_defaultOnlyDoubleHyphen() {
         def cli = new CliBuilder()
         TypedOption<String> name = cli.option(String, opt: 'n', longOpt: 'name', 'name option')
@@ -83,6 +85,7 @@ Usage: groovy Greeter [-h] [-a=<audience>] [<remaining>...]
         assert options.arguments() == ['-age', '21', 'and', 'some', 'more']
     }
 
+    @Test
     void testUsageMessageSpec() {
         // suppress ANSI escape codes to make this test pass on all environments
         System.setProperty("picocli.ansi", "false")
@@ -131,6 +134,7 @@ Footer 2
         assertEquals(expected.normalize(), baos.toString().normalize())
     }
 
+    @Test
     void testMapOption() {
         // tag::mapOption[]
         def cli = new CliBuilder()
@@ -145,6 +149,7 @@ Footer 2
         // end::mapOption[]
     }
 
+    @Test
     void testGroovyDocAntExample() {
         def cli = new CliBuilder(usage:'ant [options] [targets]',
                 header:'Options:')
@@ -174,6 +179,7 @@ Options:
         assertEquals(expected.normalize(), sw.toString().normalize())
     }
 
+    @Test
     void testGroovyDocCurlExample() {
         // suppress ANSI escape codes to make this test pass on all environments
         System.setProperty("picocli.ansi", "false")