You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2026/02/08 07:32:38 UTC

(groovy) branch GROOVY_5_0_X updated: Revert "Convert to JUnit5"

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

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


The following commit(s) were added to refs/heads/GROOVY_5_0_X by this push:
     new efcaae31e2 Revert "Convert to JUnit5"
efcaae31e2 is described below

commit efcaae31e22836a13f052690885e05f3bbf07050
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Feb 8 16:32:07 2026 +0900

    Revert "Convert to JUnit5"
    
    This reverts commit 8acb53b79672acfe2633c808d26d2d8395a0d095.
---
 src/spec/test/BaseScriptSpecTest.groovy            |   6 +-
 src/spec/test/ClassDesignASTTransformsTest.groovy  |  13 +-
 src/spec/test/ClassTest.groovy                     |  10 +-
 src/spec/test/CloningASTTransformsTest.groovy      |  14 +-
 src/spec/test/ClosuresSpecTest.groovy              |  29 +-
 .../test/CodeGenerationASTTransformsTest.groovy    |  31 +-
 src/spec/test/CommandChainsTest.groovy             |  10 +-
 .../CompilerDirectivesASTTransformsTest.groovy     |  14 +-
 src/spec/test/CustomizersTest.groovy               |  42 +--
 .../DeclarativeConcurrencyASTTransformsTest.groovy |  10 +-
 src/spec/test/DelegatesToSpecTest.groovy           |  24 +-
 src/spec/test/DesignPatternsTest.groovy            |   6 +-
 src/spec/test/DifferencesFromJavaTest.groovy       |  16 +-
 src/spec/test/ExtensionModuleSpecTest.groovy       |   8 +-
 src/spec/test/IntegrationTest.groovy               |   5 +-
 .../test/LogImprovementsASTTransformsTest.groovy   |  13 +-
 src/spec/test/PrimitiveTest.groovy                 |   9 +-
 src/spec/test/RecordSpecificationTest.groovy       |  24 +-
 .../test/SaferScriptingASTTransformsTest.groovy    |  16 +-
 src/spec/test/ScriptsAndClassesSpecTest.groovy     |  12 +-
 src/spec/test/SealedSpecificationTest.groovy       |   5 +-
 src/spec/test/SwingASTTransformsTest.groovy        |  15 +-
 src/spec/test/TestingASTTransformsTest.groovy      |  20 +-
 src/spec/test/TraitsSpecificationTest.groovy       |  48 +--
 src/spec/test/builder/BuilderSpecTest.groovy       |   3 +-
 src/spec/test/builder/FileTreeBuilderTest.groovy   |   6 +-
 .../test/builder/ObjectGraphBuilderTest.groovy     |  13 +-
 src/spec/test/gdk/ConfigSlurperTest.groovy         |  11 +-
 src/spec/test/gdk/ExpandoTest.groovy               |   7 +-
 src/spec/test/gdk/ObservableTest.groovy            |   6 +-
 src/spec/test/gdk/WorkingWithArraysTest.groovy     |   2 +-
 .../test/gdk/WorkingWithCollectionsTest.groovy     |  35 +-
 src/spec/test/gdk/WorkingWithIOSpecTest.groovy     |  12 +-
 .../metaprogramming/ASTMatcherFilteringTest.groovy |   7 +-
 .../metaprogramming/ASTMatcherTestingTest.groovy   |  15 +-
 .../test/metaprogramming/ASTXFormSpecTest.groovy   |  12 +-
 .../metaprogramming/ExpandoMetaClassTest.groovy    |  18 +-
 .../test/metaprogramming/GroovyObjectTest.groovy   |  16 +-
 .../test/metaprogramming/InterceptableTest.groovy  |   6 +-
 .../InterceptionThroughMetaClassTest.groovy        |   6 +-
 .../test/metaprogramming/MacroClassTest.groovy     |   6 +-
 .../metaprogramming/MacroExpressionTest.groovy     |  10 +-
 .../test/metaprogramming/MacroStatementTest.groovy |  18 +-
 .../MacroVariableSubstitutionTest.groovy           |  18 +-
 .../MethodPropertyMissingTest.groovy               |  10 +-
 ...taticPropertyMissingAndMethodMissingTest.groovy |   9 +-
 src/spec/test/objectorientation/MethodsTest.groovy |  25 +-
 src/spec/test/semantics/GPathTest.groovy           |   8 +-
 src/spec/test/semantics/PowerAssertTest.groovy     |   2 +-
 src/spec/test/semantics/TheGroovyTruthTest.groovy  |  11 +-
 src/spec/test/testingguide/GDKMethodTests.groovy   |   7 +-
 .../testingguide/GroovyTestCaseExampleTests.groovy |  30 +-
 .../test/testingguide/JUnit4ExampleTests.groovy    |   2 +-
 .../test/testingguide/MockingExampleTests.groovy   |   6 +-
 src/spec/test/typing/OptionalTypingTest.groovy     |   9 +-
 .../typing/TypeCheckingExtensionSpecTest.groovy    |  46 +--
 src/spec/test/typing/TypeCheckingJavaTest.java     |   4 +-
 src/test/groovy/NoPackageTest.groovy               |   2 +-
 .../groovy/bugs/AmbiguousListOrMethodTest.groovy   |  11 +-
 src/test/groovy/bugs/AsBoolBug.groovy              |   8 +-
 .../bugs/AssignmentInsideExpressionBug.groovy      |   8 +-
 .../groovy/bugs/AttributeSetExpressionBug.groovy   |   6 +-
 .../groovy/bugs/AutoboxingOfComparisonsBug.groovy  |   6 +-
 .../bugs/BadLineNumberOnExceptionBugTest.groovy    |   9 +-
 src/test/groovy/bugs/BadScriptNameBug.groovy       |   6 +-
 src/test/groovy/bugs/BenchmarkBug.groovy           |   6 +-
 src/test/groovy/bugs/BlockAsClosureBug.groovy      |   8 +-
 src/test/groovy/bugs/BooleanBug.groovy             |   9 +-
 src/test/groovy/bugs/ByteIndexBug.groovy           |   6 +-
 src/test/groovy/bugs/Bytecode2Bug.groovy           |   8 +-
 src/test/groovy/bugs/Bytecode3Bug.groovy           |   6 +-
 src/test/groovy/bugs/Bytecode4Bug.groovy           |   8 +-
 src/test/groovy/bugs/Bytecode5Bug.groovy           |   6 +-
 src/test/groovy/bugs/Bytecode6Bug.groovy           |   7 +-
 src/test/groovy/bugs/Bytecode7Bug.groovy           |   7 +-
 src/test/groovy/bugs/BytecodeBug.groovy            |   6 +-
 .../bugs/CallingClosuresWithClosuresBug.groovy     |   6 +-
 .../groovy/bugs/CastWhenUsingClosuresBug.groovy    |   6 +-
 src/test/groovy/bugs/ChristofsPropertyBug.groovy   |   8 +-
 .../groovy/bugs/ClassGeneratorFixesTest.groovy     |  10 +-
 src/test/groovy/bugs/ClassInNamedParamsBug.groovy  |   6 +-
 src/test/groovy/bugs/ClosureInClosureBug.groovy    |   6 +-
 .../groovy/bugs/ClosureTypedVariableBug.groovy     |   9 +-
 src/test/groovy/bugs/ClosureVariableBug.groovy     |  11 +-
 .../bugs/ClosureWithBitwiseDefaultParamTest.groovy |   6 +-
 src/test/groovy/bugs/ConstructorBug.groovy         |   5 +-
 .../groovy/bugs/ConstructorParameterBug.groovy     |   4 +-
 src/test/groovy/bugs/ConstructorThisCallBug.groovy |   8 +-
 src/test/groovy/bugs/CustomMetaClassTest.groovy    |  14 +-
 src/test/groovy/bugs/DefVariableBug.groovy         |   6 +-
 .../bugs/DirectMethodCallWithVargsTest.groovy      |   2 +-
 src/test/groovy/bugs/ForLoopBug.groovy             |  12 +-
 src/test/groovy/bugs/FullyQualifiedClassBug.groovy |   6 +-
 .../bugs/FullyQualifiedMethodReturnTypeBug.groovy  |   6 +-
 .../bugs/FullyQualifiedVariableTypeBug.groovy      |   6 +-
 src/test/groovy/bugs/GetterBug.groovy              |   7 +-
 src/test/groovy/bugs/Groovy10094.groovy            |   8 +-
 src/test/groovy/bugs/Groovy10113.groovy            |  16 +-
 src/test/groovy/bugs/Groovy10133.groovy            |   6 +-
 src/test/groovy/bugs/Groovy10143.groovy            |   2 +-
 src/test/groovy/bugs/Groovy1018_Bug.groovy         |   7 +-
 src/test/groovy/bugs/Groovy10191.groovy            |   2 +-
 src/test/groovy/bugs/Groovy10199.groovy            |   2 +-
 src/test/groovy/bugs/Groovy10236.groovy            |   2 +-
 src/test/groovy/bugs/Groovy10281.groovy            |   2 +-
 src/test/groovy/bugs/Groovy10302.groovy            |   4 +-
 src/test/groovy/bugs/Groovy10303.groovy            |   2 +-
 src/test/groovy/bugs/Groovy10305.groovy            |   2 +-
 src/test/groovy/bugs/Groovy10381.groovy            |  10 +-
 src/test/groovy/bugs/Groovy10461.groovy            |   2 +-
 src/test/groovy/bugs/Groovy10466.groovy            |   2 +-
 src/test/groovy/bugs/Groovy10467.groovy            |   2 +-
 src/test/groovy/bugs/Groovy10478.groovy            |   2 +-
 src/test/groovy/bugs/Groovy10535.groovy            |   2 +-
 src/test/groovy/bugs/Groovy10587.groovy            |   2 +-
 src/test/groovy/bugs/Groovy1059_Bug.groovy         |   6 +-
 src/test/groovy/bugs/Groovy10612.groovy            |   2 +-
 src/test/groovy/bugs/Groovy10659.groovy            |   2 +-
 src/test/groovy/bugs/Groovy10676.groovy            |   2 +-
 src/test/groovy/bugs/Groovy10700.groovy            |   2 +-
 src/test/groovy/bugs/Groovy10770.groovy            |  12 +-
 src/test/groovy/bugs/Groovy1081_Bug.groovy         |   8 +-
 src/test/groovy/bugs/Groovy10920.groovy            |   2 +-
 src/test/groovy/bugs/Groovy10962.groovy            |   2 +-
 src/test/groovy/bugs/Groovy10998.groovy            |   6 +-
 src/test/groovy/bugs/Groovy11046.groovy            |   4 +-
 src/test/groovy/bugs/Groovy11062.groovy            |   2 +-
 src/test/groovy/bugs/Groovy11196.groovy            |   2 +-
 src/test/groovy/bugs/Groovy11203.groovy            |   2 +-
 src/test/groovy/bugs/Groovy11250.groovy            |   2 +-
 src/test/groovy/bugs/Groovy11265.groovy            |   2 +-
 src/test/groovy/bugs/Groovy11272.groovy            |   2 +-
 src/test/groovy/bugs/Groovy11292.groovy            |   2 +-
 src/test/groovy/bugs/Groovy11293.groovy            |   2 +-
 src/test/groovy/bugs/Groovy1407_Bug.groovy         |   7 +-
 src/test/groovy/bugs/Groovy1462_Bug.groovy         |   6 +-
 src/test/groovy/bugs/Groovy1465.groovy             |   4 +-
 src/test/groovy/bugs/Groovy1567.java               |   2 +-
 src/test/groovy/bugs/Groovy1593.groovy             |   8 +-
 src/test/groovy/bugs/Groovy1617_Bug.groovy         |   7 +-
 src/test/groovy/bugs/Groovy1706_Bug.groovy         |   7 +-
 src/test/groovy/bugs/Groovy1759.groovy             |   2 +-
 src/test/groovy/bugs/Groovy2271Bug.groovy          |   5 +-
 src/test/groovy/bugs/Groovy2339Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy2348Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy2350Bug.groovy          |  10 +-
 src/test/groovy/bugs/Groovy2351Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy2365Base.groovy         |   4 +-
 src/test/groovy/bugs/Groovy2365Bug.java            |   4 +-
 src/test/groovy/bugs/Groovy2391.groovy             |   2 +-
 src/test/groovy/bugs/Groovy239_Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy2490Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy252_Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy2549Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy2556Bug.groovy          |  18 +-
 src/test/groovy/bugs/Groovy2557Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy2558Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy2666Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy2706Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy2773Bug.groovy          |   5 +-
 src/test/groovy/bugs/Groovy278_Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy2801Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy2816Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy2849Bug.groovy          |   4 +-
 src/test/groovy/bugs/Groovy2949Bug.groovy          |   4 +-
 src/test/groovy/bugs/Groovy2951.groovy             |   2 +-
 src/test/groovy/bugs/Groovy308_Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy3135Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy3139Bug.groovy          |   5 +-
 src/test/groovy/bugs/Groovy3156And2621Bug.groovy   |   7 +-
 src/test/groovy/bugs/Groovy3163Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy3175_Bug.groovy         |   7 +-
 src/test/groovy/bugs/Groovy3205Bug.groovy          |   4 +-
 src/test/groovy/bugs/Groovy3208Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy3235Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy3238Bug.groovy          |   4 +-
 src/test/groovy/bugs/Groovy325_Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy3304Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy3305Bug.groovy          |   4 +-
 src/test/groovy/bugs/Groovy3311.groovy             |   2 +-
 src/test/groovy/bugs/Groovy3335Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy3339Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy3383Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy3389Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy3403Bug.groovy          |   5 +-
 src/test/groovy/bugs/Groovy3405Bug.groovy          |   9 +-
 src/test/groovy/bugs/Groovy3410Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy3422.groovy             |   2 +-
 src/test/groovy/bugs/Groovy3424Bug.groovy          |  11 +-
 src/test/groovy/bugs/Groovy3426Bug.groovy          |   9 +-
 src/test/groovy/bugs/Groovy3446Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy3462Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy3464Bug.groovy          |  20 +-
 src/test/groovy/bugs/Groovy3465Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy3498Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy3509Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy3511Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy3519Bug.groovy          |   9 +-
 src/test/groovy/bugs/Groovy3560Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy3574Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy3590Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy3679Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy3716Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy3718Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy3719.groovy             |   2 +-
 src/test/groovy/bugs/Groovy3720Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy3723Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy3726Bug.groovy          |  10 +-
 src/test/groovy/bugs/Groovy3749Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy3770Bug.groovy          |   9 +-
 src/test/groovy/bugs/Groovy3776Bug.groovy          |  11 +-
 src/test/groovy/bugs/Groovy3784Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy3799Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy3801Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy3818Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy3827Bug.groovy          |   5 +-
 src/test/groovy/bugs/Groovy3830Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy3831Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy3834Bug.groovy          |   9 +-
 src/test/groovy/bugs/Groovy3839.groovy             |   6 +-
 src/test/groovy/bugs/Groovy3852.groovy             |  16 +-
 src/test/groovy/bugs/Groovy3863Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy3868Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy3876Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy3894Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy389_Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy3904.groovy             |   4 +-
 src/test/groovy/bugs/Groovy3948Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy3949Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy4009Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy4018Bug.groovy          |  11 +-
 src/test/groovy/bugs/Groovy4029Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy4035.groovy             |   2 +-
 src/test/groovy/bugs/Groovy4038Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy4046Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy4069Bug.groovy          |   9 +-
 src/test/groovy/bugs/Groovy4075Bug.groovy          |  13 +-
 src/test/groovy/bugs/Groovy4078Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy4080Bug.groovy          |   4 +-
 src/test/groovy/bugs/Groovy4097.groovy             |   2 +-
 src/test/groovy/bugs/Groovy4098.groovy             |   6 +-
 src/test/groovy/bugs/Groovy4104Bug.groovy          |   5 +-
 src/test/groovy/bugs/Groovy4106Bug.groovy          |   5 +-
 src/test/groovy/bugs/Groovy4107Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy4111Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy4116Bug.groovy          |   9 +-
 src/test/groovy/bugs/Groovy4119Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy4120Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy4121Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy4129Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy4131Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy4133Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy4134Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy4139Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy4170Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy4188Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy4191Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy4193.groovy             |   2 +-
 src/test/groovy/bugs/Groovy4202Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy4206.groovy             |   2 +-
 src/test/groovy/bugs/Groovy4235Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy4241Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy4243.groovy             |   2 +-
 src/test/groovy/bugs/Groovy4246Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy4247Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy4257Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy4264Bug.groovy          |  10 +-
 src/test/groovy/bugs/Groovy4293Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy4349.groovy             |   2 +-
 src/test/groovy/bugs/Groovy4365.groovy             |   4 +-
 src/test/groovy/bugs/Groovy4393Bug.groovy          |   9 +-
 src/test/groovy/bugs/Groovy4414Bug.groovy          |   5 +-
 src/test/groovy/bugs/Groovy4415Bug.groovy          |   9 +-
 src/test/groovy/bugs/Groovy4416Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy4418.groovy             |   2 +-
 src/test/groovy/bugs/Groovy4435Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy4449Bug.groovy          |   8 +-
 ...Groovy4457GenericTypeDeclarationLeakTest.groovy |  10 +-
 src/test/groovy/bugs/Groovy4471Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy4480Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy4497Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy4584Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy4720Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy4721.groovy             |   8 +-
 src/test/groovy/bugs/Groovy4861Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy4922Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy4958Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy4966Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy4967Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy4973Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy4980Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy4986Bug.groovy          |   5 +-
 src/test/groovy/bugs/Groovy4989Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy4999Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy5030Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy5033Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy5056Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy5061.groovy             |   6 +-
 src/test/groovy/bugs/Groovy5101Test.groovy         |   9 +-
 src/test/groovy/bugs/Groovy5109Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy5122Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy5137Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy513_Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy5150.groovy             |   2 +-
 src/test/groovy/bugs/Groovy5152Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy5185Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy5210Bug.groovy          |   9 +-
 src/test/groovy/bugs/Groovy5212.groovy             |   4 +-
 src/test/groovy/bugs/Groovy5239.groovy             |   2 +-
 src/test/groovy/bugs/Groovy5260.groovy             |   6 +-
 src/test/groovy/bugs/Groovy5267.groovy             |   2 +-
 src/test/groovy/bugs/Groovy5272Bug.groovy          |  14 +-
 src/test/groovy/bugs/Groovy5318.groovy             |   6 +-
 src/test/groovy/bugs/Groovy5358.groovy             |   2 +-
 src/test/groovy/bugs/Groovy5364.groovy             |   4 +-
 src/test/groovy/bugs/Groovy5396Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy5418Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy5423.groovy             |   2 +-
 src/test/groovy/bugs/Groovy5425_Bug.groovy         |   7 +-
 src/test/groovy/bugs/Groovy5572Bug.groovy          |   9 +-
 src/test/groovy/bugs/Groovy558_616_Bug.groovy      |   9 +-
 src/test/groovy/bugs/Groovy5687Bug.groovy          |   5 +-
 src/test/groovy/bugs/Groovy5783Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy5806Bug.groovy          |   5 +-
 src/test/groovy/bugs/Groovy5915Bug.groovy          |  15 +-
 src/test/groovy/bugs/Groovy596.groovy              |  11 +-
 src/test/groovy/bugs/Groovy6042Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy6045Bug.groovy          |   9 +-
 src/test/groovy/bugs/Groovy6097.groovy             |   4 +-
 src/test/groovy/bugs/Groovy6260.groovy             |   2 +-
 src/test/groovy/bugs/Groovy6360.groovy             |   2 +-
 src/test/groovy/bugs/Groovy6374Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy6396Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy6508Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy6522Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy6567.groovy             |   2 +-
 src/test/groovy/bugs/Groovy662.groovy              |   2 +-
 src/test/groovy/bugs/Groovy6653.java               |   2 +-
 src/test/groovy/bugs/Groovy6722Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy674_Bug.groovy          |  23 +-
 src/test/groovy/bugs/Groovy6755Bug.groovy          |   4 +-
 src/test/groovy/bugs/Groovy675_Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy6764Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy6808.groovy             |   2 +-
 src/test/groovy/bugs/Groovy6811Bug.groovy          |   9 +-
 src/test/groovy/bugs/Groovy6821Bug.groovy          |   9 +-
 src/test/groovy/bugs/Groovy6830Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy6841Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy6862Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy6932.groovy             |   2 +-
 src/test/groovy/bugs/Groovy6938.groovy             |   2 +-
 src/test/groovy/bugs/Groovy6996.groovy             |   2 +-
 src/test/groovy/bugs/Groovy7031Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy7081Bug.groovy          |  16 +-
 src/test/groovy/bugs/Groovy7165.groovy             |   6 +-
 src/test/groovy/bugs/Groovy7204.groovy             |   2 +-
 src/test/groovy/bugs/Groovy7248Bug.groovy          |   9 +-
 src/test/groovy/bugs/Groovy7291Bug.groovy          |  12 +-
 src/test/groovy/bugs/Groovy7520Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy7584.groovy             |   2 +-
 src/test/groovy/bugs/Groovy7620.groovy             |   6 +-
 src/test/groovy/bugs/Groovy7709Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy770_Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy7721Bug.groovy          |   5 +-
 src/test/groovy/bugs/Groovy7753.groovy             |   2 +-
 src/test/groovy/bugs/Groovy779_Bug.groovy          |   4 +-
 src/test/groovy/bugs/Groovy7867.groovy             |   2 +-
 src/test/groovy/bugs/Groovy7876Bug.groovy          |  11 +-
 src/test/groovy/bugs/Groovy7912Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy7916Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy7917Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy7920Bug.groovy          |  10 +-
 src/test/groovy/bugs/Groovy7921Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy7924Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy7933Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy7937Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy7958Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy7969Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy7970Bug.groovy          |  11 +-
 src/test/groovy/bugs/Groovy7973.groovy             |   2 +-
 src/test/groovy/bugs/Groovy7978.groovy             |   2 +-
 src/test/groovy/bugs/Groovy7985.groovy             |   2 +-
 src/test/groovy/bugs/Groovy7989.groovy             |   2 +-
 src/test/groovy/bugs/Groovy7995Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy7996.groovy             |   4 +-
 src/test/groovy/bugs/Groovy8002.groovy             |   2 +-
 src/test/groovy/bugs/Groovy8026Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy8030Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy8046.groovy             |   8 +-
 src/test/groovy/bugs/Groovy8048.groovy             |   2 +-
 src/test/groovy/bugs/Groovy8055Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy8060Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy8063.groovy             |   8 +-
 src/test/groovy/bugs/Groovy8085Bug.groovy          |  11 +-
 src/test/groovy/bugs/Groovy8090.groovy             |   2 +-
 src/test/groovy/bugs/Groovy8110Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy8138Bug.groovy          |   5 +-
 src/test/groovy/bugs/Groovy8140Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy8164.java               |   2 +-
 src/test/groovy/bugs/Groovy8176Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy8212Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy8229Bug.groovy          |  10 +-
 src/test/groovy/bugs/Groovy8260Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy8298.groovy             |   2 +-
 src/test/groovy/bugs/Groovy8310.groovy             |   2 +-
 src/test/groovy/bugs/Groovy8313Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy831_Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy8327.groovy             |   2 +-
 src/test/groovy/bugs/Groovy8361.groovy             |   6 +-
 src/test/groovy/bugs/Groovy8383Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy8439.groovy             |   2 +-
 src/test/groovy/bugs/Groovy8446.groovy             |   6 +-
 src/test/groovy/bugs/Groovy8468.groovy             |   2 +-
 src/test/groovy/bugs/Groovy8474.groovy             |  10 +-
 src/test/groovy/bugs/Groovy8579.groovy             |   4 +-
 src/test/groovy/bugs/Groovy8600.groovy             |   2 +-
 src/test/groovy/bugs/Groovy8609Bug.groovy          |  19 +-
 src/test/groovy/bugs/Groovy8629Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy8648.groovy             |   2 +-
 src/test/groovy/bugs/Groovy8657.groovy             |   2 +-
 src/test/groovy/bugs/Groovy8686.groovy             |   6 +-
 src/test/groovy/bugs/Groovy872Bug.groovy           |   9 +-
 src/test/groovy/bugs/Groovy8762.groovy             |   2 +-
 src/test/groovy/bugs/Groovy8764.groovy             |   2 +-
 src/test/groovy/bugs/Groovy8815.groovy             |   2 +-
 src/test/groovy/bugs/Groovy8819Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy8833Bug.groovy          |   7 +-
 src/test/groovy/bugs/Groovy8868Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy8881Bug.groovy          |   8 +-
 src/test/groovy/bugs/Groovy8943.groovy             |   2 +-
 src/test/groovy/bugs/Groovy8947.groovy             |   4 +-
 src/test/groovy/bugs/Groovy8948.groovy             |   2 +-
 src/test/groovy/bugs/Groovy8962.groovy             |   2 +-
 src/test/groovy/bugs/Groovy8964.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9007.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9010.groovy             |   4 +-
 src/test/groovy/bugs/Groovy9031.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9059.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9063.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9074.groovy             |   4 +-
 src/test/groovy/bugs/Groovy9115.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9120.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9127.groovy             |   6 +-
 src/test/groovy/bugs/Groovy9136.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9141.groovy             |   6 +-
 src/test/groovy/bugs/Groovy9153.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9170.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9176.groovy             |   4 +-
 src/test/groovy/bugs/Groovy9197.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9213.groovy             |  10 +-
 src/test/groovy/bugs/Groovy9215.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9217.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9226.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9236.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9238.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9240.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9244.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9245.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9252.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9259.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9261.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9265.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9270.groovy             |  10 +-
 src/test/groovy/bugs/Groovy9271.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9288.groovy             |  79 ++---
 src/test/groovy/bugs/Groovy9292.groovy             |  28 +-
 src/test/groovy/bugs/Groovy9293.groovy             |  14 +-
 src/test/groovy/bugs/Groovy9294.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9324.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9327.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9329.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9336.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9338.groovy             |   6 +-
 src/test/groovy/bugs/Groovy9367.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9370.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9387.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9400.groovy             |   4 +-
 src/test/groovy/bugs/Groovy9412.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9413.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9487.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9524.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9556.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9566.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9587.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9589.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9601.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9606.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9607.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9608.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9609.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9611.groovy             |   2 +-
 src/test/groovy/bugs/Groovy965_Bug.groovy          |  10 +-
 src/test/groovy/bugs/Groovy9666.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9691.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9706.groovy             |   8 +-
 src/test/groovy/bugs/Groovy9719.groovy             |   6 +-
 src/test/groovy/bugs/Groovy9790.groovy             |   4 +-
 src/test/groovy/bugs/Groovy9797.groovy             |  20 +-
 src/test/groovy/bugs/Groovy9805.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9815.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9873.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9906.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9911.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9922.groovy             |   2 +-
 src/test/groovy/bugs/Groovy9932.groovy             |   4 +-
 src/test/groovy/bugs/Groovy9966.groovy             |   2 +-
 src/test/groovy/bugs/Groovy996_Bug.groovy          |   6 +-
 src/test/groovy/bugs/Groovy9982.groovy             |   2 +-
 src/test/groovy/bugs/GroovyInnerEnumBug.groovy     |  10 +-
 src/test/groovy/bugs/GuillaumesBug.groovy          |   6 +-
 src/test/groovy/bugs/GuillaumesMapBug.groovy       |   7 +-
 .../groovy/bugs/ImportNodeLineNumberTest.groovy    |   2 +-
 .../groovy/bugs/InconsistentStackHeightBug.groovy  |   8 +-
 src/test/groovy/bugs/InterfaceImplBug.groovy       |   5 +-
 ...vokeNormalMethodFromBuilder_Groovy657Bug.groovy |   6 +-
 src/test/groovy/bugs/MarkupAndMethodBug.groovy     |   6 +-
 src/test/groovy/bugs/MetaClassCachingBug.groovy    |  13 +-
 ...MethodCallWithoutParensInStaticMethodBug.groovy |   6 +-
 src/test/groovy/bugs/MethodClosureTest.groovy      |   4 +-
 src/test/groovy/bugs/MethodDispatchBug.groovy      |   7 +-
 src/test/groovy/bugs/MethodPointerBug.groovy       |   9 +-
 src/test/groovy/bugs/MorgansBug.groovy             |   6 +-
 src/test/groovy/bugs/NestedClosureBug.groovy       |   6 +-
 .../groovy/bugs/NullAsBooleanCoercionTest.groovy   |   6 +-
 src/test/groovy/bugs/NullCompareBug.groovy         |   6 +-
 .../groovy/bugs/OverloadInvokeMethodBug.groovy     |   6 +-
 src/test/groovy/bugs/POJOCallSiteBug.groovy        |  12 +-
 src/test/groovy/bugs/PrimitivePropertyBug.groovy   |   6 +-
 src/test/groovy/bugs/PrintlnWithNewBug.groovy      |   5 +-
 src/test/groovy/bugs/PropertyNameBug.groovy        |   7 +-
 src/test/groovy/bugs/RodsBooleanBug.groovy         |   6 +-
 src/test/groovy/bugs/RodsBug.groovy                |   7 +-
 .../groovy/bugs/RussellsOptionalParenTest.groovy   |   6 +-
 src/test/groovy/bugs/SingleEvalTest.groovy         |  10 +-
 .../groovy/bugs/StaticClosurePropertyBug.groovy    |   6 +-
 src/test/groovy/bugs/StaticMethodCallBug.groovy    |   6 +-
 src/test/groovy/bugs/StaticMethodImportBug.groovy  |   8 +-
 .../bugs/StaticMethodImportGroovy935Bug.groovy     |   5 +-
 src/test/groovy/bugs/StaticPropertyBug.groovy      |  10 +-
 .../groovy/bugs/SubscriptAndExpressionBug.groovy   |  11 +-
 src/test/groovy/bugs/SuperMethod2Bug.groovy        |  10 +-
 src/test/groovy/bugs/SuperMethodBug.groovy         |   6 +-
 .../groovy/bugs/SynchronizedBytecodeBug.groovy     |  12 +-
 src/test/groovy/bugs/ToStringBug.groovy            |   6 +-
 src/test/groovy/bugs/TryCatch2Bug.groovy           |   6 +-
 src/test/groovy/bugs/TryCatchBug.groovy            |   6 +-
 src/test/groovy/bugs/UnknownVariableBug.groovy     |   8 +-
 src/test/groovy/bugs/UseClosureInClosureBug.groovy |   6 +-
 src/test/groovy/bugs/UseStaticInClosureBug.groovy  |   7 +-
 src/test/groovy/bugs/VariablePrecedence.groovy     |   9 +-
 src/test/groovy/bugs/VariablePrecedenceTest.groovy |   6 +-
 src/test/groovy/bugs/VerifyErrorBug.groovy         |  11 +-
 src/test/groovy/bugs/WriteOnlyPropertyBug.groovy   |   6 +-
 src/test/groovy/bugs/ZoharsBug.groovy              |   6 +-
 .../AnnotationCollectorReflectionTest.groovy       |   2 +-
 .../bugs/groovy5912/otherpkg/Groovy5912Bug.groovy  |   7 +-
 src/test/groovy/bugs/groovy6742/Groovy6742.groovy  |   2 +-
 src/test/groovy/bugs/groovy8531/Groovy8531.groovy  |   2 +-
 src/test/groovy/bugs/groovy8757/UsageTest.groovy   |   7 +-
 .../SyntheticParameterAnnotationsBug.groovy        |   7 +-
 src/test/groovy/bugs/groovy8966/Groovy8966.groovy  |   7 +-
 src/test/groovy/bugs/groovy9204/Groovy9204.groovy  |   8 +-
 .../groovy/gls/annotations/AnnotationTest.groovy   |   6 +-
 .../AnnotationClosureExhaustiveTestSupport.groovy  |   4 +-
 .../AnnotationClosureJavaCompatibilityTest.java    |   4 +-
 .../AnnotationClosureWithNonLocalVariable.groovy   |  11 +-
 src/test/groovy/gls/ch06/s05/GName1Test.groovy     |  16 +-
 .../methods/MethodOverridingAllowedTest.groovy     |  43 ++-
 .../methods/MethodOverridingDeniedTest.groovy      |  35 +-
 .../closures/ResolveStrategyPropertyTest.groovy    |   7 +-
 .../groovy/gls/closures/ResolveStrategyTest.groovy |   7 +-
 .../gls/generics/GenericsUsageOrderingTest.groovy  |   2 +-
 .../groovy/gls/generics/GenericsUsageTest.groovy   |   6 +-
 .../groovy/gls/innerClass/InnerClassTest.groovy    |  22 +-
 .../gls/innerClass/InnerInterfaceTest.groovy       |  11 +-
 .../gls/invocation/ClassDuplicationTest.groovy     |   6 +-
 .../invocation/ConstructorDelegationTest.groovy    |   6 +-
 .../gls/invocation/CovariantReturnTest.groovy      |   2 +-
 .../groovy/gls/invocation/DefaultParamTest.groovy  |  26 +-
 .../groovy/gls/scope/VariablePrecedenceTest.groovy |   5 +-
 .../MultipleAssignmentDeclarationTest.groovy       |   2 +-
 .../gls/statements/MultipleAssignmentTest.groovy   |   2 +-
 src/test/groovy/gls/syntax/Gep3OrderDslTest.groovy |  15 +-
 src/test/groovy/gls/syntax/Gep3Test.groovy         |  54 +--
 src/test/groovy/groovy/ActorTest.groovy            |  10 +-
 .../groovy/groovy/AmbiguousInvocationTest.groovy   |  13 +-
 src/test/groovy/groovy/ArrayAutoboxingTest.groovy  |   6 +-
 src/test/groovy/groovy/ArrayCoerceTest.groovy      |  16 +-
 src/test/groovy/groovy/ArrayParamMethodTest.groovy |   6 +-
 src/test/groovy/groovy/ArrayTest.groovy            |  39 +--
 src/test/groovy/groovy/ArrayTypeTest.groovy        |   7 +-
 src/test/groovy/groovy/AsTest.groovy               |  23 +-
 src/test/groovy/groovy/AssertNumberTest.groovy     |   8 +-
 src/test/groovy/groovy/AssertTest.groovy           |  11 +-
 src/test/groovy/groovy/Base64Test.groovy           |  25 +-
 src/test/groovy/groovy/BinaryStreamsTest.groovy    |   9 +-
 src/test/groovy/groovy/BindingTest.groovy          |   7 +-
 src/test/groovy/groovy/BitSetTest.groovy           |  36 +-
 .../groovy/groovy/CallInnerClassCtorTest.groovy    |   8 +-
 src/test/groovy/groovy/CastTest.groovy             |  17 +-
 .../groovy/groovy/ChainedAssignmentTest.groovy     |   6 +-
 src/test/groovy/groovy/ClassExpressionTest.groovy  |   8 +-
 src/test/groovy/groovy/ClassLoaderBug.groovy       |   6 +-
 src/test/groovy/groovy/ClassTest.groovy            |   6 +-
 src/test/groovy/groovy/ClosureAsParamTest.groovy   |   9 +-
 src/test/groovy/groovy/ClosureCloneTest.groovy     |   6 +-
 .../groovy/groovy/ClosureComparatorTest.groovy     |   9 +-
 src/test/groovy/groovy/ClosureComposeTest.groovy   |   2 +-
 src/test/groovy/groovy/ClosureCurryTest.groovy     |   2 +-
 .../groovy/ClosureDefaultParameterTest.groovy      |   7 +-
 src/test/groovy/groovy/ClosureInClosureTest.groovy |   6 +-
 .../groovy/groovy/ClosureInStaticMethodTest.groovy |   8 +-
 .../groovy/groovy/ClosureMethodCallTest.groovy     |   2 +-
 .../groovy/groovy/ClosureMethodsOnFileTest.groovy  |  12 +-
 .../groovy/groovy/ClosureMissingMethodTest.groovy  |  11 +-
 src/test/groovy/groovy/ClosureReturnTest.groovy    |   7 +-
 .../ClosureReturnWithoutReturnStatementTest.groovy |   7 +-
 src/test/groovy/groovy/ClosureSugarTest.groovy     |   7 +-
 .../groovy/ClosureUsingOuterVariablesTest.groovy   |   2 +-
 .../groovy/ClosureWithDefaultParamTest.groovy      |  20 +-
 .../groovy/ClosureWithEmptyParametersTest.groovy   |   6 +-
 src/test/groovy/groovy/CollateTest.groovy          |  25 +-
 src/test/groovy/groovy/CompareEqualsTest.groovy    |   9 +-
 src/test/groovy/groovy/CompareToTest.groovy        |   7 +-
 src/test/groovy/groovy/CompareTypesTest.groovy     |  12 +-
 src/test/groovy/groovy/CompileOrderTest.groovy     |   7 +-
 src/test/groovy/groovy/CompilerErrorTest.groovy    |  12 +-
 src/test/groovy/groovy/Constructor2Test.groovy     |   6 +-
 .../groovy/groovy/ConstructorMismatchTest.groovy   |  15 +-
 src/test/groovy/groovy/ConstructorTest.groovy      |   6 +-
 .../groovy/groovy/CurlyBracketLayoutTest.groovy    |  10 +-
 .../groovy/groovy/DefaultParamClosureTest.groovy   |  13 +-
 src/test/groovy/groovy/DoWhileLoopTest.groovy      |   6 +-
 src/test/groovy/groovy/DollarEscapingTest.groovy   |   6 +-
 src/test/groovy/groovy/DownUpStepTest.groovy       |  12 +-
 src/test/groovy/groovy/DynamicMemberTest.groovy    |   6 +-
 src/test/groovy/groovy/EscapedUnicodeTest.groovy   |   9 +-
 .../groovy/groovy/ExceptionInClosureTest.groovy    |   8 +-
 src/test/groovy/groovy/FileTest.groovy             |  29 +-
 src/test/groovy/groovy/FilterLineTest.groovy       |  10 +-
 src/test/groovy/groovy/FinallyTest.groovy          |  12 +-
 .../groovy/ForLoopWithLocalVariablesTest.groovy    |   6 +-
 src/test/groovy/groovy/GStringTest.groovy          |   2 +-
 src/test/groovy/groovy/GeneratorTest.groovy        |   9 +-
 src/test/groovy/groovy/GlobalPrintlnTest.groovy    |   8 +-
 .../groovy/GroovyCharSequenceMethodsTest.groovy    |  57 +--
 .../groovy/groovy/GroovyClosureMethodsTest.groovy  |  18 +-
 .../groovy/groovy/GroovyInterceptableTest.groovy   |  12 +-
 src/test/groovy/groovy/GroovyTruthTest.groovy      |  15 +-
 src/test/groovy/groovy/HeredocsTest.groovy         |   7 +-
 src/test/groovy/groovy/HexTest.groovy              |  12 +-
 src/test/groovy/groovy/HomepageTest.groovy         |   6 +-
 src/test/groovy/groovy/IdentityClosureTest.groovy  |  11 +-
 src/test/groovy/groovy/IfElseCompactTest.groovy    |   7 +-
 src/test/groovy/groovy/IfElseTest.groovy           |  15 +-
 src/test/groovy/groovy/IfTest.groovy               |   9 +-
 src/test/groovy/groovy/IfWithMethodCallTest.groovy |   6 +-
 src/test/groovy/groovy/IllegalAccessTests.groovy   |   2 +-
 src/test/groovy/groovy/ImportTest.groovy           |   2 +-
 src/test/groovy/groovy/InstanceofTest.groovy       |  26 +-
 src/test/groovy/groovy/InterfaceTest.groovy        |   2 +-
 .../groovy/InvokeNormalMethodsFirstTest.groovy     |  10 +-
 .../groovy/KeywordsInPropertyNamesTest.groovy      |   9 +-
 src/test/groovy/groovy/LeftShiftTest.groovy        |   8 +-
 src/test/groovy/groovy/ListIteratingTest.groovy    |   8 +-
 src/test/groovy/groovy/ListTest.groovy             |  92 +----
 src/test/groovy/groovy/LiteralTypesTest.groovy     |   8 +-
 src/test/groovy/groovy/LittleClosureTest.groovy    |   6 +-
 src/test/groovy/groovy/LocalFieldTest.groovy       |   6 +-
 src/test/groovy/groovy/LocalPropertyTest.groovy    |   7 +-
 src/test/groovy/groovy/LocalVariableTest.groovy    |   9 +-
 src/test/groovy/groovy/LogicTest.groovy            |   9 +-
 src/test/groovy/groovy/LoopBreakTest.groovy        |   8 +-
 src/test/groovy/groovy/MapConstructionTest.groovy  |   8 +-
 src/test/groovy/groovy/MapPropertyTest.groovy      |   9 +-
 src/test/groovy/groovy/MapTest.groovy              |   2 +-
 src/test/groovy/groovy/MethodCallTest.groovy       |   9 +-
 .../groovy/MethodCallWithoutParenthesisTest.groovy |   9 +-
 .../MethodParameterAccessWithinClosureTest.groovy  |  17 +-
 src/test/groovy/groovy/MinMaxTest.groovy           |   8 +-
 src/test/groovy/groovy/MinusEqualsTest.groovy      |  21 +-
 src/test/groovy/groovy/ModuloTest.groovy           |   8 +-
 src/test/groovy/groovy/MultiCatchTest.groovy       |  16 +-
 src/test/groovy/groovy/MultiDimArraysTest.groovy   |  15 +-
 .../groovy/MultilineChainExpressionTest.groovy     |   6 +-
 src/test/groovy/groovy/MultilineStringTest.groovy  |   6 +-
 .../groovy/groovy/MultiplyDivideEqualsTest.groovy  |  12 +-
 src/test/groovy/groovy/NamedParameterTest.groovy   |  26 +-
 src/test/groovy/groovy/NestedClassTest.groovy      |  18 +-
 src/test/groovy/groovy/NewExpressionTest.groovy    |  11 +-
 src/test/groovy/groovy/NullPropertyTest.groovy     |   6 +-
 src/test/groovy/groovy/OptionalReturnTest.groovy   |  13 +-
 .../groovy/groovy/OverloadInvokeMethodTest.groovy  |   6 +-
 .../groovy/OverridePropertyGetterTest.groovy       |   8 +-
 src/test/groovy/groovy/PlusEqualsTest.groovy       |  25 +-
 src/test/groovy/groovy/PostfixTest.groovy          |  12 +-
 src/test/groovy/groovy/PrefixTest.groovy           |  12 +-
 src/test/groovy/groovy/PrimitiveArraysTest.groovy  |  13 +-
 .../groovy/groovy/PrimitiveDefaultValueTest.groovy |  12 +-
 .../groovy/groovy/PrimitiveTypeFieldTest.groovy    |  10 +-
 src/test/groovy/groovy/PrimitiveTypesTest.groovy   |   9 +-
 src/test/groovy/groovy/PrintTest.groovy            |  57 ++-
 ...ateVariableAccessFromAnotherInstanceTest.groovy |   6 +-
 src/test/groovy/groovy/ProcessTest.groovy          |  15 +-
 src/test/groovy/groovy/Property2Test.groovy        |  10 +-
 src/test/groovy/groovy/PropertyTest.groovy         |   4 +-
 .../groovy/groovy/PropertyWithoutDotTest.groovy    |   6 +-
 src/test/groovy/groovy/RangeTest.groovy            |  27 +-
 src/test/groovy/groovy/ReadLineTest.groovy         |  24 +-
 .../groovy/groovy/RegularExpressionsTest.groovy    |   2 +-
 src/test/groovy/groovy/ReturnTest.groovy           |   8 +-
 src/test/groovy/groovy/SafeNavigationTest.groovy   |  12 +-
 src/test/groovy/groovy/SerializeTest.groovy        |  16 +-
 src/test/groovy/groovy/SetTest.groovy              |  10 +-
 src/test/groovy/groovy/ShellTest.groovy            |   8 +-
 src/test/groovy/groovy/SimplePostfixTest.groovy    |   6 +-
 src/test/groovy/groovy/SingletonBugTest.groovy     |   5 +-
 src/test/groovy/groovy/SliceTest.groovy            |   6 +-
 src/test/groovy/groovy/SocketTest.groovy           |  12 +-
 src/test/groovy/groovy/SortTest.groovy             |  11 +-
 src/test/groovy/groovy/SqlDateTest.groovy          |  27 +-
 src/test/groovy/groovy/StackTraceTest.groovy       |   7 +-
 src/test/groovy/groovy/StaticImportTest.groovy     |  30 +-
 src/test/groovy/groovy/StaticMessageTest.groovy    |   7 +-
 src/test/groovy/groovy/StringBufferTest.groovy     |   7 +-
 src/test/groovy/groovy/StringTest.groovy           |  36 +-
 src/test/groovy/groovy/SubscriptTest.groovy        |  20 +-
 src/test/groovy/groovy/SwitchTest.groovy           |  21 +-
 .../groovy/SwitchWithDifferentTypesTest.groovy     |  12 +-
 src/test/groovy/groovy/TextPropertyTest.groovy     |  13 +-
 src/test/groovy/groovy/ThisAndSuperTest.groovy     |   8 +-
 src/test/groovy/groovy/ThreadMethodsTest.groovy    |   7 +-
 src/test/groovy/groovy/ThrowTest.groovy            |   8 +-
 src/test/groovy/groovy/ToArrayBugTest.groovy       |   6 +-
 .../groovy/groovy/TripleQuotedStringTest.groovy    |   6 +-
 src/test/groovy/groovy/TypesafeMethodTest.groovy   |   6 +-
 .../groovy/groovy/UniqueOnCollectionTest.groovy    |  17 +-
 .../UniqueOnCollectionWithClosureTest.groovy       |  11 +-
 .../UniqueOnCollectionWithComparatorTest.groovy    |  11 +-
 src/test/groovy/groovy/UnsafeNavigationTest.groovy |   8 +-
 src/test/groovy/groovy/VArgsTest.groovy            |   2 +-
 src/test/groovy/groovy/ValidNameTest.groovy        |   7 +-
 src/test/groovy/groovy/VarargsMethodTest.groovy    |   2 +-
 src/test/groovy/groovy/VerbatimGStringTest.groovy  |  10 +-
 src/test/groovy/groovy/WhileLoopTest.groovy        |   8 +-
 .../PackageAndImportAnnotationTest.groovy          |   2 +-
 .../annotations/ParameterAnnotationTest.groovy     |  18 +-
 .../groovy/beans/BindableTransformTest.groovy      |   2 +-
 .../groovy/beans/ListenerListTransformTest.groovy  |  32 +-
 src/test/groovy/groovy/execute/ExecuteTest.groovy  |  12 +-
 .../groovy/execute/ExecuteTest_LinuxSolaris.groovy |  16 +-
 .../groovy/execute/ExecuteTest_Windows.groovy      |  16 +-
 .../groovy/generated/AutoCloneGeneratedTest.groovy |   2 +-
 .../generated/AutoExternalizeGeneratedTest.groovy  |   2 +-
 .../groovy/generated/BindableGeneratedTest.groovy  |   2 +-
 .../groovy/generated/BuilderGeneratedTest.groovy   |   2 +-
 .../groovy/generated/CanonicalGeneratedTest.groovy |   2 +-
 .../groovy/generated/ClosureGeneratedTest.groovy   |   2 +-
 .../generated/ConstructorsGeneratedTest.groovy     |   2 +-
 .../groovy/generated/DelegateGeneratedTest.groovy  |   2 +-
 .../generated/GroovyObjectGeneratedTest.groovy     |   2 +-
 .../groovy/generated/ImmutableGeneratedTest.groovy |   2 +-
 .../generated/IndexedPropertyGeneratedTest.groovy  |   2 +-
 .../generated/PropertiesGeneratedTest.groovy       |   2 +-
 .../groovy/generated/SortableGeneratedTest.groovy  |   2 +-
 .../groovy/generated/VetoableGeneratedTest.groovy  |   2 +-
 src/test/groovy/groovy/gpath/GPathTest.groovy      |   6 +-
 src/test/groovy/groovy/gpath/NodeGPathTest.groovy  |   8 +-
 .../groovy/grape/GrabErrorIsolationTest.groovy     |   4 +-
 .../groovy/groovy/grape/GrabExcludeTest.groovy     |  10 +-
 .../groovy/groovy/grape/GrabResolverTest.groovy    |  14 +-
 .../groovy/grape/GrapeClassLoaderTest.groovy       |   6 +-
 src/test/groovy/groovy/grape/GrapeIvyTest.groovy   |  10 +-
 src/test/groovy/groovy/inspect/InspectorTest.java  |  10 +-
 .../groovy/groovy/io/LineColumnReaderTest.groovy   |  11 +-
 .../groovy/lang/BenchmarkInterceptorTest.groovy    |  10 +-
 .../groovy/lang/CategoryAnnotationTest.groovy      |   6 +-
 .../groovy/groovy/lang/ClassReloadingTest.groovy   |   7 +-
 .../groovy/groovy/lang/ClosureResolvingTest.groovy |  10 +-
 .../groovy/lang/DelegatingMetaClassTest.groovy     |   8 +-
 src/test/groovy/groovy/lang/ExceptionTest.groovy   |   8 +-
 .../lang/ExpandoMetaClassConstructorTest.groovy    |   8 +-
 .../groovy/groovy/lang/ExpandoMetaClassTest.groovy |  82 +----
 src/test/groovy/groovy/lang/GStringTest.java       |   4 +-
 src/test/groovy/groovy/lang/GetMethodsTest.groovy  |   7 +-
 src/test/groovy/groovy/lang/Groovy3406.groovy      |   2 +-
 .../groovy/lang/GroovyClassLoaderTest.groovy       |   2 +-
 .../groovy/groovy/lang/GroovyCodeSourceTest.groovy |  13 +-
 src/test/groovy/groovy/lang/GroovyShellTest.java   |   6 +-
 .../groovy/groovy/lang/GroovyShellTest2.groovy     |   4 +-
 .../groovy/lang/InnerClassResolvingTest.groovy     |   8 +-
 src/test/groovy/groovy/lang/IntRangeTest.groovy    |  31 +-
 src/test/groovy/groovy/lang/InterceptorTest.groovy |  16 +-
 .../groovy/groovy/lang/MapOfClosureTest.groovy     |   5 +-
 .../groovy/lang/MetaClassPropertyTest.groovy       |  11 +-
 .../groovy/lang/MetaClassRegistryTest.groovy       |  13 +-
 .../groovy/groovy/lang/MethodMissingTest.groovy    |  21 +-
 .../groovy/groovy/lang/MixinAnnotationTest.groovy  |   6 +-
 .../groovy/groovy/lang/NumberRangeTestCase.java    |  46 +--
 src/test/groovy/groovy/lang/ObjectRangeTest.java   |   4 +-
 .../groovy/groovy/lang/PropertyMissingTest.groovy  |  21 +-
 .../groovy/lang/ReferenceSerializationTest.groovy  |   7 +-
 src/test/groovy/groovy/lang/RespondsToTest.groovy  |  12 +-
 src/test/groovy/groovy/lang/ScriptCacheTest.groovy |  13 +-
 .../lang/ScriptSourcePositionInAstTest.groovy      |   8 +-
 src/test/groovy/groovy/lang/SpreadMapTest.groovy   | 260 --------------
 .../groovy/groovy/lang/StringConcatTest.groovy     |   5 +-
 src/test/groovy/groovy/lang/StripMarginTest.groovy |   9 +-
 .../groovy/groovy/lang/SyntheticReturnTest.groovy  |   2 -
 src/test/groovy/groovy/lang/TapMethodTest.groovy   |  29 +-
 .../groovy/lang/TupleFactoryMethodTest.groovy      |   2 +-
 src/test/groovy/groovy/lang/TupleTest.java         |  10 +-
 src/test/groovy/groovy/lang/WithMethodTest.groovy  |  28 +-
 .../groovy/mock/example/SandwichMakerTest.groovy   |   5 +-
 .../groovy/mock/interceptor/HalfMockTest.groovy    |  15 +-
 .../mock/interceptor/MockCallSequenceTest.groovy   |  29 +-
 .../mock/interceptor/MockNestedCallTest.groovy     |   6 +-
 .../mock/interceptor/MockSingleCallTest.groovy     |  25 +-
 .../mock/interceptor/MockWithZeroRangeTest.groovy  |  12 +-
 .../mock/interceptor/StubCallSequenceTest.groovy   |  26 +-
 .../groovy/mock/interceptor/StubForJavaTest.groovy |   7 +-
 .../mock/interceptor/StubSingleCallTest.groovy     |   7 +-
 .../groovy/groovy/mock/interceptor/StubTest.groovy |   8 +-
 .../groovy/operator/BigDecimalOperatorsTest.groovy |  18 +-
 .../operator/BigIntegerOperationsTest.groovy       |  11 +-
 .../groovy/operator/BitwiseOperatorsTest.groovy    |  22 +-
 .../groovy/operator/BooleanOperationsTest.groovy   |  12 +-
 .../groovy/operator/DoubleOperationsTest.groovy    |  15 +-
 .../groovy/operator/ImplicationOperatorTest.groovy |  15 +-
 .../groovy/operator/IntegerOperatorsTest.groovy    |  24 +-
 .../operator/MyColorOperatorOverloadingTest.groovy |  10 +-
 .../groovy/groovy/operator/NegateListsTest.groovy  |  12 +-
 .../groovy/operator/PowerOperatorsTest.groovy      |  10 +-
 .../groovy/operator/SpreadListOperatorTest.groovy  |  19 +-
 .../groovy/operator/SpreadMapOperatorTest.groovy   |  12 +-
 .../groovy/operator/StringOperatorsTest.groovy     |  10 +-
 .../groovy/operator/UnaryMinusNumberTests.groovy   |   9 +-
 .../groovy/operator/UnaryMinusOperatorTest.groovy  |  12 +-
 .../groovy/script/RuntimeResolveTests.groovy       |   4 +-
 src/test/groovy/groovy/script/ScriptTest.groovy    |   6 +-
 src/test/groovy/groovy/time/DurationTest.groovy    | 272 ++------------
 .../groovy/groovy/time/TimeCategoryTest.groovy     |  21 +-
 .../transform/AnnotationCollectorLegacyTest.groovy |   2 +-
 .../transform/AnnotationCollectorTest.groovy       |   2 +-
 .../transform/ConditionalInterruptTest.groovy      |   2 +-
 src/test/groovy/groovy/transform/LazyTest.groovy   |   2 +-
 .../groovy/transform/ReadWriteLockTest.groovy      |   8 +-
 .../groovy/transform/ThreadInterruptTest.groovy    |  12 +-
 .../groovy/transform/TimedInterruptTest.groovy     |   2 +-
 .../groovy/transform/stc/CoercionSTCTest.groovy    |   1 -
 .../transform/stc/ConstructorsSTCTest.groovy       |   1 -
 .../groovy/transform/stc/Groovy7888Bug.groovy      |   8 +-
 .../groovy/groovy/transform/stc/LambdaTest.groovy  |  10 +-
 .../groovy/transform/stc/MethodCallsSTCTest.groovy |   1 -
 .../transform/stc/MethodReferenceTest.groovy       |  24 +-
 .../groovy/groovy/transform/stc/POJOTest.groovy    |  10 +-
 .../groovy/tree/ClosureClassLoaderBug.groovy       |   6 +-
 .../groovy/groovy/tree/NavigationNodeTest.groovy   |   7 +-
 .../groovy/groovy/tree/NestedClosureBugTest.groovy |   6 +-
 src/test/groovy/groovy/tree/SmallTreeTest.groovy   |   6 +-
 src/test/groovy/groovy/tree/TreeTest.groovy        |   2 +-
 src/test/groovy/groovy/tree/VerboseTreeTest.groovy |   7 +-
 src/test/groovy/groovy/txn/TransactionTest.groovy  |   6 +-
 src/test/groovy/groovy/ui/GroovyMainTest.groovy    |   6 +-
 .../groovy/groovy/util/BufferedIteratorTest.groovy |  20 +-
 .../groovy/groovy/util/BuilderSupportTest.groovy   |   4 +-
 .../groovy/groovy/util/ConfigObjectTest.groovy     |  16 +-
 .../groovy/groovy/util/ConfigSlurperTest.groovy    |  55 +--
 .../groovy/groovy/util/DelegatingScriptTest.groovy |   2 +-
 .../groovy/util/FactoryBuilderSupportTest.groovy   |  52 +--
 .../groovy/groovy/util/FileTreeBuilderTest.groovy  |  10 +-
 .../util/GroovyCollectionsStarImportTest.groovy    |  15 +-
 .../groovy/util/GroovyCollectionsTest.groovy       |   2 +-
 .../groovy/util/GroovyScriptEngineTest.groovy      |  29 +-
 .../groovy/groovy/util/IndentPrinterTest.groovy    |  11 +-
 src/test/groovy/groovy/util/NodeTest.groovy        |  83 ++---
 .../groovy/util/ObjectGraphBuilderTest.groovy      |  23 +-
 .../groovy/groovy/util/ObservableListTest.groovy   |  19 +-
 .../groovy/groovy/util/ObservableMapTest.groovy    |  15 +-
 .../groovy/groovy/util/ObservableSetTests.groovy   |  19 +-
 src/test/groovy/groovy/util/OrderByTest.groovy     |  11 +-
 .../groovy/util/ProxyGeneratorAdapterTest.groovy   |   5 +-
 .../groovy/groovy/util/ProxyGeneratorTest.groovy   |   7 +-
 src/test/groovy/groovy/util/ProxyTest.groovy       |  14 +-
 .../groovy/groovy/util/ResourceBundleTest.groovy   |   4 +-
 .../groovy/groovy/util/logging/CommonsTest.groovy  |  27 +-
 .../groovy/groovy/util/logging/Log4jTest.groovy    |  37 +-
 src/test/groovy/groovy/util/logging/LogTest.groovy |  38 +-
 .../groovy/util/logging/vm9/PlatformLogTest.groovy |  29 +-
 .../groovy/ast/tools/ExpressionUtilsTest.groovy    |   4 +-
 .../apache/groovy/parser/antlr4/TestUtils.groovy   |  72 ++--
 .../groovy/plugin/GroovyRunnerRegistryTest.groovy  |  21 +-
 .../groovy/org/apache/groovy/util/ArraysTest.java  |  26 +-
 .../org/apache/groovy/util/BeanUtilsTest.groovy    |   2 +-
 .../org/apache/groovy/util/JavaShellTest.groovy    |   2 +-
 .../groovy/org/apache/groovy/util/MapsTest.groovy  |   2 +-
 .../ManagedIdentityConcurrentMapTest.groovy        |   2 +-
 .../ConcurrentLinkedHashMapTest.java               |   8 +-
 .../ClosureAndInnerClassNodeStructureTest.groovy   |   2 +-
 .../codehaus/groovy/antlr/GStringEndTest.groovy    |  12 +-
 .../org/codehaus/groovy/ast/ClassNodeTest.java     |  32 +-
 .../codehaus/groovy/ast/GenericsTestCase.groovy    |   5 +-
 .../groovy/org/codehaus/groovy/ast/Groovy7826.java |   2 +-
 .../org/codehaus/groovy/ast/Groovy9871.groovy      |   2 +-
 .../groovy/ast/LazyInitOnClassNodeTest.groovy      |   7 +-
 .../codehaus/groovy/ast/LineColumnCheckTest.groovy |  54 +--
 .../org/codehaus/groovy/ast/MethodNodeTest.groovy  |   2 +-
 .../org/codehaus/groovy/ast/ModuleNodeTest.java    |  12 +-
 .../groovy/ast/decompiled/AsmDecompilerTest.groovy |  18 +-
 .../ast/decompiled/FieldNodeEqualityTest.groovy    |   2 +-
 .../groovy/ast/expr/ClosureExpressionTest.groovy   |   2 +-
 .../ast/expr/DeclarationExpressionTest.groovy      |   2 +-
 .../groovy/ast/expr/MapExpressionTest.groovy       |   7 +-
 .../ast/expr/MethodCallExpressionTest.groovy       |   2 +-
 .../groovy/ast/expr/PropertyExpressionTest.groovy  |   6 +-
 .../groovy/ast/source/SourceBaseTestCase.groovy    |   5 +-
 .../groovy/ast/stmt/ExpressionStatementTest.groovy |   2 +-
 .../groovy/ast/stmt/IfStatementTest.groovy         |  11 +-
 .../groovy/ast/stmt/ThrowStatementTest.groovy      |   2 +-
 .../groovy/ast/tools/GenericsUtilsTest.groovy      |   2 +-
 .../groovy/classgen/BytecodeHelperTest.groovy      |   9 +-
 .../classgen/CallClosureFieldAsMethodTest.groovy   |  10 +-
 .../codehaus/groovy/classgen/CallSiteTest.groovy   |  10 +-
 .../groovy/classgen/CastToStringTest.groovy        |   2 +-
 .../classgen/ClassCompletionVerifierTest.java      |  12 +-
 .../classgen/FinalVariableAnalyzerTest.groovy      |  50 +--
 .../groovy/classgen/GenericsGenTest.groovy         |  11 +-
 .../codehaus/groovy/classgen/InterfaceTest.groovy  |   2 +-
 .../codehaus/groovy/classgen/MetaClassTest.groovy  |   9 +-
 .../org/codehaus/groovy/classgen/RecordTest.groovy |   2 +-
 .../groovy/classgen/ReflectorLoaderTest.groovy     |   6 +-
 .../org/codehaus/groovy/classgen/SealedTest.groovy |   4 +-
 .../groovy/classgen/TransientMetaClassTest.groovy  |   8 +-
 .../ClosureWriterGeneratedAnnotationTest.groovy    |   2 +-
 .../asm/InstructionSequenceHelperClassTest.groovy  |   9 +-
 .../classgen/asm/sc/BugsStaticCompileTest.groovy   |   4 +-
 .../asm/sc/MethodCallsStaticCompilationTest.groovy |   2 +-
 .../classgen/asm/sc/StaticCompilationTest.groovy   |   3 +-
 ...ticCompileClosureGeneratedAnnotationTest.groovy |   2 +-
 .../asm/sc/StaticCompileFieldAccessTest.groovy     |   2 -
 .../asm/sc/StaticCompileFlowTypingTest.groovy      |   2 +-
 .../classgen/asm/sc/StaticCompileMathTest.groovy   |   2 +-
 .../TupleConstructorStaticCompilationTest.groovy   |   2 +-
 .../classgen/asm/sc/bugs/Groovy6670Bug.groovy      |   8 +-
 .../groovy/classgen/asm/sc/bugs/Groovy6782.groovy  |   2 +-
 .../classgen/asm/sc/bugs/Groovy7883Bug.groovy      |  21 +-
 .../groovy/control/CompilerConfigurationTest.java  |  24 +-
 .../ASTTransformationCustomizerTest.groovy         |   2 +-
 .../customizers/ImportCustomizerTest.groovy        |   6 +-
 .../customizers/SecureASTCustomizerTest.groovy     |   6 +-
 .../CompilerCustomizationBuilderTest.groovy        |  22 +-
 .../control/io/AbstractReaderSourceTest.java       |  21 +-
 .../groovy/control/io/FileReaderTest.groovy        |   5 +-
 .../groovy/control/io/NullWriterTest.groovy        |   7 +-
 .../control/io/StringReaderSourceTest.groovy       |   5 +-
 .../groovy/reflection/CachedMethodTest.groovy      |   2 +-
 .../reflection/GroovyClassValueFactoryTest.groovy  |  24 +-
 .../reflection/utils/ReflectionUtilsTest.groovy    |   3 +-
 .../groovy/runtime/AppendableDgmMethodsTest.groovy |   6 +-
 .../groovy/runtime/ArrayGroovyMethodsTest.groovy   |   2 +-
 .../groovy/runtime/CategoryForIteratorTest.groovy  |  10 +-
 .../runtime/CustomBooleanCoercionTest.groovy       |  10 +-
 .../runtime/DefaultGroovyMethodsSupportTest.groovy |  23 +-
 .../runtime/DefaultGroovyStaticMethodsTest.groovy  |   8 +-
 .../groovy/runtime/DirectoryDeleteTest.groovy      |   6 +-
 .../codehaus/groovy/runtime/EachLineTest.groovy    |   6 +-
 .../EachWithReaderAndInputStreamTest.groovy        |   9 +-
 .../groovy/runtime/EncodingGroovyMethodsTest.java  |  26 +-
 .../codehaus/groovy/runtime/FileAppendTest.groovy  |  18 +-
 .../groovy/runtime/FileLeftShiftTest.groovy        |   8 +-
 .../runtime/FileStaticGroovyMethodsTest.groovy     |   6 +-
 .../groovy/runtime/GroovyCategoryTest.groovy       |  10 +-
 .../groovy/runtime/IOGroovyMethodsTest.groovy      |  16 +-
 .../groovy/runtime/InterfaceConversionMapTest.java |   8 +-
 .../groovy/runtime/InterfaceConversionTest.groovy  |   2 +-
 .../runtime/InvokerHelperFormattingTest.groovy     |  21 +-
 .../groovy/runtime/MetaClassHelperTest.java        |   4 +-
 .../org/codehaus/groovy/runtime/MinusTest.groovy   |  48 +--
 .../groovy/runtime/NestedCategoryTest.groovy       |  13 +-
 .../codehaus/groovy/runtime/NullObjectTest.groovy  |   2 +-
 .../groovy/runtime/PerInstanceMetaClassTest.groovy |  18 +-
 .../runtime/ResourceGroovyMethodsTest.groovy       |  51 ++-
 .../groovy/runtime/StringAsClassTest.groovy        |  15 +-
 .../groovy/runtime/StringGroovyMethodsTest.java    |   8 +-
 .../codehaus/groovy/runtime/URLGetBytesTest.groovy |   8 +-
 .../codehaus/groovy/runtime/URLGetTextTest.groovy  |   8 +-
 .../runtime/WithResourceStreamClosedTest.groovy    |   7 +-
 .../groovy/runtime/WriterAppendTest.groovy         |  17 +-
 .../groovy/runtime/m12n/ExtensionModuleTest.groovy |   2 +-
 .../runtime/memoize/AbstractMemoizeTestCase.groovy |   6 +-
 .../CacheCleanupCollectedSoftReferencesTest.groovy |  22 +-
 .../groovy/runtime/memoize/CacheCleanupTest.groovy |   4 +-
 .../groovy/runtime/memoize/CommonCacheTest.java    |  63 ++--
 .../runtime/memoize/ConcurrentCommonCacheTest.java |  65 ++--
 .../memoize/LRUProtectionStorageTest.groovy        |  11 +-
 .../runtime/memoize/MemoizeAtMostTest.groovy       |   2 -
 .../runtime/memoize/MemoizeBetweenTest.groovy      |   2 -
 .../groovy/runtime/memoize/NullValueTest.groovy    |   2 +-
 .../runtime/memoize/StampedCommonCacheTest.java    |  65 ++--
 .../memoize/UnlimitedConcurrentCacheTest.java      |  42 ++-
 .../StaticMethodOverloadCompileStaticTest.groovy   |   2 +-
 .../vm8/StaticMethodOverloadTest.groovy            |   8 +-
 .../powerassert/AssertionRenderingTest.groovy      |   2 +-
 .../runtime/powerassert/AssertionTestUtil.groovy   |   9 +-
 .../AssertionsInDifferentLocationsTest.groovy      |  13 +-
 .../runtime/powerassert/EvaluationTest.groovy      |  47 +--
 .../ImplicitClosureCallRenderingTest.groovy        |  15 +-
 .../NotTransformedAssertionsTest.groovy            |   7 +-
 .../runtime/powerassert/ValueRenderingTest.groovy  |   2 +-
 .../runtime/trampoline/TrampolineTest.groovy       |   5 +-
 .../DefaultTypeTransformationTest.groovy           |   4 +-
 .../runtime/typehandling/EqualityTest.groovy       |   6 +-
 .../runtime/typehandling/NumberMathTest.groovy     |  18 +-
 .../typehandling/ShortTypeHandlingTest.groovy      | 185 +---------
 .../org/codehaus/groovy/syntax/TokenTest.groovy    | 272 --------------
 .../groovy/tools/LoaderConfigurationTest.groovy    | 357 +------------------
 .../codehaus/groovy/tools/StringHelperTest.groovy  |   9 +-
 .../org/codehaus/groovy/tools/UtilitiesTest.groovy |   7 +-
 .../tools/ast/TransformTestHelperTest.groovy       |   6 +-
 .../rootloadersync/SubclassingInGroovyTest.groovy  |   4 +-
 .../rootloadersync/SubclassingInJavaTest.java      |   4 +-
 .../groovy/tools/stubgenerator/StubTestCase.groovy |  18 +-
 .../groovy/transform/AutoCloneTransformTest.groovy |   4 +-
 .../AutoFinalTransformBlackBoxTest.groovy          |   5 +-
 .../groovy/transform/AutoFinalTransformTest.groovy |   4 +-
 .../transform/AutoImplementTransformTest.groovy    |   6 +-
 .../transform/BaseScriptTransformTest.groovy       |   2 +-
 .../groovy/transform/BuilderTransformTest.groovy   |  13 +-
 .../CanonicalComponentsTransformTest.groovy        |   8 +-
 .../groovy/transform/DelegateTransformTest.groovy  |  10 +-
 .../EqualsAndHashCodeTransformTest.groovy          |   2 +-
 .../ExternalizeMethodsTransformTest.groovy         |   2 +-
 .../groovy/transform/FieldTransformTest.groovy     |   2 +-
 .../groovy/transform/FinalTransformTest.groovy     |   4 +-
 .../transform/GeneratedAnnotationTest.groovy       |   2 +-
 .../groovy/transform/GlobalTransformTest.groovy    |   5 +-
 .../groovy/transform/ImmutableTransformTest.groovy |   4 +-
 .../transform/IndexedPropertyTransformTest.groovy  |   2 +-
 .../InheritConstructorsTransformTest.groovy        |   2 +-
 .../transform/MemoizedASTTransformationTest.groovy |  30 +-
 .../transform/NamedVariantTransformTest.groovy     |  12 +-
 .../transform/NewifyTransformBlackBoxTest.groovy   |  14 +-
 .../groovy/transform/NewifyTransformTest.groovy    |   4 +-
 .../groovy/transform/NullCheckTransformTest.groovy |   3 +-
 .../transform/ReadWriteLockTransformTest.groovy    |   2 +-
 .../groovy/transform/SealedTransformTest.groovy    |   4 +-
 .../transform/SingletonASTTransformationTest.java  |  13 +-
 .../transform/SynchronizedTransformTest.groovy     |  16 +-
 .../transform/TupleConstructorTransformTest.groovy |   4 +-
 .../TransformsAndCustomClassLoadersTest.groovy     |  14 +-
 .../packageScope/DifferentPackageTest.groovy       |  22 +-
 .../packageScope/PackageScopeTransformTest.groovy  |   4 +-
 .../groovy/transform/stc/SignatureCodecTest.groovy |  31 +-
 .../tailrec/InWhileLoopWrapperTest.groovy          |   2 +-
 .../transform/tailrec/ParameterMappingTest.groovy  |   2 +-
 .../transform/tailrec/RecursiveListExamples.groovy |   2 +-
 .../tailrec/RecursivenessTesterTest.groovy         |   6 +-
 .../tailrec/ReturnAdderForClosuresTest.groovy      |   6 +-
 .../ReturnStatementToIterationConverterTest.groovy |   2 +-
 .../transform/tailrec/StatementReplacerTest.groovy |   6 +-
 .../TailRecursiveCompilationFailuresTest.groovy    |   4 +-
 .../transform/tailrec/TailRecursiveExamples.groovy |   2 +-
 .../TernaryToIfStatementConverterTest.groovy       |   2 +-
 .../tailrec/VariableExpressionReplacerTest.groovy  |   6 +-
 .../groovy/transform/traitx/Groovy11776.groovy     |   2 +-
 .../traitx/TraitASTTransformationTest.groovy       |  33 +-
 .../src/test/groovy/groovy/ant/AntTest.groovy      |  32 +-
 .../src/test/groovy/groovy/ant/AntTestCase.groovy  |   3 +-
 .../test/groovy/groovy/bugs/Groovy5025Bug.groovy   |   8 +-
 .../groovy/ast/CodeVisitorSupportTest.groovy       |   2 +-
 .../ast/builder/AstBuilderFromCodeTest.groovy      |  51 +--
 .../builder/AstBuilderFromSpecificationTest.groovy |  18 +-
 .../ast/builder/AstBuilderFromStringTest.groovy    |  20 +-
 .../AstBuilderFromCodePackageImportTest.groovy     |   5 +-
 .../ASTTransformationCustomizerTest.groovy         |  11 +-
 .../groovy/cli/commons/CliBuilderTest.groovy       |  50 +--
 .../src/spec/test/builder/CliBuilderTest.groovy    |   7 +-
 .../groovy/cli/picocli/CliBuilderTest.groovy       | 116 ++----
 .../groovy/console/SwingBuilderConsoleTest.groovy  |  11 +-
 .../console/ui/AstNodeToScriptAdapterTest.groovy   |   4 +-
 .../console/ui/ScriptToTreeNodeAdapterTest.groovy  |  56 +--
 .../console/ui/text/GroovyFilterTests.groovy       |  14 +-
 .../groovy/contracts/domain/ContractTests.groovy   |  12 +-
 .../ContractExecutionTrackerTests.groovy           |   2 +-
 .../contracts/tests/basic/BaseTestClass.groovy     |   8 +-
 .../tests/doc/DocumentationExampleTests.groovy     |   8 +-
 .../tests/doc/RootClassExampleTests.groovy         |  50 +--
 .../contracts/tests/doc/StackExampleTests.groovy   |   2 +-
 .../AbstractClassInheritanceTests.groovy           |   2 +-
 .../tests/interfaces/AbstractClassTests.groovy     |   2 +-
 .../InterfaceAbstractClassMixturesTests.groovy     |   2 +-
 .../SimpleInterfaceInheritanceTests.groovy         |   2 +-
 .../tests/interfaces/StackExampleTests.groovy      |   4 +-
 .../contracts/tests/inv/InheritanceTests.groovy    |  42 +--
 .../tests/inv/POGOClassInvariantTests.groovy       |   4 +-
 .../tests/inv/SimpleClassInvariantTests.groovy     |   4 +-
 .../tests/other/AbstractClassTests.groovy          |   2 +-
 .../tests/other/CandidateChecksTests.groovy        |  20 +-
 .../tests/other/CircularAssertionCallTests.groovy  |   2 +-
 .../tests/other/ContractLabelTests.groovy          |   2 +-
 .../contracts/tests/other/ContractedTests.groovy   |   2 +-
 .../contracts/tests/other/GenericTypeTests.groovy  |   2 +-
 .../tests/other/MissingLineNumberTests.groovy      |  14 +-
 .../tests/other/NotContractedTests.groovy          |   2 +-
 .../contracts/tests/post/InheritanceTests.groovy   |   6 +-
 .../post/OldVariablePostconditionTests.groovy      |   2 +-
 .../ResultAndOldVariablePostconditionTests.groovy  |   2 +-
 .../post/ResultVariablePostconditionTests.groovy   |   4 +-
 .../tests/post/SimplePostconditionTests.groovy     |  27 +-
 .../contracts/tests/pre/InheritanceTests.groovy    |   4 +-
 .../tests/pre/SimplePreconditionTests.groovy       |  54 ++-
 .../contracts/util/AnnotationUtilsTests.groovy     |   2 +-
 .../groovy/contracts/util/FieldValuesTests.groovy  |   8 +-
 .../src/test/java/groovy/DateTimeTest.groovy       |  85 +----
 .../src/test/java/groovy/DateTest.groovy           |  28 +-
 .../test/org/apache/groovy/ginq/GinqTest.groovy    |  12 +-
 .../org/apache/groovy/ginq/GinqErrorTest.groovy    |  96 ++---
 .../collection/runtime/AsciiTableMakerTest.groovy  |   2 +-
 .../collection/runtime/NamedTupleTest.groovy       |   6 +-
 .../runtime/QueryableCollectionTest.groovy         |   2 +-
 .../collection/runtime/SourceRecordTest.groovy     |   2 +-
 .../groovy/tools/groovydoc/GroovyDocTest.java      |  42 +--
 .../groovydoc/SimpleGroovyClassDocTests.groovy     |  13 +-
 .../groovydoc/SimpleGroovyRootDocTests.groovy      |   6 +-
 .../groovy/groovysh/ProgrammaticStartTest.groovy   |   6 +-
 .../groovysh/commands/ConsoleTestSupport.groovy    |   7 +-
 .../groovysh/commands/GrabCommandTest.groovy       |   2 -
 .../commands/GroovyCommandTestSupport.groovy       |   4 +-
 .../jmx/builder/JmxAttributeInfoManagerTest.groovy |   8 +-
 .../jmx/builder/JmxBeanExportFactoryTest.groovy    |  26 +-
 .../groovy/jmx/builder/JmxBeanFactoryTest.groovy   |  14 +-
 .../jmx/builder/JmxBeanInfoManagerTest.groovy      |  12 +-
 .../groovy/jmx/builder/JmxBeansFactoryTest.groovy  |   9 +-
 .../groovy/jmx/builder/JmxBuilderToolsTest.groovy  |  15 +-
 .../builder/JmxClientConnectorFactoryTest.groovy   |  17 +-
 .../builder/JmxEmbeddedMetaMapBuilderTest.groovy   |  16 +-
 .../jmx/builder/JmxEmitterFactoryTest.groovy       |  13 +-
 .../jmx/builder/JmxListenerFactoryTest.groovy      |  12 +-
 .../jmx/builder/JmxMetaMapBuilderTest.groovy       |  24 +-
 .../jmx/builder/JmxOperationInfoManagerTest.groovy |  13 +-
 .../builder/JmxServerConnectorFactoryTest.groovy   |  12 +-
 .../groovy/jmx/builder/JmxTimerFactoryTest.groovy  |  19 +-
 .../src/spec/test/json/JsonBuilderTest.groovy      |   2 +-
 .../spec/test/json/StreamingJsonBuilderTest.groovy |   2 +-
 .../test/groovy/bugs/groovy9802/Groovy9802.groovy  |  13 +-
 .../src/test/groovy/groovy/json/CharBufTest.groovy |   8 +-
 .../groovy/json/CustomJsonGeneratorTest.groovy     |   5 +-
 .../groovy/json/DefaultJsonGeneratorTest.groovy    |  21 +-
 .../src/test/groovy/groovy/json/IOTest.groovy      |   8 +-
 .../test/groovy/groovy/json/JsonBuilderTest.groovy |  40 +--
 .../test/groovy/groovy/json/JsonLexerTest.groovy   |  20 +-
 .../test/groovy/groovy/json/JsonOutputTest.groovy  |   4 +-
 .../groovy/json/JsonSlurperCharSourceTest.groovy   |   3 -
 .../groovy/json/JsonSlurperIndexOverlayTest.groovy |   3 -
 .../groovy/groovy/json/JsonSlurperLaxTest.groovy   |   3 -
 .../test/groovy/groovy/json/JsonSlurperTest.groovy | 390 +--------------------
 .../groovy/groovy/json/JsonTokenTypeTest.groovy    |  10 +-
 .../groovy/groovy/json/JsonTokenValueTest.groovy   |   7 +-
 .../groovy/groovy/json/RealJsonPayloadsTest.groovy |   8 +-
 .../groovy/json/StreamingJsonBuilderTest.groovy    |  39 +--
 .../json/DefaultFastStringServiceTest.groovy       |   7 +-
 .../groovy/json/internal/ArrayUtilsTest.groovy     |   6 +-
 .../groovy/json/internal/CharScannerTest.groovy    |  48 +--
 .../org/apache/groovy/json/internal/ChrTest.groovy | 351 +------------------
 .../apache/groovy/json/internal/DatesTest.groovy   | 276 +--------------
 .../json/internal/FastStringUtilsTest.groovy       |  11 +-
 .../apache/groovy/json/internal/LazyMapTest.groovy | 336 +-----------------
 .../json/internal/ReaderCharacterSourceTest.groovy |  15 +-
 .../src/spec/test/JSR223SpecTest.java              |   4 +-
 .../org/codehaus/groovy/jsr223/JSR223Test.groovy   |  37 +-
 .../codehaus/groovy/jsr223/JavascriptTest.groovy   |   7 +-
 .../org/codehaus/groovy/jsr223/SugarTest.groovy    |   7 +-
 .../codehaus/groovy/jsr223/JSR223SecurityTest.java |  26 +-
 .../org/apache/groovy/macrolib/MacroLibTest.groovy |   2 +-
 .../org/codehaus/groovy/macro/MacroTest.groovy     |  18 +-
 .../groovy/macro/MacroTransformationTest.groovy    |  11 +-
 .../groovy/macro/matcher/ASTMatcherTest.groovy     |  54 +--
 .../groovy/servlet/AbstractHttpServletTest.groovy  |  21 +-
 .../groovy/servlet/ServletBindingTest.groovy       |  17 +-
 .../groovy/servlet/TemplateServletTest.groovy      |  16 +-
 .../groovy/sql/ExtractIndexAndSqlTest.groovy       |  25 +-
 .../groovy/groovy/sql/GroovyRowResultTest.groovy   |   2 +-
 .../src/test/groovy/groovy/sql/SqlTest.groovy      |  18 +-
 .../groovy/swing/SwingBuilderBindingsTest.groovy   |   3 -
 .../groovy/groovy/swing/SwingBuilderTest.groovy    |  72 +---
 .../groovy/swing/beans/BindableSwingTest.groovy    |   2 +-
 .../groovy/swing/beans/VetoableSwingTest.groovy    |   2 +-
 .../groovy/swing/model/TableModelTest.groovy       |   6 +-
 .../groovy/SimpleGStringTemplateEngineTest.groovy  |   8 +-
 .../groovy/groovy/SimpleTemplateEngineTest.groovy  |   6 +-
 .../groovy/bugs/groovy4585/Groovy4585Bug.groovy    |   4 +-
 .../groovy/text/GroovyXmlTemplateEngineTest.groovy |   2 +-
 .../groovy/text/MarkupTemplateEngineTest.groovy    |  22 +-
 .../groovy/groovy/text/SimpleTemplateTest.groovy   |  16 +-
 .../groovy/text/StreamingTemplateEngineTest.groovy |   4 +-
 .../groovy/text/markup/TemplateResourceTest.groovy |  22 +-
 .../src/test/groovy/JUnit5Test.groovy              |   6 +-
 .../main/groovy/groovy/test/StringTestUtil.groovy  |   4 +-
 .../test/JavadocAssertionTestBuilderTest.groovy    |  17 +-
 .../src/spec/test/FormatStringCheckerTest.groovy   |   3 +-
 .../src/spec/test/RegexCheckerTest.groovy          |   5 +-
 .../typecheckers/FormatStringCheckerTest.groovy    | 100 +++---
 .../groovy/typecheckers/RegexCheckerTest.groovy    |  13 +-
 .../groovy/groovy/xml/BuilderTestSupport.groovy    |   5 +-
 .../groovy/groovy/xml/NavigationXmlTest.groovy     |   8 +-
 .../groovy/xml/SafeNumberXmlParserTest.groovy      |   6 +-
 .../groovy/xml/SafeNumberXmlSlurperTest.groovy     |   6 +-
 .../test/groovy/groovy/xml/StaxBuilderTest.groovy  |   5 +-
 .../groovy/xml/StreamingSAXBuilderTest.groovy      |   7 +-
 .../groovy/groovy/xml/XmlNodePrinterTest.groovy    |  28 +-
 .../groovy/groovy/xml/XmlParserFactoryTest.groovy  |   2 +-
 .../test/groovy/groovy/xml/XmlParserTest.groovy    |  26 +-
 .../groovy/groovy/xml/XmlSlurperFactoryTest.groovy |   2 +-
 .../src/test/groovy/groovy/xml/XmlUtilTest.groovy  |   8 +-
 .../groovy/xml/benchmark/BuilderPerfTest.groovy    |   5 +-
 .../groovy/groovy/xml/bugs/Groovy249_Bug.groovy    |   6 +-
 .../groovy/groovy/xml/bugs/Groovy593_Bug.groovy    |   7 +-
 .../groovy/groovy/xml/bugs/Groovy_2473Bug.groovy   |   9 +-
 .../groovy/groovy/xml/bugs/StaticMarkupBug.groovy  |   5 +-
 .../groovy/groovy/xml/bugs/TedsClosureBug.groovy   |   9 +-
 .../groovy/groovy/xml/dom/DOMCategoryTest.groovy   |  19 +-
 .../src/test/groovy/groovy/xml/dom/DOMTest.groovy  |  10 +-
 .../apache/groovy/xml/tools/DomToGroovyTest.groovy |  14 +-
 1223 files changed, 3613 insertions(+), 11001 deletions(-)

diff --git a/src/spec/test/BaseScriptSpecTest.groovy b/src/spec/test/BaseScriptSpecTest.groovy
index e94b8db786..8ab3bea5c1 100644
--- a/src/spec/test/BaseScriptSpecTest.groovy
+++ b/src/spec/test/BaseScriptSpecTest.groovy
@@ -16,13 +16,11 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-
+import groovy.test.GroovyTestCase
 import groovy.transform.CompileStatic
 
-import static groovy.test.GroovyAssert.assertScript
-
 @CompileStatic
-class BaseScriptSpecTest {
+class BaseScriptSpecTest extends GroovyTestCase {
     void testSimpleScript() {
         def script = '''
 // tag::simple_script[]
diff --git a/src/spec/test/ClassDesignASTTransformsTest.groovy b/src/spec/test/ClassDesignASTTransformsTest.groovy
index 7ea9432b71..49e2bf8b74 100644
--- a/src/spec/test/ClassDesignASTTransformsTest.groovy
+++ b/src/spec/test/ClassDesignASTTransformsTest.groovy
@@ -16,15 +16,10 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
+import groovy.test.GroovyTestCase
 
+class ClassDesignASTTransformsTest extends GroovyTestCase {
 
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.assertScript
-
-class ClassDesignASTTransformsTest {
-
-    @Test
     void testDelegateTransformation() {
         assertScript '''
 // tag::delegating_class[]
@@ -274,7 +269,6 @@ d.task$() //passes
 '''
     }
 
-    @Test
     void testImmutable() {
         assertScript '''
 // tag::immutable_simple[]
@@ -375,7 +369,6 @@ try {
 '''
     }
 
-    @Test
     void testMemoized() {
         assertScript '''
 import groovy.transform.Memoized
@@ -414,7 +407,6 @@ assert x!=z
 '''
     }
 
-    @Test
     void testSingleton() {
         assertScript '''
 // tag::singleton_simple[]
@@ -459,7 +451,6 @@ assert GreetingService.instance.greeting('Bob') == 'Hello, Bob!'
 '''
     }
 
-    @Test
     void testTailRecursive() {
         assertScript '''
 // tag::tailrecursive[]
diff --git a/src/spec/test/ClassTest.groovy b/src/spec/test/ClassTest.groovy
index 2a18cacbd5..1bef94a5ad 100644
--- a/src/spec/test/ClassTest.groovy
+++ b/src/spec/test/ClassTest.groovy
@@ -17,8 +17,9 @@
  *  under the License.
  */
 
+import groovy.test.GroovyTestCase
 
-final class ClassTest {
+final class ClassTest extends GroovyTestCase {
 
     void testClassDefinition() {
         assertScript '''
@@ -229,7 +230,7 @@ final class ClassTest {
             }
             // end::protected_forbidden[]
         '''
-        assert err.message.contains("The method 'greet' must be public as it is declared abstract in interface 'Greeter'")
+        assert err.contains("The method 'greet' must be public as it is declared abstract in interface 'Greeter'")
     }
 
     void testFields() {
@@ -729,7 +730,7 @@ import java.lang.annotation.Retention
             class Evil {}
             Evil
         '''
-        assert err.message =~ /Attribute 'value' should have type 'java.lang.String'; but found type 'int' in @Foo/
+        assert err =~ /Attribute 'value' should have type 'java.lang.String'; but found type 'int' in @Foo/
     }
 
     void testCustomProcessor() {
@@ -759,9 +760,6 @@ import java.lang.annotation.Retention
             import org.codehaus.groovy.ast.expr.PropertyExpression
             import org.codehaus.groovy.control.SourceUnit
             import org.codehaus.groovy.transform.AnnotationCollectorTransform
-import org.junit.jupiter.api.Test
-import org.junit.jupiter.api.Timeout
-import static groovy.test.GroovyAssert.*
 
             // tag::compiledynamic_def_fixed[]
             @AnnotationCollector(processor = "org.codehaus.groovy.transform.CompileDynamicProcessor")
diff --git a/src/spec/test/CloningASTTransformsTest.groovy b/src/spec/test/CloningASTTransformsTest.groovy
index 02193651a9..25f33e8c19 100644
--- a/src/spec/test/CloningASTTransformsTest.groovy
+++ b/src/spec/test/CloningASTTransformsTest.groovy
@@ -1,3 +1,4 @@
+import groovy.test.GroovyTestCase
 
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
@@ -17,13 +18,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.assertScript
-
-class CloningASTTransformsTest {
-    @Test
+class CloningASTTransformsTest extends GroovyTestCase {
     void testAutoCloneAnnotation() {
         assertScript '''
 // tag::example_autoclone[]
@@ -64,7 +59,6 @@ assert !(book.authors.is(clone.authors))
 '''
     }
 
-    @Test
     void testAutoCloneAnnotationWithExclude() {
         assertScript '''
 // tag::example_autoclone_excludes[]
@@ -88,7 +82,6 @@ assert clone.publicationDate==book.publicationDate
 '''
     }
 
-    @Test
     void testAutoCloneAnnotationWithIncludeFields() {
         assertScript '''
 // tag::example_autoclone_includeFields[]
@@ -112,7 +105,6 @@ assert clone.publicationDate==book.publicationDate
 '''
     }
 
-    @Test
     void testAutoExternalize() {
         assertScript '''
 // tag::example_autoext[]
@@ -176,7 +168,6 @@ assert book.price == 1.5
 '''
     }
 
-    @Test
     void testAutoExternalizeWithExcludes() {
         assertScript '''
 // tag::example_autoext_excludes[]
@@ -218,7 +209,6 @@ assert book.title == 'Auto externalization for dummies'
 assert book.price == 0 // because price is excluded
 '''
     }
-    @Test
     void testAutoExternalizeWithIncludeFields() {
         assertScript '''
 // tag::example_autoext_includeFields[]
diff --git a/src/spec/test/ClosuresSpecTest.groovy b/src/spec/test/ClosuresSpecTest.groovy
index 8a1876e04c..77307b30f2 100644
--- a/src/spec/test/ClosuresSpecTest.groovy
+++ b/src/spec/test/ClosuresSpecTest.groovy
@@ -1,6 +1,4 @@
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.assertScript
+import groovy.test.GroovyTestCase
 
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
@@ -20,10 +18,9 @@ import static groovy.test.GroovyAssert.assertScript
  *  specific language governing permissions and limitations
  *  under the License.
  */
-class ClosuresSpecTest {
+class ClosuresSpecTest extends GroovyTestCase {
     static void sink(Closure cl) {}
 
-    @Test
     void testClosureSyntax() {
         sink
                 // tag::closure_syntax_1[]
@@ -64,7 +61,6 @@ class ClosuresSpecTest {
                 // end::closure_syntax_6[]
     }
 
-    @Test
     void testAssignClosureToAVariable() {
         // tag::closure_is_an_instance_of_Closure[]
         def listener = { e -> println "Clicked on $e.source" }      // <1>
@@ -76,7 +72,6 @@ class ClosuresSpecTest {
         // end::closure_is_an_instance_of_Closure[]
     }
 
-    @Test
     void testCallClosure() {
         // tag::closure_call_1[]
         def code = { 123 }
@@ -99,7 +94,6 @@ class ClosuresSpecTest {
         // end::closure_call_2[]
     }
 
-    @Test
     void testClosureParameters() {
         // tag::closure_param_declaration[]
         def closureWithOneArg = { str -> str.toUpperCase() }
@@ -122,7 +116,6 @@ class ClosuresSpecTest {
         // end::closure_param_declaration[]
     }
 
-    @Test
     void testImplicitIt() {
         assertScript '''
         // tag::implicit_it[]
@@ -153,7 +146,6 @@ class ClosuresSpecTest {
         '''
     }
 
-    @Test
     void testClosureVargs() {
         // tag::closure_vargs[]
         def concat1 = { String... args -> args.join('') }           // <1>
@@ -169,7 +161,6 @@ class ClosuresSpecTest {
 
     }
 
-    @Test
     void testThisObject() {
         assertScript '''
         // tag::closure_this[]
@@ -226,7 +217,6 @@ class ClosuresSpecTest {
         '''
     }
 
-    @Test
     void testOwner() {
         assertScript '''
         // tag::closure_owner[]
@@ -263,7 +253,6 @@ class ClosuresSpecTest {
 '''
     }
 
-    @Test
     void testClosureDelegate() {
         assertScript '''
         // tag::delegate_is_owner[]
@@ -317,7 +306,6 @@ class ClosuresSpecTest {
         '''
     }
 
-    @Test
     void testDelegationStrategy() {
         assertScript '''
                 // tag::delegation_strategy_intro[]
@@ -332,7 +320,6 @@ class ClosuresSpecTest {
             '''
     }
 
-    @Test
     void testOwnerFirst() {
         assertScript '''
             // tag::closure_owner_first[]
@@ -362,7 +349,6 @@ class ClosuresSpecTest {
         '''
     }
 
-    @Test
     void testDelegateOnly() {
         assertScript '''
             // tag::delegate_only[]
@@ -397,7 +383,6 @@ class ClosuresSpecTest {
         '''
     }
 
-    @Test
     void testDelegateOnlyPropertyMissing() {
         assertScript '''
             // tag::delegate_only_prop_missing[]
@@ -423,7 +408,6 @@ class ClosuresSpecTest {
         '''
     }
 
-    @Test
     void testGStringEager() {
         // tag::gstring_eager_intro[]
         def x = 1
@@ -440,7 +424,6 @@ class ClosuresSpecTest {
         assert gs == 'x = 1'
     }
 
-    @Test
     void testGStringLazy() {
         // tag::gstring_lazy[]
         def x = 1
@@ -452,7 +435,6 @@ class ClosuresSpecTest {
         // end::gstring_lazy[]
     }
 
-    @Test
     void testGStringWithMutation() {
         assertScript '''
             // tag::gstring_mutation[]
@@ -473,7 +455,6 @@ class ClosuresSpecTest {
         '''
     }
 
-    @Test
     void testGStringWithoutMutation() {
         assertScript '''
             // tag::gstring_no_mutation[]
@@ -493,7 +474,6 @@ class ClosuresSpecTest {
         '''
     }
 
-    @Test
     void testLeftCurry() {
         // tag::left_curry[]
         def nCopies = { int n, String str -> str*n }    // <1>
@@ -503,7 +483,6 @@ class ClosuresSpecTest {
         // end::left_curry[]
     }
 
-    @Test
     void testRightCurry() {
         // tag::right_curry[]
         def nCopies = { int n, String str -> str*n }    // <1>
@@ -513,7 +492,6 @@ class ClosuresSpecTest {
         // end::right_curry[]
     }
 
-    @Test
     void testNCurry() {
         // tag::ncurry[]
         def volume = { double l, double w, double h -> l*w*h }      // <1>
@@ -524,7 +502,6 @@ class ClosuresSpecTest {
         // end::ncurry[]
     }
 
-    @Test
     void testMemoize() {
         // tag::naive_fib[]
         def fib
@@ -537,7 +514,6 @@ class ClosuresSpecTest {
         // end::memoized_fib[]
     }
 
-    @Test
     void testComposition() {
         // tag::closure_composition[]
         def plus2  = { it + 2 }
@@ -557,7 +533,6 @@ class ClosuresSpecTest {
 
     }
 
-    @Test
     void testTrampoline() {
         // tag::trampoline[]
         def factorial
diff --git a/src/spec/test/CodeGenerationASTTransformsTest.groovy b/src/spec/test/CodeGenerationASTTransformsTest.groovy
index 41b5b30de7..096ff94102 100644
--- a/src/spec/test/CodeGenerationASTTransformsTest.groovy
+++ b/src/spec/test/CodeGenerationASTTransformsTest.groovy
@@ -1,3 +1,4 @@
+import groovy.test.GroovyTestCase
 
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
@@ -17,15 +18,9 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.assertScript
-
-class CodeGenerationASTTransformsTest {
+class CodeGenerationASTTransformsTest extends GroovyTestCase {
 
     // specification tests for the @ToString AST transformation
-    @Test
     void testToString() {
         assertScript '''
 // tag::tostring_import[]
@@ -258,7 +253,6 @@ assert p.toString() == 'acme.Person(Jack)'
     }
 
 
-    @Test
     void testEqualsAndHashCode() {
         assertScript '''
 // tag::equalshashcode[]
@@ -433,7 +427,6 @@ assert System.currentTimeMillis() - start < SlowHashCode.SLEEP_PERIOD
 '''
     }
 
-    @Test
     void testTupleConstructor() {
         assertScript '''
 // tag::tupleconstructor_simple[]
@@ -824,7 +817,6 @@ shouldFail {
 '''
     }
 
-    @Test
     void testMapConstructor() {
         assertScript '''
 // tag::mapconstructor_simple[]
@@ -855,7 +847,6 @@ public Person(Map args) {
 */
     }
 
-    @Test
     void testCanonical() {
         assertScript '''
 // tag::canonical_simple[]
@@ -921,7 +912,6 @@ assert p1.hashCode() == p2.hashCode()  // Effect of @EqualsAndHashCode(excludes=
 '''
     }
 
-    @Test
     void testInheritConstructors() {
         assertScript '''
 // tag::inheritconstructors_simple[]
@@ -979,7 +969,6 @@ assert Child.constructors[0].parameterAnnotations[0][0].annotationType().name ==
 '''
     }
 
-    @Test
     void testIndexedProperty() {
         assertScript '''
 import groovy.transform.IndexedProperty
@@ -1000,7 +989,6 @@ assert bean.someList == [123]
 '''
     }
 
-    @Test
     void testLazy() {
         assertScript '''
 // tag::lazy_simple[]
@@ -1053,7 +1041,6 @@ assert bean.@$myField == ['a','b','c']
 '''
     }
 
-    @Test
     void testNewify() {
         assertScript '''
 class Tree {
@@ -1096,7 +1083,6 @@ def builder = new TreeBuilder()
 '''
     }
 
-    @Test
     void testCategoryTransformation() {
         assertScript '''
 // tag::oldstyle_category[]
@@ -1124,7 +1110,6 @@ use (TripleCategory) {
 '''
     }
 
-    @Test
     void testSortable() {
         assertScript '''
 // tag::sortable_simple[]
@@ -1309,7 +1294,6 @@ assert finalists.sort()*.name == ['CoCo', 'Venus', 'Serena', 'Mirjana']
         '''
     }
 
-    @Test
     void testBuilderSimple() {
         assertScript '''
 // tag::builder_simple[]
@@ -1363,7 +1347,6 @@ assert "$p.first $p.last" == 'Johnny Depp'
         '''
     }
 
-    @Test
     void testBuilderExternal() {
         assertScript '''
 // tag::builder_external_buildee[]
@@ -1432,7 +1415,6 @@ assert "$p.first $p.last" == 'Johnny Depp'
         '''
     }
 
-    @Test
     void testBuilderDefault() {
         assertScript '''
 // tag::builder_default[]
@@ -1506,7 +1488,6 @@ assert Person.builder().first("Johnny").last('Depp').born(1963).build().toString
         '''
     }
 
-    @Test
     void testBuilderInitializer() {
         assertScript '''
 // tag::builder_initializer[]
@@ -1558,7 +1539,6 @@ createFirstLastBorn()
         '''
     }
 
-    @Test
     void testAutoImplement() {
         assertScript '''
 // tag::autoimplement_default[]
@@ -1598,13 +1578,13 @@ class MyNames implements Closeable extends AbstractList<String> {
 
         assertScript '''
 import groovy.transform.AutoImplement
-import static groovy.test.GroovyAssert.shouldFail
 // tag::autoimplement_exception[]
 @AutoImplement(exception=IOException)
 class MyWriter extends Writer { }
 // end::autoimplement_exception[]
 
 // tag::autoimplement_exception_usage[]
+import static groovy.test.GroovyAssert.shouldFail
 
 shouldFail(IOException) {
   new MyWriter().flush()
@@ -1634,12 +1614,12 @@ class MyWriter extends Writer {
 
         assertScript '''
 import groovy.transform.AutoImplement
-import static groovy.test.GroovyAssert.shouldFail
 // tag::autoimplement_exceptionmsg[]
 @AutoImplement(exception=UnsupportedOperationException, message='Not supported by MyIterator')
 class MyIterator implements Iterator<String> { }
 // end::autoimplement_exceptionmsg[]
 
+import static groovy.test.GroovyAssert.shouldFail
 // tag::autoimplement_exceptionmsg_usage[]
 def ex = shouldFail(UnsupportedOperationException) {
      new MyIterator().hasNext()
@@ -1666,7 +1646,6 @@ class MyIterator implements Iterator<String> {
 
         assertScript '''
 import groovy.transform.AutoImplement
-import static groovy.test.GroovyAssert.shouldFail
 // tag::autoimplement_code[]
 @AutoImplement(code = { throw new UnsupportedOperationException('Should never be called but was called on ' + new Date()) })
 class EmptyIterator implements Iterator<String> {
@@ -1674,6 +1653,7 @@ class EmptyIterator implements Iterator<String> {
 }
 // end::autoimplement_code[]
 
+import static groovy.test.GroovyAssert.shouldFail
 // tag::autoimplement_code_usage[]
 def ex = shouldFail(UnsupportedOperationException) {
      new EmptyIterator().next()
@@ -1699,7 +1679,6 @@ class EmptyIterator implements java.util.Iterator<String> {
         '''
     }
 
-    @Test
     void testNullCheck() {
         assertScript '''
  import groovy.transform.NullCheck
diff --git a/src/spec/test/CommandChainsTest.groovy b/src/spec/test/CommandChainsTest.groovy
index dd35f1a485..4ba4625adb 100644
--- a/src/spec/test/CommandChainsTest.groovy
+++ b/src/spec/test/CommandChainsTest.groovy
@@ -1,3 +1,4 @@
+import groovy.test.GroovyTestCase
 
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
@@ -17,13 +18,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.assertScript
-
-class CommandChainsTest {
-    @Test
+class CommandChainsTest extends GroovyTestCase {
     void testCommandChainEquivalence() {
         assertScript '''String left = 'left'
 String right = 'right'
@@ -260,7 +255,6 @@ assert m1.thing == 'cookies'
 '''
     }
 
-    @Test
     void testCommandChainImplementation() {
         assertScript '''
 // tag::commandchain_impl1[]
diff --git a/src/spec/test/CompilerDirectivesASTTransformsTest.groovy b/src/spec/test/CompilerDirectivesASTTransformsTest.groovy
index 92d4df63a9..781aa1b2de 100644
--- a/src/spec/test/CompilerDirectivesASTTransformsTest.groovy
+++ b/src/spec/test/CompilerDirectivesASTTransformsTest.groovy
@@ -1,3 +1,4 @@
+import groovy.test.GroovyTestCase
 
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
@@ -17,14 +18,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.assertScript
-import static groovy.test.GroovyAssert.shouldFail
-
-class CompilerDirectivesASTTransformsTest {
-    @Test
+class CompilerDirectivesASTTransformsTest extends GroovyTestCase {
     void testFieldXForm() {
         shouldFail(MissingPropertyException) {
             assertScript '''
@@ -104,7 +98,6 @@ new MyScript().run()
 '''
     }
 
-    @Test
     void testAutoFinalClass() {
         assertScript '''
 // tag::autofinal_class[]
@@ -134,7 +127,6 @@ assert john.greeting('Hello') == 'Hello, John'
 '''
     }
 
-    @Test
     void testAutoFinalMethod() {
         assertScript '''
 import groovy.transform.AutoFinal
@@ -152,7 +144,6 @@ assert calc.mult(3, 6) == 18
 '''
     }
 
-    @Test
     void testFinalAnnotation() {
         assertScript '''
 import groovy.transform.*
@@ -170,7 +161,6 @@ assert Modifier.isFinal(GreetingService.modifiers)
 '''
     }
 
-    @Test
     void testPackageScope() {
         assertScript '''import java.lang.reflect.Modifier
 // tag::packagescope_property[]
diff --git a/src/spec/test/CustomizersTest.groovy b/src/spec/test/CustomizersTest.groovy
index ed30789bdf..166dfe9e7f 100644
--- a/src/spec/test/CustomizersTest.groovy
+++ b/src/spec/test/CustomizersTest.groovy
@@ -17,52 +17,38 @@
  *  under the License.
  */
 
+import groovy.test.GroovyTestCase
+import groovy.transform.ConditionalInterrupt
 import groovy.util.logging.Log
 import org.codehaus.groovy.ast.ClassNode
+import org.codehaus.groovy.ast.builder.AstBuilder
 import org.codehaus.groovy.ast.expr.AttributeExpression
-import org.codehaus.groovy.control.CompilerConfiguration
+import org.codehaus.groovy.control.CompilePhase
 import org.codehaus.groovy.control.SourceUnit
 import org.codehaus.groovy.control.customizers.ASTTransformationCustomizer
 import org.codehaus.groovy.control.customizers.ImportCustomizer
 import org.codehaus.groovy.control.customizers.SecureASTCustomizer
 import org.codehaus.groovy.control.customizers.SourceAwareCustomizer
-import org.junit.jupiter.api.BeforeEach
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.assertScript
-import static groovy.test.GroovyAssert.shouldFail
+import org.codehaus.groovy.control.CompilerConfiguration
 import static org.codehaus.groovy.control.customizers.builder.CompilerCustomizationBuilder.withConfig
-import static org.codehaus.groovy.syntax.Types.COMPARE_EQUAL
-import static org.codehaus.groovy.syntax.Types.COMPARE_GREATER_THAN
-import static org.codehaus.groovy.syntax.Types.COMPARE_GREATER_THAN_EQUAL
-import static org.codehaus.groovy.syntax.Types.COMPARE_LESS_THAN
-import static org.codehaus.groovy.syntax.Types.COMPARE_LESS_THAN_EQUAL
-import static org.codehaus.groovy.syntax.Types.COMPARE_NOT_EQUAL
-import static org.codehaus.groovy.syntax.Types.DIVIDE
-import static org.codehaus.groovy.syntax.Types.MINUS
-import static org.codehaus.groovy.syntax.Types.MINUS_MINUS
-import static org.codehaus.groovy.syntax.Types.MULTIPLY
-import static org.codehaus.groovy.syntax.Types.PLUS
-import static org.codehaus.groovy.syntax.Types.PLUS_PLUS
-import static org.codehaus.groovy.syntax.Types.POWER
-import static org.codehaus.groovy.syntax.Types.REMAINDER
-
-class CustomizersTest {
+
+import static org.codehaus.groovy.syntax.Types.*
+
+class CustomizersTest extends GroovyTestCase {
 
     private CompilerConfiguration config;
     private GroovyShell shell;
 
-    @BeforeEach
     void setUp() {
         config = new CompilerConfiguration()
         shell = new GroovyShell(config)
     }
 
+    @Override
     protected void assertScript(final String script) throws Exception {
-        shell.evaluate(script, 'TestScript.groovy')
+        shell.evaluate(script, getTestClassName())
     }
 
-    @Test
     void testImportCustomizer() {
 
         // tag::import_cz[]
@@ -93,7 +79,6 @@ class CustomizersTest {
         '''
     }
 
-    @Test
     void testLogCustomizer() {
         // tag::ast_cz_simple[]
         def acz = new ASTTransformationCustomizer(Log)
@@ -105,7 +90,6 @@ class CustomizersTest {
         '''
     }
 
-    @Test
     void testLogCustomizerWithCustomName() {
         // tag::ast_cz_customname[]
         def acz = new ASTTransformationCustomizer(Log, value: 'LOGGER')
@@ -118,7 +102,6 @@ class CustomizersTest {
         '''
     }
 
-    @Test
     void testSecureASTCustomizer() {
         // tag::secure_cz[]
         def scz = new SecureASTCustomizer()
@@ -181,7 +164,6 @@ class CustomizersTest {
         }
     }
 
-    @Test
     void testSecureASTCustomizerWithCustomChecker() {
         // tag::secure_cz_custom[]
         def scz = new SecureASTCustomizer()
@@ -204,7 +186,6 @@ a.@val // <1>
         }
     }
 
-    @Test
     void testSourceAwareCustomizer() {
         // tag::source_cz[]
         def delegate = new ImportCustomizer()
@@ -233,7 +214,6 @@ a.@val // <1>
         config.addCompilationCustomizers(sac)
     }
 
-    @Test
     void testCustomizerBuilder() {
         // tag::customizer_withconfig[]
         def conf = new CompilerConfiguration()
diff --git a/src/spec/test/DeclarativeConcurrencyASTTransformsTest.groovy b/src/spec/test/DeclarativeConcurrencyASTTransformsTest.groovy
index 356fbffd94..4ba2a716be 100644
--- a/src/spec/test/DeclarativeConcurrencyASTTransformsTest.groovy
+++ b/src/spec/test/DeclarativeConcurrencyASTTransformsTest.groovy
@@ -1,3 +1,4 @@
+import groovy.test.GroovyTestCase
 
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
@@ -17,13 +18,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.assertScript
-
-class DeclarativeConcurrencyASTTransformsTest {
-    @Test
+class DeclarativeConcurrencyASTTransformsTest extends GroovyTestCase {
     void testSynchronizedASTTransform() {
         assertScript '''
 // tag::example_synchronized[]
@@ -101,7 +96,6 @@ assert c.get() == 1000
 '''
     }
 
-    @Test
     void testWithReadLockASTTransform() {
         assertScript '''
 // tag::example_rwlock[]
diff --git a/src/spec/test/DelegatesToSpecTest.groovy b/src/spec/test/DelegatesToSpecTest.groovy
index 97d78b8c20..6eb65a1a5e 100644
--- a/src/spec/test/DelegatesToSpecTest.groovy
+++ b/src/spec/test/DelegatesToSpecTest.groovy
@@ -17,15 +17,10 @@
  *  under the License.
  */
 
-
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.assertScript
-import static groovy.test.GroovyAssert.shouldFail
 
-class DelegatesToSpecTest {
-    @Test
+class DelegatesToSpecTest extends GroovyTestCase {
     void testEmailWithoutDelegatesTo() {
         assertScript '''
             // tag::emailspec_no_delegatesto[]
@@ -70,7 +65,6 @@ class DelegatesToSpecTest {
         '''
     }
 
-    @Test
     void testEmailWithoutDelegatesToTypeChecked() {
         shouldFail(MultipleCompilationErrorsException) {
             assertScript '''
@@ -116,7 +110,6 @@ class DelegatesToSpecTest {
         }
     }
 
-    @Test
     void testEmailWithDelegatesTo() {
         assertScript '''
             class EmailSpec {
@@ -155,7 +148,6 @@ class DelegatesToSpecTest {
         '''
     }
 
-    @Test
     void testEmailWithDelegatesToAndStrategy() {
         assertScript '''
             class EmailSpec {
@@ -194,7 +186,6 @@ class DelegatesToSpecTest {
         '''
     }
 
-    @Test
     void testEmailWithDelegatesToAndStrategyTypeChecked() {
         assertScript '''import groovy.transform.TypeChecked
 
@@ -237,7 +228,6 @@ class DelegatesToSpecTest {
         '''
     }
 
-    @Test
     void testDelegatesToSimple() {
         assertScript '''
             class BodySpec {
@@ -262,7 +252,6 @@ class DelegatesToSpecTest {
         '''
     }
 
-    @Test
     void testDelegatesToWithStrategy() {
         shouldFail(MultipleCompilationErrorsException) {
         assertScript '''
@@ -299,7 +288,6 @@ class DelegatesToSpecTest {
         }
     }
 
-    @Test
     void testDelegatesToTarget() {
         assertScript '''
             class Email {
@@ -350,7 +338,6 @@ class DelegatesToSpecTest {
             }
         '''
     }
-    @Test
     void testDelegatesToTargetFlowTyping() {
         assertScript '''
             def exec(@DelegatesTo.Target Object target, @DelegatesTo Closure code) {
@@ -376,7 +363,6 @@ class DelegatesToSpecTest {
         '''
     }
 
-    @Test
     void testDelegatesToMultipleAnnotations() {
         assertScript '''
 
@@ -414,7 +400,6 @@ class DelegatesToSpecTest {
         '''
     }
 
-    @Test
     void testDelegatesToMultipleTargets() {
         assertScript '''
             // tag::foobarbaz_classes[]
@@ -456,7 +441,6 @@ class DelegatesToSpecTest {
         '''
     }
 
-    @Test
     void testDelegatesToGenericType() {
         assertScript '''
             // tag::configure_list_method[]
@@ -485,7 +469,6 @@ class DelegatesToSpecTest {
 
     }
 
-    @Test
     void testDelegatesToGenericTypeAndCompileStatic() {
         assertScript '''
             @groovy.transform.ToString
@@ -516,7 +499,6 @@ class DelegatesToSpecTest {
 
     }
 
-    @Test
     void testDelegatesToType() {
         def msg = shouldFail '''
 
@@ -538,7 +520,7 @@ void test() {
     // end::delegatestotype_mapper_test[]
 }
 '''
-        assert msg.message.contains('Static type checking] - Cannot find matching method')
+        assert msg.contains('Static type checking] - Cannot find matching method')
 
         assertScript '''
 
diff --git a/src/spec/test/DesignPatternsTest.groovy b/src/spec/test/DesignPatternsTest.groovy
index 14d80c9559..f09bce29f7 100644
--- a/src/spec/test/DesignPatternsTest.groovy
+++ b/src/spec/test/DesignPatternsTest.groovy
@@ -18,7 +18,6 @@
  */
 import gls.CompilableTestSupport
 
-
 class DesignPatternsTest extends CompilableTestSupport {
 
     void testAbstractFactory() {
@@ -2190,11 +2189,12 @@ class DesignPatternsTest extends CompilableTestSupport {
                 }
             }
             // end::state_variation32[]
+            import groovy.test.GroovyTestCase
             // tag::state_variation33[]
-            class StatePatternDslTest {
+            class StatePatternDslTest extends GroovyTestCase {
                 private fsm
 
-                void setUp() {
+                protected void setUp() {
                     fsm = FiniteStateMachine.newInstance('offline')
                     def recorder = fsm.record()
                     recorder.on('connect').from('offline').to('online')
diff --git a/src/spec/test/DifferencesFromJavaTest.groovy b/src/spec/test/DifferencesFromJavaTest.groovy
index 5471c73e57..5e12d2bcf6 100644
--- a/src/spec/test/DifferencesFromJavaTest.groovy
+++ b/src/spec/test/DifferencesFromJavaTest.groovy
@@ -1,3 +1,4 @@
+import groovy.test.GroovyTestCase
 
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
@@ -17,16 +18,9 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.assertScript
-import static groovy.test.GroovyAssert.shouldFail
-
-class DifferencesFromJavaTest {
-    @Test
+class DifferencesFromJavaTest extends GroovyTestCase {
     void testMultiMethods() {
-        assertScript '''import static org.junit.jupiter.api.Assertions.*
+        assertScript '''import static org.junit.Assert.*
 // tag::multimethods[]
 int method(String arg) {
     return 1;
@@ -50,7 +44,6 @@ assertEquals(1, result);
 '''
     }
 
-    @Test
     void testArrayCreation() {
         shouldFail {
             assertScript '''
@@ -72,7 +65,6 @@ assertEquals(1, result);
         '''
     }
 
-    @Test
     void testPackagePrivate() {
         assertScript '''
             import groovy.transform.ASTTest
@@ -107,7 +99,6 @@ assertEquals(1, result);
         '''
     }
 
-    @Test
     void testAnonymousAndNestedClasses() {
         assertScript '''
 // tag::innerclass_1[]
@@ -166,7 +157,6 @@ assert (x.'this$0').is(y)
 '''
     }
 
-    @Test
     void testStringsAndCharsGotchas() {
         assertScript '''
 import org.codehaus.groovy.runtime.typehandling.GroovyCastException;
diff --git a/src/spec/test/ExtensionModuleSpecTest.groovy b/src/spec/test/ExtensionModuleSpecTest.groovy
index b095a3ef42..f1b1ec066b 100644
--- a/src/spec/test/ExtensionModuleSpecTest.groovy
+++ b/src/spec/test/ExtensionModuleSpecTest.groovy
@@ -1,6 +1,4 @@
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.assertScript
+import groovy.test.GroovyTestCase
 
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
@@ -20,8 +18,7 @@ import static groovy.test.GroovyAssert.assertScript
  *  specific language governing permissions and limitations
  *  under the License.
  */
-class ExtensionModuleSpecTest {
-    @Test
+class ExtensionModuleSpecTest extends GroovyTestCase {
     void testShouldAddMaxRetriesToInteger() {
         assertScript '''// tag::instance_extension_assert[]
 int i=0
@@ -42,7 +39,6 @@ try {
 '''
     }
 
-    @Test
     void testShouldAddStaticMethodToString() {
         assertScript '''// tag::static_extension_assert[]
 assert String.greeting() == 'Hello, world!'
diff --git a/src/spec/test/IntegrationTest.groovy b/src/spec/test/IntegrationTest.groovy
index c072bfdda3..59196102a5 100644
--- a/src/spec/test/IntegrationTest.groovy
+++ b/src/spec/test/IntegrationTest.groovy
@@ -1,3 +1,4 @@
+import groovy.test.GroovyTestCase
 
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
@@ -17,7 +18,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-class IntegrationTest {
+class IntegrationTest extends GroovyTestCase {
     void testEval() {
         assertScript '''// tag::eval_me[]
 import groovy.util.Eval
@@ -162,8 +163,6 @@ o.doIt()                                                                    // <
 
         assertScript '''// tag::gcl_distinct_classes[]
 import groovy.lang.GroovyClassLoader
-import org.junit.jupiter.api.Test
-import static groovy.test.GroovyAssert.*
 
 def gcl = new GroovyClassLoader()
 def clazz1 = gcl.parseClass('class Foo { }')                                // <1>
diff --git a/src/spec/test/LogImprovementsASTTransformsTest.groovy b/src/spec/test/LogImprovementsASTTransformsTest.groovy
index 238de2bb0c..8e7ea594db 100644
--- a/src/spec/test/LogImprovementsASTTransformsTest.groovy
+++ b/src/spec/test/LogImprovementsASTTransformsTest.groovy
@@ -1,3 +1,4 @@
+import groovy.test.GroovyTestCase
 
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
@@ -17,14 +18,8 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
+class LogImprovementsASTTransformsTest extends GroovyTestCase {
 
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.assertScript
-
-class LogImprovementsASTTransformsTest {
-
-    @Test
     void testLogASTTransformation() {
         assertScript '''
 // tag::log_spec[]
@@ -60,7 +55,6 @@ g.greet()
 '''
     }
 
-    @Test
     void testCommonsASTTransformation() {
         assertScript '''
 // tag::commons_spec[]
@@ -95,7 +89,6 @@ g.greet()
 '''
     }
 
-    @Test
     void testLog4jASTTransformation() {
         assertScript '''
 // tag::log4j_spec[]
@@ -129,7 +122,6 @@ g.greet()
 '''
     }
 
-    @Test
     void testLog4j2ASTTransformation() {
                 assertScript '''
     // tag::log4j2_spec[]
@@ -165,7 +157,6 @@ g.greet()
     '''
     }
 
-    @Test
     void testSlf4jASTTransformation() {
         assertScript '''
 // tag::slf4j_spec[]
diff --git a/src/spec/test/PrimitiveTest.groovy b/src/spec/test/PrimitiveTest.groovy
index f433d3fcf3..f7b66094e8 100644
--- a/src/spec/test/PrimitiveTest.groovy
+++ b/src/spec/test/PrimitiveTest.groovy
@@ -1,6 +1,4 @@
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.assertScript
+import groovy.test.GroovyTestCase
 
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
@@ -20,9 +18,8 @@ import static groovy.test.GroovyAssert.assertScript
  *  specific language governing permissions and limitations
  *  under the License.
  */
-class PrimitiveTest {
+class PrimitiveTest extends GroovyTestCase {
 
-    @Test
     void testPrimitiveReferences() {
         assertScript '''
             // tag::primitive_references[]
@@ -36,7 +33,6 @@ class PrimitiveTest {
         '''
     }
 
-    @Test
     void testPrimitiveWideningVsBoxing() {
         assertScript '''
             // tag::widening_vs_boxing[]
@@ -54,7 +50,6 @@ class PrimitiveTest {
         '''
     }
 
-    @Test
     void testPrimitiveVsWrapperPosNegZero() {
         assertScript '''
             // tag::pos_neg_zero[]
diff --git a/src/spec/test/RecordSpecificationTest.groovy b/src/spec/test/RecordSpecificationTest.groovy
index 1fd22895ca..31fcebf4f8 100644
--- a/src/spec/test/RecordSpecificationTest.groovy
+++ b/src/spec/test/RecordSpecificationTest.groovy
@@ -17,18 +17,13 @@
  *  under the License.
  */
 
+import groovy.test.GroovyTestCase
 
 /**
  * Specification tests for records
  */
+class RecordSpecificationTest extends GroovyTestCase {
 
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.assertScript
-
-class RecordSpecificationTest {
-
-    @Test
     void testSimpleRecordKeyword() {
         assertScript '''
 // tag::record_message_defn[]
@@ -62,11 +57,10 @@ final class Message extends Record {
 '''
     }
 
-    @Test
     void testRecordDefaultsAndNamedArguments() {
         assertScript '''
-import groovy.transform.*
 import static groovy.test.GroovyAssert.shouldFail
+import groovy.transform.*
 
 // tag::record_point_defn[]
 record ColoredPoint(int x, int y = 0, String color = 'white') {}
@@ -101,7 +95,6 @@ assert new ColoredPoint3(y: 5).toString() == 'ColoredPoint3[x=0, y=5, color=whit
 '''
     }
 
-    @Test
     void testOverrideToString() {
         assertScript '''
 // tag::record_point3d[]
@@ -116,7 +109,6 @@ assert new Point3D(10, 20, 30).toString() == 'Point3D[coords=10,20,30]'
 '''
     }
 
-    @Test
     void testCopyWith() {
         assertScript '''
 import groovy.transform.RecordOptions
@@ -144,7 +136,6 @@ shouldFail(MissingMethodException) {
 '''
     }
 
-    @Test
     void testImmutable() {
         assertScript '''
 import groovy.transform.ImmutableProperties
@@ -160,7 +151,6 @@ assert shop.items() == ['bread', 'milk']
 '''
     }
 
-    @Test
     void testToList() {
         assertScript '''
 // tag::record_to_list[]
@@ -175,7 +165,6 @@ assert c == 'green'
 '''
     }
 
-    @Test
     void testToMap() {
         assertScript '''
 // tag::record_to_map[]
@@ -187,7 +176,6 @@ assert p.toMap() == [x: 100, y: 200, color: 'green']
 '''
     }
 
-    @Test
     void testSize() {
         assertScript '''
 // tag::record_size[]
@@ -199,7 +187,6 @@ assert p.size() == 3
 '''
     }
 
-    @Test
     void testGetAt() {
         assertScript '''
 // tag::record_get_at[]
@@ -211,7 +198,6 @@ assert p[1] == 200
 '''
     }
 
-    @Test
     void testGenerics() {
         assertScript '''
 import groovy.transform.CompileStatic
@@ -234,7 +220,6 @@ method()
 '''
     }
 
-    @Test
     void testComponents() {
         assert '''
 // tag::record_components[]
@@ -266,7 +251,6 @@ method()
 '''
     }
 
-    @Test
     void testRecordCompactConstructor() {
         assertScript '''
 // tag::record_compact_constructor[]
@@ -283,7 +267,6 @@ assert w.message() == 'HELP'
 '''
     }
 
-    @Test
     void testToStringAnnotation() {
         assertScript '''
 // tag::record_point3d_tostring_annotation[]
@@ -313,7 +296,6 @@ assert new Point(10, 20).toString() == 'twod.Point[x=10, y=20]'
 '''
     }
 
-    @Test
     void testSimpleRecordAnnotation() {
         assertScript '''
 import groovy.transform.RecordType
diff --git a/src/spec/test/SaferScriptingASTTransformsTest.groovy b/src/spec/test/SaferScriptingASTTransformsTest.groovy
index baf5416931..2b490d6113 100644
--- a/src/spec/test/SaferScriptingASTTransformsTest.groovy
+++ b/src/spec/test/SaferScriptingASTTransformsTest.groovy
@@ -1,3 +1,4 @@
+import groovy.test.GroovyTestCase
 
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
@@ -17,13 +18,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.assertScript
-
-class SaferScriptingASTTransformsTest {
-    @Test
+class SaferScriptingASTTransformsTest extends GroovyTestCase {
     void testThreadInterrupt() {
         assertScript '''import groovy.transform.ThreadInterrupt
 import org.codehaus.groovy.control.CompilerConfiguration
@@ -68,7 +63,6 @@ if (t.alive) {
 assert binding.i > 0'''
     }
 
-    @Test
     void testThreadInterruptThrown() {
 
         assertScript '''import groovy.transform.ThreadInterrupt
@@ -112,7 +106,6 @@ assert binding.i == -1'''
 // end::threadinterrupt_thrown[]
    }
 
-    @Test
     void testTimedInterrupt() {
         assertScript '''import groovy.transform.TimedInterrupt
 import org.codehaus.groovy.control.CompilerConfiguration
@@ -155,7 +148,6 @@ assert !t.alive
 assert binding.result == 0'''
     }
 
-    @Test
     void testTimedInterruptDuration() {
         assertScript '''import groovy.transform.TimedInterrupt
 
@@ -177,7 +169,6 @@ assert !t.alive
 '''
     }
 
-    @Test
     void testTimedInterruptThrown() {
         assertScript '''import groovy.transform.InheritConstructors
 import groovy.transform.TimedInterrupt
@@ -205,7 +196,6 @@ assert result == -1
 '''
     }
 
-    @Test
     void testConditionalInterrupt() {
         assertScript '''import groovy.transform.ConditionalInterrupt
 // tag::conditionalinterrupt_quotaclass[]
@@ -242,7 +232,6 @@ assert Quotas.quotas['user'] < 0
 '''
     }
 
-    @Test
     void testConditionalInterruptInjected() {
         assertScript '''import groovy.transform.ConditionalInterrupt
 import org.codehaus.groovy.ast.ClassHelper
@@ -294,7 +283,6 @@ assert Quotas.quotas['user'] < 0
 // end::conditionalinterrupt_injected[]
 '''
     }
-    @Test
     void testConditionalInterruptThrown() {
         assertScript '''import groovy.transform.ConditionalInterrupt
 import groovy.transform.InheritConstructors
diff --git a/src/spec/test/ScriptsAndClassesSpecTest.groovy b/src/spec/test/ScriptsAndClassesSpecTest.groovy
index 70295735ac..a97f3f42b2 100644
--- a/src/spec/test/ScriptsAndClassesSpecTest.groovy
+++ b/src/spec/test/ScriptsAndClassesSpecTest.groovy
@@ -1,3 +1,4 @@
+import groovy.test.GroovyTestCase
 
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
@@ -17,13 +18,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.assertScript
-
-class ScriptsAndClassesSpecTest {
-    @Test
+class ScriptsAndClassesSpecTest extends GroovyTestCase {
     void testMainMethod() {
         assertScript '''
             // tag::groovy_class_with_main_method[]
@@ -81,7 +76,6 @@ class ScriptsAndClassesSpecTest {
         '''
     }
 
-    @Test
     void testJep445Definition() {
         runScript '''
             // tag::jep445_barescript[]
@@ -105,7 +99,6 @@ class ScriptsAndClassesSpecTest {
         '''
     }
 
-    @Test
     void testMethodDefinition() {
         assertScript '''
             // tag::method_in_script[]
@@ -143,7 +136,6 @@ class ScriptsAndClassesSpecTest {
         '''
     }
 
-    @Test
     void testScriptVariables() {
         assertScript '''
             // tag::script_with_variables[]
diff --git a/src/spec/test/SealedSpecificationTest.groovy b/src/spec/test/SealedSpecificationTest.groovy
index 1c938f24d5..8b9d63ba25 100644
--- a/src/spec/test/SealedSpecificationTest.groovy
+++ b/src/spec/test/SealedSpecificationTest.groovy
@@ -17,11 +17,12 @@
  *  under the License.
  */
 
+import groovy.test.GroovyTestCase
 
 /**
  * Specification tests for the traits feature
  */
-class SealedSpecificationTest {
+class SealedSpecificationTest extends GroovyTestCase {
 
     void testSealedADT() {
         assertScript '''
@@ -137,8 +138,6 @@ assert forecast.toString() == '[Rainy, Sunny, Cloudy]'
     void testSealedWeather() {
         assertScript '''
 import groovy.transform.*
-import org.junit.jupiter.api.Test
-import static groovy.test.GroovyAssert.*
 
 // tag::weather_sealed[]
 sealed abstract class Weather { }
diff --git a/src/spec/test/SwingASTTransformsTest.groovy b/src/spec/test/SwingASTTransformsTest.groovy
index 97f78313a3..090e327130 100644
--- a/src/spec/test/SwingASTTransformsTest.groovy
+++ b/src/spec/test/SwingASTTransformsTest.groovy
@@ -1,3 +1,4 @@
+import groovy.test.GroovyTestCase
 
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
@@ -17,13 +18,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.assertScript
-
-class SwingASTTransformsTest {
-    @Test
+class SwingASTTransformsTest extends GroovyTestCase {
     void testBindable() {
         assertScript '''// tag::bindable_on_class[]
 import groovy.beans.Bindable
@@ -85,7 +80,6 @@ p.age = 145
 assert changed == ['name', 'age'] as Set'''
     }
 
-    @Test
     void testBindableSingleProperty() {
         assertScript '''
 // tag::bindable_single_property[]
@@ -107,7 +101,6 @@ assert changed == ['age'] as Set
 '''
     }
 
-    @Test
     void testListenerList() {
         assertScript '''import java.awt.event.ActionEvent
 
@@ -181,7 +174,6 @@ c.fireActionPerformed(new ActionEvent(this, 0, 'test'))
 
     }
 
-    @Test
     void testListenerListName() {
         assertScript '''import java.awt.event.ActionEvent
 
@@ -204,7 +196,6 @@ c.fireActionPerformed(new ActionEvent(this, 0, 'test'))
 
     }
 
-    @Test
     void testListenerListSynchronized() {
         assertScript '''import java.awt.event.ActionEvent
 
@@ -229,7 +220,6 @@ assert Modifier.isSynchronized(Component.getDeclaredMethod('addActionListener',
 '''
     }
 
-    @Test
     void testVetoable() {
         assertScript '''// tag::vetoable_on_class[]
 import groovy.beans.Vetoable
@@ -301,7 +291,6 @@ p.age = 145
 assert changed == ['name', 'age'] as Set'''
     }
 
-    @Test
     void testVetoableSingleProperty() {
         assertScript '''
 // tag::vetoable_single_property[]
diff --git a/src/spec/test/TestingASTTransformsTest.groovy b/src/spec/test/TestingASTTransformsTest.groovy
index 410ca65d4d..47b91d4398 100644
--- a/src/spec/test/TestingASTTransformsTest.groovy
+++ b/src/spec/test/TestingASTTransformsTest.groovy
@@ -16,18 +16,13 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
+import groovy.test.GroovyTestCase
 
+class TestingASTTransformsTest extends GroovyTestCase {
 
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.assertScript
-import static groovy.test.GroovyAssert.shouldFail
-
-class TestingASTTransformsTest {
-
-    @Test
     void testNotYetImplemented() {
         assertScript '''// tag::notyetimplemented[]
+import groovy.test.GroovyTestCase
 import groovy.test.NotYetImplemented
 
 class Maths {
@@ -36,7 +31,7 @@ class Maths {
     }
 }
 
-class MathsTest {
+class MathsTest extends GroovyTestCase {
     @NotYetImplemented
     void testFib() {
         def dataTable = [
@@ -58,7 +53,6 @@ class MathsTest {
 new MathsTest().testFib()'''
     }
 
-    @Test
     void testASTTest() {
         def err = shouldFail '''// tag::asttest_basic[]
 import groovy.transform.ASTTest
@@ -73,10 +67,9 @@ class Person {
 // end::asttest_basic[]
 def p = new Person()
 '''
-        assert err.message =~ /ASTTest phase must be at least SEMANTIC_ANALYSIS/
+        assert err =~ /ASTTest phase must be at least SEMANTIC_ANALYSIS/
     }
 
-    @Test
     void testASTTestWithPackageScope() {
         assertScript '''
 // tag::asttest_packagescope[]
@@ -100,7 +93,6 @@ def p = new Person()
 '''
     }
 
-    @Test
     void testASTTestWithForLoop() {
         assertScript '''
 // tag::asttest_forloop[]
@@ -132,7 +124,6 @@ def p = new Something()
 '''
     }
 
-    @Test
     void testDumpASTTransforms() {
         assertScript '''
 // tag::dump_ast_xforms[]
@@ -165,7 +156,6 @@ Foo
 '''
     }
 
-    @Test
     void testVariableMemorize() {
         assertScript '''
 // tag::memorize_in_binding[]
diff --git a/src/spec/test/TraitsSpecificationTest.groovy b/src/spec/test/TraitsSpecificationTest.groovy
index 7e6efac2b5..528d099911 100644
--- a/src/spec/test/TraitsSpecificationTest.groovy
+++ b/src/spec/test/TraitsSpecificationTest.groovy
@@ -17,20 +17,14 @@
  *  under the License.
  */
 
-
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.ast.ClassHelper
-import org.junit.jupiter.api.Test
 
 /**
  * Specification tests for the traits feature
  */
+class TraitsSpecificationTest extends GroovyTestCase {
 
-import static groovy.test.GroovyAssert.assertScript
-import static groovy.test.GroovyAssert.shouldFail
-
-class TraitsSpecificationTest {
-
-    @Test
     void testTraitDeclaration() {
         assertScript '''// tag::flying_simple[]
 trait FlyingAbility {                           // <1>
@@ -47,7 +41,6 @@ assert b.fly() == "I'm flying!"                 // <3>
 '''
     }
 
-    @Test
     void testAbstractMethodInTrait() {
         assertScript '''// tag::greetable[]
 trait Greetable {
@@ -67,7 +60,6 @@ assert p.greeting() == 'Hello, Bob!'                    // <3>
 '''
     }
 
-    @Test
     void testTraitImplementingInterface() {
         assertScript '''// tag::trait_implementing_interface[]
 interface Named {                                       // <1>
@@ -88,7 +80,6 @@ assert p instanceof Greetable                           // <7>
 '''
     }
 
-    @Test
     void testTraitWithProperty() {
         assertScript '''// tag::trait_with_property[]
 trait Named {
@@ -102,7 +93,6 @@ assert p.getName() == 'Bob'                 // <5>
 '''
     }
 
-    @Test
     void testCompositionOfTraits() {
         assertScript '''trait FlyingAbility {
     String fly() { "I'm flying!" }
@@ -124,7 +114,6 @@ assert d.speak() == "I'm speaking!"                     // <4>
 '''
     }
 
-    @Test
     void testOverridableMethod() {
         assertScript '''trait FlyingAbility {
     String fly() { "I'm flying!" }
@@ -148,7 +137,6 @@ assert d.speak() == "Quack!"                            // <5>
 '''
     }
 
-    @Test
     void testPrivateMethodInTrait() {
         assertScript '''// tag::private_method_in_trait[]
 trait Greeter {
@@ -173,7 +161,6 @@ try {
 '''
     }
 
-    @Test
     void testTraitWithPrivateField() {
         assertScript '''// tag::trait_with_private_field[]
 trait Counter {
@@ -188,7 +175,6 @@ assert f.count() == 2
 '''
     }
 
-    @Test
     void testTraitWithPublicField() {
         assertScript '''// tag::trait_with_public_field[]
 trait Named {
@@ -201,13 +187,11 @@ p.Named__name = 'Bob'                       // <4>
 '''
     }
 
-    @Test
     void testRemappedName() {
         def foo = ClassHelper.make("my.package.Foo")
         assert org.codehaus.groovy.transform.trait.Traits.remappedFieldName(foo, "bar") == 'my_package_Foo__bar'
     }
 
-    @Test
     void testDuckTyping() {
         assertScript '''// tag::ducktyping[]
 trait SpeakingDuck {
@@ -224,7 +208,6 @@ assert d.speak() == 'Quack!'                        // <3>
 '''
     }
 
-    @Test
     void testTraitInheritance() {
         assertScript '''// tag::trait_inherit[]
 trait Named {
@@ -240,7 +223,6 @@ assert p.introduce() == 'Hello, I am Alice'         // <5>
 '''
     }
 
-    @Test
     void testMultipleTraitInheritance() {
         assertScript '''// tag::trait_multiple_inherit[]
 trait WithId {                                      // <1>
@@ -256,7 +238,6 @@ def b = new Bean(id: 123, name: 'Foo')
 '''
     }
 
-    @Test
     void testMethodMissingInTrait() {
         assertScript '''// tag::dynamicobject[]
 trait DynamicObject {                               // <1>
@@ -287,7 +268,6 @@ assert d.someMethod() == 'SOMEMETHOD'               // <9>
 '''
     }
 
-    @Test
     void testDefaultMultipleInheritanceResolution() {
         assertScript '''// tag::multiple_inherit_default[]
 trait A {
@@ -306,7 +286,6 @@ assert c.exec() == 'B'
 '''
     }
 
-    @Test
     void testUserMultipleInheritanceResolution() {
         assertScript '''trait A {
     String exec() { 'A' }
@@ -324,7 +303,6 @@ assert c.exec() == 'A'                  // <2>
 '''
     }
 
-    @Test
     void testRuntimeCoercion() {
         assertScript '''
 // tag::runtime_header[]
@@ -351,7 +329,6 @@ s.doSomething()                                         // <3>
 '''
     }
 
-    @Test
     void testWithTraits() {
         assertScript '''// tag::withtraits_header[]
 trait A { void methodFromA() {} }
@@ -375,7 +352,6 @@ d.methodFromB()                     // <5>
 '''
     }
 
-    @Test
     void testSAMCoercion() {
         assertScript '''
 // tag::sam_trait[]
@@ -396,16 +372,16 @@ greet { 'Alice' }                           // <2>
 '''
     }
 
-    @Test
     void testTraitOverrideBehavior() {
         assertScript '''
 // tag::forceoverride_header[]
+import groovy.test.GroovyTestCase
 import groovy.transform.CompileStatic
 import org.codehaus.groovy.control.CompilerConfiguration
 import org.codehaus.groovy.control.customizers.ASTTransformationCustomizer
 import org.codehaus.groovy.control.customizers.ImportCustomizer
 
-class SomeTest {
+class SomeTest extends GroovyTestCase {
     def config
     def shell
 
@@ -465,7 +441,6 @@ assert !t.config.compilationCustomizers.empty
 '''
     }
 
-    @Test
     void testRuntimeOverride() {
         assertScript '''// tag::runtime_forceoverride[]
 class Person {
@@ -483,7 +458,6 @@ assert p2.name == 'Bob'                                 // <5>
 '''
     }
 
-    @Test
     void testDifferenceWithMixin() {
         assertScript '''// tag::diff_mixin[]
 class A { String methodFromA() { 'A' } }        // <1>
@@ -498,7 +472,6 @@ assert !(o instanceof B)                        // <7>
 '''
     }
 
-    @Test
     void testMeaningOfThis() {
         assertScript '''// tag::meaningofthis_header[]
 trait Introspector {
@@ -516,7 +489,6 @@ assert foo.whoAmI().is(foo)
 '''
     }
 
-    @Test
     void testPublicStaticFieldInTrait() {
         assertScript '''// tag::staticfield_header[]
 trait TestHelper {
@@ -546,7 +518,6 @@ assert !Baz.TestHelper__CALLED                  // <5>
 '''
     }
 
-    @Test
     void testPrePostfixIsDisallowed() {
         def message = shouldFail '''
 // tag::prefix_postfix[]
@@ -564,11 +535,10 @@ def c = new Counter()
 c.inc()
 // end::prefix_postfix[]
         '''
-        assert message.message.contains('Postfix expressions on trait fields/properties are not supported')
-        assert message.message.contains('Prefix expressions on trait fields/properties are not supported')
+        assert message.contains('Postfix expressions on trait fields/properties are not supported')
+        assert message.contains('Prefix expressions on trait fields/properties are not supported')
     }
 
-    @Test
     void testStackableTraits() {
         assertScript '''import TraitsSpecificationTest.PrintCategory as PC
 
@@ -691,7 +661,6 @@ PC.reset()
 '''
     }
 
-    @Test
     void testDecorateFinalClass() {
         assertScript '''
 // tag::decoratefinalclass[]
@@ -709,7 +678,6 @@ assert sb.toString() == 'Grvy'                          // <7>
 '''
     }
 
-    @Test
     void testInheritanceOfState() {
         assertScript '''// tag::intcouple[]
 trait IntCouple {
@@ -761,7 +729,6 @@ assert elem.f() == 7
 '''
     }
 
-    @Test
     void testSelfType() {
         assertScript '''
 // tag::selftype_intro[]
@@ -857,10 +824,9 @@ class SecurityService {
 }
 
 '''
-        assert message.message.contains("class 'MyDevice' implements trait 'Communicating' but does not extend self type class 'Device'")
+        assert message.contains("class 'MyDevice' implements trait 'Communicating' but does not extend self type class 'Device'")
     }
 
-    @Test
     void testSelfTypeWithSealed() {
         assertScript '''
 import groovy.transform.*
diff --git a/src/spec/test/builder/BuilderSpecTest.groovy b/src/spec/test/builder/BuilderSpecTest.groovy
index f38180f01d..cfef70f3dd 100644
--- a/src/spec/test/builder/BuilderSpecTest.groovy
+++ b/src/spec/test/builder/BuilderSpecTest.groovy
@@ -19,8 +19,7 @@
 package builder
 
 import groovy.transform.CompileStatic
-import org.junit.jupiter.api.Test
-
+import org.junit.Test
 import static groovy.test.GroovyAssert.assertScript
 
 @CompileStatic
diff --git a/src/spec/test/builder/FileTreeBuilderTest.groovy b/src/spec/test/builder/FileTreeBuilderTest.groovy
index 34bcb8cf0e..323a051524 100644
--- a/src/spec/test/builder/FileTreeBuilderTest.groovy
+++ b/src/spec/test/builder/FileTreeBuilderTest.groovy
@@ -18,14 +18,14 @@
  */
 package builder
 
-import org.junit.jupiter.api.AfterEach
-import org.junit.jupiter.api.Test
+import org.junit.After
+import org.junit.Test
 
 final class FileTreeBuilderTest {
 
     File tmpDir
 
-    @AfterEach
+    @After
     void tearDown() {
         tmpDir.deleteDir()
     }
diff --git a/src/spec/test/builder/ObjectGraphBuilderTest.groovy b/src/spec/test/builder/ObjectGraphBuilderTest.groovy
index 2d010a3ea5..27028e440c 100644
--- a/src/spec/test/builder/ObjectGraphBuilderTest.groovy
+++ b/src/spec/test/builder/ObjectGraphBuilderTest.groovy
@@ -19,19 +19,15 @@
 package builder
 
 import asciidoctor.Utils
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.assertScript
-import static groovy.test.GroovyAssert.shouldFail
+import groovy.test.GroovyTestCase
 
 /**
  * Tests for ObjectGraphBuilder. The tests directly in this file are specific
  * to ObjectGraphBuilder. Functionality in common with other Builders
  * is tested in the parent class.
  */
-final class ObjectGraphBuilderTest {
+final class ObjectGraphBuilderTest extends GroovyTestCase {
 
-    @Test
     void testBuilder() {
         assertScript '''// tag::domain_classes[]
 package com.acme
@@ -82,7 +78,6 @@ assert employee.address instanceof Address
 '''
     }
 
-    @Test
     void testBuildImmutableFailure() {
         def err = shouldFail '''
 package com.acme
@@ -104,14 +99,13 @@ builder.classNameResolver = "com.acme"
 def person = builder.person(name:'Jon', age:17)
 // end::immutable_fail_runtime[]
         '''
-        assert err.message == Utils.stripAsciidocMarkup('''
+        assert err == Utils.stripAsciidocMarkup('''
 // tag::expected_error_immutable[]
 Cannot set read-only property: name for class: com.acme.Person
 // end::expected_error_immutable[]
 ''')
     }
 
-    @Test
     void testBuildImmutableFixed() {
         assertScript '''
 package com.acme
@@ -141,7 +135,6 @@ def person = builder.person(name:'Jon', age:17)
         '''
     }
 
-    @Test
     void testId() {
         assertScript '''
 package com.acme
diff --git a/src/spec/test/gdk/ConfigSlurperTest.groovy b/src/spec/test/gdk/ConfigSlurperTest.groovy
index 242d7246c8..1ac73363b6 100644
--- a/src/spec/test/gdk/ConfigSlurperTest.groovy
+++ b/src/spec/test/gdk/ConfigSlurperTest.groovy
@@ -18,11 +18,9 @@
  */
 package gdk
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class ConfigSlurperTest {
-    @Test
+class ConfigSlurperTest extends GroovyTestCase {
     void testWithArbitraryTypes() {
         // tag::arbitrary_types[]
         def config = new ConfigSlurper().parse('''
@@ -39,7 +37,6 @@ class ConfigSlurperTest {
         // end::arbitrary_types[]
     }
 
-    @Test
     void testConfigSlurperMustNotReturnNull() {
         // tag::never_null[]
         def config = new ConfigSlurper().parse('''
@@ -52,7 +49,6 @@ class ConfigSlurperTest {
         // end::never_null[]
     }
 
-    @Test
     void testEscapeDot() {
         // tag::escape_dot[]
         def config = new ConfigSlurper().parse('''
@@ -63,7 +59,6 @@ class ConfigSlurperTest {
         // end::escape_dot[]
     }
 
-    @Test
     void testEnvironments() {
         // tag::environments[]
         def config = new ConfigSlurper('development').parse('''
@@ -86,7 +81,6 @@ class ConfigSlurperTest {
         // end::environments[]
     }
 
-    @Test
     void testCustomEnvironment() {
         // tag::custom_environments[]
         def slurper = new ConfigSlurper()
@@ -106,7 +100,6 @@ class ConfigSlurperTest {
         // end::custom_environments[]
     }
 
-    @Test
     void testProperties() {
         // tag::properties[]
         def config = new ConfigSlurper().parse('''
diff --git a/src/spec/test/gdk/ExpandoTest.groovy b/src/spec/test/gdk/ExpandoTest.groovy
index 8e02c9a622..200bc3b4b0 100644
--- a/src/spec/test/gdk/ExpandoTest.groovy
+++ b/src/spec/test/gdk/ExpandoTest.groovy
@@ -18,11 +18,9 @@
  */
 package gdk
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class ExpandoTest {
-    @Test
+class ExpandoTest extends GroovyTestCase {
     void testExpandoAddProperty() {
         // tag::expando_property[]
         def expando = new Expando()
@@ -32,7 +30,6 @@ class ExpandoTest {
         // end::expando_property[]
     }
 
-    @Test
     void testExpandoAddMethod() {
         // tag::expando_method[]
         def expando = new Expando()
diff --git a/src/spec/test/gdk/ObservableTest.groovy b/src/spec/test/gdk/ObservableTest.groovy
index 0e205902bb..a4c94cedf9 100644
--- a/src/spec/test/gdk/ObservableTest.groovy
+++ b/src/spec/test/gdk/ObservableTest.groovy
@@ -18,13 +18,12 @@
  */
 package gdk
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
 import java.beans.PropertyChangeListener
 
-class ObservableTest {
+class ObservableTest extends GroovyTestCase {
 
-    @Test
     void testObservableList() {
         // tag::observable_list[]
 
@@ -51,7 +50,6 @@ class ObservableTest {
         // end::observable_list[]
     }
 
-    @Test
     void testObservableListAndClear() {
         // tag::observable_list_clear[]
         def event
diff --git a/src/spec/test/gdk/WorkingWithArraysTest.groovy b/src/spec/test/gdk/WorkingWithArraysTest.groovy
index 68cf1739bb..5d46286982 100644
--- a/src/spec/test/gdk/WorkingWithArraysTest.groovy
+++ b/src/spec/test/gdk/WorkingWithArraysTest.groovy
@@ -18,7 +18,7 @@
  */
 package gdk
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 final class WorkingWithArraysTest {
 
diff --git a/src/spec/test/gdk/WorkingWithCollectionsTest.groovy b/src/spec/test/gdk/WorkingWithCollectionsTest.groovy
index 71a7dc5bf6..16669c80ef 100644
--- a/src/spec/test/gdk/WorkingWithCollectionsTest.groovy
+++ b/src/spec/test/gdk/WorkingWithCollectionsTest.groovy
@@ -18,13 +18,9 @@
  */
 package gdk
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
-
-
-class WorkingWithCollectionsTest {
-    @Test
+class WorkingWithCollectionsTest extends GroovyTestCase {
     void testListLiterals() {
         // tag::list_literals[]
         def list = [5, 6, 7, 8]
@@ -39,7 +35,6 @@ class WorkingWithCollectionsTest {
         // end::list_literals[]
     }
 
-    @Test
     void testList() {
         // tag::list_usecases[]
         def list = [5, 6, 7, 8]
@@ -73,7 +68,6 @@ class WorkingWithCollectionsTest {
         // end::list_usecases[]
     }
 
-    @Test
     void testListsAsBoolean() {
         // tag::list_to_bool[]
         assert ![]             // an empty list evaluates as false
@@ -83,7 +77,6 @@ class WorkingWithCollectionsTest {
         // end::list_to_bool[]
     }
 
-    @Test
     void testLeftShiftOnList() {
         // tag::list_leftshift[]
         def list = []
@@ -107,7 +100,6 @@ class WorkingWithCollectionsTest {
         // end::list_leftshift[]
     }
 
-    @Test
     void testListAdd() {
         // tag::list_add[]
         assert [1, 2] + 3 + [4, 5] + 6 == [1, 2, 3, 4, 5, 6]
@@ -142,7 +134,6 @@ class WorkingWithCollectionsTest {
         // end::list_add[]
     }
 
-    @Test
     void testListIteration() {
         // tag::list_each[]
         [1, 2, 3].each {
@@ -154,7 +145,6 @@ class WorkingWithCollectionsTest {
         // end::list_each[]
     }
 
-    @Test
     void testListConstruct() {
         // tag::list_construct[]
         def list1 = ['a', 'b', 'c']
@@ -169,7 +159,6 @@ class WorkingWithCollectionsTest {
         // end::list_construct[]
     }
 
-    @Test
     void testListCollect() {
         // tag::list_collect[]
         assert [1, 2, 3].collect { it * 2 } == [2, 4, 6]
@@ -184,7 +173,6 @@ class WorkingWithCollectionsTest {
         // end::list_collect[]
     }
 
-    @Test
     void testListGDK() {
         // tag::list_gdk1[]
         assert [1, 2, 3].find { it > 1 } == 2           // find 1st element matching criteria
@@ -316,7 +304,6 @@ class WorkingWithCollectionsTest {
 
     }
 
-    @Test
     void testListComparator() {
         // tag::list_comparator[]
         Comparator mc = { a, b -> a == b ? 0 : (a < b ? -1 : 1) }
@@ -336,7 +323,6 @@ class WorkingWithCollectionsTest {
         // end::list_comparator[]
     }
 
-    @Test
     void testListSort() {
         // tag::list_sort[]
         assert [6, 3, 9, 2, 7, 1, 5].sort() == [1, 2, 3, 5, 6, 7, 9]
@@ -366,7 +352,6 @@ class WorkingWithCollectionsTest {
         // end::list_sort[]
     }
 
-    @Test
     void testListMultiply() {
         // tag::list_multiply[]
         assert [1, 2, 3] * 3 == [1, 2, 3, 1, 2, 3, 1, 2, 3]
@@ -378,7 +363,6 @@ class WorkingWithCollectionsTest {
         // end::list_multiply[]
     }
 
-    @Test
     void testIntRange() {
         // tag::intrange[]
         // an inclusive range
@@ -406,7 +390,6 @@ class WorkingWithCollectionsTest {
         // end::intrange[]
     }
 
-    @Test
     void testStringRange() {
         // tag::stringrange[]
         // an inclusive range
@@ -421,7 +404,6 @@ class WorkingWithCollectionsTest {
         // end::stringrange[]
     }
 
-    @Test
     void testRangeIteration() {
         // tag::range_for[]
         for (i in 1..10) {
@@ -435,7 +417,6 @@ class WorkingWithCollectionsTest {
         // end::range_each[]
     }
 
-    @Test
     void testRangeInSwitch() {
         int years = 1
         double interestRate
@@ -450,7 +431,6 @@ class WorkingWithCollectionsTest {
 
     }
 
-    @Test
     void testMapLiteral() {
         // tag::map_literal[]
         def map = [name: 'Gromit', likes: 'cheese', id: 1234]
@@ -468,7 +448,6 @@ class WorkingWithCollectionsTest {
         // end::map_literal[]
     }
 
-    @Test
     void testMapLiteralUsingEscape() {
         // tag::map_literal_gotcha[]
         def a = 'Bob'
@@ -481,7 +460,6 @@ class WorkingWithCollectionsTest {
         // end::map_literal_gotcha[]
     }
 
-    @Test
     void testMapPropertyNotation() {
         // tag::map_property[]
         def map = [name: 'Gromit', likes: 'cheese', id: 1234]
@@ -496,7 +474,6 @@ class WorkingWithCollectionsTest {
         // end::map_property[]
     }
 
-    @Test
     void testMapPropertyGotcha() {
         // tag::map_property_gotcha[]
         def map = [name: 'Gromit', likes: 'cheese', id: 1234]
@@ -519,7 +496,6 @@ class WorkingWithCollectionsTest {
         // end::map_property_gotcha[]
     }
 
-    @Test
     void testMapIteration() {
         // tag::map_iteration[]
         def map = [
@@ -550,7 +526,6 @@ class WorkingWithCollectionsTest {
         // end::map_iteration[]
     }
 
-    @Test
     void testAddElementsToMap() {
         // tag::map_add[]
         def defaults = [1: 'a', 2: 'b', 3: 'c', 4: 'd']
@@ -564,7 +539,6 @@ class WorkingWithCollectionsTest {
         // end::map_add[]
     }
 
-    @Test
     void testMapGDK() {
         assertScript '''
             // tag::map_gdk1[]
@@ -657,7 +631,6 @@ class WorkingWithCollectionsTest {
         '''
     }
 
-    @Test
     void testShouldNotUseGStringAsKey() {
         assertScript '''
             // tag::gstring_gotcha[]
@@ -670,7 +643,6 @@ class WorkingWithCollectionsTest {
         '''
     }
 
-    @Test
     void testMapConstruct() {
         // tag::map_construct[]
         def map = [
@@ -685,7 +657,6 @@ class WorkingWithCollectionsTest {
         // end::map_construct[]
     }
 
-    @Test
     void testGPathSupport() {
         // tag::gpath_support_1[]
         def listOfMaps = [['a': 11, 'b': 12], ['a': 21, 'b': 22]]
@@ -722,7 +693,6 @@ class WorkingWithCollectionsTest {
 
     }
 
-    @Test
     void testStarDot() {
         // tag::stardot_1[]
         assert [1, 3, 5] == ['a', 'few', 'words']*.size()
@@ -739,7 +709,6 @@ class WorkingWithCollectionsTest {
         '''
     }
 
-    @Test
     void testSubscriptOperator() {
         // tag::subscript[]
         def text = 'nice cheese gromit!'
diff --git a/src/spec/test/gdk/WorkingWithIOSpecTest.groovy b/src/spec/test/gdk/WorkingWithIOSpecTest.groovy
index d3cf619465..8ad1cf8b52 100644
--- a/src/spec/test/gdk/WorkingWithIOSpecTest.groovy
+++ b/src/spec/test/gdk/WorkingWithIOSpecTest.groovy
@@ -20,12 +20,16 @@ package gdk
 
 import groovy.io.FileType
 import groovy.io.FileVisitResult
+import groovy.test.GroovyTestCase
 import groovy.transform.CompileStatic
-import org.junit.jupiter.api.Test
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
 
-import static org.junit.jupiter.api.Assumptions.assumeTrue
+import static org.junit.Assume.assumeTrue
 
-class WorkingWithIOSpecTest {
+@RunWith(JUnit4)
+class WorkingWithIOSpecTest extends GroovyTestCase {
 
     private final static boolean unixlike =
             System.getProperty('os.name').contains('Linux') ||
@@ -34,7 +38,7 @@ class WorkingWithIOSpecTest {
             System.getProperty('os.name').contains('Windows')
 
     private assumeUnixLikeSystem() {
-        assumeTrue(unixlike, 'Test requires unix like system.')
+        assumeTrue('Test requires unix like system.', unixlike)
     }
 
     @CompileStatic
diff --git a/src/spec/test/metaprogramming/ASTMatcherFilteringTest.groovy b/src/spec/test/metaprogramming/ASTMatcherFilteringTest.groovy
index a9de1cb1b8..a208f9dedb 100644
--- a/src/spec/test/metaprogramming/ASTMatcherFilteringTest.groovy
+++ b/src/spec/test/metaprogramming/ASTMatcherFilteringTest.groovy
@@ -19,6 +19,7 @@
 
 package metaprogramming
 
+import groovy.test.GroovyTestCase
 import groovy.transform.CompileStatic
 import org.codehaus.groovy.ast.ASTNode
 import org.codehaus.groovy.ast.ClassCodeExpressionTransformer
@@ -30,18 +31,14 @@ import org.codehaus.groovy.macro.matcher.ASTMatcher
 import org.codehaus.groovy.transform.AbstractASTTransformation
 import org.codehaus.groovy.transform.GroovyASTTransformation
 import org.codehaus.groovy.transform.GroovyASTTransformationClass
-import org.junit.jupiter.api.Test
 
 import java.lang.annotation.ElementType
 import java.lang.annotation.Retention
 import java.lang.annotation.RetentionPolicy
 import java.lang.annotation.Target
 
-import static groovy.test.GroovyAssert.assertScript
+class ASTMatcherFilteringTest extends GroovyTestCase {
 
-class ASTMatcherFilteringTest {
-
-    @Test
     void testFilteringNodes() {
         assertScript '''
         // tag::jokingexample[]
diff --git a/src/spec/test/metaprogramming/ASTMatcherTestingTest.groovy b/src/spec/test/metaprogramming/ASTMatcherTestingTest.groovy
index 86fa13532e..16fc0c6f58 100644
--- a/src/spec/test/metaprogramming/ASTMatcherTestingTest.groovy
+++ b/src/spec/test/metaprogramming/ASTMatcherTestingTest.groovy
@@ -19,12 +19,16 @@
 
 package metaprogramming
 
-
+import groovy.test.GroovyTestCase
+import groovy.transform.CompileDynamic
+import groovy.transform.CompileStatic
 import org.codehaus.groovy.ast.ASTNode
 import org.codehaus.groovy.ast.ClassNode
 import org.codehaus.groovy.ast.MethodNode
+import org.codehaus.groovy.ast.Parameter
 import org.codehaus.groovy.ast.expr.BinaryExpression
 import org.codehaus.groovy.ast.expr.Expression
+import org.codehaus.groovy.ast.stmt.BlockStatement
 import org.codehaus.groovy.control.CompilePhase
 import org.codehaus.groovy.control.SourceUnit
 import org.codehaus.groovy.macro.matcher.ASTMatcher
@@ -32,20 +36,18 @@ import org.codehaus.groovy.macro.transform.MacroClass
 import org.codehaus.groovy.transform.AbstractASTTransformation
 import org.codehaus.groovy.transform.GroovyASTTransformation
 import org.codehaus.groovy.transform.GroovyASTTransformationClass
-import org.junit.jupiter.api.Test
 
 import java.lang.annotation.ElementType
 import java.lang.annotation.Retention
 import java.lang.annotation.RetentionPolicy
 import java.lang.annotation.Target
 
-import static groovy.test.GroovyAssert.assertScript
-import static org.codehaus.groovy.ast.tools.GeneralUtils.varX
+import static org.codehaus.groovy.ast.ClassHelper.Integer_TYPE
+import static org.codehaus.groovy.ast.tools.GeneralUtils.*
 
-class ASTMatcherTestingTest {
+class ASTMatcherTestingTest extends GroovyTestCase {
 
     // tag::testexpression[]
-    @Test
     void testTestingSumExpression() {
         use(ASTMatcher) {                 // <1>
             TwiceASTTransformation sample = new TwiceASTTransformation()
@@ -63,7 +65,6 @@ class ASTMatcherTestingTest {
     // end::testexpression[]
 
     // tag::executiontesting[]
-    @Test
     void testASTBehavior() {
         assertScript '''
         package metaprogramming
diff --git a/src/spec/test/metaprogramming/ASTXFormSpecTest.groovy b/src/spec/test/metaprogramming/ASTXFormSpecTest.groovy
index 56603d1358..7f99191dc2 100644
--- a/src/spec/test/metaprogramming/ASTXFormSpecTest.groovy
+++ b/src/spec/test/metaprogramming/ASTXFormSpecTest.groovy
@@ -19,16 +19,16 @@
 package metaprogramming
 
 import asciidoctor.Utils
+import groovy.test.GroovyTestCase
 import groovy.transform.CompileStatic
 import org.codehaus.groovy.control.CompilationUnit
 import org.codehaus.groovy.control.CompilePhase
 import org.codehaus.groovy.control.CompilerConfiguration
-import org.junit.jupiter.api.Test
 
-import static groovy.test.GroovyAssert.assertScript
+import java.lang.annotation.ElementType
+import java.lang.annotation.Target
 
-class ASTXFormSpecTest {
-    @Test
+class ASTXFormSpecTest extends GroovyTestCase {
     void testLocalTransform() {
         def gcl = new GroovyClassLoader()
         def gse = new GroovyShell(gcl)
@@ -111,7 +111,6 @@ import org.codehaus.groovy.transform.GroovyASTTransformation
         '''
     }
 
-    @Test
     void testClassCodeTransformer() {
         def gcl = new GroovyClassLoader()
         def gse = new GroovyShell(gcl)
@@ -201,7 +200,6 @@ import org.codehaus.groovy.transform.GroovyASTTransformation
         void methodToBeTested() {}
     }
 
-    @Test
     void testMyTransform() {
         def c = new Subject()
         c.methodToBeTested()
@@ -209,7 +207,6 @@ import org.codehaus.groovy.transform.GroovyASTTransformation
     // end::breakpoint_missed[]
 
     // tag::breakpoint_hit[]
-    @Test
     void testMyTransformWithBreakpoint() {
         assertScript '''
             import metaprogramming.MyTransformToDebug
@@ -234,7 +231,6 @@ import org.codehaus.groovy.transform.GroovyASTTransformation
         }
     }
 
-    @Test
     void testGlobalTransform() {
         doInTmpDir { builder ->
             File dir = builder.baseDir
diff --git a/src/spec/test/metaprogramming/ExpandoMetaClassTest.groovy b/src/spec/test/metaprogramming/ExpandoMetaClassTest.groovy
index bcbc2adf41..a3895a894b 100644
--- a/src/spec/test/metaprogramming/ExpandoMetaClassTest.groovy
+++ b/src/spec/test/metaprogramming/ExpandoMetaClassTest.groovy
@@ -18,14 +18,11 @@
  */
 package metaprogramming
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
 
+class ExpandoMetaClassTest extends GroovyTestCase {
 
-class ExpandoMetaClassTest {
-
-    @Test
     void testConstructors() {
         assertScript '''
              // tag::emc_constructors[]
@@ -40,7 +37,6 @@ class ExpandoMetaClassTest {
         '''
     }
 
-    @Test
     void testMethodPointer() {
         assertScript '''
             // tag::emc_method_pointer[]
@@ -64,7 +60,6 @@ class ExpandoMetaClassTest {
         '''
     }
 
-    @Test
     void testDynamicMethodNames() {
         assertScript '''
             // tag::emc_dynamic_method_names[]
@@ -87,7 +82,6 @@ class ExpandoMetaClassTest {
         '''
     }
 
-    @Test
     void testOverrideInvokeMethod() {
         assertScript '''
             // tag::emc_invoke_method[]
@@ -113,7 +107,6 @@ class ExpandoMetaClassTest {
         '''
     }
 
-    @Test
     void testOverrideGetProperty() {
         assertScript '''
             // tag::emc_get_property[]
@@ -139,7 +132,6 @@ class ExpandoMetaClassTest {
         '''
     }
 
-    @Test
     void testOverrideInvokeMethodStatic() {
         assertScript '''
             // tag::emc_invoke_method_static[]
@@ -164,7 +156,6 @@ class ExpandoMetaClassTest {
         '''
     }
 
-    @Test
     void testGetProperty() {
         assertScript '''
             // tag::emc_getter[]
@@ -180,7 +171,6 @@ class ExpandoMetaClassTest {
         '''
     }
 
-    @Test
     void testSetGetProperty() {
         assertScript '''
             // tag::emc_getter_setter[]
@@ -200,7 +190,6 @@ class ExpandoMetaClassTest {
         '''
     }
 
-    @Test
     void testProperty() {
         assertScript '''
             // tag::emc_property[]
@@ -216,7 +205,6 @@ class ExpandoMetaClassTest {
         '''
     }
 
-    @Test
     void testStaticMethod() {
         assertScript '''
             // tag::emc_static[]
@@ -231,7 +219,6 @@ class ExpandoMetaClassTest {
         '''
     }
 
-    @Test
     void testMethod() {
         assertScript '''
             // tag::emc_method[]
@@ -248,7 +235,6 @@ class ExpandoMetaClassTest {
         '''
     }
 
-    @Test
     void testInterface() {
         assertScript '''
             // tag::emc_interface[]
diff --git a/src/spec/test/metaprogramming/GroovyObjectTest.groovy b/src/spec/test/metaprogramming/GroovyObjectTest.groovy
index fd7e682062..b00dbf8731 100644
--- a/src/spec/test/metaprogramming/GroovyObjectTest.groovy
+++ b/src/spec/test/metaprogramming/GroovyObjectTest.groovy
@@ -18,13 +18,9 @@
  */
 package metaprogramming
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
-
-
-class GroovyObjectTest {
-    @Test
+class GroovyObjectTest extends GroovyTestCase {
     void testInvokeMethod() {
         assertScript '''
 // tag::groovy_invoke_method[]
@@ -47,7 +43,6 @@ assert someGroovyClass.someMethod() == 'called invokeMethod someMethod []'
 '''
     }
 
-    @Test
     void testGetProperty () {
         assertScript '''
 // tag::groovy_get_property[]
@@ -79,13 +74,12 @@ assert someGroovyClass.field4 == 'hu'
 '''
     }
 
-    @Test
     void testSetProperty () {
         assertScript '''
 // tag::groovy_set_property[]
 class POGO {
 
-    String property
+    String property 
 
     void setProperty(String name, Object value) {
         this.@"$name" = 'overridden'
@@ -100,7 +94,6 @@ assert pogo.property == 'overridden'
 '''
     }
 
-    @Test
     void testGetAttribute () {
         assertScript '''
 // tag::groovy_get_attribute[]
@@ -122,7 +115,6 @@ assert someGroovyClass.metaClass.getAttribute(someGroovyClass, 'field2') == 'ho'
 '''
     }
 
-    @Test
     void testSetAttribute () {
         assertScript '''
 // tag::groovy_set_attribute[]
@@ -145,4 +137,4 @@ assert pogo.property1 == 'ho'
 // end::groovy_set_attribute[]
 '''
     }
-}
+}
\ No newline at end of file
diff --git a/src/spec/test/metaprogramming/InterceptableTest.groovy b/src/spec/test/metaprogramming/InterceptableTest.groovy
index ef67837476..e3fea05796 100644
--- a/src/spec/test/metaprogramming/InterceptableTest.groovy
+++ b/src/spec/test/metaprogramming/InterceptableTest.groovy
@@ -18,13 +18,11 @@
  */
 package metaprogramming
 
-import org.junit.jupiter.api.Test
-
+import groovy.test.GroovyTestCase
 
 // tag::groovy_interceptable_test[]
-class InterceptableTest {
+class InterceptableTest extends GroovyTestCase {
 
-    @Test
     void testCheckInterception() {
         def interception = new Interception()
 
diff --git a/src/spec/test/metaprogramming/InterceptionThroughMetaClassTest.groovy b/src/spec/test/metaprogramming/InterceptionThroughMetaClassTest.groovy
index d3097de6d6..ba5872f8b2 100644
--- a/src/spec/test/metaprogramming/InterceptionThroughMetaClassTest.groovy
+++ b/src/spec/test/metaprogramming/InterceptionThroughMetaClassTest.groovy
@@ -18,13 +18,12 @@
  */
 package metaprogramming
 
+import groovy.test.GroovyTestCase
 import groovy.xml.Entity
-import org.junit.jupiter.api.Test
 
 // tag::meta_class_interception[]
-class InterceptionThroughMetaClassTest {
+class InterceptionThroughMetaClassTest extends GroovyTestCase {
 
-    @Test
     void testPOJOMetaClassInterception() {
         String invoking = 'ha'
         invoking.metaClass.invokeMethod = { String name, Object args ->
@@ -35,7 +34,6 @@ class InterceptionThroughMetaClassTest {
         assert invoking.someMethod() == 'invoked'
     }
 
-    @Test
     void testPOGOMetaClassInterception() {
         Entity entity = new Entity('Hello')
         entity.metaClass.invokeMethod = { String name, Object args ->
diff --git a/src/spec/test/metaprogramming/MacroClassTest.groovy b/src/spec/test/metaprogramming/MacroClassTest.groovy
index b8166da4f5..1820bbbd77 100644
--- a/src/spec/test/metaprogramming/MacroClassTest.groovy
+++ b/src/spec/test/metaprogramming/MacroClassTest.groovy
@@ -19,6 +19,7 @@
 
 package metaprogramming
 
+import groovy.test.GroovyTestCase
 import groovy.transform.CompileDynamic
 import groovy.transform.CompileStatic
 import org.codehaus.groovy.ast.ASTNode
@@ -30,19 +31,16 @@ import org.codehaus.groovy.macro.transform.MacroClass
 import org.codehaus.groovy.transform.AbstractASTTransformation
 import org.codehaus.groovy.transform.GroovyASTTransformation
 import org.codehaus.groovy.transform.GroovyASTTransformationClass
-import org.junit.jupiter.api.Test
 
 import java.lang.annotation.ElementType
 import java.lang.annotation.Retention
 import java.lang.annotation.RetentionPolicy
 import java.lang.annotation.Target
 
-import static groovy.test.GroovyAssert.assertScript
 import static org.codehaus.groovy.ast.tools.GeneralUtils.constX
 
-class MacroClassTest {
+class MacroClassTest extends GroovyTestCase {
 
-    @Test
     void testMacroClass() {
         assertScript '''
         package metaprogramming
diff --git a/src/spec/test/metaprogramming/MacroExpressionTest.groovy b/src/spec/test/metaprogramming/MacroExpressionTest.groovy
index 99196623df..2b1ffbd710 100644
--- a/src/spec/test/metaprogramming/MacroExpressionTest.groovy
+++ b/src/spec/test/metaprogramming/MacroExpressionTest.groovy
@@ -19,6 +19,7 @@
 
 package metaprogramming
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.ast.ASTNode
 import org.codehaus.groovy.ast.ClassHelper
 import org.codehaus.groovy.ast.ClassNode
@@ -32,19 +33,14 @@ import org.codehaus.groovy.control.SourceUnit
 import org.codehaus.groovy.transform.AbstractASTTransformation
 import org.codehaus.groovy.transform.GroovyASTTransformation
 import org.codehaus.groovy.transform.GroovyASTTransformationClass
-import org.junit.jupiter.api.Test
 
 import java.lang.annotation.ElementType
 import java.lang.annotation.Retention
 import java.lang.annotation.RetentionPolicy
 import java.lang.annotation.Target
 
-import static groovy.test.GroovyAssert.assertScript
-import static org.objectweb.asm.Opcodes.ACC_PUBLIC
-
-class MacroExpressionTest {
+class MacroExpressionTest extends GroovyTestCase {
 
-    @Test
     void testCreateExpressions() {
         assertScript '''
         // add::addgettwosample[]
@@ -68,6 +64,8 @@ class MacroExpressionTest {
 @interface AddGetTwo { }
 // end::addgettwoannotation[]
 
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC
+
 // tag::addgettwotransformation[]
 @GroovyASTTransformation(phase = CompilePhase.INSTRUCTION_SELECTION)
 class AddGetTwoASTTransformation extends AbstractASTTransformation {
diff --git a/src/spec/test/metaprogramming/MacroStatementTest.groovy b/src/spec/test/metaprogramming/MacroStatementTest.groovy
index 81a2233441..2574758f27 100644
--- a/src/spec/test/metaprogramming/MacroStatementTest.groovy
+++ b/src/spec/test/metaprogramming/MacroStatementTest.groovy
@@ -19,12 +19,8 @@
 
 package metaprogramming
 
-
-import org.codehaus.groovy.ast.ASTNode
-import org.codehaus.groovy.ast.ClassHelper
-import org.codehaus.groovy.ast.ClassNode
-import org.codehaus.groovy.ast.MethodNode
-import org.codehaus.groovy.ast.Parameter
+import groovy.test.GroovyTestCase
+import org.codehaus.groovy.ast.*
 import org.codehaus.groovy.ast.expr.ConstantExpression
 import org.codehaus.groovy.ast.stmt.ReturnStatement
 import org.codehaus.groovy.control.CompilePhase
@@ -32,19 +28,14 @@ import org.codehaus.groovy.control.SourceUnit
 import org.codehaus.groovy.transform.AbstractASTTransformation
 import org.codehaus.groovy.transform.GroovyASTTransformation
 import org.codehaus.groovy.transform.GroovyASTTransformationClass
-import org.junit.jupiter.api.Test
 
 import java.lang.annotation.ElementType
 import java.lang.annotation.Retention
 import java.lang.annotation.RetentionPolicy
 import java.lang.annotation.Target
 
-import static groovy.test.GroovyAssert.assertScript
-import static org.objectweb.asm.Opcodes.ACC_PUBLIC
-
-class MacroStatementTest {
+class MacroStatementTest extends GroovyTestCase {
 
-    @Test
     void testOlderASTTransformation() {
         assertScript '''
         package metaprogramming
@@ -58,7 +49,6 @@ class MacroStatementTest {
         '''
     }
 
-    @Test
     void testOlderASTTransformationWithMacros() {
         assertScript '''
         package metaprogramming
@@ -80,6 +70,8 @@ class MacroStatementTest {
 @interface AddMethod { }
 // end::addmethodannotation[]
 
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC
+
 // tag::addmethodtransformationwithoutmacro[]
 @GroovyASTTransformation(phase = CompilePhase.INSTRUCTION_SELECTION)
 class AddMethodASTTransformation extends AbstractASTTransformation {
diff --git a/src/spec/test/metaprogramming/MacroVariableSubstitutionTest.groovy b/src/spec/test/metaprogramming/MacroVariableSubstitutionTest.groovy
index 116819a35a..79283c1831 100644
--- a/src/spec/test/metaprogramming/MacroVariableSubstitutionTest.groovy
+++ b/src/spec/test/metaprogramming/MacroVariableSubstitutionTest.groovy
@@ -19,13 +19,8 @@
 
 package metaprogramming
 
-
-import org.codehaus.groovy.ast.ASTNode
-import org.codehaus.groovy.ast.ClassHelper
-import org.codehaus.groovy.ast.ClassNode
-import org.codehaus.groovy.ast.FieldNode
-import org.codehaus.groovy.ast.MethodNode
-import org.codehaus.groovy.ast.Parameter
+import groovy.test.GroovyTestCase
+import org.codehaus.groovy.ast.*
 import org.codehaus.groovy.ast.expr.VariableExpression
 import org.codehaus.groovy.ast.stmt.BlockStatement
 import org.codehaus.groovy.ast.tools.GeneralUtils
@@ -34,19 +29,14 @@ import org.codehaus.groovy.control.SourceUnit
 import org.codehaus.groovy.transform.AbstractASTTransformation
 import org.codehaus.groovy.transform.GroovyASTTransformation
 import org.codehaus.groovy.transform.GroovyASTTransformationClass
-import org.junit.jupiter.api.Test
 
 import java.lang.annotation.ElementType
 import java.lang.annotation.Retention
 import java.lang.annotation.RetentionPolicy
 import java.lang.annotation.Target
 
-import static groovy.test.GroovyAssert.assertScript
-import static org.objectweb.asm.Opcodes.ACC_PUBLIC
-
-class MacroVariableSubstitutionTest {
+class MacroVariableSubstitutionTest extends GroovyTestCase {
 
-    @Test
     void testVariableSubstitution() {
         assertScript '''
         package metaprogramming
@@ -69,6 +59,8 @@ class MacroVariableSubstitutionTest {
 @interface MD5 { }
 // end::md5annotation[]
 
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC
+
 // tag::md5transformation[]
 @GroovyASTTransformation(phase = CompilePhase.CANONICALIZATION)
 class MD5ASTTransformation extends AbstractASTTransformation {
diff --git a/src/spec/test/metaprogramming/MethodPropertyMissingTest.groovy b/src/spec/test/metaprogramming/MethodPropertyMissingTest.groovy
index ce3b562960..663a8bffc3 100644
--- a/src/spec/test/metaprogramming/MethodPropertyMissingTest.groovy
+++ b/src/spec/test/metaprogramming/MethodPropertyMissingTest.groovy
@@ -18,14 +18,10 @@
  */
 package metaprogramming
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
+class MethodPropertyMissingTest extends GroovyTestCase {
 
-
-class MethodPropertyMissingTest {
-
-    @Test
     void testMethodMissing() {
         assertScript '''
             //tag::method_missing_simple[]
@@ -41,7 +37,6 @@ class MethodPropertyMissingTest {
         '''
     }
 
-    @Test
     void testPropertyMissingGetter() {
         assertScript '''
             //tag::property_missing_getter[]
@@ -54,7 +49,6 @@ class MethodPropertyMissingTest {
         '''
     }
 
-    @Test
     void testPropertyMissingGetterSetter() {
         assertScript '''
             //tag::property_missing_getter_setter[]
diff --git a/src/spec/test/metaprogramming/StaticPropertyMissingAndMethodMissingTest.groovy b/src/spec/test/metaprogramming/StaticPropertyMissingAndMethodMissingTest.groovy
index 6893a35a55..57c4a6f8c5 100644
--- a/src/spec/test/metaprogramming/StaticPropertyMissingAndMethodMissingTest.groovy
+++ b/src/spec/test/metaprogramming/StaticPropertyMissingAndMethodMissingTest.groovy
@@ -18,14 +18,10 @@
  */
 package metaprogramming
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
+class StaticPropertyMissingAndMethodMissingTest extends GroovyTestCase {
 
-
-class StaticPropertyMissingAndMethodMissingTest {
-
-    @Test
     void testStaticMethodMissing() {
         assertScript '''
             // tag::static_method_missing[]
@@ -40,7 +36,6 @@ class StaticPropertyMissingAndMethodMissingTest {
         '''
     }
 
-    @Test
     void testStaticPropertyMissing() {
         assertScript '''
             // tag::static_property_missing[]
diff --git a/src/spec/test/objectorientation/MethodsTest.groovy b/src/spec/test/objectorientation/MethodsTest.groovy
index ec905112a7..3f2229428c 100644
--- a/src/spec/test/objectorientation/MethodsTest.groovy
+++ b/src/spec/test/objectorientation/MethodsTest.groovy
@@ -18,14 +18,10 @@
  */
 package objectorientation
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
-import static groovy.test.GroovyAssert.shouldFail
+class MethodsTest extends GroovyTestCase {
 
-class MethodsTest {
-
-    @Test
     void testMethodDefinition() {
         assertScript '''
             // tag::method_definition[]
@@ -37,7 +33,6 @@ class MethodsTest {
         '''
     }
 
-    @Test
     void testNamedArguments() {
         assertScript '''
             // tag::named_arguments[]
@@ -47,7 +42,6 @@ class MethodsTest {
         '''
     }
 
-    @Test
     void testNamedArgumentsAlongWithOtherArguments() {
         assertScript '''
             // tag::named_arguments_with_additional_arguments[]
@@ -58,7 +52,6 @@ class MethodsTest {
         '''
     }
 
-    @Test
     void testFailedNamedArgumentsAlongWithOtherArguments() {
         shouldFail '''
             // tag::failed_named_arguments_with_additional_arguments[]
@@ -68,7 +61,6 @@ class MethodsTest {
         '''
     }
 
-    @Test
     void testExplicitNamedArgumentsAlongWithOtherArguments() {
         assertScript '''
             // tag::explicit_named_arguments_with_additional_arguments[]
@@ -78,7 +70,6 @@ class MethodsTest {
         '''
     }
 
-    @Test
     void testDefaultArguments() {
         assertScript '''
             // tag::default_arguments[]
@@ -98,7 +89,6 @@ class MethodsTest {
         '''
     }
 
-    @Test
     void testVarargs() {
         assertScript '''
             // tag::varargs_example[]
@@ -110,7 +100,6 @@ class MethodsTest {
         '''
     }
 
-    @Test
     void testVarargsArrayNotation() {
         assertScript '''
             // tag::varargs_array_notation[]
@@ -122,7 +111,6 @@ class MethodsTest {
         '''
     }
 
-    @Test
     void testVarargsNullParameter() {
         assertScript '''
             // tag::varargs_null_parameter[]
@@ -132,7 +120,6 @@ class MethodsTest {
         '''
     }
 
-    @Test
     void testVarargsArrayParameter() {
         assertScript '''
             // tag::varargs_array_parameter[]
@@ -143,7 +130,6 @@ class MethodsTest {
         '''
     }
 
-    @Test
     void testVarargsMethodOverloading() {
         assertScript '''
             // tag::varargs_method_overloading[]
@@ -156,10 +142,9 @@ class MethodsTest {
         '''
     }
 
-    @Test
     void testIdiomaticMethodDeclaration() {
-        assertScript '''            import static groovy.test.GroovyAssert.shouldFail
-
+        assertScript '''
+            import static groovy.test.GroovyAssert.shouldFail
             // tag::idiomatic_method_declaration[]
             def badRead() {
                 new File('doesNotExist.txt').text
@@ -172,7 +157,6 @@ class MethodsTest {
         '''
     }
 
-    @Test
     void testMethodDeclarationWithCheckedException() {
         assertScript '''
             import static groovy.test.GroovyAssert.shouldFail
@@ -188,7 +172,6 @@ class MethodsTest {
         '''
     }
 
-    @Test
     void testMultiMethods() {
         assertScript '''
             // tag::multi_methods[]
diff --git a/src/spec/test/semantics/GPathTest.groovy b/src/spec/test/semantics/GPathTest.groovy
index 86ae76d78c..2afeff46a6 100644
--- a/src/spec/test/semantics/GPathTest.groovy
+++ b/src/spec/test/semantics/GPathTest.groovy
@@ -18,16 +18,15 @@
  */
 package semantics
 
+import groovy.test.GroovyTestCase
 import groovy.xml.XmlSlurper
-import org.junit.jupiter.api.Test
 
-class GPathTest {
+class GPathTest extends GroovyTestCase {
 
     //tag::gpath_on_reflection_1[]
     void aMethodFoo() { println "This is aMethodFoo." } // <0>
     //end::gpath_on_reflection_1[]
 
-    @Test
     void testGPathOnReflection() {
         //tag::gpath_on_reflection_2[]
         assert ['aMethodFoo'] == this.class.methods.name.grep(~/.*Foo/)
@@ -40,21 +39,18 @@ class GPathTest {
     void aSecondMethodBar() { println "This is aSecondMethodBar." } // <3>
     //end::gpath_on_reflection_3[]
 
-    @Test
     void testGPathOnReflectionWithBarMethods() {
         //tag::gpath_on_reflection_4[]
         assert ['aMethodBar', 'aSecondMethodBar'] as Set == this.class.methods.name.grep(~/.*Bar/) as Set
         //end::gpath_on_reflection_4[]
     }
 
-    @Test
     void testGPathArrayAccess() {
         //tag::gpath_array_access_1[]
         assert 'aSecondMethodBar' == this.class.methods.name.grep(~/.*Bar/).sort()[1]
         //end::gpath_array_access_1[]
     }
 
-    @Test
     void testGPathOnXml() {
         //tag::gpath_on_xml_1[]
         def xmlText = """
diff --git a/src/spec/test/semantics/PowerAssertTest.groovy b/src/spec/test/semantics/PowerAssertTest.groovy
index a74bc47cb6..85d5b6c687 100644
--- a/src/spec/test/semantics/PowerAssertTest.groovy
+++ b/src/spec/test/semantics/PowerAssertTest.groovy
@@ -18,7 +18,7 @@
  */
 package semantics
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static asciidoctor.Utils.stripAsciidocMarkup
 import static groovy.test.GroovyAssert.shouldFail
diff --git a/src/spec/test/semantics/TheGroovyTruthTest.groovy b/src/spec/test/semantics/TheGroovyTruthTest.groovy
index fef181016c..a9cdcd3560 100644
--- a/src/spec/test/semantics/TheGroovyTruthTest.groovy
+++ b/src/spec/test/semantics/TheGroovyTruthTest.groovy
@@ -18,14 +18,10 @@
  */
 package semantics
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
+class TheGroovyTruthTest extends GroovyTestCase {
 
-
-class TheGroovyTruthTest {
-
-    @Test
     void testGroovyTruth() {
         // tag::boolean_truth[]
         assert true
@@ -78,7 +74,6 @@ class TheGroovyTruthTest {
         // end::object_truth[]
     }
 
-    @Test
     void testAsBoolean() {
         assertScript '''
             // tag::asBoolean_object[]
@@ -86,7 +81,7 @@ class TheGroovyTruthTest {
                 String name
 
                 boolean asBoolean(){
-                    name == 'green' ? true : false
+                    name == 'green' ? true : false 
                 }
             }
             // end::asBoolean_object[]
diff --git a/src/spec/test/testingguide/GDKMethodTests.groovy b/src/spec/test/testingguide/GDKMethodTests.groovy
index d9aa55d0fa..e7b589244b 100644
--- a/src/spec/test/testingguide/GDKMethodTests.groovy
+++ b/src/spec/test/testingguide/GDKMethodTests.groovy
@@ -18,13 +18,11 @@
  */
 package testingguide
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class GDKMethodTests {
+class GDKMethodTests extends GroovyTestCase {
 
     // tag::combinations[]
-    @Test
     void testCombinations() {
         def combinations = [[2, 3],[4, 5, 6]].combinations()
         assert combinations == [[2, 4], [3, 4], [2, 5], [3, 5], [2, 6], [3, 6]]
@@ -32,7 +30,6 @@ class GDKMethodTests {
     // end::combinations[]
 
     // tag::each_combination[]
-    @Test
     void testEachCombination() {
         [[2, 3],[4, 5, 6]].eachCombination { println it[0] + it[1] }
     }
diff --git a/src/spec/test/testingguide/GroovyTestCaseExampleTests.groovy b/src/spec/test/testingguide/GroovyTestCaseExampleTests.groovy
index 937a915ec3..56345382b7 100644
--- a/src/spec/test/testingguide/GroovyTestCaseExampleTests.groovy
+++ b/src/spec/test/testingguide/GroovyTestCaseExampleTests.groovy
@@ -18,26 +18,17 @@
  */
 package testingguide
 
+import groovy.test.GroovyTestCase
 import groovy.test.NotYetImplemented
-import org.junit.jupiter.api.Test
 
-import static groovy.test.GroovyAssert.assertScript
-import static groovy.test.GroovyAssert.shouldFail
-import static org.junit.jupiter.api.Assertions.assertEquals
-import static org.junit.jupiter.api.Assertions.assertNotNull
-import static org.junit.jupiter.api.Assertions.assertNull
-import static org.junit.jupiter.api.Assertions.assertSame
-import static org.junit.jupiter.api.Assertions.assertTrue
-
-class GroovyTestCaseExampleTests {
+class GroovyTestCaseExampleTests extends GroovyTestCase {
 
 /*  // tag::assertions[]
-class MyTestCase {
+class MyTestCase extends GroovyTestCase {
     // end::assertions[]
 */
     // tag::assertions[]
 
-    @Test
     void testAssertions() {
         assertTrue(1 == 1)
         assertEquals("test", "test")
@@ -57,7 +48,6 @@ class MyTestCase {
 */
 
     // tag::assertScript[]
-    @Test
     void testScriptAssertions() {
         assertScript '''
             def x = 1
@@ -69,7 +59,6 @@ class MyTestCase {
     // end::assertScript[]
 
     // tag::should_fail_without_class[]
-    @Test
     void testInvalidIndexAccess1() {
         def numbers = [1,2,3,4]
         shouldFail {
@@ -79,7 +68,6 @@ class MyTestCase {
     // end::should_fail_without_class[]
 
     // tag::should_fail_with_class[]
-    @Test
     void testInvalidIndexAccess2() {
         def numbers = [1,2,3,4]
         shouldFail IndexOutOfBoundsException, {
@@ -89,29 +77,27 @@ class MyTestCase {
     // end::should_fail_with_class[]
 
     // tag::should_fail_with_msg[]
-    @Test
     void testInvalidIndexAccess3() {
         def numbers = [1,2,3,4]
         def msg = shouldFail IndexOutOfBoundsException, {
             numbers.get(4)
         }
-        assert msg.message.contains('Index: 4, Size: 4') ||
-            msg.message.contains('Index 4 out-of-bounds for length 4') ||
-            msg.message.contains('Index 4 out of bounds for length 4')
+        assert msg.contains('Index: 4, Size: 4') ||
+            msg.contains('Index 4 out-of-bounds for length 4') ||
+            msg.contains('Index 4 out of bounds for length 4')
     }
     // end::should_fail_with_msg[]
 
     // tag::not_yet_implemented[]
-    @NotYetImplemented                    // <1>
-    @Test
     void testNotYetImplemented1() {
+        if (notYetImplemented()) return   // <1>
+
         assert 1 == 2                     // <2>
     }
     // end::not_yet_implemented[]
 
     // tag::not_yet_implemented_ast[]
     @NotYetImplemented
-    @Test
     void testNotYetImplemented2() {
         assert 1 == 2
     }
diff --git a/src/spec/test/testingguide/JUnit4ExampleTests.groovy b/src/spec/test/testingguide/JUnit4ExampleTests.groovy
index 4e12e3adec..dfb4cf7f7f 100644
--- a/src/spec/test/testingguide/JUnit4ExampleTests.groovy
+++ b/src/spec/test/testingguide/JUnit4ExampleTests.groovy
@@ -18,7 +18,7 @@
  */
 package testingguide
 // tag::junit4_example[]
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.shouldFail
 
diff --git a/src/spec/test/testingguide/MockingExampleTests.groovy b/src/spec/test/testingguide/MockingExampleTests.groovy
index 798acc5585..924c77d43f 100644
--- a/src/spec/test/testingguide/MockingExampleTests.groovy
+++ b/src/spec/test/testingguide/MockingExampleTests.groovy
@@ -20,7 +20,7 @@ package testingguide
 
 import groovy.mock.interceptor.MockFor
 import groovy.mock.interceptor.StubFor
-import org.junit.jupiter.api.AfterEach
+import groovy.test.GroovyTestCase
 
 // tag::map_coercion[]
         class TranslationService {
@@ -57,13 +57,13 @@ import org.junit.jupiter.api.AfterEach
 
 // end::emc2[]
 
-class MockingExampleTests {
+class MockingExampleTests extends GroovyTestCase {
 
-    @AfterEach
     void tearDown() {
         GroovySystem.metaClassRegistry.setMetaClass(TranslationService, null)
         GroovySystem.metaClassRegistry.setMetaClass(BaseService, null)
         GroovySystem.metaClassRegistry.setMetaClass(Book, null)
+        super.tearDown()
     }
 
     void testMapCoercion() {
diff --git a/src/spec/test/typing/OptionalTypingTest.groovy b/src/spec/test/typing/OptionalTypingTest.groovy
index 258be51cb7..4f3fa726f3 100644
--- a/src/spec/test/typing/OptionalTypingTest.groovy
+++ b/src/spec/test/typing/OptionalTypingTest.groovy
@@ -18,14 +18,10 @@
  */
 package typing
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
+class OptionalTypingTest extends GroovyTestCase {
 
-
-class OptionalTypingTest {
-
-    @Test
     void testOptionalTypingInVariableDeclaration() {
         assertScript '''
             // tag::optionaltyping_var[]
@@ -40,7 +36,6 @@ class OptionalTypingTest {
             // end::optionaltyping_var_def[]
         '''
     }
-    @Test
     void testOptionalTypingInMethodParameter() {
         assertScript '''
             // tag::optionaltyping_orig[]
diff --git a/src/spec/test/typing/TypeCheckingExtensionSpecTest.groovy b/src/spec/test/typing/TypeCheckingExtensionSpecTest.groovy
index 6653174c1b..67f8bbe8e4 100644
--- a/src/spec/test/typing/TypeCheckingExtensionSpecTest.groovy
+++ b/src/spec/test/typing/TypeCheckingExtensionSpecTest.groovy
@@ -19,20 +19,17 @@
 package typing
 
 import groovy.test.GroovyAssert
+import groovy.test.GroovyTestCase
 import groovy.transform.TypeChecked
 import groovy.transform.stc.ClosureParams
 import groovy.transform.stc.SimpleType
 import groovy.xml.MarkupBuilder
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
-import org.junit.jupiter.api.Test
 
 import static asciidoctor.Utils.stripAsciidocMarkup
-import static groovy.test.GroovyAssert.assertScript
-import static groovy.test.GroovyAssert.shouldFail
 
-final class TypeCheckingExtensionSpecTest {
+final class TypeCheckingExtensionSpecTest extends GroovyTestCase {
 
-    @Test
     void testIntro() {
         def out = new PrintWriter(new ByteArrayOutputStream())
         // tag::intro_stc_extensions[]
@@ -48,21 +45,18 @@ final class TypeCheckingExtensionSpecTest {
         // end::intro_stc_extensions[]
     }
 
-    @Test
     void testSetup() {
         assertScriptWithExtension 'setup.groovy', '''
             1+1
         '''
     }
 
-    @Test
     void testFinish() {
         assertScriptWithExtension 'finish.groovy', '''
             1+1
         '''
     }
 
-    @Test
     void testUnresolvedVariable() {
         assertScriptWithExtension 'unresolvedvariable.groovy', '''
             assert people.size() == 2
@@ -71,7 +65,6 @@ final class TypeCheckingExtensionSpecTest {
         }
     }
 
-    @Test
     void testUnresolvedProperty() {
         use (SpecSupport) {
             assertScriptWithExtension 'unresolvedproperty.groovy', '''
@@ -80,7 +73,6 @@ final class TypeCheckingExtensionSpecTest {
         }
     }
 
-    @Test
     void testUnresolvedAttribute() {
         try {
             assertScriptWithExtension 'unresolvedattribute.groovy', '''
@@ -92,7 +84,6 @@ final class TypeCheckingExtensionSpecTest {
         }
     }
 
-    @Test
     void testBeforeMethodCall() {
         try {
             assertScriptWithExtension 'beforemethodcall.groovy', '''
@@ -104,7 +95,6 @@ final class TypeCheckingExtensionSpecTest {
         }
     }
 
-    @Test
     void testAfterMethodCall() {
         try {
             assertScriptWithExtension 'aftermethodcall.groovy', '''
@@ -116,7 +106,6 @@ final class TypeCheckingExtensionSpecTest {
         }
     }
 
-    @Test
     void testOnMethodSelection() {
         try {
             assertScriptWithExtension 'onmethodselection.groovy', '''
@@ -130,7 +119,6 @@ final class TypeCheckingExtensionSpecTest {
         }
     }
 
-    @Test
     void testMethodNotFound() {
         use (SpecSupport) {
             assertScriptWithExtension 'methodnotfound.groovy', '''
@@ -139,7 +127,6 @@ final class TypeCheckingExtensionSpecTest {
         }
     }
 
-    @Test
     void testBeforeVisitMethod() {
         use (SpecSupport) {
             assertScriptWithExtension 'beforevisitmethod.groovy', '''
@@ -151,7 +138,6 @@ final class TypeCheckingExtensionSpecTest {
         }
     }
 
-    @Test
     void testAfterVisitMethod() {
         try {
             assertScriptWithExtension 'aftervisitmethod.groovy', '''
@@ -168,7 +154,6 @@ final class TypeCheckingExtensionSpecTest {
         }
     }
 
-    @Test
     void testBeforeVisitClass() {
         try {
             assertScriptWithExtension 'beforevisitclass.groovy', '''
@@ -181,7 +166,6 @@ final class TypeCheckingExtensionSpecTest {
         }
     }
 
-    @Test
     void testAfterVisitClass() {
         try {
             assertScriptWithExtension 'aftervisitclass.groovy', '''
@@ -194,7 +178,6 @@ final class TypeCheckingExtensionSpecTest {
         }
     }
 
-    @Test
     void testIncompatibleAssignment() {
         assertScriptWithExtension 'incompatibleassignment.groovy', '''
             import groovy.transform.TypeChecked
@@ -216,7 +199,6 @@ final class TypeCheckingExtensionSpecTest {
         '''
     }
 
-    @Test
     void testIncompatibleReturnType() {
         assertScriptWithExtension 'incompatiblereturntype.groovy', '''
             Closure<Date> c = { '1' }
@@ -224,7 +206,6 @@ final class TypeCheckingExtensionSpecTest {
         '''
     }
 
-    @Test
     void testAmbiguousMethods() {
         def err = shouldFail {
             assertScriptWithExtension 'ambiguousmethods.groovy', '''
@@ -234,10 +215,9 @@ final class TypeCheckingExtensionSpecTest {
                 assert foo(null) == 2
             '''
         }
-        assert err.message =~ /Cannot resolve which method to invoke for \[null\] due to overlapping prototypes/
+        assert err =~ /Cannot resolve which method to invoke for \[null\] due to overlapping prototypes/
     }
 
-    @Test
     void testSupportMethods() {
         assertScriptWithExtension 'selfcheck.groovy', '''
             class Foo {}
@@ -245,7 +225,6 @@ final class TypeCheckingExtensionSpecTest {
         '''
     }
 
-    @Test
     void testNewMethod() {
         assertScriptWithExtension 'newmethod.groovy','''
             class Foo {
@@ -256,7 +235,6 @@ final class TypeCheckingExtensionSpecTest {
         '''
     }
 
-    @Test
     void testScopingMethods() {
         assertScriptWithExtension 'scoping.groovy','''
             1+1
@@ -268,7 +246,6 @@ final class TypeCheckingExtensionSpecTest {
 
     //--------------------------------------------------------------------------
 
-    @Test
     void testRobotExample() {
         def err = shouldFail(MultipleCompilationErrorsException, '''import groovy.transform.TypeChecked
 import org.codehaus.groovy.control.CompilerConfiguration
@@ -292,14 +269,13 @@ shell.setVariable('robot', robot)
 shell.evaluate(script)                                      // <3>
 // end::example_robot_setup[]
 ''')
-        assert err.message.contains(stripAsciidocMarkup('''
+        assert err.contains(stripAsciidocMarkup('''
 // tag::example_robot_expected_err[]
 [Static type checking] - The variable [robot] is undeclared.
 // end::example_robot_expected_err[]
 '''))
     }
 
-    @Test
     void testRobotExampleFixed() {
         assertScript '''import groovy.transform.TypeChecked
 import org.codehaus.groovy.control.CompilerConfiguration
@@ -325,7 +301,6 @@ shell.evaluate(script)
 '''
     }
 
-    @Test
     void testRobotExamplePassWithCompileStatic() {
         assertScript '''import groovy.transform.CompileStatic
 import org.codehaus.groovy.control.CompilerConfiguration
@@ -351,7 +326,6 @@ shell.evaluate(script)
 '''
     }
 
-    @Test
     void testRobotExampleDelegatingScript() {
         assertScript '''import groovy.transform.CompileStatic
 import org.codehaus.groovy.control.CompilerConfiguration
@@ -375,7 +349,6 @@ runner.run()                                                // <4>
 '''
     }
 
-    @Test
     void testRobotExampleFailsWithCompileStatic() {
         def err = GroovyAssert.shouldFail '''import groovy.transform.CompileStatic
 import org.codehaus.groovy.control.CompilerConfiguration
@@ -408,7 +381,6 @@ java.lang.NoSuchMethodError: java.lang.Object.move()Ltyping/Robot;
 ''')) || err.contains('java.lang.NoSuchMethodError: \'typing.Robot java.lang.Object.move()\'')
     }
 
-    @Test
     void testRobotExamplePassesWithCompileStatic() {
         assertScript '''import groovy.transform.CompileStatic
 import org.codehaus.groovy.control.CompilerConfiguration
@@ -433,7 +405,6 @@ runner.run()
 '''
     }
 
-    @Test
     void testPrecompiledExtensions() {
         assertScript '''import groovy.transform.TypeChecked
 import org.codehaus.groovy.control.CompilerConfiguration
@@ -546,47 +517,38 @@ assert expected == result
 """
     }
 
-    @Test
     void testDelegateResolutionToPropertyWhenReadingUsingDelegateOnly() {
         doDelegateResolutionForPropertyReadTest("Closure.DELEGATE_ONLY", "delegate")
     }
 
-    @Test
     void testDelegateResolutionToPropertyWhenReadingUsingDelegateFirst() {
         doDelegateResolutionForPropertyReadTest("Closure.DELEGATE_FIRST", "delegate")
     }
 
-    @Test
     void testDelegateResolutionToPropertyWhenReadingUsingOwnerOnly() {
         doDelegateResolutionForPropertyReadTest("Closure.OWNER_ONLY", "owner")
     }
 
-    @Test
     void testDelegateResolutionToPropertyWhenReadingUsingOwnerFirst() {
         doDelegateResolutionForPropertyReadTest("Closure.OWNER_FIRST", "owner")
     }
 
-    @Test
     void testDelegateResolutionToPropertyWhenWritingUsingDelegateOnly() {
         doDelegateResolutionForPropertyWriteTest("Closure.DELEGATE_ONLY", "delegate")
     }
 
-    @Test
     void testDelegateResolutionToPropertyWhenWritingUsingDelegateFirst() {
         doDelegateResolutionForPropertyWriteTest("Closure.DELEGATE_FIRST", "delegate")
     }
 
-    @Test
     void testDelegateResolutionToPropertyWhenWritingUsingOwnerOnly() {
         doDelegateResolutionForPropertyWriteTest("Closure.OWNER_ONLY", "owner")
     }
 
-    @Test
     void testDelegateResolutionToPropertyWhenWritingUsingOwnerFirst() {
         doDelegateResolutionForPropertyWriteTest("Closure.OWNER_FIRST", "owner")
     }
 
-    @Test
     void testDelegateResolutionToPropertyWhenWritingInsideWith() {
         // Failing example provided by Jan Hackel (@jhunovis) in groovy slack
         // https://groovy-community.slack.com/files/U9CM8G6AJ/FAR1PJT1U/behavior_of__with__and___compilestatic.groovy
diff --git a/src/spec/test/typing/TypeCheckingJavaTest.java b/src/spec/test/typing/TypeCheckingJavaTest.java
index 5ec96b25ff..27c35165f9 100644
--- a/src/spec/test/typing/TypeCheckingJavaTest.java
+++ b/src/spec/test/typing/TypeCheckingJavaTest.java
@@ -18,8 +18,8 @@
  */
 package typing;
 
-import org.junit.jupiter.api.Test;
-import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
 
 public class TypeCheckingJavaTest {
     @Test
diff --git a/src/test/groovy/NoPackageTest.groovy b/src/test/groovy/NoPackageTest.groovy
index 78d02277fb..c37ddad9ab 100644
--- a/src/test/groovy/NoPackageTest.groovy
+++ b/src/test/groovy/NoPackageTest.groovy
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 final class NoPackageTest {
     @Test
diff --git a/src/test/groovy/bugs/AmbiguousListOrMethodTest.groovy b/src/test/groovy/bugs/AmbiguousListOrMethodTest.groovy
index c1c1494669..28d19e7f7f 100644
--- a/src/test/groovy/bugs/AmbiguousListOrMethodTest.groovy
+++ b/src/test/groovy/bugs/AmbiguousListOrMethodTest.groovy
@@ -18,14 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.shouldFail
+class AmbiguousListOrMethodTest extends GroovyTestCase {
 
-
-class AmbiguousListOrMethodTest {
-
-    @Test
     void testLocalVariableVersion() {
         def foo = [3, 2, 3]
 
@@ -33,14 +29,12 @@ class AmbiguousListOrMethodTest {
         assert val == 3
     }
 
-    @Test
     void testUndefinedPropertyVersion() {
         shouldFail(MissingPropertyException) {
             def val = this.foo [0]
         }
     }
 
-    @Test
     void testMethodCallVersion() {
         def val = foo([0])
         assert val == 1
@@ -55,7 +49,6 @@ class AmbiguousListOrMethodTest {
         return myList.size()
     }
 
-    @Test
     void testCanFindCorrectMethod() {
         def e = new Example()
         assert e["", ""] == 2
diff --git a/src/test/groovy/bugs/AsBoolBug.groovy b/src/test/groovy/bugs/AsBoolBug.groovy
index 4be2b5112a..66574a3af7 100644
--- a/src/test/groovy/bugs/AsBoolBug.groovy
+++ b/src/test/groovy/bugs/AsBoolBug.groovy
@@ -18,17 +18,15 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
+import groovy.test.GroovyTestCase
 
 /**
  * Test to fix the Jira issues GROOVY-810 and GROOVY-811.
  * Test of "string as Boolean" against the issue GROOVY-812.
  */
 
-public class AsBoolBug {
+public class AsBoolBug extends GroovyTestCase {
 
-    @Test
     void testMapAsBool() {
         def a = ["A":123]
         assert a as Boolean == true
@@ -36,7 +34,6 @@ public class AsBoolBug {
         assert a as Boolean == false
     }
 
-    @Test
     void testListAsBool() {
         def b = [123]
         assert b as Boolean == true
@@ -54,7 +51,6 @@ public class AsBoolBug {
     // it has already been decided to handle string-to-boolean conversions
     // differently. Commented out temporarily on 10 May 2005.
     // This is a test case against GROOVY-812
-    @Test
     void testStringAsBool() {
         def c = "false"
         assert c as Boolean == true
diff --git a/src/test/groovy/bugs/AssignmentInsideExpressionBug.groovy b/src/test/groovy/bugs/AssignmentInsideExpressionBug.groovy
index 2b46946fd6..cf32603148 100644
--- a/src/test/groovy/bugs/AssignmentInsideExpressionBug.groovy
+++ b/src/test/groovy/bugs/AssignmentInsideExpressionBug.groovy
@@ -18,16 +18,12 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
-import static org.junit.jupiter.api.Assertions.fail
-
+import groovy.test.GroovyTestCase
 
 /**
  */
-class AssignmentInsideExpressionBug {
+class AssignmentInsideExpressionBug extends GroovyTestCase {
 
-    @Test
     void testBug() {
         def x
         if ((x = someMethod()) != null) {
diff --git a/src/test/groovy/bugs/AttributeSetExpressionBug.groovy b/src/test/groovy/bugs/AttributeSetExpressionBug.groovy
index 48a552963f..58876b20a4 100644
--- a/src/test/groovy/bugs/AttributeSetExpressionBug.groovy
+++ b/src/test/groovy/bugs/AttributeSetExpressionBug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class AttributeSetExpressionBug {
-    @Test
+class AttributeSetExpressionBug extends GroovyTestCase {
     void testAttributeSetAccess() {
         def a = new HasStaticFieldSomeClass()
         a.name = a.name * 3
diff --git a/src/test/groovy/bugs/AutoboxingOfComparisonsBug.groovy b/src/test/groovy/bugs/AutoboxingOfComparisonsBug.groovy
index e230511928..f2e8dfa252 100644
--- a/src/test/groovy/bugs/AutoboxingOfComparisonsBug.groovy
+++ b/src/test/groovy/bugs/AutoboxingOfComparisonsBug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class AutoboxingOfComparisonsBug {
-    @Test
+class AutoboxingOfComparisonsBug extends GroovyTestCase {
     void testBug() {
         def y = true
         def x = y == true
diff --git a/src/test/groovy/bugs/BadLineNumberOnExceptionBugTest.groovy b/src/test/groovy/bugs/BadLineNumberOnExceptionBugTest.groovy
index a675f684c5..bdc72c0b44 100644
--- a/src/test/groovy/bugs/BadLineNumberOnExceptionBugTest.groovy
+++ b/src/test/groovy/bugs/BadLineNumberOnExceptionBugTest.groovy
@@ -18,10 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.assertScript
-
+import groovy.test.GroovyTestCase
 
 /**
  * Ensure that the correct line information is reported when an exception is thrown.
@@ -30,9 +27,8 @@ import static groovy.test.GroovyAssert.assertScript
  * <li><a href="https://issues.apache.org/jira/browse/GROOVY-3067">GROOVY-3067</a></li>
  * <li><a href="https://issues.apache.org/jira/browse/GROOVY-2983">GROOVY-2983</a></li>
  */
-class BadLineNumberOnExceptionBugTest {
+class BadLineNumberOnExceptionBugTest extends GroovyTestCase {
 
-    @Test
     void testGroovy3067() {
         assertScript """
             class Foo {
@@ -57,7 +53,6 @@ class BadLineNumberOnExceptionBugTest {
         """
     }
 
-    @Test
     void testGroovy2983() {
         assertScript """
             def foo() {
diff --git a/src/test/groovy/bugs/BadScriptNameBug.groovy b/src/test/groovy/bugs/BadScriptNameBug.groovy
index ec30982b3c..e7f1948c10 100644
--- a/src/test/groovy/bugs/BadScriptNameBug.groovy
+++ b/src/test/groovy/bugs/BadScriptNameBug.groovy
@@ -18,12 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
+class BadScriptNameBug extends GroovyTestCase {
 
-class BadScriptNameBug {
-
-    @Test
     void testBug() {
         GroovyClassLoader cl = new GroovyClassLoader();
         cl.parseClass("println 'oops!'", "/script.groovy");
diff --git a/src/test/groovy/bugs/BenchmarkBug.groovy b/src/test/groovy/bugs/BenchmarkBug.groovy
index 75434bde14..8d098bc5b1 100644
--- a/src/test/groovy/bugs/BenchmarkBug.groovy
+++ b/src/test/groovy/bugs/BenchmarkBug.groovy
@@ -18,15 +18,13 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
+import groovy.test.GroovyTestCase
 
 /**
  * A little performance test
  */
-class BenchmarkBug {
+class BenchmarkBug extends GroovyTestCase {
 
-    @Test
     void testPerformance() {
         def start = System.currentTimeMillis()
 
diff --git a/src/test/groovy/bugs/BlockAsClosureBug.groovy b/src/test/groovy/bugs/BlockAsClosureBug.groovy
index 5e115d8135..cbbf48d793 100644
--- a/src/test/groovy/bugs/BlockAsClosureBug.groovy
+++ b/src/test/groovy/bugs/BlockAsClosureBug.groovy
@@ -18,12 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
+class BlockAsClosureBug extends GroovyTestCase {
 
-class BlockAsClosureBug {
-
-    @Test
     void testBug() {
         def c = 0
 
@@ -34,12 +32,10 @@ class BlockAsClosureBug {
         assert c == 9
     }
 
-    @Test
     void testStaticBug() {
         staticMethod(null)
     }
 
-    @Test
     void testNonVoidMethod() {
         foo()
     }
diff --git a/src/test/groovy/bugs/BooleanBug.groovy b/src/test/groovy/bugs/BooleanBug.groovy
index 65bcef13e1..47972c2249 100644
--- a/src/test/groovy/bugs/BooleanBug.groovy
+++ b/src/test/groovy/bugs/BooleanBug.groovy
@@ -18,16 +18,12 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.assertScript
-
+import groovy.test.GroovyTestCase
 
 /**
  */
-class BooleanBug {
+class BooleanBug extends GroovyTestCase {
 
-    @Test
     void testBug() {
         def x = new BooleanBean(name:'James', foo:true)
         def y = new BooleanBean(name:'Bob', foo:false)
@@ -38,7 +34,6 @@ class BooleanBug {
         assert y.foo
     }
 
-    @Test
     void testBug2() {
         BooleanBean bean = new BooleanBean(name:'Gromit', foo:false)
         def value = isApplicableTo(bean)
diff --git a/src/test/groovy/bugs/ByteIndexBug.groovy b/src/test/groovy/bugs/ByteIndexBug.groovy
index 1e7ac1861e..34df4f5b26 100644
--- a/src/test/groovy/bugs/ByteIndexBug.groovy
+++ b/src/test/groovy/bugs/ByteIndexBug.groovy
@@ -18,12 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class ByteIndexBug {
+class ByteIndexBug extends GroovyTestCase {
     // TODO: this tests a string with 128 nulls - is that what is intended?
-    @Test
     void testBug() {
         def sb = new StringBuffer("\"\"\"\n")
         for (j in 0..127){ // 126 is okay.
diff --git a/src/test/groovy/bugs/Bytecode2Bug.groovy b/src/test/groovy/bugs/Bytecode2Bug.groovy
index 478eec1299..21abb86fb8 100644
--- a/src/test/groovy/bugs/Bytecode2Bug.groovy
+++ b/src/test/groovy/bugs/Bytecode2Bug.groovy
@@ -18,21 +18,18 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
+import groovy.test.GroovyTestCase
 
 /**
  */
-class Bytecode2Bug {
+class Bytecode2Bug extends GroovyTestCase {
 
     Integer count = 0
 
-    @Test
     void testBytecodeBug() {
         getCollection().each { count += it }
     }
 
-    @Test
     void testTedsBytecodeBug() {
         //doTest(getCollection())
         def a = [1, 2, 3, 4]
@@ -53,7 +50,6 @@ class Bytecode2Bug {
         assert i == 5
     }
 
-    @Test
     void testTedsBytecode2Bug() {
         def m = [:]
         def i = 1
diff --git a/src/test/groovy/bugs/Bytecode3Bug.groovy b/src/test/groovy/bugs/Bytecode3Bug.groovy
index 3454a9b9fa..d1d46eae7e 100644
--- a/src/test/groovy/bugs/Bytecode3Bug.groovy
+++ b/src/test/groovy/bugs/Bytecode3Bug.groovy
@@ -18,16 +18,14 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
+import groovy.test.GroovyTestCase
 
 /**
  */
-class Bytecode3Bug {
+class Bytecode3Bug extends GroovyTestCase {
 
     def count
 
-    @Test
     void testIncrementPropertyInclosure() {
         def args = [1, 2, 3]
         def m = [:]
diff --git a/src/test/groovy/bugs/Bytecode4Bug.groovy b/src/test/groovy/bugs/Bytecode4Bug.groovy
index ddc6b7b218..8d53f56c3e 100644
--- a/src/test/groovy/bugs/Bytecode4Bug.groovy
+++ b/src/test/groovy/bugs/Bytecode4Bug.groovy
@@ -18,29 +18,25 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
+import groovy.test.GroovyTestCase
 
 /**
  */
-class Bytecode4Bug {
+class Bytecode4Bug extends GroovyTestCase {
 
     def count = 0
 
-    @Test
     void testInject() {
         def x = [1, 2, 3].inject(0) { c, s -> c += s }
         assert x == 6
     }
 
-    @Test
     void testUsingProperty() {
         count = 0
         getCollection().each { count += it }
         assert count == 10
     }
 
-    @Test
     void testUsingIncrementingProperty() {
         count = 0
         getCollection().each { count++ }
diff --git a/src/test/groovy/bugs/Bytecode5Bug.groovy b/src/test/groovy/bugs/Bytecode5Bug.groovy
index 6621fbaea7..11cae1cab6 100644
--- a/src/test/groovy/bugs/Bytecode5Bug.groovy
+++ b/src/test/groovy/bugs/Bytecode5Bug.groovy
@@ -18,14 +18,12 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
+import groovy.test.GroovyTestCase
 
 /**
  */
-class Bytecode5Bug {
+class Bytecode5Bug extends GroovyTestCase {
 
-    @Test
     void testUsingLocalVar() {
         def c = 0
         getCollection().each { c += it }
diff --git a/src/test/groovy/bugs/Bytecode6Bug.groovy b/src/test/groovy/bugs/Bytecode6Bug.groovy
index fcae72d102..b1ba984f10 100644
--- a/src/test/groovy/bugs/Bytecode6Bug.groovy
+++ b/src/test/groovy/bugs/Bytecode6Bug.groovy
@@ -18,14 +18,12 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
+import groovy.test.GroovyTestCase
 
 /**
  */
-class Bytecode6Bug {
+class Bytecode6Bug extends GroovyTestCase {
 
-    @Test
     void testPostFixReturn() {
         def i = 1
         def closure = { i++ }
@@ -35,7 +33,6 @@ class Bytecode6Bug {
         assert i == 2
     }
 
-    @Test
     void testPreFixReturn() {
         def i = 1
         def closure = { return ++i }
diff --git a/src/test/groovy/bugs/Bytecode7Bug.groovy b/src/test/groovy/bugs/Bytecode7Bug.groovy
index a23aa7bcb8..8ed36aab1c 100644
--- a/src/test/groovy/bugs/Bytecode7Bug.groovy
+++ b/src/test/groovy/bugs/Bytecode7Bug.groovy
@@ -18,14 +18,12 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
+import groovy.test.GroovyTestCase
 
 /**
  */
-class Bytecode7Bug {
+class Bytecode7Bug extends GroovyTestCase {
 
-    @Test
     void testDuplicateVariables() {
         if (true) {
             def a = 123
@@ -35,7 +33,6 @@ class Bytecode7Bug {
         }
     }
 
-    @Test
     void testDuplicateVariablesInClosures() {
         def coll = [1]
 
diff --git a/src/test/groovy/bugs/BytecodeBug.groovy b/src/test/groovy/bugs/BytecodeBug.groovy
index ff49da36db..a468baae2c 100644
--- a/src/test/groovy/bugs/BytecodeBug.groovy
+++ b/src/test/groovy/bugs/BytecodeBug.groovy
@@ -18,14 +18,12 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
+import groovy.test.GroovyTestCase
 
 /**
  */
-class BytecodeBug {
+class BytecodeBug extends GroovyTestCase {
 
-    @Test
     void testTedsBytecodeBug() {
         //def a = ['tom','dick','harry']
         def a = [1, 2, 3, 4]
diff --git a/src/test/groovy/bugs/CallingClosuresWithClosuresBug.groovy b/src/test/groovy/bugs/CallingClosuresWithClosuresBug.groovy
index 0e756430a7..cdbe7a3f4f 100644
--- a/src/test/groovy/bugs/CallingClosuresWithClosuresBug.groovy
+++ b/src/test/groovy/bugs/CallingClosuresWithClosuresBug.groovy
@@ -18,14 +18,12 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
+import groovy.test.GroovyTestCase
 
 /**
  */
-class CallingClosuresWithClosuresBug {
+class CallingClosuresWithClosuresBug extends GroovyTestCase {
 
-    @Test
     void testBug() {
         def a = {1}
         // old workaround
diff --git a/src/test/groovy/bugs/CastWhenUsingClosuresBug.groovy b/src/test/groovy/bugs/CastWhenUsingClosuresBug.groovy
index 1005abf383..34aa64f161 100644
--- a/src/test/groovy/bugs/CastWhenUsingClosuresBug.groovy
+++ b/src/test/groovy/bugs/CastWhenUsingClosuresBug.groovy
@@ -18,14 +18,12 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
+import groovy.test.GroovyTestCase
 
 /**
  */
-class CastWhenUsingClosuresBug {
+class CastWhenUsingClosuresBug extends GroovyTestCase {
 
-    @Test
     void testBug() {
         def a = 1
 
diff --git a/src/test/groovy/bugs/ChristofsPropertyBug.groovy b/src/test/groovy/bugs/ChristofsPropertyBug.groovy
index a32fd590d1..2716448268 100644
--- a/src/test/groovy/bugs/ChristofsPropertyBug.groovy
+++ b/src/test/groovy/bugs/ChristofsPropertyBug.groovy
@@ -18,16 +18,12 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.shouldFail
-
-
-class ChristofsPropertyBug {
+class ChristofsPropertyBug extends GroovyTestCase {
 
     def mixedCaseProperty
 
-    @Test
     void testChristofsPropertyBug() {
         this.mixedCaseProperty = "test"
         shouldFail({this.mixedcaseproperty = "test"})
diff --git a/src/test/groovy/bugs/ClassGeneratorFixesTest.groovy b/src/test/groovy/bugs/ClassGeneratorFixesTest.groovy
index 36dea0bd5c..928d9daa4b 100644
--- a/src/test/groovy/bugs/ClassGeneratorFixesTest.groovy
+++ b/src/test/groovy/bugs/ClassGeneratorFixesTest.groovy
@@ -18,11 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
 
-
-class ClassGeneratorFixesTest {
+class ClassGeneratorFixesTest extends GroovyTestCase {
     def count = 0;
 
     def pf(int p) {
@@ -30,12 +29,10 @@ class ClassGeneratorFixesTest {
         boolean b = true
     }
 
-    @Test
     void testPrimitvesInFunc() { // groovy-373, 453, 385, 451, 199
         pf(10)
     }
 
-    @Test
     void testPlusEqual() { // 372
         count += 1
         assert count == 1
@@ -53,7 +50,6 @@ class ClassGeneratorFixesTest {
         println x(2.3)
     }
 
-    @Test
     void testIfAndSwitchInClosure (){ // 321, 324, 412
 
         def a = 1
@@ -88,12 +84,10 @@ class ClassGeneratorFixesTest {
         return
     }
 
-    @Test
     void testReturnVoid() { // groovy-405, 387
         returnVoid()
     }
 
-    @Test
     void testBooleanValue() { // groovy-385
             /** @todo
             boolean value
diff --git a/src/test/groovy/bugs/ClassInNamedParamsBug.groovy b/src/test/groovy/bugs/ClassInNamedParamsBug.groovy
index f688f33ea8..80bf666479 100644
--- a/src/test/groovy/bugs/ClassInNamedParamsBug.groovy
+++ b/src/test/groovy/bugs/ClassInNamedParamsBug.groovy
@@ -18,12 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
+class ClassInNamedParamsBug extends GroovyTestCase {
 
-class ClassInNamedParamsBug {
-
-    @Test
     void testBug() {
         def foo = method(class:'cheese', name:'cheddar')
 
diff --git a/src/test/groovy/bugs/ClosureInClosureBug.groovy b/src/test/groovy/bugs/ClosureInClosureBug.groovy
index 3763cc5bd3..cdc1371c52 100644
--- a/src/test/groovy/bugs/ClosureInClosureBug.groovy
+++ b/src/test/groovy/bugs/ClosureInClosureBug.groovy
@@ -18,8 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
+import groovy.test.GroovyTestCase
 
 /**
  * Bug illustrating the nested closures variable scope visibility issue.
@@ -32,9 +31,8 @@ import org.junit.jupiter.api.Test
  *
  * @authour Guillaume Laforge
  */
-class ClosureInClosureBug {
+class ClosureInClosureBug extends GroovyTestCase {
 
-    @Test
     void testInvisibleVariable() {
         def text = "test "
 
diff --git a/src/test/groovy/bugs/ClosureTypedVariableBug.groovy b/src/test/groovy/bugs/ClosureTypedVariableBug.groovy
index 58e4861cc3..58f0535b96 100644
--- a/src/test/groovy/bugs/ClosureTypedVariableBug.groovy
+++ b/src/test/groovy/bugs/ClosureTypedVariableBug.groovy
@@ -18,12 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
+class ClosureTypedVariableBug extends GroovyTestCase {
 
-class ClosureTypedVariableBug {
-
-    @Test
     void testBug2() {
         def count = makeClosure(0)
         assert count == 1
@@ -45,7 +43,6 @@ class ClosureTypedVariableBug {
         return count
     }
 
-    @Test
     void testBug() {
         Integer count = 0
         def closure = { count = it }
@@ -53,7 +50,6 @@ class ClosureTypedVariableBug {
         assert count == 1
     }
 
-    @Test
     void testBug3() {
         def closure = getElementClosure("p")
         def answer = closure("b")
@@ -72,7 +68,6 @@ class ClosureTypedVariableBug {
         }
     }
 
-    @Test
     void testDoubleSlotReference() {
         // there was a bug that the local variable index
         // was wrong set for a closure shared variable.
diff --git a/src/test/groovy/bugs/ClosureVariableBug.groovy b/src/test/groovy/bugs/ClosureVariableBug.groovy
index 20110ad146..eba3ff841f 100644
--- a/src/test/groovy/bugs/ClosureVariableBug.groovy
+++ b/src/test/groovy/bugs/ClosureVariableBug.groovy
@@ -18,16 +18,12 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.assertScript
-
+import groovy.test.GroovyTestCase
 
 /**
  */
-class ClosureVariableBug {
+class ClosureVariableBug extends GroovyTestCase {
 
-    @Test
     void testClosurePassingBug() {
         def count = 0
         def closure = { assert count == it }
@@ -37,7 +33,6 @@ class ClosureVariableBug {
         closure(1)
     }
 
-    @Test
     void testPassingClosureAsNamedParameter() {
         def x = 123
 
@@ -49,7 +44,6 @@ class ClosureVariableBug {
         assert value == 123
     }
 
-    @Test
     void testBug() {
         def value = callClosure([1, 2])
         assert value == 2
@@ -64,7 +58,6 @@ class ClosureVariableBug {
         return x
     }
 
-    @Test
     void testLocalVariableWithPrimitiveType() {
         assertScript """
             int x
diff --git a/src/test/groovy/bugs/ClosureWithBitwiseDefaultParamTest.groovy b/src/test/groovy/bugs/ClosureWithBitwiseDefaultParamTest.groovy
index e19628e5af..e2606a1795 100644
--- a/src/test/groovy/bugs/ClosureWithBitwiseDefaultParamTest.groovy
+++ b/src/test/groovy/bugs/ClosureWithBitwiseDefaultParamTest.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class ClosureWithBitwiseDefaultParamTest {
-    @Test
+class ClosureWithBitwiseDefaultParamTest extends GroovyTestCase {
     void testAmbiguousStuff() {
         def c = { x, y = 1 | 2, z = 0->
             println x
diff --git a/src/test/groovy/bugs/ConstructorBug.groovy b/src/test/groovy/bugs/ConstructorBug.groovy
index c4e041d853..389a792918 100644
--- a/src/test/groovy/bugs/ConstructorBug.groovy
+++ b/src/test/groovy/bugs/ConstructorBug.groovy
@@ -18,12 +18,11 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.runtime.InvokerHelper
-import org.junit.jupiter.api.Test
 
-class ConstructorBug {
+class ConstructorBug extends GroovyTestCase {
 
-    @Test
     void testBug() {
         def type = new GroovyClassLoader().parseClass(new File("src/test/groovy/bugs/TestBase.groovy"))
         assert type != null
diff --git a/src/test/groovy/bugs/ConstructorParameterBug.groovy b/src/test/groovy/bugs/ConstructorParameterBug.groovy
index 0f8a81d560..d63bbd6fd3 100644
--- a/src/test/groovy/bugs/ConstructorParameterBug.groovy
+++ b/src/test/groovy/bugs/ConstructorParameterBug.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 import static groovy.test.GroovyAssert.shouldFail
@@ -54,6 +54,6 @@ final class ConstructorParameterBug {
                 }
             }
         '''
-        assert err.message =~ / Cannot reference 'baz' before supertype constructor has been called. /
+        assert err =~ / Cannot reference 'baz' before supertype constructor has been called. /
     }
 }
diff --git a/src/test/groovy/bugs/ConstructorThisCallBug.groovy b/src/test/groovy/bugs/ConstructorThisCallBug.groovy
index 2d07b9ce0b..26299143bd 100644
--- a/src/test/groovy/bugs/ConstructorThisCallBug.groovy
+++ b/src/test/groovy/bugs/ConstructorThisCallBug.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 import static groovy.test.GroovyAssert.shouldFail
@@ -88,7 +88,7 @@ final class ConstructorThisCallBug {
                 Base(String arg) {}
             }
         '''
-        assert err.message =~ / Cannot reference 'getData' before supertype constructor has been called. /
+        assert err =~ / Cannot reference 'getData' before supertype constructor has been called. /
     }
 
     @Test
@@ -102,7 +102,7 @@ final class ConstructorThisCallBug {
                 }
             }
         '''
-        assert err.message =~ / Cannot reference 'getData' before supertype constructor has been called. /
+        assert err =~ / Cannot reference 'getData' before supertype constructor has been called. /
     }
 
     @Test
@@ -126,7 +126,7 @@ final class ConstructorThisCallBug {
             Outer.a = 'ok'
             assert o.test() == 'ok'
         '''
-        assert err.message =~ / Cannot reference 'myA' before supertype constructor has been called. /
+        assert err =~ / Cannot reference 'myA' before supertype constructor has been called. /
     }
 
     //
diff --git a/src/test/groovy/bugs/CustomMetaClassTest.groovy b/src/test/groovy/bugs/CustomMetaClassTest.groovy
index 6153eda1ce..c798ef2357 100644
--- a/src/test/groovy/bugs/CustomMetaClassTest.groovy
+++ b/src/test/groovy/bugs/CustomMetaClassTest.groovy
@@ -18,13 +18,13 @@
  */
 package bugs
 
-import org.junit.jupiter.api.BeforeEach
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-class CustomMetaClassTest {
+class CustomMetaClassTest extends GroovyTestCase {
 
-    @BeforeEach
-    void setUp() {
+    @Override
+    protected void setUp() {
+        super.setUp()
 
         ExpandoMetaClass.disableGlobally()
 
@@ -34,7 +34,6 @@ class CustomMetaClassTest {
         reg.removeMetaClass(this.metaClass.class)
     }
 
-    @Test
     void testReplaceMetaClass() {
         /*
          * Constructing first instance before metaclass replacement
@@ -69,13 +68,11 @@ class CustomMetaClassTest {
         assert stored instanceof MetaClassImpl
     }
 
-    @Test
     void testNormalCreated() {
         assert groovy.runtime.metaclass.bugs.CustomMetaClassTestMetaClass == metaClass.class
         assert MetaClassImpl == metaClass.delegate.class
     }
 
-    @Test
     void testEmcCreated() {
         GroovySystem.metaClassRegistry.removeMetaClass metaClass.theClass
         ExpandoMetaClass.enableGlobally()
@@ -90,7 +87,6 @@ class CustomMetaClassTest {
         assert groovy.runtime.metaclass.bugs.CustomMetaClassTestMetaClass == getMetaClass().delegate.class
     }
 
-    @Test
     void testStaticMetaClass() {
         // Custom metaclass created
         assert groovy.runtime.metaclass.bugs.CustomMetaClassTestMetaClass == metaClass.class
diff --git a/src/test/groovy/bugs/DefVariableBug.groovy b/src/test/groovy/bugs/DefVariableBug.groovy
index fe330e33c5..aa42d774f8 100644
--- a/src/test/groovy/bugs/DefVariableBug.groovy
+++ b/src/test/groovy/bugs/DefVariableBug.groovy
@@ -18,12 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
+class DefVariableBug extends GroovyTestCase {
 
-class DefVariableBug {
-
-    @Test
     void testBug() {
 
      /* cpoirier - "def" can be referred as a variable name,
diff --git a/src/test/groovy/bugs/DirectMethodCallWithVargsTest.groovy b/src/test/groovy/bugs/DirectMethodCallWithVargsTest.groovy
index 0bbbf4baea..1cefd9e77e 100644
--- a/src/test/groovy/bugs/DirectMethodCallWithVargsTest.groovy
+++ b/src/test/groovy/bugs/DirectMethodCallWithVargsTest.groovy
@@ -22,7 +22,7 @@ import org.codehaus.groovy.ast.ClassCodeVisitorSupport
 import org.codehaus.groovy.ast.MethodNode
 import org.codehaus.groovy.ast.expr.MethodCallExpression
 import org.codehaus.groovy.control.SourceUnit
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/ForLoopBug.groovy b/src/test/groovy/bugs/ForLoopBug.groovy
index 1daa4b48f0..531c088e2c 100644
--- a/src/test/groovy/bugs/ForLoopBug.groovy
+++ b/src/test/groovy/bugs/ForLoopBug.groovy
@@ -18,14 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
+class ForLoopBug extends GroovyTestCase {
 
-
-class ForLoopBug {
-
-    @Test
     void testBug() {
         assertScript """
             def list = []
@@ -38,7 +34,6 @@ class ForLoopBug {
         """
     }
 
-    @Test
     void testSeansBug() {
         assertScript """
             for (i in 1..10) {
@@ -47,7 +42,6 @@ class ForLoopBug {
         """
     }
 
-    @Test
     void testNormalMethod() {
         def list = []
         def a = 1
@@ -58,7 +52,6 @@ class ForLoopBug {
         assert list == [1, 2, 3, 4, 5]
     }
 
-    @Test
     void testBytecodeGenBug() {
         def a = 1
         def b = 5
@@ -71,7 +64,6 @@ class ForLoopBug {
         assert a == 5
     }
 
-    @Test
     void testVisibility() {
         assertScript """
             def array = [ true, true, true ];
diff --git a/src/test/groovy/bugs/FullyQualifiedClassBug.groovy b/src/test/groovy/bugs/FullyQualifiedClassBug.groovy
index 98e7598dad..72af3c8098 100644
--- a/src/test/groovy/bugs/FullyQualifiedClassBug.groovy
+++ b/src/test/groovy/bugs/FullyQualifiedClassBug.groovy
@@ -18,14 +18,12 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
+import groovy.test.GroovyTestCase
 
 /**
  */
-class FullyQualifiedClassBug {
+class FullyQualifiedClassBug extends GroovyTestCase {
 
-    @Test
     void testBug() {
         java.lang.System.err.println("Hello world")
     }
diff --git a/src/test/groovy/bugs/FullyQualifiedMethodReturnTypeBug.groovy b/src/test/groovy/bugs/FullyQualifiedMethodReturnTypeBug.groovy
index 4efd9f668b..14bbefff18 100644
--- a/src/test/groovy/bugs/FullyQualifiedMethodReturnTypeBug.groovy
+++ b/src/test/groovy/bugs/FullyQualifiedMethodReturnTypeBug.groovy
@@ -18,14 +18,12 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
+import groovy.test.GroovyTestCase
 
 /**
  */
-class FullyQualifiedMethodReturnTypeBug {
+class FullyQualifiedMethodReturnTypeBug extends GroovyTestCase {
 
-    @Test
     void testBug() {
         def s = foo()
         assert s.length() == 3
diff --git a/src/test/groovy/bugs/FullyQualifiedVariableTypeBug.groovy b/src/test/groovy/bugs/FullyQualifiedVariableTypeBug.groovy
index c384366fca..3b14129bd6 100644
--- a/src/test/groovy/bugs/FullyQualifiedVariableTypeBug.groovy
+++ b/src/test/groovy/bugs/FullyQualifiedVariableTypeBug.groovy
@@ -18,14 +18,12 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
+import groovy.test.GroovyTestCase
 
 /**
  */
-class FullyQualifiedVariableTypeBug {
+class FullyQualifiedVariableTypeBug extends GroovyTestCase {
 
-    @Test
     void testBug() {
         java.lang.String s = "hey"
         assert s.length() == 3
diff --git a/src/test/groovy/bugs/GetterBug.groovy b/src/test/groovy/bugs/GetterBug.groovy
index d2905a8360..ee8471493b 100644
--- a/src/test/groovy/bugs/GetterBug.groovy
+++ b/src/test/groovy/bugs/GetterBug.groovy
@@ -18,12 +18,11 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
+import groovy.test.GroovyTestCase
 
 /**
  */
-class GetterBug {
+class GetterBug extends GroovyTestCase {
 
     String foo
     def bar
@@ -39,7 +38,6 @@ class GetterBug {
         this.foo = foo
        }
 
-    @Test
     void testTypedGetterAndSetter() {
         def value = getFoo()
 
@@ -64,7 +62,6 @@ class GetterBug {
     }
 
 
-    @Test
     void testUntypedGetterAndSetter() {
         def value = getBar()
 
diff --git a/src/test/groovy/bugs/Groovy10094.groovy b/src/test/groovy/bugs/Groovy10094.groovy
index 5d8c3d5c00..2dbb11ff02 100644
--- a/src/test/groovy/bugs/Groovy10094.groovy
+++ b/src/test/groovy/bugs/Groovy10094.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.shouldFail
 
@@ -35,7 +35,7 @@ final class Groovy10094 {
             }
         '''
 
-        assert err.message =~ /Cannot assign value of type java.lang.String to variable of type int/
+        assert err =~ /Cannot assign value of type java.lang.String to variable of type int/
     }
 
     @Test
@@ -49,7 +49,7 @@ final class Groovy10094 {
             }
         '''
 
-        assert err.message =~ /Cannot assign value of type java.lang.String to variable of type int/
+        assert err =~ /Cannot assign value of type java.lang.String to variable of type int/
     }
 
     @Test
@@ -62,6 +62,6 @@ final class Groovy10094 {
             }
         '''
 
-        assert err.message =~ /Cannot assign value of type java.lang.String to variable of type int/
+        assert err =~ /Cannot assign value of type java.lang.String to variable of type int/
     }
 }
diff --git a/src/test/groovy/bugs/Groovy10113.groovy b/src/test/groovy/bugs/Groovy10113.groovy
index 77ef5c3617..23ee1861f0 100644
--- a/src/test/groovy/bugs/Groovy10113.groovy
+++ b/src/test/groovy/bugs/Groovy10113.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 import static groovy.test.GroovyAssert.shouldFail
@@ -31,7 +31,7 @@ final class Groovy10113 {
             class C<T extends T> {
             }
         '''
-        assert err.message =~ /Cycle detected: the type T cannot extend.implement itself or one of its own member types/
+        assert err =~ /Cycle detected: the type T cannot extend.implement itself or one of its own member types/
     }
 
     @Test
@@ -41,7 +41,7 @@ final class Groovy10113 {
             }
         '''
         // TODO:                 ^ error is here but refers to T; is there a way to move the error or improve it
-        assert err.message =~ /Cycle detected: the type T cannot extend.implement itself or one of its own member types/
+        assert err =~ /Cycle detected: the type T cannot extend.implement itself or one of its own member types/
     }
 
     @Test // GROOVY-10125
@@ -61,7 +61,7 @@ final class Groovy10113 {
                 }
             }
         '''
-        assert err.message =~ /Cycle detected: the type C cannot extend.implement itself or one of its own member types/
+        assert err =~ /Cycle detected: the type C cannot extend.implement itself or one of its own member types/
     }
 
     @Test
@@ -74,7 +74,7 @@ final class Groovy10113 {
             class D extends C.Inner {
             }
         '''
-        assert err.message =~ /Cycle detected: a cycle exists in the type hierarchy between D and C/
+        assert err =~ /Cycle detected: a cycle exists in the type hierarchy between D and C/
     }
 
     @Test
@@ -85,7 +85,7 @@ final class Groovy10113 {
                 }
             }
         '''
-        assert err.message =~ /Cycle detected: the type C cannot extend.implement itself or one of its own member types/
+        assert err =~ /Cycle detected: the type C cannot extend.implement itself or one of its own member types/
     }
 
     @Test
@@ -98,7 +98,7 @@ final class Groovy10113 {
             class D implements C.I {
             }
         '''
-        assert err.message =~ /Cycle detected: a cycle exists in the type hierarchy between D and C/
+        assert err =~ /Cycle detected: a cycle exists in the type hierarchy between D and C/
     }
 
     @Test
@@ -109,6 +109,6 @@ final class Groovy10113 {
             class B extends A {
             }
         '''
-        assert err.message =~ /Cycle detected: a cycle exists in the type hierarchy between B and A/
+        assert err =~ /Cycle detected: a cycle exists in the type hierarchy between B and A/
     }
 }
diff --git a/src/test/groovy/bugs/Groovy10133.groovy b/src/test/groovy/bugs/Groovy10133.groovy
index ad55abd219..db400eafdd 100644
--- a/src/test/groovy/bugs/Groovy10133.groovy
+++ b/src/test/groovy/bugs/Groovy10133.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 import static groovy.test.GroovyAssert.shouldFail
@@ -254,7 +254,7 @@ final class Groovy10133 {
                 }
             }
         '''
-        assert err.message =~ /The variable \[x\] is undeclared/
+        assert err =~ /The variable \[x\] is undeclared/
 
         err = shouldFail '''
             class C {
@@ -266,6 +266,6 @@ final class Groovy10133 {
                 }
             }
         '''
-        assert err.message =~ /No such property: x for class: C/
+        assert err =~ /No such property: x for class: C/
     }
 }
diff --git a/src/test/groovy/bugs/Groovy10143.groovy b/src/test/groovy/bugs/Groovy10143.groovy
index 164674e04e..391aeaface 100644
--- a/src/test/groovy/bugs/Groovy10143.groovy
+++ b/src/test/groovy/bugs/Groovy10143.groovy
@@ -22,7 +22,7 @@ import groovy.transform.CompileStatic
 import org.codehaus.groovy.control.CompilationUnit
 import org.codehaus.groovy.control.CompilerConfiguration
 import org.codehaus.groovy.control.customizers.ASTTransformationCustomizer
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 final class Groovy10143 {
     @Test
diff --git a/src/test/groovy/bugs/Groovy1018_Bug.groovy b/src/test/groovy/bugs/Groovy1018_Bug.groovy
index 9f2d4e6a8e..22db82888a 100644
--- a/src/test/groovy/bugs/Groovy1018_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy1018_Bug.groovy
@@ -18,8 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
+import groovy.test.GroovyTestCase
 
 /**
  * Test to fix the Jira issues GROOVY-1018 and GROOVY-732.
@@ -27,12 +26,11 @@ import org.junit.jupiter.api.Test
  *      ClassName.fieldName or ClassName.@fieldName.
  */
 
-class Groovy1018_Bug {
+class Groovy1018_Bug extends GroovyTestCase {
 
     public static Object Class = "bar"
 
     // GROOVY-1018
-    @Test
     void testGetPublicStaticField() {
         Groovy1018_Bug.Class = 'bar'
         def a = new Groovy1018_Bug()
@@ -41,7 +39,6 @@ class Groovy1018_Bug {
     }
 
     // GROOVY-732
-    @Test
     void testSetPublicStaticField() {
         Groovy1018_Bug.Class = 'bar-'
         assert Groovy1018_Bug.Class == "bar-" && Groovy1018_Bug.@Class == "bar-"
diff --git a/src/test/groovy/bugs/Groovy10191.groovy b/src/test/groovy/bugs/Groovy10191.groovy
index ae940f3184..a66f48970a 100644
--- a/src/test/groovy/bugs/Groovy10191.groovy
+++ b/src/test/groovy/bugs/Groovy10191.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy10199.groovy b/src/test/groovy/bugs/Groovy10199.groovy
index aa393a8e8b..e9493b9cfa 100644
--- a/src/test/groovy/bugs/Groovy10199.groovy
+++ b/src/test/groovy/bugs/Groovy10199.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy10236.groovy b/src/test/groovy/bugs/Groovy10236.groovy
index 2dea972253..c9480a34a7 100644
--- a/src/test/groovy/bugs/Groovy10236.groovy
+++ b/src/test/groovy/bugs/Groovy10236.groovy
@@ -19,7 +19,7 @@
 package bugs
 
 import groovy.transform.CompileStatic
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy10281.groovy b/src/test/groovy/bugs/Groovy10281.groovy
index e99f4a8ae2..9f59928d44 100644
--- a/src/test/groovy/bugs/Groovy10281.groovy
+++ b/src/test/groovy/bugs/Groovy10281.groovy
@@ -22,7 +22,7 @@ import groovy.transform.CompileStatic
 import org.codehaus.groovy.control.CompilationUnit
 import org.codehaus.groovy.control.CompilerConfiguration
 import org.codehaus.groovy.control.Phases
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 @CompileStatic
 final class Groovy10281 {
diff --git a/src/test/groovy/bugs/Groovy10302.groovy b/src/test/groovy/bugs/Groovy10302.groovy
index 4a9ceffdc7..6f5fefe967 100644
--- a/src/test/groovy/bugs/Groovy10302.groovy
+++ b/src/test/groovy/bugs/Groovy10302.groovy
@@ -18,11 +18,11 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 import static groovy.test.GroovyAssert.isAtLeastJdk
-import static org.junit.jupiter.api.Assertions.fail
+import static org.junit.Assert.fail
 
 final class Groovy10302 {
 
diff --git a/src/test/groovy/bugs/Groovy10303.groovy b/src/test/groovy/bugs/Groovy10303.groovy
index f9618df212..a54ed531fe 100644
--- a/src/test/groovy/bugs/Groovy10303.groovy
+++ b/src/test/groovy/bugs/Groovy10303.groovy
@@ -19,7 +19,7 @@
 package bugs
 
 import org.codehaus.groovy.control.CompilerConfiguration
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 final class Groovy10303 {
     @Test
diff --git a/src/test/groovy/bugs/Groovy10305.groovy b/src/test/groovy/bugs/Groovy10305.groovy
index fa3f26e728..db2a9b5d25 100644
--- a/src/test/groovy/bugs/Groovy10305.groovy
+++ b/src/test/groovy/bugs/Groovy10305.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy10381.groovy b/src/test/groovy/bugs/Groovy10381.groovy
index 12dcc6b2b3..568bb9b87c 100644
--- a/src/test/groovy/bugs/Groovy10381.groovy
+++ b/src/test/groovy/bugs/Groovy10381.groovy
@@ -20,7 +20,7 @@ package bugs
 
 import org.codehaus.groovy.control.CompilerConfiguration
 import org.codehaus.groovy.tools.javac.JavaAwareCompilationUnit
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 import static groovy.test.GroovyAssert.shouldFail
@@ -72,7 +72,7 @@ final class Groovy10381 {
               }
             }
         '''
-        assert err.message =~ /class C inherits unrelated defaults for void m\(java.lang.String\) from types A and B/
+        assert err =~ /class C inherits unrelated defaults for void m\(java.lang.String\) from types A and B/
     }
 
     @Test
@@ -94,7 +94,7 @@ final class Groovy10381 {
               }
             }
         '''
-        assert err.message =~ /class C inherits unrelated defaults for void m\(java.lang.String\) from types BaseA and BaseB/
+        assert err =~ /class C inherits unrelated defaults for void m\(java.lang.String\) from types BaseA and BaseB/
     }
 
     @Test
@@ -120,7 +120,7 @@ final class Groovy10381 {
               }
             }
         '''
-        assert err.message =~ /class C inherits unrelated defaults for void m\(java.lang.String\) from types A and B/
+        assert err =~ /class C inherits unrelated defaults for void m\(java.lang.String\) from types A and B/
     }
 
     @Test
@@ -138,7 +138,7 @@ final class Groovy10381 {
               }
             }
         '''
-        assert err.message =~ /interface C inherits unrelated defaults for void m\(java.lang.String\) from types A and B/
+        assert err =~ /interface C inherits unrelated defaults for void m\(java.lang.String\) from types A and B/
     }
 
     @Test
diff --git a/src/test/groovy/bugs/Groovy10461.groovy b/src/test/groovy/bugs/Groovy10461.groovy
index 8079eafa72..a99169f22c 100644
--- a/src/test/groovy/bugs/Groovy10461.groovy
+++ b/src/test/groovy/bugs/Groovy10461.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy10466.groovy b/src/test/groovy/bugs/Groovy10466.groovy
index 3073f166d4..572e175e1c 100644
--- a/src/test/groovy/bugs/Groovy10466.groovy
+++ b/src/test/groovy/bugs/Groovy10466.groovy
@@ -20,7 +20,7 @@ package bugs
 
 import org.codehaus.groovy.control.CompilationUnit
 import org.codehaus.groovy.control.CompilerConfiguration
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 class Groovy10466 {
 
diff --git a/src/test/groovy/bugs/Groovy10467.groovy b/src/test/groovy/bugs/Groovy10467.groovy
index 6dbccae101..680963be6b 100644
--- a/src/test/groovy/bugs/Groovy10467.groovy
+++ b/src/test/groovy/bugs/Groovy10467.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy10478.groovy b/src/test/groovy/bugs/Groovy10478.groovy
index 4c14604ef8..8a02ed55fa 100644
--- a/src/test/groovy/bugs/Groovy10478.groovy
+++ b/src/test/groovy/bugs/Groovy10478.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy10535.groovy b/src/test/groovy/bugs/Groovy10535.groovy
index c1ed9b2ec8..78e7d8a457 100644
--- a/src/test/groovy/bugs/Groovy10535.groovy
+++ b/src/test/groovy/bugs/Groovy10535.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy10587.groovy b/src/test/groovy/bugs/Groovy10587.groovy
index ce8a4df12a..32cce309d7 100644
--- a/src/test/groovy/bugs/Groovy10587.groovy
+++ b/src/test/groovy/bugs/Groovy10587.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy1059_Bug.groovy b/src/test/groovy/bugs/Groovy1059_Bug.groovy
index 31e71428b8..acd70e6aef 100644
--- a/src/test/groovy/bugs/Groovy1059_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy1059_Bug.groovy
@@ -18,8 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
+import groovy.test.GroovyTestCase
 
 /**
  * GROOVY-1059
@@ -35,9 +34,8 @@ import org.junit.jupiter.api.Test
  *    have the same meaning.
  */
 
-class Groovy1059_Bug {
+class Groovy1059_Bug extends GroovyTestCase {
 
-    @Test
     void testClosureAsAttribute() {
         def x = new Groovy1059Foo()
 
diff --git a/src/test/groovy/bugs/Groovy10612.groovy b/src/test/groovy/bugs/Groovy10612.groovy
index e34937a403..d8339b2375 100644
--- a/src/test/groovy/bugs/Groovy10612.groovy
+++ b/src/test/groovy/bugs/Groovy10612.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy10659.groovy b/src/test/groovy/bugs/Groovy10659.groovy
index 7f7e70a0b6..846aceb157 100644
--- a/src/test/groovy/bugs/Groovy10659.groovy
+++ b/src/test/groovy/bugs/Groovy10659.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy10676.groovy b/src/test/groovy/bugs/Groovy10676.groovy
index cb5f94b3e2..bc4bf6b359 100644
--- a/src/test/groovy/bugs/Groovy10676.groovy
+++ b/src/test/groovy/bugs/Groovy10676.groovy
@@ -19,7 +19,7 @@
 package bugs
 
 import org.codehaus.groovy.tools.ErrorReporter
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 final class Groovy10676 {
     @Test
diff --git a/src/test/groovy/bugs/Groovy10700.groovy b/src/test/groovy/bugs/Groovy10700.groovy
index e5ec1965a6..d729cb6029 100644
--- a/src/test/groovy/bugs/Groovy10700.groovy
+++ b/src/test/groovy/bugs/Groovy10700.groovy
@@ -20,7 +20,7 @@ package bugs
 
 import org.codehaus.groovy.control.CompilationUnit
 import org.codehaus.groovy.control.CompilerConfiguration
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy10770.groovy b/src/test/groovy/bugs/Groovy10770.groovy
index ff8ee8a29d..6ad0534e61 100644
--- a/src/test/groovy/bugs/Groovy10770.groovy
+++ b/src/test/groovy/bugs/Groovy10770.groovy
@@ -19,7 +19,7 @@
 package bugs
 
 import groovy.test.NotYetImplemented
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 import static groovy.test.GroovyAssert.shouldFail
@@ -44,7 +44,7 @@ final class Groovy10770 {
                 }
             }
         '''
-        assert err.message =~ /The variable .bar. is undeclared/
+        assert err =~ /The variable .bar. is undeclared/
     }
 
     @Test
@@ -59,7 +59,7 @@ final class Groovy10770 {
                 }
             }
         '''
-        assert err.message =~ /No such property: baz for class: java.lang.String/
+        assert err =~ /No such property: baz for class: java.lang.String/
     }
 
     @Test
@@ -94,7 +94,7 @@ final class Groovy10770 {
             def c = new C()
             def d = new C.D(c)
         '''
-        assert err.message =~ /Access to java.lang.String#baz is forbidden/ // passes STC but fails during compilation
+        assert err =~ /Access to java.lang.String#baz is forbidden/ // passes STC but fails during compilation
     }
 
     @Test
@@ -112,7 +112,7 @@ final class Groovy10770 {
             def c = new C()
             def d = new C.D(c)
         '''
-        assert err.message =~ /Access to java.lang.String#baz is forbidden/ // passes STC but fails during compilation
+        assert err =~ /Access to java.lang.String#baz is forbidden/ // passes STC but fails during compilation
     }
 
     @Test @NotYetImplemented
@@ -130,7 +130,7 @@ final class Groovy10770 {
             def c = new C()
             def d = new C.D(c)
         '''
-        assert err.message =~ /Access to java.lang.String#baz is forbidden/ // passes STC but fails during compilation
+        assert err =~ /Access to java.lang.String#baz is forbidden/ // passes STC but fails during compilation
     }
 
     @Test // annotate method
diff --git a/src/test/groovy/bugs/Groovy1081_Bug.groovy b/src/test/groovy/bugs/Groovy1081_Bug.groovy
index 7fd3ce3a4d..292155c611 100644
--- a/src/test/groovy/bugs/Groovy1081_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy1081_Bug.groovy
@@ -18,19 +18,15 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
-import static org.junit.jupiter.api.Assertions.assertTrue
-
+import groovy.test.GroovyTestCase
 
 /**
  *  Verifies that DefaultGroovyMethods.transformLine(Reader, Writer, Closure)
  *  actually writes its output.
  */
 
-class Groovy1081_Bug {
+class Groovy1081_Bug extends GroovyTestCase {
 
-    @Test
     void testShort() {
          def reader = new StringReader('abc')
         def writer = new StringWriter()
diff --git a/src/test/groovy/bugs/Groovy10920.groovy b/src/test/groovy/bugs/Groovy10920.groovy
index 58117bea16..78669fdb08 100644
--- a/src/test/groovy/bugs/Groovy10920.groovy
+++ b/src/test/groovy/bugs/Groovy10920.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy10962.groovy b/src/test/groovy/bugs/Groovy10962.groovy
index b76457af7b..47f6b436fc 100644
--- a/src/test/groovy/bugs/Groovy10962.groovy
+++ b/src/test/groovy/bugs/Groovy10962.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy10998.groovy b/src/test/groovy/bugs/Groovy10998.groovy
index 6f35d71bb4..aebe93287e 100644
--- a/src/test/groovy/bugs/Groovy10998.groovy
+++ b/src/test/groovy/bugs/Groovy10998.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 import static groovy.test.GroovyAssert.shouldFail
@@ -30,7 +30,7 @@ final class Groovy10998 {
         def err = shouldFail '''
             def <T extends T> void test() {}
         '''
-        assert err.message =~ /Cycle detected: the type T cannot extend.implement itself or one of its own member types/
+        assert err =~ /Cycle detected: the type T cannot extend.implement itself or one of its own member types/
     }
 
     @Test
@@ -38,7 +38,7 @@ final class Groovy10998 {
         def err = shouldFail '''
             def <T extends U, U extends T> void test() {}
         '''
-        assert err.message =~ /Cycle detected: the type T cannot extend.implement itself or one of its own member types/
+        assert err =~ /Cycle detected: the type T cannot extend.implement itself or one of its own member types/
     }
 
     @Test
diff --git a/src/test/groovy/bugs/Groovy11046.groovy b/src/test/groovy/bugs/Groovy11046.groovy
index b960f6b2d4..0c3268c91b 100644
--- a/src/test/groovy/bugs/Groovy11046.groovy
+++ b/src/test/groovy/bugs/Groovy11046.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 import static groovy.test.GroovyAssert.shouldFail
@@ -44,7 +44,7 @@ final class Groovy11046 {
             log = org.apache.logging.log4j.LogManager.getLogger(getClass()) //XXX
         '''
         assert err instanceof NoClassDefFoundError // CompilationFailedException (previously)
-        assert err.message =~ /com.lmax.disruptor.EventTranslatorVararg/
+        assert err =~ /com.lmax.disruptor.EventTranslatorVararg/
         assert err.asString() =~ /at org.apache.logging.log4j.LogManager.getLogger\(/ : 'script should have failed at runtime'
     }
 }
diff --git a/src/test/groovy/bugs/Groovy11062.groovy b/src/test/groovy/bugs/Groovy11062.groovy
index e5949fede5..e50126ced1 100644
--- a/src/test/groovy/bugs/Groovy11062.groovy
+++ b/src/test/groovy/bugs/Groovy11062.groovy
@@ -22,7 +22,7 @@ import groovy.transform.AnnotationCollector
 import groovy.transform.CompileStatic
 import groovy.transform.NullCheck
 import groovy.transform.RecordType
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy11196.groovy b/src/test/groovy/bugs/Groovy11196.groovy
index 463e463ef4..2d3eceb619 100644
--- a/src/test/groovy/bugs/Groovy11196.groovy
+++ b/src/test/groovy/bugs/Groovy11196.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 final class Groovy11196 {
 
diff --git a/src/test/groovy/bugs/Groovy11203.groovy b/src/test/groovy/bugs/Groovy11203.groovy
index 1f758ab172..fe882635a3 100644
--- a/src/test/groovy/bugs/Groovy11203.groovy
+++ b/src/test/groovy/bugs/Groovy11203.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.shouldFail
 
diff --git a/src/test/groovy/bugs/Groovy11250.groovy b/src/test/groovy/bugs/Groovy11250.groovy
index 8a17aff615..7f77789bf2 100644
--- a/src/test/groovy/bugs/Groovy11250.groovy
+++ b/src/test/groovy/bugs/Groovy11250.groovy
@@ -20,7 +20,7 @@ package bugs
 
 import org.codehaus.groovy.control.CompilerConfiguration
 import org.codehaus.groovy.tools.javac.JavaAwareCompilationUnit
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 final class Groovy11250 {
 
diff --git a/src/test/groovy/bugs/Groovy11265.groovy b/src/test/groovy/bugs/Groovy11265.groovy
index defe4fc2bc..0eea02a6e1 100644
--- a/src/test/groovy/bugs/Groovy11265.groovy
+++ b/src/test/groovy/bugs/Groovy11265.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy11272.groovy b/src/test/groovy/bugs/Groovy11272.groovy
index 77404555b6..237359d66c 100644
--- a/src/test/groovy/bugs/Groovy11272.groovy
+++ b/src/test/groovy/bugs/Groovy11272.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy11292.groovy b/src/test/groovy/bugs/Groovy11292.groovy
index 96d55efc9d..3ec8245cbb 100644
--- a/src/test/groovy/bugs/Groovy11292.groovy
+++ b/src/test/groovy/bugs/Groovy11292.groovy
@@ -20,7 +20,7 @@ package bugs
 
 import org.codehaus.groovy.control.CompilerConfiguration
 import org.codehaus.groovy.tools.javac.JavaAwareCompilationUnit
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 import static groovy.test.GroovyAssert.isAtLeastJdk
diff --git a/src/test/groovy/bugs/Groovy11293.groovy b/src/test/groovy/bugs/Groovy11293.groovy
index 7760b7839b..37ee96e9d0 100644
--- a/src/test/groovy/bugs/Groovy11293.groovy
+++ b/src/test/groovy/bugs/Groovy11293.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy1407_Bug.groovy b/src/test/groovy/bugs/Groovy1407_Bug.groovy
index 84182564a7..b0a8f09ed3 100644
--- a/src/test/groovy/bugs/Groovy1407_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy1407_Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy1407_Bug {
-   @Test
+class Groovy1407_Bug extends GroovyTestCase {
    void testGPathOnMultiKeyMap(){
       // each key is a two-element String list
       // each value is a two-element integer list
@@ -34,7 +32,6 @@ class Groovy1407_Bug {
       assert expected == actual
    }
 
-   @Test
    void testGPathOnMultiValueMap(){
       // each key is a two-element String list
       // each value is a two-element integer list
diff --git a/src/test/groovy/bugs/Groovy1462_Bug.groovy b/src/test/groovy/bugs/Groovy1462_Bug.groovy
index 4d333b5799..906fab6f88 100644
--- a/src/test/groovy/bugs/Groovy1462_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy1462_Bug.groovy
@@ -18,16 +18,14 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
+import groovy.test.GroovyTestCase
 
 /**
  *  Verifies that the Groovy parser can accept quoted methods.
  */
 
-class Groovy1462_Bug {
+class Groovy1462_Bug extends GroovyTestCase {
 
-    @Test
     void testShort() {
         def smn = new StringMethodName()
         assert smn.foo0() == 'foo0'
diff --git a/src/test/groovy/bugs/Groovy1465.groovy b/src/test/groovy/bugs/Groovy1465.groovy
index 04dc56fc93..f0a153d010 100644
--- a/src/test/groovy/bugs/Groovy1465.groovy
+++ b/src/test/groovy/bugs/Groovy1465.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.shouldFail
 
@@ -26,7 +26,7 @@ final class Groovy1465 {
 
     private static void compileAndVerifyCyclicInheritenceCompilationError(String sourceCode) {
         def err = shouldFail(sourceCode)
-        assert err.message =~ /Cycle detected/
+        assert err =~ /Cycle detected/
     }
 
     @Test
diff --git a/src/test/groovy/bugs/Groovy1567.java b/src/test/groovy/bugs/Groovy1567.java
index c104970caa..5cb008c33f 100644
--- a/src/test/groovy/bugs/Groovy1567.java
+++ b/src/test/groovy/bugs/Groovy1567.java
@@ -21,7 +21,7 @@ package bugs;
 import groovy.lang.Binding;
 import groovy.lang.GroovyShell;
 import groovy.util.GroovyScriptEngine;
-import org.junit.jupiter.api.Test;
+import org.junit.Test;
 
 import java.io.File;
 
diff --git a/src/test/groovy/bugs/Groovy1593.groovy b/src/test/groovy/bugs/Groovy1593.groovy
index 99ef8c4373..1c6659ba76 100644
--- a/src/test/groovy/bugs/Groovy1593.groovy
+++ b/src/test/groovy/bugs/Groovy1593.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static org.junit.jupiter.api.Assertions.assertNull
-
-
-class Groovy1593 {
-   @Test
+class Groovy1593 extends GroovyTestCase {
    void testPropertyAccessInSubClassOfHashMap() {
       def subclass = new SubClassOfHashMap()
       // any of the following caused a MPE previously
diff --git a/src/test/groovy/bugs/Groovy1617_Bug.groovy b/src/test/groovy/bugs/Groovy1617_Bug.groovy
index d2b9304596..d77fe4c9f9 100644
--- a/src/test/groovy/bugs/Groovy1617_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy1617_Bug.groovy
@@ -18,18 +18,15 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy1617_Bug {
-   @Test
+class Groovy1617_Bug extends GroovyTestCase {
    void testCoerceStringIntoStringArray() {
       def expected = ["G","r","o","o","v","y"] as String[]
       def actual = "Groovy" as String[]
       assert expected == actual
    }
 
-   @Test
    void testCoerceGStringIntoStringArray() {
       def expected = ["G","r","o","o","v","y"] as String[]
       def a = "Gro"
diff --git a/src/test/groovy/bugs/Groovy1706_Bug.groovy b/src/test/groovy/bugs/Groovy1706_Bug.groovy
index ff3a41684c..c09dd930d9 100644
--- a/src/test/groovy/bugs/Groovy1706_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy1706_Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy1706_Bug {
-   @Test
+class Groovy1706_Bug extends GroovyTestCase {
    void testStaticMethodIsCalledFromSubclass() {
       // disclaimer: static methods shouldn't be
       // called on instances
@@ -32,7 +30,6 @@ class Groovy1706_Bug {
       assert "B" == b.doit()
    }
 
-   @Test
    void testStaticMethodIsCalledInCorrectInstance() {
       // disclaimer: static methods shouldn't be
       // called on instances
diff --git a/src/test/groovy/bugs/Groovy1759.groovy b/src/test/groovy/bugs/Groovy1759.groovy
index b067156689..57355b71c7 100644
--- a/src/test/groovy/bugs/Groovy1759.groovy
+++ b/src/test/groovy/bugs/Groovy1759.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 final class Groovy1759 {
 
diff --git a/src/test/groovy/bugs/Groovy2271Bug.groovy b/src/test/groovy/bugs/Groovy2271Bug.groovy
index 0499b40645..bdd5c95da7 100644
--- a/src/test/groovy/bugs/Groovy2271Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2271Bug.groovy
@@ -19,10 +19,9 @@
 package bugs
 
 import groovy.mock.interceptor.StubFor
+import groovy.test.GroovyTestCase
 
-import static org.junit.jupiter.api.Assertions.assertEquals
-
-class Groovy2271Bug {
+class Groovy2271Bug extends GroovyTestCase {
     static final String TEST_TEXT = "I'm a mock"
 
     def void testClosureMock() {
diff --git a/src/test/groovy/bugs/Groovy2339Bug.groovy b/src/test/groovy/bugs/Groovy2339Bug.groovy
index 2fd0bb4e06..ab6415c2b8 100644
--- a/src/test/groovy/bugs/Groovy2339Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2339Bug.groovy
@@ -18,14 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.shouldFail
+class Groovy2339Bug extends GroovyTestCase {
 
-
-class Groovy2339Bug {
-
-    @Test
     void testBug() {
         List list = ['groovy', 'java']
         Map map = [a: 1, b: 2]
diff --git a/src/test/groovy/bugs/Groovy2348Bug.groovy b/src/test/groovy/bugs/Groovy2348Bug.groovy
index 50ac17999c..a69c09462f 100644
--- a/src/test/groovy/bugs/Groovy2348Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2348Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 
-import static org.junit.jupiter.api.Assertions.assertEquals
-
-
-class Groovy2348Bug{
+class Groovy2348Bug extends GroovyTestCase{
   void test () {
      assertEquals( ['1.0', '2.0'], Foo.test(['1.0-vers', '2.0-subvers']))
   }
diff --git a/src/test/groovy/bugs/Groovy2350Bug.groovy b/src/test/groovy/bugs/Groovy2350Bug.groovy
index 7694cbefb3..14ee5b4d5f 100644
--- a/src/test/groovy/bugs/Groovy2350Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2350Bug.groovy
@@ -18,15 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.shouldFail
-import static org.junit.jupiter.api.Assertions.assertEquals
+class Groovy2350Bug extends GroovyTestCase{
 
-
-class Groovy2350Bug{
-
-     @Test
      void testNoArg () {
          shouldFail (org.codehaus.groovy.runtime.metaclass.MethodSelectionException) {
              def a = new DefaultNoArgCtor()
@@ -35,7 +30,6 @@ class Groovy2350Bug{
          assertEquals "NULL", new DefaultNoArgCtor2().value
      }
 
-     @Test
      void testNoDefCtor () {
          def a = new NoDefaultCtor("first")
          assertEquals "toS: first", a.toString()
diff --git a/src/test/groovy/bugs/Groovy2351Bug.groovy b/src/test/groovy/bugs/Groovy2351Bug.groovy
index 702f932c55..2a8978a4d9 100644
--- a/src/test/groovy/bugs/Groovy2351Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2351Bug.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static org.junit.jupiter.api.Assertions.assertEquals
-
-
-class Groovy2351Bug {
-   @Test
+class Groovy2351Bug extends GroovyTestCase {
    void testVarArgs () {
 
        def a = new VarArgs()
diff --git a/src/test/groovy/bugs/Groovy2365Base.groovy b/src/test/groovy/bugs/Groovy2365Base.groovy
index 8af8042a3a..4488631d5f 100644
--- a/src/test/groovy/bugs/Groovy2365Base.groovy
+++ b/src/test/groovy/bugs/Groovy2365Base.groovy
@@ -18,8 +18,9 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 
-abstract class Groovy2365Base {
+abstract class Groovy2365Base extends GroovyTestCase {
 
     protected String createData () {
 
@@ -43,7 +44,6 @@ abstract class Groovy2365Base {
 
     "Script2.groovy" : """
                 import Util
-import org.junit.jupiter.api.Test
 
                 println "Script2 \${Util.NAME}"
            """
diff --git a/src/test/groovy/bugs/Groovy2365Bug.java b/src/test/groovy/bugs/Groovy2365Bug.java
index 14e7d37527..c295b6ca98 100644
--- a/src/test/groovy/bugs/Groovy2365Bug.java
+++ b/src/test/groovy/bugs/Groovy2365Bug.java
@@ -24,8 +24,6 @@ import org.codehaus.groovy.runtime.ResourceGroovyMethods;
 
 import java.io.File;
 
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
 public class Groovy2365Bug extends Groovy2365Base {
 
     public void testDeadlock() {
@@ -80,7 +78,7 @@ public class Groovy2365Bug extends Groovy2365Base {
                     e.printStackTrace();
                 }
 
-                assertTrue(completed[0] && completed[1], "Potentially deadlock");
+                assertTrue("Potentially deadlock", completed[0] && completed[1]);
             }
         } finally {
             ResourceGroovyMethods.deleteDir(new File(path));
diff --git a/src/test/groovy/bugs/Groovy2391.groovy b/src/test/groovy/bugs/Groovy2391.groovy
index e527d4c275..29c46d51c9 100644
--- a/src/test/groovy/bugs/Groovy2391.groovy
+++ b/src/test/groovy/bugs/Groovy2391.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy239_Bug.groovy b/src/test/groovy/bugs/Groovy239_Bug.groovy
index 48153a176d..f4aca8d4af 100644
--- a/src/test/groovy/bugs/Groovy239_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy239_Bug.groovy
@@ -18,12 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
+class Groovy239_Bug extends GroovyTestCase {
 
-class Groovy239_Bug {
-
-    @Test
     void testBug() {
         def a = makeClosure()
         def b = makeClosure()
@@ -44,7 +42,6 @@ class Groovy239_Bug {
         return { it() }
     }
 
-    @Test
     void testBug2() {
         def a = { it() }
         def b = { it() }
diff --git a/src/test/groovy/bugs/Groovy2490Bug.groovy b/src/test/groovy/bugs/Groovy2490Bug.groovy
index 4f31515578..d29ac6e2c2 100644
--- a/src/test/groovy/bugs/Groovy2490Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2490Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 
-import static org.junit.jupiter.api.Assertions.assertEquals
-
-
-class Groovy2490Bug {
+class Groovy2490Bug extends GroovyTestCase {
     void test () {
         assertEquals One.foo, "hello"
         assertEquals Two.foo, "goodbye"
diff --git a/src/test/groovy/bugs/Groovy252_Bug.groovy b/src/test/groovy/bugs/Groovy252_Bug.groovy
index b73aa47e3f..90fae27ee7 100644
--- a/src/test/groovy/bugs/Groovy252_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy252_Bug.groovy
@@ -18,16 +18,14 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
+import groovy.test.GroovyTestCase
 
 /**
  */
-class Groovy252_Bug {
+class Groovy252_Bug extends GroovyTestCase {
 
     def count = 0
 
-    @Test
     void testBug() {
         def value = f()
         assert value == null
diff --git a/src/test/groovy/bugs/Groovy2549Bug.groovy b/src/test/groovy/bugs/Groovy2549Bug.groovy
index e2309776ee..5ef9f65d20 100644
--- a/src/test/groovy/bugs/Groovy2549Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2549Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy2549Bug {
-    @Test
+class Groovy2549Bug extends GroovyTestCase {
     void test2549() {
         def c = 2
         def x = 1 + (c as int)
diff --git a/src/test/groovy/bugs/Groovy2556Bug.groovy b/src/test/groovy/bugs/Groovy2556Bug.groovy
index 9a98bb5da8..f7e2ed5d09 100644
--- a/src/test/groovy/bugs/Groovy2556Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2556Bug.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.BeforeEach
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static org.junit.jupiter.api.Assertions.assertEquals
-
-
-class Groovy2556Bug {
+class Groovy2556Bug extends GroovyTestCase {
     final String SOME_METHOD_VALUE = 'someMethodValue'
     final String TEST_NAME = 'someName'
 
@@ -32,7 +28,6 @@ class Groovy2556Bug {
 
     Map names
 
-    @BeforeEach
     void setUp() {
         names = [:]
     }
@@ -43,7 +38,6 @@ class Groovy2556Bug {
         count++;
     }
 
-    @Test
     void testCompile () {
         new GroovyShell().parse ("""
         def arr = [2:0]
@@ -51,17 +45,14 @@ class Groovy2556Bug {
         """).run ()
     }
 
-    @Test
     void testAssignmentWithString() {
         assertEquals(SOME_METHOD_VALUE, someMethod())
     }
 
-    @Test
     void testAssignmentWithMap() {
         assertEquals(TEST_NAME, addName(TEST_NAME))
     }
 
-    @Test
     void testAssignmentWithReturnMap() {
         assertEquals(TEST_NAME, addNameWithReturn(TEST_NAME))
     }
@@ -78,34 +69,29 @@ class Groovy2556Bug {
         return names[name] = name
     }
 
-    @Test
     void testArrayAssignment() {
         def arr = [*0..4]
         assert 33 == (arr[2] = 33)
         assert 55 == (arr[2] += 22)
     }
 
-    @Test
     void testArrayAssignmentInClosure() {
         def arr = [*0..4]
         assert 55 == { arr[2] = 55 }.call()
         assert 88 == { arr[2] += 33 }.call()
     }
 
-    @Test
     void testVarAssignment() {
         def var = 1
         assert 77 == ( var = 77)
     }
 
-    @Test
     void testVarAssignmentInClosure() {
         def var = 1
         assert 22 == { var = 22 }.call()
         assert 55 == { var += 33 }.call()
     }
 
-    @Test
     void testReusableExpression() {
         def arr = [*1..5]
         assert 34 == (arr[getCount()] += 33)
diff --git a/src/test/groovy/bugs/Groovy2557Bug.groovy b/src/test/groovy/bugs/Groovy2557Bug.groovy
index 7ab7d02487..173d3cc4ef 100644
--- a/src/test/groovy/bugs/Groovy2557Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2557Bug.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static org.junit.jupiter.api.Assertions.assertEquals
-
-
-class Groovy2557Bug{
-    @Test
+class Groovy2557Bug extends GroovyTestCase{
     void testArray2ListCoercion() {
         String[] args = ['a', 'b']
         List list = args as List
diff --git a/src/test/groovy/bugs/Groovy2558Bug.groovy b/src/test/groovy/bugs/Groovy2558Bug.groovy
index 9cc615dadc..fe62902cd4 100644
--- a/src/test/groovy/bugs/Groovy2558Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2558Bug.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static org.junit.jupiter.api.Assertions.assertEquals
-
-
-class Groovy2558Bug {
-    @Test
+class Groovy2558Bug extends GroovyTestCase {
     void testMe () {
         Person person = new Person()
         String propertyName = 'name'
diff --git a/src/test/groovy/bugs/Groovy2666Bug.groovy b/src/test/groovy/bugs/Groovy2666Bug.groovy
index 44331e9700..216a8728a2 100644
--- a/src/test/groovy/bugs/Groovy2666Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2666Bug.groovy
@@ -18,18 +18,15 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.GroovyBugError
-import org.junit.jupiter.api.Test
 
-import static org.junit.jupiter.api.Assertions.fail
-
-class Groovy2666Bug{
+class Groovy2666Bug extends GroovyTestCase{
 
     private void ex () {
         throw new GroovyBugError ("ERR")
     }
 
-    @Test
     void testMe () {
 
         try {
diff --git a/src/test/groovy/bugs/Groovy2706Bug.groovy b/src/test/groovy/bugs/Groovy2706Bug.groovy
index 4a86564b71..0115b5c6e4 100644
--- a/src/test/groovy/bugs/Groovy2706Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2706Bug.groovy
@@ -18,13 +18,11 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-public class Groovy2706Bug {
+public class Groovy2706Bug extends GroovyTestCase {
     static counter = 0
 
-    @Test
     void testStaticAccessWithIncAndDec() {
         ++Groovy2706Bug.counter
         assert counter == 1
diff --git a/src/test/groovy/bugs/Groovy2773Bug.groovy b/src/test/groovy/bugs/Groovy2773Bug.groovy
index 4a6fec06e7..64425a62d9 100644
--- a/src/test/groovy/bugs/Groovy2773Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2773Bug.groovy
@@ -18,8 +18,9 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 
-class Groovy2773Bug {
+class Groovy2773Bug extends GroovyTestCase {
     void test() {
         assertScript '''
             class DateTime {
@@ -36,8 +37,6 @@ class Groovy2773Bug {
             }
 
             import static Utils.nowUTC
-import org.junit.jupiter.api.Test
-import static groovy.test.GroovyAssert.*
 
             DateTime baseDate = Utils.nowUTC()
             Long now = new Date().getTime()
diff --git a/src/test/groovy/bugs/Groovy278_Bug.groovy b/src/test/groovy/bugs/Groovy278_Bug.groovy
index fd43585bd0..7d49bc36db 100644
--- a/src/test/groovy/bugs/Groovy278_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy278_Bug.groovy
@@ -18,14 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
+class Groovy278_Bug extends GroovyTestCase {
 
-
-class Groovy278_Bug {
-
-    @Test
     void testBug() {
         assertScript '''
         class MyRange extends IntRange {
diff --git a/src/test/groovy/bugs/Groovy2801Bug.groovy b/src/test/groovy/bugs/Groovy2801Bug.groovy
index 74ab348478..dabd9f150d 100644
--- a/src/test/groovy/bugs/Groovy2801Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2801Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy2801Bug {
-    @Test
+class Groovy2801Bug extends GroovyTestCase {
     void testOverrideToStringInMapOfClosures() {
         def proxyImpl = [foo: { "Foo!" }, toString: { "overridden." }] as IGroovy2801Bug
         assert proxyImpl.toString() == "overridden."
diff --git a/src/test/groovy/bugs/Groovy2816Bug.groovy b/src/test/groovy/bugs/Groovy2816Bug.groovy
index e8d9513f9b..2f79fdad43 100644
--- a/src/test/groovy/bugs/Groovy2816Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2816Bug.groovy
@@ -18,18 +18,15 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy2816Bug{
-    @Test
+class Groovy2816Bug extends GroovyTestCase{
     void testMapWithBigListAsValue () {
          [
             "037" : [101110,101120,101210,101220,101300,101400,102101,102102,103101,103102,103200,103300,103400,104103,104104,104105,104106,104107,104201,104202,104310,104320,104401,104402,104500,104610,104620,104701,104702,104810,104820,106010,106020,106111,106112,106113,106114,106402,106403,106404,106510,106520,106602,106603,106604,106605,106606,106641,106642,106643,107010,107020,108101,108102,108103,108104,108200,109100,109200,109300,109400,109500,109601,109602,109700,109800,111100,11 [...]
          ]
     }
 
-    @Test
     void testScriptReturningBigListAsResult () {
         new GroovyShell().evaluate """
      [101110,101120,101210,101220,101300,101400,102101,102102,103101,103102,103200,103300,103400,104103,104104,104105,104106,104107,104201,104202,104310,104320,104401,104402,104500,104610,104620,104701,104702,104810,104820,106010,106020,106111,106112,106113,106114,106402,106403,106404,106510,106520,106602,106603,106604,106605,106606,106641,106642,106643,107010,107020,108101,108102,108103,108104,108200,109100,109200,109300,109400,109500,109601,109602,109700,109800,111100,111201,111202,111 [...]
@@ -37,7 +34,6 @@ class Groovy2816Bug{
 """
     }
 
-    @Test
     void testClassWithMethodReturningMapWithBigListAsValue () {
         assert new GroovyShell().parse ("""
 class A239 {
diff --git a/src/test/groovy/bugs/Groovy2849Bug.groovy b/src/test/groovy/bugs/Groovy2849Bug.groovy
index 06c9677f66..4f2d65bcb3 100644
--- a/src/test/groovy/bugs/Groovy2849Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2849Bug.groovy
@@ -18,7 +18,9 @@
  */
 package bugs
 
-class Groovy2849Bug {
+import groovy.test.GroovyTestCase
+
+class Groovy2849Bug extends GroovyTestCase {
     def void testPropertySelectionConflictInANestedClosure(){
         assert c1() == 11
         assert p == 11
diff --git a/src/test/groovy/bugs/Groovy2949Bug.groovy b/src/test/groovy/bugs/Groovy2949Bug.groovy
index e974e3c1a3..9782aa56eb 100644
--- a/src/test/groovy/bugs/Groovy2949Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2949Bug.groovy
@@ -18,7 +18,9 @@
  */
 package bugs
 
-class Groovy2949Bug {
+import groovy.test.GroovyTestCase
+
+class Groovy2949Bug extends GroovyTestCase {
     void testBug () {
         new GroovyShell().evaluate """
         public abstract class A { abstract protected void doIt() }
diff --git a/src/test/groovy/bugs/Groovy2951.groovy b/src/test/groovy/bugs/Groovy2951.groovy
index ab11f6aa3b..1e61cb9e3e 100644
--- a/src/test/groovy/bugs/Groovy2951.groovy
+++ b/src/test/groovy/bugs/Groovy2951.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 final class Groovy2951 {
 
diff --git a/src/test/groovy/bugs/Groovy308_Bug.groovy b/src/test/groovy/bugs/Groovy308_Bug.groovy
index 9c94119f22..c5f5177f8e 100644
--- a/src/test/groovy/bugs/Groovy308_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy308_Bug.groovy
@@ -18,13 +18,14 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
+
+import java.io.*
 
 /**
  */
-class Groovy308_Bug {
+class Groovy308_Bug extends GroovyTestCase {
 
-    @Test
     void testBug() {
         def out = new StringWriter()
         out << "hello " << "world!"
diff --git a/src/test/groovy/bugs/Groovy3135Bug.groovy b/src/test/groovy/bugs/Groovy3135Bug.groovy
index f8df22d519..069e4f5957 100644
--- a/src/test/groovy/bugs/Groovy3135Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3135Bug.groovy
@@ -18,10 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy3135Bug {
+class Groovy3135Bug extends GroovyTestCase {
     static Byte b = Byte.parseByte("1")
     static Short s = Short.parseShort("2")
     static Integer i = Integer.parseInt("3")
@@ -33,7 +32,6 @@ class Groovy3135Bug {
 
     def values
 
-    @Test
     void testConversionForPrimitiveTypeVarArgs() {
 
         setVarArgsShort("", b, s)
diff --git a/src/test/groovy/bugs/Groovy3139Bug.groovy b/src/test/groovy/bugs/Groovy3139Bug.groovy
index 16d61fd26d..0567fbb991 100644
--- a/src/test/groovy/bugs/Groovy3139Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3139Bug.groovy
@@ -19,11 +19,10 @@
 package bugs
 
 import groovy.mock.interceptor.StubFor
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-class Groovy3139Bug {
+class Groovy3139Bug extends GroovyTestCase {
 
-    @Test
     void testStubbingIssueDueToCachingWhenUsing2Stubs() {
         def urlStub1 = new StubFor(URL)
         urlStub1.demand.openConnection {""}
diff --git a/src/test/groovy/bugs/Groovy3156And2621Bug.groovy b/src/test/groovy/bugs/Groovy3156And2621Bug.groovy
index 98303d39ce..be18f91bab 100644
--- a/src/test/groovy/bugs/Groovy3156And2621Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3156And2621Bug.groovy
@@ -18,17 +18,14 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy3156And2621Bug {
-    @Test
+class Groovy3156And2621Bug extends GroovyTestCase {
     void testMethodNameResolutionInANestedClosure() {
         assert m() == 'method'
         assert c1() == 'method'
     }
 
-    @Test
     void testSimilarNamesForMethodAndLocalWithLocalAsMethodArgument() {
         failingExecute()
     }
diff --git a/src/test/groovy/bugs/Groovy3163Bug.groovy b/src/test/groovy/bugs/Groovy3163Bug.groovy
index b230bf1c28..30ca75f023 100644
--- a/src/test/groovy/bugs/Groovy3163Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3163Bug.groovy
@@ -18,12 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
+class Groovy3163Test extends GroovyTestCase {
 
-class Groovy3163Test {
-
-@Test
 void testSuperOverStatic() {
     def siws = new Groovy3163SomeImplementorWithStatic()
 
diff --git a/src/test/groovy/bugs/Groovy3175_Bug.groovy b/src/test/groovy/bugs/Groovy3175_Bug.groovy
index 2c8e78b0ea..c63619d2c5 100644
--- a/src/test/groovy/bugs/Groovy3175_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3175_Bug.groovy
@@ -18,13 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
+class Groovy3175_Bug extends GroovyTestCase {
 
-class Groovy3175_Bug {
-
-    @Test
     void testSyntheticModifier() {
         assertScript """
         import groovy.transform.Generated
diff --git a/src/test/groovy/bugs/Groovy3205Bug.groovy b/src/test/groovy/bugs/Groovy3205Bug.groovy
index a6aa11e807..478ebea0e1 100644
--- a/src/test/groovy/bugs/Groovy3205Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3205Bug.groovy
@@ -18,7 +18,9 @@
  */
 package bugs
 
-class Groovy3205Bug {
+import groovy.test.GroovyTestCase
+
+class Groovy3205Bug extends GroovyTestCase {
     def void testOverrideToStringInMapOfClosures() {
         def proxyImpl = [
                 control: { "new control" },
diff --git a/src/test/groovy/bugs/Groovy3208Bug.groovy b/src/test/groovy/bugs/Groovy3208Bug.groovy
index deff49f176..f6f1506c99 100644
--- a/src/test/groovy/bugs/Groovy3208Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3208Bug.groovy
@@ -18,14 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static org.junit.jupiter.api.Assertions.assertEquals
+class Groovy3208Bug extends GroovyTestCase {
 
-
-class Groovy3208Bug {
-
-    @Test
     void testBug() {
         new Sub().each { assertEquals("ABC", it.doIt()) }
 
diff --git a/src/test/groovy/bugs/Groovy3235Bug.groovy b/src/test/groovy/bugs/Groovy3235Bug.groovy
index 9031fdad81..883e410edf 100644
--- a/src/test/groovy/bugs/Groovy3235Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3235Bug.groovy
@@ -18,12 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
+class Groovy3235Bug extends GroovyTestCase {
 
-class Groovy3235Bug {
-
-@Test
 void testBug3235 () {
       def d = """This is one line.
 
diff --git a/src/test/groovy/bugs/Groovy3238Bug.groovy b/src/test/groovy/bugs/Groovy3238Bug.groovy
index 45eada942e..5075cf296f 100644
--- a/src/test/groovy/bugs/Groovy3238Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3238Bug.groovy
@@ -18,7 +18,9 @@
  */
 package bugs
 
-class Groovy3238Bug {
+import groovy.test.GroovyTestCase
+
+class Groovy3238Bug extends GroovyTestCase {
     def void testRelativeExactnessToMatchForBigIntegerParam() {
         def obj = new Groovy3238Bug()
         def bi = new BigInteger("1")
diff --git a/src/test/groovy/bugs/Groovy325_Bug.groovy b/src/test/groovy/bugs/Groovy325_Bug.groovy
index 241c000356..251aeb3f15 100644
--- a/src/test/groovy/bugs/Groovy325_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy325_Bug.groovy
@@ -18,15 +18,13 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy325_Bug {
+class Groovy325_Bug extends GroovyTestCase {
   static boolean staticMethod() {
     return true
   }
 
-  @Test
   void testCallStaticMethodFromClosure() {
     def c = { staticMethod() }
     assert c()
diff --git a/src/test/groovy/bugs/Groovy3304Bug.groovy b/src/test/groovy/bugs/Groovy3304Bug.groovy
index b91ca1e284..10389a496d 100644
--- a/src/test/groovy/bugs/Groovy3304Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3304Bug.groovy
@@ -18,13 +18,10 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
-import org.junit.jupiter.api.Test
 
-import static org.junit.jupiter.api.Assertions.fail
-
-class Groovy3304Bug {
-    @Test
+class Groovy3304Bug extends GroovyTestCase {
     void testBreakAfterSwitchCausesSyntaxError() {
         try {
             new GroovyShell().parse("switch(x) {}\nbreak")
diff --git a/src/test/groovy/bugs/Groovy3305Bug.groovy b/src/test/groovy/bugs/Groovy3305Bug.groovy
index f9654f2b96..cb51101c51 100644
--- a/src/test/groovy/bugs/Groovy3305Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3305Bug.groovy
@@ -18,7 +18,9 @@
  */
 package bugs
 
-class Groovy3305Bug {
+import groovy.test.GroovyTestCase
+
+class Groovy3305Bug extends GroovyTestCase {
     def void testSingleListExpandingToMultipleArgs() {
         assert foo1([1, "A"]) == "1,A"
         assert foo2([BigDecimal.ZERO, "B"]) == "0,B"
diff --git a/src/test/groovy/bugs/Groovy3311.groovy b/src/test/groovy/bugs/Groovy3311.groovy
index 8d0b303264..1e9ba76905 100644
--- a/src/test/groovy/bugs/Groovy3311.groovy
+++ b/src/test/groovy/bugs/Groovy3311.groovy
@@ -19,7 +19,7 @@
 package bugs
 
 import groovy.transform.CompileStatic
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy3335Bug.groovy b/src/test/groovy/bugs/Groovy3335Bug.groovy
index c545df933b..4cc2c30191 100644
--- a/src/test/groovy/bugs/Groovy3335Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3335Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy3335Bug {
-    @Test
+class Groovy3335Bug extends GroovyTestCase {
     void testClassToString() {
         // the following call was resulting in a MethodSelectionException
         // because Integer class defines static toString(int) and toString(int, int) methods
diff --git a/src/test/groovy/bugs/Groovy3339Bug.groovy b/src/test/groovy/bugs/Groovy3339Bug.groovy
index b229d75667..bacc6d615a 100644
--- a/src/test/groovy/bugs/Groovy3339Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3339Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy3339Bug {
-    @Test
+class Groovy3339Bug extends GroovyTestCase {
     void testConstantCachingInClosureClasses() {
         // In all the cases below, the OptimizerVisitor replaces number 10 by
         // the cached constant in the closure class, which it is not supposed
diff --git a/src/test/groovy/bugs/Groovy3383Bug.groovy b/src/test/groovy/bugs/Groovy3383Bug.groovy
index 92f0d68c61..ec5bb591b0 100644
--- a/src/test/groovy/bugs/Groovy3383Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3383Bug.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
-
-
-class Groovy3383Bug {
-    @Test
+class Groovy3383Bug extends GroovyTestCase {
     void testClassUsageInInterfaceDef() {
         assertScript """
             interface Groovy3383 {
diff --git a/src/test/groovy/bugs/Groovy3389Bug.groovy b/src/test/groovy/bugs/Groovy3389Bug.groovy
index af3b67c97f..b0bc612ab3 100644
--- a/src/test/groovy/bugs/Groovy3389Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3389Bug.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
-
-
-class Groovy3389Bug {
-    @Test
+class Groovy3389Bug extends GroovyTestCase {
     void testFieldHidingByLocalVariable() {
         assertScript """
             class Groovy3389 {
diff --git a/src/test/groovy/bugs/Groovy3403Bug.groovy b/src/test/groovy/bugs/Groovy3403Bug.groovy
index 91822345f3..2ac12398ab 100644
--- a/src/test/groovy/bugs/Groovy3403Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3403Bug.groovy
@@ -19,11 +19,10 @@
 package bugs
 
 import groovy.mock.interceptor.StubFor
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-class Groovy3403Bug {
+class Groovy3403Bug extends GroovyTestCase {
 
-    @Test
     void testStubIssueForStaticMethodsDueToCallSiteCachingWhenUsing2Stubs() {
         def stub1 = new StubFor(Main3403)
         stub1.demand.test() {
diff --git a/src/test/groovy/bugs/Groovy3405Bug.groovy b/src/test/groovy/bugs/Groovy3405Bug.groovy
index ee8a1d78bb..6c21b705a1 100644
--- a/src/test/groovy/bugs/Groovy3405Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3405Bug.groovy
@@ -18,17 +18,14 @@
  */
 package bugs
 
-import org.junit.jupiter.api.AfterEach
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-class Groovy3405Bug {
+class Groovy3405Bug extends GroovyTestCase {
 
-    @AfterEach
-    void tearDown() {
+    protected void tearDown() {
         String.metaClass = null
     }
 
-    @Test
     void testAddingStaticMethodsOnMCWithDefaultParameters() {
         // test with 2 params having default values
         String.metaClass.'static'.testStaticTwoParams = { first = "foo", second = "bar" ->  return "$first - $second" }
diff --git a/src/test/groovy/bugs/Groovy3410Bug.groovy b/src/test/groovy/bugs/Groovy3410Bug.groovy
index 1f78813c28..7239fc0bab 100644
--- a/src/test/groovy/bugs/Groovy3410Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3410Bug.groovy
@@ -18,14 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
+class Groovy3410Bug extends GroovyTestCase {
 
-
-class Groovy3410Bug {
-
-    @Test
     void testClassVerificationErrorsWithBooleanExpUsingPrimitiveFields() {
         assertScript """
             class Groovy3405N1 {
diff --git a/src/test/groovy/bugs/Groovy3422.groovy b/src/test/groovy/bugs/Groovy3422.groovy
index c47f2e1567..1f10eb76d2 100644
--- a/src/test/groovy/bugs/Groovy3422.groovy
+++ b/src/test/groovy/bugs/Groovy3422.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy3424Bug.groovy b/src/test/groovy/bugs/Groovy3424Bug.groovy
index 2ff972d143..d7e5822380 100644
--- a/src/test/groovy/bugs/Groovy3424Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3424Bug.groovy
@@ -18,27 +18,22 @@
  */
 package bugs
 
-import org.junit.jupiter.api.AfterEach
-import org.junit.jupiter.api.BeforeEach
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-class Groovy3424Bug {
+class Groovy3424Bug extends GroovyTestCase {
 
     MetaClassRegistry registry
     MetaClass originalMetaClass
 
-    @BeforeEach
     void setUp() {
         registry = GroovySystem.metaClassRegistry
         originalMetaClass = registry.getMetaClass(Groovy3424Foo)
     }
 
-    @AfterEach
     void tearDown() {
         registry.setMetaClass(Groovy3424Foo, originalMetaClass)
     }
 
-    @Test
     void testCallSiteShouldBeUpdatedAfterProxyMetaClassIsSet() {
         def newFoo = { -> new Groovy3424Foo() }
 
@@ -52,7 +47,6 @@ class Groovy3424Bug {
         assert 'constructor' == newFoo()
     }
 
-    @Test
     void testExpandoCallSiteShouldBeUpdatedAfterProxyMetaClassIsSet() {
         Groovy3424Foo.metaClass.constructor << { String test -> 'foo' }
 
@@ -68,7 +62,6 @@ class Groovy3424Bug {
         assert 'constructor' == newFoo()
     }
 
-    @Test
     void testCallSiteShouldBeUpdatedAfterOriginalMetaClassIsRestored() {
         def newFoo = { -> new Groovy3424Foo() }
 
diff --git a/src/test/groovy/bugs/Groovy3426Bug.groovy b/src/test/groovy/bugs/Groovy3426Bug.groovy
index 99d8594f88..59afdc18c0 100644
--- a/src/test/groovy/bugs/Groovy3426Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3426Bug.groovy
@@ -18,27 +18,22 @@
  */
 package bugs
 
-import org.junit.jupiter.api.AfterEach
-import org.junit.jupiter.api.BeforeEach
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-class Groovy3426Bug {
+class Groovy3426Bug extends GroovyTestCase {
 
     MetaClassRegistry registry
     MetaClass originalMetaClass
 
-    @BeforeEach
     void setUp() {
         registry = GroovySystem.metaClassRegistry
         originalMetaClass = registry.getMetaClass(Groovy3426Foo)
     }
 
-    @AfterEach
     void tearDown() {
         registry.setMetaClass(Groovy3426Foo, originalMetaClass)
     }
 
-    @Test
     void testCallSiteShouldBeUpdatedAfterOriginalMetaClassIsRestored() {
         def getFoo = { -> Groovy3426Foo.get() }
 
diff --git a/src/test/groovy/bugs/Groovy3446Bug.groovy b/src/test/groovy/bugs/Groovy3446Bug.groovy
index f4d50310ad..4f060f3875 100644
--- a/src/test/groovy/bugs/Groovy3446Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3446Bug.groovy
@@ -18,10 +18,11 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-class Groovy3446Bug {
-    @Test
+import static java.lang.System.currentTimeMillis
+
+class Groovy3446Bug extends GroovyTestCase {
     void testLocalMethodFavoredOverStaticallyImportedMethod() {
         assert currentTimeMillis() == "local method called"
     }
diff --git a/src/test/groovy/bugs/Groovy3462Bug.groovy b/src/test/groovy/bugs/Groovy3462Bug.groovy
index b239a167d3..a826a37ab0 100644
--- a/src/test/groovy/bugs/Groovy3462Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3462Bug.groovy
@@ -18,14 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
+class Groovy3462Bug extends GroovyTestCase {
 
-
-class Groovy3462Bug {
-
-    @Test
     void testClosureWithParameterHavingDefaultExpression() {
         assertScript """
             month = { String date = new Date().format("yyyyMM") ->
diff --git a/src/test/groovy/bugs/Groovy3464Bug.groovy b/src/test/groovy/bugs/Groovy3464Bug.groovy
index 768434a366..829975a9fb 100644
--- a/src/test/groovy/bugs/Groovy3464Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3464Bug.groovy
@@ -18,26 +18,22 @@
  */
 package bugs
 
-import org.codehaus.groovy.control.CompilerConfiguration
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.tools.javac.JavaAwareCompilationUnit
-import org.junit.jupiter.api.AfterEach
-import org.junit.jupiter.api.BeforeEach
-import org.junit.jupiter.api.Test
-
-import static groovy.test.GroovyAssert.shouldFail
+import org.codehaus.groovy.control.CompilerConfiguration
 
 /**
  * GROOVY-3463:
  * Spring/CGLIB proxies throw exception "object is not an instance of declaring class"
  */
-class Groovy3464Bug {
+class Groovy3464Bug extends GroovyTestCase {
 
     GroovyShell shell
     CompilerConfiguration config
     File targetDir, stubDir
 
-    @BeforeEach
-    void setUp() {
+    protected void setUp() {
+        super.setUp()
 
         config = new CompilerConfiguration()
         config.with {
@@ -77,16 +73,15 @@ class Groovy3464Bug {
 
     }
 
-    @AfterEach
-    void tearDown() {
+    protected void tearDown() {
         config.targetDirectory?.deleteDir()
         config.jointCompilationOptions?.stubDir?.deleteDir()
         targetDir?.deleteDir()
         stubDir?.deleteDir()
 
+        super.tearDown()
     }
 
-    @Test
     void testScenarioOne() {
         shouldFail(MissingMethodException) {
             shell.evaluate '''
@@ -100,7 +95,6 @@ class Groovy3464Bug {
         }
     }
 
-    @Test
     void testScenarioTwo() {
         shell.evaluate '''
             def t = new GroovyThing()
diff --git a/src/test/groovy/bugs/Groovy3465Bug.groovy b/src/test/groovy/bugs/Groovy3465Bug.groovy
index 98907bf28e..401112faa7 100644
--- a/src/test/groovy/bugs/Groovy3465Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3465Bug.groovy
@@ -18,12 +18,11 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static bugs.Groovy3465Helper.func
+import static bugs.Groovy3465Helper.*
 
-class Groovy3465Bug {
-    @Test
+class Groovy3465Bug extends GroovyTestCase {
     void testCallingAStaticImportedMethodWithNamedParamaters() {
 
         func text: 'Some text', value: 1
diff --git a/src/test/groovy/bugs/Groovy3498Bug.groovy b/src/test/groovy/bugs/Groovy3498Bug.groovy
index db41540b60..3e61859703 100644
--- a/src/test/groovy/bugs/Groovy3498Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3498Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy3498Bug {
-    @Test
+class Groovy3498Bug extends GroovyTestCase {
     void testClosureExpressionFiltering() {
         new GroovyShell().evaluate """
         { -> assert false, 'This statement should not have been executed' }
diff --git a/src/test/groovy/bugs/Groovy3509Bug.groovy b/src/test/groovy/bugs/Groovy3509Bug.groovy
index 4606361fcc..e21c91d36e 100644
--- a/src/test/groovy/bugs/Groovy3509Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3509Bug.groovy
@@ -18,12 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
+class Groovy3509Bug extends GroovyTestCase {
 
-class Groovy3509Bug {
-
-    @Test
     void testGPathInconcistency() {
         def data = [
                 [a: null],
@@ -47,7 +45,6 @@ class Groovy3509Bug {
         assert data.a.b.c.sum() == 3
     }
 
-    @Test
     void testOriginalCase() {
         // initialize structure
         def root = new Root()
diff --git a/src/test/groovy/bugs/Groovy3511Bug.groovy b/src/test/groovy/bugs/Groovy3511Bug.groovy
index 9bcb61d9da..1de4a5c6e2 100644
--- a/src/test/groovy/bugs/Groovy3511Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3511Bug.groovy
@@ -18,15 +18,11 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation
-import org.junit.jupiter.api.Test
 
-import static org.junit.jupiter.api.Assertions.assertTrue
-import static org.junit.jupiter.api.Assertions.fail
-
-class Groovy3511Bug {
+class Groovy3511Bug extends GroovyTestCase {
     final SHOULD_HAVE_FAILED = "The conversion above should have failed"
-    @Test
     void testExceptionMessageStringToNumberConversion() {
         try {
             Double test = "Hello"
diff --git a/src/test/groovy/bugs/Groovy3519Bug.groovy b/src/test/groovy/bugs/Groovy3519Bug.groovy
index 6817c19209..2199e7c75f 100644
--- a/src/test/groovy/bugs/Groovy3519Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3519Bug.groovy
@@ -18,14 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
+class Groovy3519Bug extends GroovyTestCase {
 
-
-class Groovy3519Bug {
-
-    @Test
     void testShouldSkipPrivateMethodsFromCovariantReturnTypeChecks() {
         assertScript '''
             class A {
@@ -42,7 +38,6 @@ class Groovy3519Bug {
         '''
     }
 
-    @Test
     void testShouldSkipPrivateMethodsFromCovariantReturnTypeChecksCS() {
         assertScript '''import groovy.transform.CompileStatic
 
diff --git a/src/test/groovy/bugs/Groovy3560Bug.groovy b/src/test/groovy/bugs/Groovy3560Bug.groovy
index c50b16d2eb..e5a1f2e751 100644
--- a/src/test/groovy/bugs/Groovy3560Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3560Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy3560Bug {
-    @Test
+class Groovy3560Bug extends GroovyTestCase {
     void testVarArgsWithAnInterfaceAsVarArgArrayType() {
         assert Groovy3560Helper.m1(new Groovy3560A(), new Groovy3560B()) == 2
         assert Groovy3560Helper.m2("a", "b", new Groovy3560A(), new Groovy3560B()) == 2
diff --git a/src/test/groovy/bugs/Groovy3574Bug.groovy b/src/test/groovy/bugs/Groovy3574Bug.groovy
index 6705b08d6e..1f272a9ec7 100644
--- a/src/test/groovy/bugs/Groovy3574Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3574Bug.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static org.junit.jupiter.api.Assertions.fail
-
-
-class Groovy3574Bug {
-    @Test
+class Groovy3574Bug extends GroovyTestCase {
     void testToStringCallDelegationToConvertedClosureProxy() {
         Closure failing1 = {
             throw new RuntimeException("Call to this closure fails.")
diff --git a/src/test/groovy/bugs/Groovy3590Bug.groovy b/src/test/groovy/bugs/Groovy3590Bug.groovy
index 78a96dab5e..bff5e40a70 100644
--- a/src/test/groovy/bugs/Groovy3590Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3590Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy3590Bug {
-    @Test
+class Groovy3590Bug extends GroovyTestCase {
     void testMapDefaultValueGetWithPrevKeyHavingNullValue() {
         def map = ['key':null]
         assert map.get('key', this) == null
diff --git a/src/test/groovy/bugs/Groovy3679Bug.groovy b/src/test/groovy/bugs/Groovy3679Bug.groovy
index 3bc59ff034..ff85ee7c55 100644
--- a/src/test/groovy/bugs/Groovy3679Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3679Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy3679Bug {
-    @Test
+class Groovy3679Bug extends GroovyTestCase {
     void testMapEntryWinOverPvtAndPkgPrivateClassFields() {
         // map entry should win over a package-private field
         def map1 = new HashMap()
diff --git a/src/test/groovy/bugs/Groovy3716Bug.groovy b/src/test/groovy/bugs/Groovy3716Bug.groovy
index 74e0b41c69..2df9f5fec6 100644
--- a/src/test/groovy/bugs/Groovy3716Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3716Bug.groovy
@@ -18,14 +18,10 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.ast.ClassHelper
-import org.junit.jupiter.api.Test
 
-import static org.junit.jupiter.api.Assertions.assertFalse
-import static org.junit.jupiter.api.Assertions.assertTrue
-
-class Groovy3716Bug {
-    @Test
+class Groovy3716Bug extends GroovyTestCase {
     void testVoidAndObjectDerivedFromResults() {
         assertTrue ClassHelper.VOID_TYPE.isDerivedFrom(ClassHelper.VOID_TYPE)
         assertFalse ClassHelper.OBJECT_TYPE.isDerivedFrom(ClassHelper.VOID_TYPE)
diff --git a/src/test/groovy/bugs/Groovy3718Bug.groovy b/src/test/groovy/bugs/Groovy3718Bug.groovy
index 8f85a39354..052d135abd 100644
--- a/src/test/groovy/bugs/Groovy3718Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3718Bug.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static org.junit.jupiter.api.Assertions.assertFalse
-
-
-class Groovy3718Bug {
-    @Test
+class Groovy3718Bug extends GroovyTestCase {
     void testPatternMatchOfNull() {
         assertFalse null ==~ /[^0-9]+/
 
diff --git a/src/test/groovy/bugs/Groovy3719.groovy b/src/test/groovy/bugs/Groovy3719.groovy
index 7b74121e37..270db63e68 100644
--- a/src/test/groovy/bugs/Groovy3719.groovy
+++ b/src/test/groovy/bugs/Groovy3719.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.shouldFail
 
diff --git a/src/test/groovy/bugs/Groovy3720Bug.groovy b/src/test/groovy/bugs/Groovy3720Bug.groovy
index 5b438eb6bd..a2bddbea94 100644
--- a/src/test/groovy/bugs/Groovy3720Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3720Bug.groovy
@@ -18,12 +18,10 @@
  */
 package bugs
 
-import groovy.mock.interceptor.MockFor
-import groovy.mock.interceptor.StubFor
+import groovy.mock.interceptor.*
+import groovy.test.GroovyTestCase
 
-import static org.junit.jupiter.api.Assertions.assertNotNull
-
-class Groovy3720Bug {
+class Groovy3720Bug extends GroovyTestCase {
     void testCreateStubNode() {
         def stubNodeContext1 = new StubFor(AnotherNode3720)
         assertNotNull stubNodeContext1.proxyInstance()
diff --git a/src/test/groovy/bugs/Groovy3723Bug.groovy b/src/test/groovy/bugs/Groovy3723Bug.groovy
index cf1d778a9e..cf6d97a919 100644
--- a/src/test/groovy/bugs/Groovy3723Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3723Bug.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
-
-
-class Groovy3723Bug {
-    @Test
+class Groovy3723Bug extends GroovyTestCase {
     void testEMCPropertyAccessWitGetPropertySetProperty() {
         assertScript """
             class Dummy3723 {}
diff --git a/src/test/groovy/bugs/Groovy3726Bug.groovy b/src/test/groovy/bugs/Groovy3726Bug.groovy
index 1fe00c9f89..3d69319b83 100644
--- a/src/test/groovy/bugs/Groovy3726Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3726Bug.groovy
@@ -18,14 +18,11 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import java.lang.reflect.Modifier
+import java.lang.reflect.*
 
-import static org.junit.jupiter.api.Assertions.assertFalse
-
-class Groovy3726Bug {
-    @Test
+class Groovy3726Bug extends GroovyTestCase {
     void testVolatilePropertiesResultingInBridgeMethods() {
         def scriptStr, clazz, fooGetter, fooSetter
         GroovyClassLoader cl = new GroovyClassLoader();
@@ -46,7 +43,6 @@ class Groovy3726Bug {
         assertFalse Modifier.isVolatile(fooSetter.modifiers)
     }
 
-    @Test
     void testTransientPropertiesResultingInVarArgsMethods() {
         def scriptStr, clazz, barGetter, barSetter
         GroovyClassLoader cl = new GroovyClassLoader();
diff --git a/src/test/groovy/bugs/Groovy3749Bug.groovy b/src/test/groovy/bugs/Groovy3749Bug.groovy
index 9f3e09ca68..5c6bcad99c 100644
--- a/src/test/groovy/bugs/Groovy3749Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3749Bug.groovy
@@ -18,12 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.fail
-
-class Groovy3749Bug {
-    @Test
+class Groovy3749Bug extends GroovyTestCase {
     void testScriptsProvidingStaticMainMethod() {
         def scriptStr
 
@@ -94,7 +91,6 @@ class Groovy3749Bug {
         """
     }
 
-    @Test
     void testScriptsProvidingInstanceMainMethod() {
         def scriptStr
 
diff --git a/src/test/groovy/bugs/Groovy3770Bug.groovy b/src/test/groovy/bugs/Groovy3770Bug.groovy
index 452f1c279b..ac1908f7d7 100644
--- a/src/test/groovy/bugs/Groovy3770Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3770Bug.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
-
-
-class Groovy3770Bug {
-    @Test
+class Groovy3770Bug extends GroovyTestCase {
     void testSetDelegateAndResolveStrategyOnACurriedClosure() {
         assertScript """
             void hello(who) {
@@ -53,7 +49,6 @@ class Groovy3770Bug {
         """
     }
 
-    @Test
     void testCurriedClosuresShouldNotAffectParent() {
         // GROOVY-3875
         def orig = { tmp -> assert tmp == 1 }
diff --git a/src/test/groovy/bugs/Groovy3776Bug.groovy b/src/test/groovy/bugs/Groovy3776Bug.groovy
index 299c3374e1..cc411bb200 100644
--- a/src/test/groovy/bugs/Groovy3776Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3776Bug.groovy
@@ -18,14 +18,13 @@
  */
 package bugs
 
-import org.codehaus.groovy.GroovyBugError
-import org.codehaus.groovy.control.MultipleCompilationErrorsException
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static org.junit.jupiter.api.Assertions.fail
+import java.lang.reflect.*
+import org.codehaus.groovy.control.MultipleCompilationErrorsException
+import org.codehaus.groovy.GroovyBugError
 
-class Groovy3776Bug {
-    @Test
+class Groovy3776Bug extends GroovyTestCase {
     void testInvalidListWithMapEntryExpressions() {
         GroovyClassLoader cl = new GroovyClassLoader();
 
diff --git a/src/test/groovy/bugs/Groovy3784Bug.groovy b/src/test/groovy/bugs/Groovy3784Bug.groovy
index d7e0b7e900..13f9e52387 100644
--- a/src/test/groovy/bugs/Groovy3784Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3784Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy3784Bug {
-    @Test
+class Groovy3784Bug extends GroovyTestCase {
     void testUseOfDelegateAndThenGenericsSharingTheSameClassHelper() {
         GroovyClassLoader gcl = new GroovyClassLoader()
 
diff --git a/src/test/groovy/bugs/Groovy3799Bug.groovy b/src/test/groovy/bugs/Groovy3799Bug.groovy
index d7c7db2cfb..c935e8a6cc 100644
--- a/src/test/groovy/bugs/Groovy3799Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3799Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy37XXBug {
-    @Test
+class Groovy37XXBug extends GroovyTestCase {
     void testVarArgsWithAnInterfaceAsVarArgArrayTypeWithInheritenceInArgs() {
         def obj
 
diff --git a/src/test/groovy/bugs/Groovy3801Bug.groovy b/src/test/groovy/bugs/Groovy3801Bug.groovy
index 4be713753b..de84272232 100644
--- a/src/test/groovy/bugs/Groovy3801Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3801Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy3801Bug {
-    @Test
+class Groovy3801Bug extends GroovyTestCase {
     void testMainMethodSignature() {
         def gcl = new GroovyClassLoader()
         def clazz
diff --git a/src/test/groovy/bugs/Groovy3818Bug.groovy b/src/test/groovy/bugs/Groovy3818Bug.groovy
index 744db47066..f344b31380 100644
--- a/src/test/groovy/bugs/Groovy3818Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3818Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy3818Bug {
-    @Test
+class Groovy3818Bug extends GroovyTestCase {
     void testCreatingSimilarSetandMapWithComparator() {
         def scompare = { a, b -> a.id <=> b.id } as Comparator
 
diff --git a/src/test/groovy/bugs/Groovy3827Bug.groovy b/src/test/groovy/bugs/Groovy3827Bug.groovy
index fef55ee451..b97b1309c3 100644
--- a/src/test/groovy/bugs/Groovy3827Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3827Bug.groovy
@@ -18,11 +18,10 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
-import org.junit.jupiter.api.Test
 
-class Groovy3827Bug {
-    @Test
+class Groovy3827Bug extends GroovyTestCase {
     void testDuplicateCompilationErrorOnProperty() {
         GroovyClassLoader cl = new GroovyClassLoader();
 
diff --git a/src/test/groovy/bugs/Groovy3830Bug.groovy b/src/test/groovy/bugs/Groovy3830Bug.groovy
index d79c6c67d6..0d3c9b8903 100644
--- a/src/test/groovy/bugs/Groovy3830Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3830Bug.groovy
@@ -18,18 +18,15 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy3830Bug {
-    @Test
+class Groovy3830Bug extends GroovyTestCase {
     void testCallSitesUsageInAnInterface() {
         assert I3830.i == 2
         assert I3830.i2 == 5
         assert I3830.i3 == 6
     }
 
-    @Test
     void testCallSitesUsageInNestedInterface() {
         assert C3830.I3830.i == 2
         assert C3830.I3830.i2 == 5
diff --git a/src/test/groovy/bugs/Groovy3831Bug.groovy b/src/test/groovy/bugs/Groovy3831Bug.groovy
index 9843f6bd3e..90e55313a1 100644
--- a/src/test/groovy/bugs/Groovy3831Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3831Bug.groovy
@@ -18,18 +18,15 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy3831Bug {
-    @Test
+class Groovy3831Bug extends GroovyTestCase {
     void testClosureDefinitionInSpecialCallsInConstructorsV1() {
         def test = new Test3831V1('hello', ["world"])
         assert test.string == 'hello'
         assert test.uris.size() == 1
     }
 
-    @Test
     void testClosureDefinitionInSpecialCallsInConstructorsV2() {
         // just loading of class is test enough as it was giving VerifyError earlier.
         new Test3831V2()
diff --git a/src/test/groovy/bugs/Groovy3834Bug.groovy b/src/test/groovy/bugs/Groovy3834Bug.groovy
index 4938ac64ab..c99a70020f 100644
--- a/src/test/groovy/bugs/Groovy3834Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3834Bug.groovy
@@ -18,14 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.shouldFail
-import static org.junit.jupiter.api.Assertions.assertEquals
-
-
-class Groovy3834Bug {
-    @Test
+class Groovy3834Bug extends GroovyTestCase {
     void testDuplicateCallsToMissingMethod() {
         def instance = new AClassWithMethodMissingMethod()
         shouldFail MissingMethodException, { instance.someMissingMethod() }
diff --git a/src/test/groovy/bugs/Groovy3839.groovy b/src/test/groovy/bugs/Groovy3839.groovy
index 83fe8a39e7..7ab364e969 100644
--- a/src/test/groovy/bugs/Groovy3839.groovy
+++ b/src/test/groovy/bugs/Groovy3839.groovy
@@ -19,7 +19,7 @@
 package bugs
 
 import groovy.transform.CompileStatic
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 import static groovy.test.GroovyAssert.shouldFail
@@ -61,7 +61,7 @@ final class Groovy3839 {
             class G3839V3 {}
             new G3839V3()
         '''
-        assert err.message =~ '@GroovyASTTransformationClass in bugs.G3839A3 does not specify any transform class names or types'
+        assert err =~ '@GroovyASTTransformationClass in bugs.G3839A3 does not specify any transform class names or types'
     }
 
     @Test
@@ -73,6 +73,6 @@ final class Groovy3839 {
             class G3839V4 {}
             new G3839V4()
         '''
-        assert err.message =~ '@GroovyASTTransformationClass in bugs.G3839A4 should specify transforms by name or by type, not by both'
+        assert err =~ '@GroovyASTTransformationClass in bugs.G3839A4 should specify transforms by name or by type, not by both'
     }
 }
diff --git a/src/test/groovy/bugs/Groovy3852.groovy b/src/test/groovy/bugs/Groovy3852.groovy
index 7c78c52ca2..2faa898d69 100644
--- a/src/test/groovy/bugs/Groovy3852.groovy
+++ b/src/test/groovy/bugs/Groovy3852.groovy
@@ -19,8 +19,8 @@
 package bugs
 
 import groovy.transform.CompileStatic
-import org.junit.jupiter.api.Assertions
-import org.junit.jupiter.api.Test
+import org.junit.Assert
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 import static groovy.test.GroovyAssert.shouldFail
@@ -37,7 +37,7 @@ final class Groovy3852 {
             class A {}
         '''
 
-        assert err.message =~ /Cannot specify duplicate annotation/
+        assert err =~ /Cannot specify duplicate annotation/
     }
 
     @Test
@@ -49,7 +49,7 @@ final class Groovy3852 {
             @interface B {}
         '''
 
-        assert err.message =~ /Cannot specify duplicate annotation/
+        assert err =~ /Cannot specify duplicate annotation/
     }
 
     @Test
@@ -63,7 +63,7 @@ final class Groovy3852 {
             }
         '''
 
-        assert err.message =~ /Cannot specify duplicate annotation/
+        assert err =~ /Cannot specify duplicate annotation/
 
         err = shouldFail '''
             class D {
@@ -74,7 +74,7 @@ final class Groovy3852 {
             }
         '''
 
-        assert err.message =~ /Cannot specify duplicate annotation/
+        assert err =~ /Cannot specify duplicate annotation/
     }
 
     @Test
@@ -90,7 +90,7 @@ final class Groovy3852 {
                 }
             '''
         } catch (any) {
-            Assertions.fail('Compilation should have succeeded as it has duplication annotations but with retention policy "not RUNTIME"')
+            Assert.fail('Compilation should have succeeded as it has duplication annotations but with retention policy "not RUNTIME"')
         }
     }
 
@@ -109,7 +109,7 @@ final class Groovy3852 {
                 }
             '''
         } catch (any) {
-            Assertions.fail('Compilation should have succeeded as it has duplication annotations but with retention policy "not RUNTIME"')
+            Assert.fail('Compilation should have succeeded as it has duplication annotations but with retention policy "not RUNTIME"')
         }
     }
 }
diff --git a/src/test/groovy/bugs/Groovy3863Bug.groovy b/src/test/groovy/bugs/Groovy3863Bug.groovy
index 2843d9fa3e..78f30cff8f 100644
--- a/src/test/groovy/bugs/Groovy3863Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3863Bug.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
-
-
-class Groovy3863Bug {
-    @Test
+class Groovy3863Bug extends GroovyTestCase {
     void testClassNameAccessInMainMethod() {
         assertScript """
             class Foo3863 {
diff --git a/src/test/groovy/bugs/Groovy3868Bug.groovy b/src/test/groovy/bugs/Groovy3868Bug.groovy
index 0118ffa706..73059efb82 100644
--- a/src/test/groovy/bugs/Groovy3868Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3868Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy3868Bug {
-    @Test
+class Groovy3868Bug extends GroovyTestCase {
     void testAsTypeCallWithPrimitiveType() {
         callAndcheckResults(Long)
         callAndcheckResults(Integer)
diff --git a/src/test/groovy/bugs/Groovy3876Bug.groovy b/src/test/groovy/bugs/Groovy3876Bug.groovy
index 9d416ec27e..aabd8a0419 100644
--- a/src/test/groovy/bugs/Groovy3876Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3876Bug.groovy
@@ -18,13 +18,10 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.runtime.typehandling.GroovyCastException
-import org.junit.jupiter.api.Test
 
-import static org.junit.jupiter.api.Assertions.fail
-
-class Groovy3876Bug {
-    @Test
+class Groovy3876Bug extends GroovyTestCase {
     void testGStringToNumberConversion() {
         def a
 
diff --git a/src/test/groovy/bugs/Groovy3894Bug.groovy b/src/test/groovy/bugs/Groovy3894Bug.groovy
index 2d9778a37b..d8c64425e6 100644
--- a/src/test/groovy/bugs/Groovy3894Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3894Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy3894Bug {
-    @Test
+class Groovy3894Bug extends GroovyTestCase {
     void testInfinityToBigDecimalConversion() {
         BigDecimal x = 999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
         assert x ** 5 == Double.POSITIVE_INFINITY
diff --git a/src/test/groovy/bugs/Groovy389_Bug.groovy b/src/test/groovy/bugs/Groovy389_Bug.groovy
index 0a84817128..9a0cc23f4c 100644
--- a/src/test/groovy/bugs/Groovy389_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy389_Bug.groovy
@@ -18,16 +18,14 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
-
+import groovy.test.GroovyTestCase
 
 /**
  *  Verifies that closures work inside case blocks.
  *
  */
-class Groovy389_Bug {
+class Groovy389_Bug extends GroovyTestCase {
 
-    @Test
     void testBug() {
        def a = [10, 11, 12]
        def b = 0
diff --git a/src/test/groovy/bugs/Groovy3904.groovy b/src/test/groovy/bugs/Groovy3904.groovy
index b04051791d..b3b9fcb07f 100644
--- a/src/test/groovy/bugs/Groovy3904.groovy
+++ b/src/test/groovy/bugs/Groovy3904.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.shouldFail
 
@@ -26,7 +26,7 @@ final class Groovy3904 {
 
     private static void compileAndVerifyCyclicInheritenceCompilationError(String sourceCode) {
         def err = shouldFail(sourceCode)
-        assert err.message =~ /Cycle detected/
+        assert err =~ /Cycle detected/
     }
 
     @Test
diff --git a/src/test/groovy/bugs/Groovy3948Bug.groovy b/src/test/groovy/bugs/Groovy3948Bug.groovy
index 08bf69865b..af9e3aa9c5 100644
--- a/src/test/groovy/bugs/Groovy3948Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3948Bug.groovy
@@ -18,12 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
+class Groovy3948Bug extends GroovyTestCase {
 
-class Groovy3948Bug {
-
-    @Test
     void testBug1() {
         Expando.metaClass.foo = { -> delegate.bar() }
 
@@ -36,7 +34,6 @@ class Groovy3948Bug {
         assert e.foo() == 2
     }
 
-    @Test
     void testBug2() {
         Foo f = new Foo()
         def results = []
diff --git a/src/test/groovy/bugs/Groovy3949Bug.groovy b/src/test/groovy/bugs/Groovy3949Bug.groovy
index 62e512d30a..376e9548a6 100644
--- a/src/test/groovy/bugs/Groovy3949Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3949Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy3949Bug {
-    @Test
+class Groovy3949Bug extends GroovyTestCase {
     void testClosureCallInStaticContextForClassWithStaticCallMethod() {
         assert Class3949.m { "$it 123" } == "1234 123"
     }
diff --git a/src/test/groovy/bugs/Groovy4009Bug.groovy b/src/test/groovy/bugs/Groovy4009Bug.groovy
index 868c827f2a..20f5656ef7 100644
--- a/src/test/groovy/bugs/Groovy4009Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4009Bug.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
-import static groovy.test.GroovyAssert.fail
-
-class Groovy4009Bug {
-    @Test
+class Groovy4009Bug extends GroovyTestCase {
     void testNoOfTimesResolveCallIsMade() {
         try {
             assertScript """
diff --git a/src/test/groovy/bugs/Groovy4018Bug.groovy b/src/test/groovy/bugs/Groovy4018Bug.groovy
index b66baf692b..d22e016559 100644
--- a/src/test/groovy/bugs/Groovy4018Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4018Bug.groovy
@@ -18,14 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
+class Groovy4018Bug extends GroovyTestCase {
 
-
-class Groovy4018Bug {
-
-    @Test
     void testFloatAsBoolean() {
         assertScript '''
             assert 0.1f
@@ -38,7 +34,6 @@ class Groovy4018Bug {
         '''
     }
 
-    @Test
     void testDoubleAsBoolean() {
         assertScript '''
             assert 0.1d
@@ -51,7 +46,6 @@ class Groovy4018Bug {
         '''
     }
 
-    @Test
     void testFloatAsBooleanSTC() {
         assertScript '''
         @groovy.transform.CompileStatic
@@ -63,7 +57,6 @@ class Groovy4018Bug {
         '''
     }
 
-    @Test
     void testDoubleAsBooleanSTC() {
         assertScript '''
         @groovy.transform.CompileStatic
diff --git a/src/test/groovy/bugs/Groovy4029Bug.groovy b/src/test/groovy/bugs/Groovy4029Bug.groovy
index 877ac7afc3..75b4f107a3 100644
--- a/src/test/groovy/bugs/Groovy4029Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4029Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy4029Bug {
-    @Test
+class Groovy4029Bug extends GroovyTestCase {
     void testAddNullKeyEntryInMapUsingSubscriptNotation() {
         Map m = [:]
         m[null] = null
diff --git a/src/test/groovy/bugs/Groovy4035.groovy b/src/test/groovy/bugs/Groovy4035.groovy
index 7d590e02a9..3150ae1d24 100644
--- a/src/test/groovy/bugs/Groovy4035.groovy
+++ b/src/test/groovy/bugs/Groovy4035.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy4038Bug.groovy b/src/test/groovy/bugs/Groovy4038Bug.groovy
index a4ba4f91c6..2afc4d7e74 100644
--- a/src/test/groovy/bugs/Groovy4038Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4038Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy4038Bug {
-    @Test
+class Groovy4038Bug extends GroovyTestCase {
     void testResondsToOnClosures() {
         def c = {String x -> }
         assert c.metaClass.respondsTo(c, "doCall", "Hello")
diff --git a/src/test/groovy/bugs/Groovy4046Bug.groovy b/src/test/groovy/bugs/Groovy4046Bug.groovy
index 80051a4a37..2db2d2c459 100644
--- a/src/test/groovy/bugs/Groovy4046Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4046Bug.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static org.junit.jupiter.api.Assertions.assertFalse
-
-
-class Groovy4046Bug {
-    @Test
+class Groovy4046Bug extends GroovyTestCase {
     void testComparableOnLeftObjectOnRight() {
         assertFalse MyEnum4046.A == new Object()
 
diff --git a/src/test/groovy/bugs/Groovy4069Bug.groovy b/src/test/groovy/bugs/Groovy4069Bug.groovy
index 4dcf3a3161..43ec14a7e2 100644
--- a/src/test/groovy/bugs/Groovy4069Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4069Bug.groovy
@@ -18,12 +18,10 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
+class Groovy4069Bug extends GroovyTestCase {
 
-class Groovy4069Bug {
-
-    @Test
     void testEMCConstructorWithSubClassingTest1V1() {
         def shell = new GroovyShell()
         shell.evaluate """
@@ -52,7 +50,6 @@ class Groovy4069Bug {
         """
     }
 
-    @Test
     void testEMCConstructorWithSubClassingTest1V2() {
         def shell = new GroovyShell()
         shell.evaluate """
@@ -81,7 +78,6 @@ class Groovy4069Bug {
         """
     }
 
-    @Test
     void testEMCConstructorWithSubClassingTest2V1() {
         def shell = new GroovyShell()
         shell.evaluate """
@@ -110,7 +106,6 @@ class Groovy4069Bug {
         """
     }
 
-    @Test
     void testEMCConstructorWithSubClassingTest2V2() {
         def shell = new GroovyShell()
         shell.evaluate """
diff --git a/src/test/groovy/bugs/Groovy4075Bug.groovy b/src/test/groovy/bugs/Groovy4075Bug.groovy
index aa4c85d103..aae3868daf 100644
--- a/src/test/groovy/bugs/Groovy4075Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4075Bug.groovy
@@ -18,12 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.shouldFailWithCause
-
-
-class Groovy4075Bug {
+class Groovy4075Bug extends GroovyTestCase {
     static void failChecked() throws Exception {
         throw new Exception(new IllegalArgumentException(new NullPointerException("NPE in failChecked")))
     }
@@ -32,17 +29,15 @@ class Groovy4075Bug {
         throw new RuntimeException(new IllegalArgumentException("IAE in failUnchecked", new NullPointerException()))
     }
 
-    @Test
     void testCheckedFailure() {
         assert shouldFailWithCause(NullPointerException) {
             Groovy4075Bug.failChecked()
-        }.message == "NPE in failChecked"
+        } == "NPE in failChecked"
     }
 
-    @Test
     void testUncheckedFailure() {
         assert shouldFailWithCause(IllegalArgumentException) {
             Groovy4075Bug.failUnchecked()
-        }.message == "IAE in failUnchecked"
+        } == "IAE in failUnchecked"
     }
 }
diff --git a/src/test/groovy/bugs/Groovy4078Bug.groovy b/src/test/groovy/bugs/Groovy4078Bug.groovy
index b2a92696da..8063393213 100644
--- a/src/test/groovy/bugs/Groovy4078Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4078Bug.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static org.junit.jupiter.api.Assertions.fail
-
-
-class Groovy4078Bug {
-    @Test
+class Groovy4078Bug extends GroovyTestCase {
     void testInfiniteLoopDetectionInStepUsage() {
         (2..2).step 0, {assert it != null} //IntRange
 
diff --git a/src/test/groovy/bugs/Groovy4080Bug.groovy b/src/test/groovy/bugs/Groovy4080Bug.groovy
index 7b0b53b984..7fa0a49261 100644
--- a/src/test/groovy/bugs/Groovy4080Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4080Bug.groovy
@@ -18,14 +18,14 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 
-class Groovy4080Bug {
+class Groovy4080Bug extends GroovyTestCase {
     public void testClassGeneratedWithAnnotationHavingGrabOnImport() {
         GroovyShell shell = new GroovyShell(new GroovyClassLoader())
         shell.evaluate """
             @Grab(group='commons-primitives', module='commons-primitives', version='1.0')
             import java.lang.annotation.*
-import org.junit.jupiter.api.Test
 
             @Retention(RetentionPolicy.RUNTIME)
             @interface Require {
diff --git a/src/test/groovy/bugs/Groovy4097.groovy b/src/test/groovy/bugs/Groovy4097.groovy
index 06a3360221..ae5d667458 100644
--- a/src/test/groovy/bugs/Groovy4097.groovy
+++ b/src/test/groovy/bugs/Groovy4097.groovy
@@ -19,7 +19,7 @@
 package bugs
 
 import groovy.test.NotYetImplemented
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy4098.groovy b/src/test/groovy/bugs/Groovy4098.groovy
index 42721dd62f..c9fd8b568b 100644
--- a/src/test/groovy/bugs/Groovy4098.groovy
+++ b/src/test/groovy/bugs/Groovy4098.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.shouldFail
 import static java.lang.reflect.Modifier.isFinal
@@ -105,7 +105,7 @@ final class Groovy4098 {
         def err = shouldFail {
             metaProperty.setProperty(this, 'five mop')
         }
-        assert err.message =~ /Cannot set read-only property: propertyFive/
+        assert err =~ /Cannot set read-only property: propertyFive/
     }
 
     @Test
@@ -117,7 +117,7 @@ final class Groovy4098 {
         def err = shouldFail {
             metaProperty.setProperty(this, 'six mop')
         }
-        assert err.message =~ /Cannot set the property 'propertySix' because the backing field is final./
+        assert err =~ /Cannot set the property 'propertySix' because the backing field is final./
     }
 
     //
diff --git a/src/test/groovy/bugs/Groovy4104Bug.groovy b/src/test/groovy/bugs/Groovy4104Bug.groovy
index 437102ced5..14934d000e 100644
--- a/src/test/groovy/bugs/Groovy4104Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4104Bug.groovy
@@ -18,11 +18,10 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.runtime.MethodClosure
-import org.junit.jupiter.api.Test
 
-class Groovy4104Bug {
-    @Test
+class Groovy4104Bug extends GroovyTestCase {
     void testMethodClosureWithProtectedMethodInSuperClass() {
         MethodClosure mc1 = new Groovy4104A().createMethodClosure();
         MethodClosure mc2 = new Groovy4104B().createMethodClosure();
diff --git a/src/test/groovy/bugs/Groovy4106Bug.groovy b/src/test/groovy/bugs/Groovy4106Bug.groovy
index 4684aee303..6344d1b6b9 100644
--- a/src/test/groovy/bugs/Groovy4106Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4106Bug.groovy
@@ -19,10 +19,9 @@
 package bugs
 
 import groovy.lang.MetaClassRegistry.MetaClassCreationHandle
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-class Groovy4106Bug {
-    @Test
+class Groovy4106Bug extends GroovyTestCase {
     void testStackOverflowError() {
         MetaClassCreationHandle handle = new ExpandoMetaClassCreationHandle()
         handle.create(ExpandoMetaClass, GroovySystem.getMetaClassRegistry())
diff --git a/src/test/groovy/bugs/Groovy4107Bug.groovy b/src/test/groovy/bugs/Groovy4107Bug.groovy
index 6d6bc2fed1..3b87c297ba 100644
--- a/src/test/groovy/bugs/Groovy4107Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4107Bug.groovy
@@ -18,13 +18,10 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
-import org.junit.jupiter.api.Test
 
-import static org.junit.jupiter.api.Assertions.fail
-
-class Groovy4107Bug {
-    @Test
+class Groovy4107Bug extends GroovyTestCase {
     void testUnqualifiedImportResolveBug() {
         try {
             new GroovyShell().parse """
diff --git a/src/test/groovy/bugs/Groovy4111Bug.groovy b/src/test/groovy/bugs/Groovy4111Bug.groovy
index be0f8294d6..27cbba16df 100644
--- a/src/test/groovy/bugs/Groovy4111Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4111Bug.groovy
@@ -18,13 +18,10 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
-import org.junit.jupiter.api.Test
 
-import static org.junit.jupiter.api.Assertions.fail
-
-class Groovy4111Bug {
-    @Test
+class Groovy4111Bug extends GroovyTestCase {
     void testConstructorCallOnAnAbstractType() {
         try {
             new GroovyShell().parse """
diff --git a/src/test/groovy/bugs/Groovy4116Bug.groovy b/src/test/groovy/bugs/Groovy4116Bug.groovy
index c090656f33..04abaa994a 100644
--- a/src/test/groovy/bugs/Groovy4116Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4116Bug.groovy
@@ -18,11 +18,10 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
 
-import static groovy.test.GroovyAssert.shouldFail
-
-final class Groovy4116Bug {
+final class Groovy4116Bug extends GroovyTestCase {
 
     void testAnInterfaceMethodNotImplementedPublic() {
         def err = shouldFail MultipleCompilationErrorsException, '''
@@ -33,7 +32,7 @@ final class Groovy4116Bug {
                 def foo()
             }
         '''
-        assert err.message =~ /The method foo should be public as it implements the corresponding method from interface I4116/
+        assert err =~ /The method foo should be public as it implements the corresponding method from interface I4116/
     }
 
     void testAnInterfaceMethodNotImplementedPublicV2SuperClassInterface() {
@@ -47,6 +46,6 @@ final class Groovy4116Bug {
                 def foo()
             }
         '''
-        assert err.message =~ /The method foo should be public as it implements the corresponding method from interface I4116/
+        assert err =~ /The method foo should be public as it implements the corresponding method from interface I4116/
     }
 }
diff --git a/src/test/groovy/bugs/Groovy4119Bug.groovy b/src/test/groovy/bugs/Groovy4119Bug.groovy
index 2f5d2b66e4..92612757d3 100644
--- a/src/test/groovy/bugs/Groovy4119Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4119Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
-
-
-class Groovy4119Bug {
+class Groovy4119Bug extends GroovyTestCase {
     void testThis$0PassingInSuperCallWithinInnerClasses() {
         assertScript """
             class Test4119 {
diff --git a/src/test/groovy/bugs/Groovy4120Bug.groovy b/src/test/groovy/bugs/Groovy4120Bug.groovy
index bcdf8dfad6..6a985260b5 100644
--- a/src/test/groovy/bugs/Groovy4120Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4120Bug.groovy
@@ -18,13 +18,10 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
-import org.junit.jupiter.api.Test
 
-import static org.junit.jupiter.api.Assertions.fail
-
-class Groovy4120Bug {
-    @Test
+class Groovy4120Bug extends GroovyTestCase {
     void testInitCallOnNonStaticInnerClassWOEnclosingInstance() {
         try {
             new GroovyShell().parse """
@@ -45,7 +42,6 @@ class Groovy4120Bug {
         }
     }
 
-    @Test
     void testInitCallOnNonStaticInnerClassWithEnclosingInstance() {
         new GroovyShell().parse """
             class Test4120B {
diff --git a/src/test/groovy/bugs/Groovy4121Bug.groovy b/src/test/groovy/bugs/Groovy4121Bug.groovy
index cf9349a24c..5740eb115d 100644
--- a/src/test/groovy/bugs/Groovy4121Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4121Bug.groovy
@@ -18,13 +18,10 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
-import org.junit.jupiter.api.Test
 
-import static org.junit.jupiter.api.Assertions.fail
-
-class Groovy4121Bug {
-    @Test
+class Groovy4121Bug extends GroovyTestCase {
     void testAssignmentToAFieldMadeFinalByImmutable() {
         try {
             new GroovyShell().parse """
diff --git a/src/test/groovy/bugs/Groovy4129Bug.groovy b/src/test/groovy/bugs/Groovy4129Bug.groovy
index 635caed4b7..6448e241ae 100644
--- a/src/test/groovy/bugs/Groovy4129Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4129Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy4129Bug {
-    @Test
+class Groovy4129Bug extends GroovyTestCase {
     void testImplicitThisPassingInObjInitBlock() {
         new GroovyShell().parse """
             class Test4129 {
diff --git a/src/test/groovy/bugs/Groovy4131Bug.groovy b/src/test/groovy/bugs/Groovy4131Bug.groovy
index 0c29c4b5c9..2e6fcc519b 100644
--- a/src/test/groovy/bugs/Groovy4131Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4131Bug.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static org.junit.jupiter.api.Assertions.fail
-
-
-class Groovy4131Bug {
-    @Test
+class Groovy4131Bug extends GroovyTestCase {
     void testTwoMainMethodsInAScript() {
         try {
             new GroovyShell().parse """
diff --git a/src/test/groovy/bugs/Groovy4133Bug.groovy b/src/test/groovy/bugs/Groovy4133Bug.groovy
index 4999bef973..82f723eae1 100644
--- a/src/test/groovy/bugs/Groovy4133Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4133Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy4133Bug {
-    @Test
+class Groovy4133Bug extends GroovyTestCase {
     void testDelegateAnnotationWithNativeMethods() {
         new GroovyShell().evaluate """
             class String4133 {
diff --git a/src/test/groovy/bugs/Groovy4134Bug.groovy b/src/test/groovy/bugs/Groovy4134Bug.groovy
index c06dbb38fe..b97f68b41f 100644
--- a/src/test/groovy/bugs/Groovy4134Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4134Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy4134Bug {
-    @Test
+class Groovy4134Bug extends GroovyTestCase {
     void testClosureParamsWithDefaultValues() {
         def c = {Integer maxRows = Integer.MAX_VALUE -> maxRows}
         assert c() == Integer.MAX_VALUE
diff --git a/src/test/groovy/bugs/Groovy4139Bug.groovy b/src/test/groovy/bugs/Groovy4139Bug.groovy
index beb69fcb16..f8c39153ae 100644
--- a/src/test/groovy/bugs/Groovy4139Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4139Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy4139Bug {
-    @Test
+class Groovy4139Bug extends GroovyTestCase {
     void testEmptyStringAsMapEntryKey() {
         use (groovy.time.TimeCategory) {
             def topics = [:]
diff --git a/src/test/groovy/bugs/Groovy4170Bug.groovy b/src/test/groovy/bugs/Groovy4170Bug.groovy
index c51b1e3a5a..798e3a1835 100644
--- a/src/test/groovy/bugs/Groovy4170Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4170Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy4170Bug {
-    @Test
+class Groovy4170Bug extends GroovyTestCase {
     void testClosureCurrying() {
         new CurryFoo4170().bar()
     }
diff --git a/src/test/groovy/bugs/Groovy4188Bug.groovy b/src/test/groovy/bugs/Groovy4188Bug.groovy
index 095d8d8617..7be3cd5cdd 100644
--- a/src/test/groovy/bugs/Groovy4188Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4188Bug.groovy
@@ -18,13 +18,10 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
-import org.junit.jupiter.api.Test
 
-import static org.junit.jupiter.api.Assertions.fail
-
-class Groovy4188Bug {
-    @Test
+class Groovy4188Bug extends GroovyTestCase {
     void testClassProvidingMetaClassFieldOfWrongType() {
         try {
             new GroovyShell().parse """
diff --git a/src/test/groovy/bugs/Groovy4191Bug.groovy b/src/test/groovy/bugs/Groovy4191Bug.groovy
index 2eea7f6fc1..47391b6772 100644
--- a/src/test/groovy/bugs/Groovy4191Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4191Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy4191Bug {
-    @Test
+class Groovy4191Bug extends GroovyTestCase {
     void testPutIntoArray() {
         recreateProblem()
         recreateProblem()
diff --git a/src/test/groovy/bugs/Groovy4193.groovy b/src/test/groovy/bugs/Groovy4193.groovy
index 81842c7704..94f4e93e26 100644
--- a/src/test/groovy/bugs/Groovy4193.groovy
+++ b/src/test/groovy/bugs/Groovy4193.groovy
@@ -20,7 +20,7 @@ package bugs
 
 import groovy.transform.CompileStatic
 import org.codehaus.groovy.ast.ImportNode
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 @CompileStatic
 final class Groovy4193 {
diff --git a/src/test/groovy/bugs/Groovy4202Bug.groovy b/src/test/groovy/bugs/Groovy4202Bug.groovy
index 6a5f9998a9..ca82ce6465 100644
--- a/src/test/groovy/bugs/Groovy4202Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4202Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy4202Bug {
-    @Test
+class Groovy4202Bug extends GroovyTestCase {
     void testSuccessiveMCModificationFirstClassThenInstance() {
         def inst0 = new Foo4202()
         def inst1 = new Foo4202()
diff --git a/src/test/groovy/bugs/Groovy4206.groovy b/src/test/groovy/bugs/Groovy4206.groovy
index 018579621d..255b09e34c 100644
--- a/src/test/groovy/bugs/Groovy4206.groovy
+++ b/src/test/groovy/bugs/Groovy4206.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
diff --git a/src/test/groovy/bugs/Groovy4235Bug.groovy b/src/test/groovy/bugs/Groovy4235Bug.groovy
index da0e93eb68..3b8a2081a3 100644
--- a/src/test/groovy/bugs/Groovy4235Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4235Bug.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
-
-
-class Groovy4235Bug {
-    @Test
+class Groovy4235Bug extends GroovyTestCase {
     void testAccessStaticPropInsideClosure() {
         assertScript """
             class Foo4235 {
diff --git a/src/test/groovy/bugs/Groovy4241Bug.groovy b/src/test/groovy/bugs/Groovy4241Bug.groovy
index 015ac7725c..bee0a3f71b 100644
--- a/src/test/groovy/bugs/Groovy4241Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4241Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy4241Bug {
-    @Test
+class Groovy4241Bug extends GroovyTestCase {
     void testAsTypeWithinvokeMethodOverridden() {
         Foo4241.metaClass.invokeMethod = { String name, args ->
             println name
diff --git a/src/test/groovy/bugs/Groovy4243.groovy b/src/test/groovy/bugs/Groovy4243.groovy
index 3248d7d435..22fb4ca440 100644
--- a/src/test/groovy/bugs/Groovy4243.groovy
+++ b/src/test/groovy/bugs/Groovy4243.groovy
@@ -19,7 +19,7 @@
 package bugs
 
 import org.codehaus.groovy.control.CompilerConfiguration
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 final class Groovy4243 {
 
diff --git a/src/test/groovy/bugs/Groovy4246Bug.groovy b/src/test/groovy/bugs/Groovy4246Bug.groovy
index fb1547897e..0a922e7706 100644
--- a/src/test/groovy/bugs/Groovy4246Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4246Bug.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
-
-
-class Groovy4246Bug {
-    @Test
+class Groovy4246Bug extends GroovyTestCase {
     void testPostFixExpEvaluations() {
         assertScript """
             class Bug4246 {
diff --git a/src/test/groovy/bugs/Groovy4247Bug.groovy b/src/test/groovy/bugs/Groovy4247Bug.groovy
index d384ca3f2e..789eef3e6c 100644
--- a/src/test/groovy/bugs/Groovy4247Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4247Bug.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static org.junit.jupiter.api.Assertions.fail
-
-
-class Groovy4247Bug {
-    @Test
+class Groovy4247Bug extends GroovyTestCase {
     void testNewFileRenameToMethod() {
         def file = new File('blah_blah')
 
diff --git a/src/test/groovy/bugs/Groovy4257Bug.groovy b/src/test/groovy/bugs/Groovy4257Bug.groovy
index 38b3069e1b..c04224c5fc 100644
--- a/src/test/groovy/bugs/Groovy4257Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4257Bug.groovy
@@ -18,11 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-
-class Groovy4257Bug {
-    @Test
+class Groovy4257Bug extends GroovyTestCase {
     void testSetUnique() {
         Set orig = [[3035, 26972], [2795, 34412]]
         Set clone = orig.clone()
@@ -32,7 +30,6 @@ class Groovy4257Bug {
         assert orig == clone
     }
 
-    @Test
     void testNumberCoercion() {
         def orig = [3, 3L, 3.0] as Set
         def expected = [3] as Set
diff --git a/src/test/groovy/bugs/Groovy4264Bug.groovy b/src/test/groovy/bugs/Groovy4264Bug.groovy
index c932b7a088..6122bf334b 100644
--- a/src/test/groovy/bugs/Groovy4264Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4264Bug.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
-import static groovy.test.GroovyAssert.fail
-
-class Groovy4264Bug {
-    @Test
+class Groovy4264Bug extends GroovyTestCase {
     void testSubClassHavingMainEntryPoint() {
         try {
             assertScript """
@@ -43,7 +39,6 @@ class Groovy4264Bug {
     }
 
     // this scenario used to work correctly. Just added to ensure that there is no change in its behavior
-    @Test
     void testScriptExecutionTakingPreferenceOverClasses() {
         try {
             assertScript """
@@ -63,7 +58,6 @@ class Groovy4264Bug {
     }
 
     // this scenario used to work correctly. Just added to ensure that there is no change in its behavior
-    @Test
     void testExecutionOfJustAScript() {
         try {
             assertScript """
diff --git a/src/test/groovy/bugs/Groovy4293Bug.groovy b/src/test/groovy/bugs/Groovy4293Bug.groovy
index ba6f502347..02e8536740 100644
--- a/src/test/groovy/bugs/Groovy4293Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4293Bug.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
-import static groovy.test.GroovyAssert.fail
-
-class Groovy4293Bug {
-    @Test
+class Groovy4293Bug extends GroovyTestCase {
     void testNoBUGMessageForNullScriptPassedToCompiler() {
         try {
             assertScript """
diff --git a/src/test/groovy/bugs/Groovy4349.groovy b/src/test/groovy/bugs/Groovy4349.groovy
index e2894770d2..feaaaea67d 100644
--- a/src/test/groovy/bugs/Groovy4349.groovy
+++ b/src/test/groovy/bugs/Groovy4349.groovy
@@ -20,7 +20,7 @@ package bugs
 
 import org.codehaus.groovy.control.CompilerConfiguration
 import org.codehaus.groovy.tools.javac.JavaAwareCompilationUnit
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 final class Groovy4349 {
     @Test
diff --git a/src/test/groovy/bugs/Groovy4365.groovy b/src/test/groovy/bugs/Groovy4365.groovy
index 35e90759df..1f0f90c01d 100644
--- a/src/test/groovy/bugs/Groovy4365.groovy
+++ b/src/test/groovy/bugs/Groovy4365.groovy
@@ -18,7 +18,7 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.shouldFail
 
@@ -31,6 +31,6 @@ final class Groovy4365 {
                 }
             }
         '''
-        assert err.message =~ /unable to resolve class HashMap.Entry/
+        assert err =~ /unable to resolve class HashMap.Entry/
     }
 }
diff --git a/src/test/groovy/bugs/Groovy4393Bug.groovy b/src/test/groovy/bugs/Groovy4393Bug.groovy
index 65df59d39d..d378966f5a 100644
--- a/src/test/groovy/bugs/Groovy4393Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4393Bug.groovy
@@ -18,12 +18,11 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Disabled
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
+import org.junit.Ignore
 
-@Disabled('requires a specific configuration, see: https://issues.apache.org/jira/browse/GROOVY-4393 for details')
-class Groovy4393Bug {
-    @Test
+@Ignore('requires a specific configuration, see: https://issues.apache.org/jira/browse/GROOVY-4393 for details')
+class Groovy4393Bug extends GroovyTestCase {
     void testIfSourceFilesWithOtherExtensionsGotCompiledFine() {
         assert Groovy4393BugV1 != null
     }
diff --git a/src/test/groovy/bugs/Groovy4414Bug.groovy b/src/test/groovy/bugs/Groovy4414Bug.groovy
index f07b7e888b..de4f4c8762 100644
--- a/src/test/groovy/bugs/Groovy4414Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4414Bug.groovy
@@ -18,11 +18,10 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.runtime.InvokerHelper
 
-import static org.junit.jupiter.api.Assertions.assertEquals
-
-class Groovy4414Bug {
+class Groovy4414Bug extends GroovyTestCase {
     public void testUnaryMinus() {
         assertEquals(-1,    InvokerHelper.unaryMinus(1)); // relying here on boxing for Integer
         assertEquals(-1l,   InvokerHelper.unaryMinus(1l));
diff --git a/src/test/groovy/bugs/Groovy4415Bug.groovy b/src/test/groovy/bugs/Groovy4415Bug.groovy
index 24e7417031..b61e25518d 100644
--- a/src/test/groovy/bugs/Groovy4415Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4415Bug.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
-
-
-class Groovy4415Bug {
-    @Test
+class Groovy4415Bug extends GroovyTestCase {
     void testCompilerShouldFindMethod() {
         // interface defined in Groovy
         assertScript '''
@@ -46,7 +42,6 @@ class Groovy4415Bug {
         '''
     }
 
-    @Test
     void testGroovy4645() {
         assertScript '''
             interface CovariantReturns {
diff --git a/src/test/groovy/bugs/Groovy4416Bug.groovy b/src/test/groovy/bugs/Groovy4416Bug.groovy
index 7662aecf76..ad8c7446e5 100644
--- a/src/test/groovy/bugs/Groovy4416Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4416Bug.groovy
@@ -18,13 +18,9 @@
  */
 package bugs
 
-import org.junit.jupiter.api.Test
+import groovy.test.GroovyTestCase
 
-import static groovy.test.GroovyAssert.assertScript
-
-
-class Groovy4416Bug {
-    @Test
+class Groovy4416Bug extends GroovyTestCase {
     void testImplicitThisPassingInNonStaticInnerClassesBug() {
         assertScript """
             class Dummy4416 {
diff --git a/src/test/groovy/bugs/Groovy4418.groovy b/src/test/groovy/bugs/Groovy4418.groovy
index 26503661bc..d6184f9f1f 100644
--- a/src/test/groovy/bugs/Groovy4418.groovy
+++ b/src/test/groovy/bugs/Groovy4418.groovy
@@ -19,7 +19,7 @@
 package bugs
 
 import groovy.transform.CompileStatic
-import org.junit.jupiter.api.Test
+import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 import static groovy.test.GroovyAssert.shouldFail
diff --git a/src/test/groovy/bugs/Groovy4435Bug.groovy b/src/test/groovy/bugs/Groovy4435Bug.groovy
index 016460b86b..ace9f953a6 100644
--- a/src/test/groovy/bugs/Groovy4435Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4435Bug.groovy
@@ -18,13 +18,10 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
-import org.junit.jupiter.api.Test
 
-import static org.junit.jupiter.api.Assertions.fail
-
-class Groovy4435Bug {
-    @Test
+class Groovy4435Bug extends GroovyTestCase {
     void testAssignmentToAFinalFieldThroughPropertyAccess() {
         try {
             new GroovyShell().parse """
diff --git a/src/test/groovy/bugs/Groovy4449Bug.groovy b/src/test/groovy/bugs/Groovy4449Bug.groovy
index c88f6e81f8..09be54d734 100644
--- a/src/test/groovy/bugs/Groovy4449Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4449Bug.groovy
@@ -18,13 +18,10 @@
  */
 package bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
-import org.junit.jupiter.api.Test
 
-import static org.junit.jupiter.api.Assertions.fail
-
-class Groovy4449Bug {
-    @Test
+class Groovy4449Bug extends GroovyTestCase {
... 45152 lines suppressed ...