Skip to content

Local tests failing #1485

Description

@marksherman

Most appropriate sub-area of Processing 4?

Unit testing

Processing version

4.3.4

Operating system

MacOS, Windows, Linux

Bug description

Local testing is broken, creating a classpath issue with an an "undefined" module in gradle. Surprisingly, this does not fail on github CI. It does fail on windows, macos, (tested by me and my students) and linux (as tested by @catilac )

The issue was introduced in PR #1423

The issue appears to stem from Github changing their gradle version and @moon is working on a long-term solution to bring local testing into parity with PR #1459 (if I understood all this right)

Steps to reproduce this

Check out main branch. Try to run tests:

> ./gradlew clean
> ./gradlew test

Will see:

> Task :java:gradle:test

ProcessingPluginTest > testJavaSourceFile FAILED
    org.gradle.testkit.runner.UnexpectedBuildFailure at ProcessingPluginTest.kt:34

ProcessingPluginTest > testImportingLibrary FAILED
    org.gradle.testkit.runner.UnexpectedBuildFailure at ProcessingPluginTest.kt:34

ProcessingPluginTest > testSinglePDE FAILED
    org.gradle.testkit.runner.UnexpectedBuildFailure at ProcessingPluginTest.kt:34

ProcessingPluginTest > testMultiplePDE FAILED
    org.gradle.testkit.runner.UnexpectedBuildFailure at ProcessingPluginTest.kt:34

ProcessingPluginTest > testWithUnsavedSource FAILED
    org.gradle.testkit.runner.UnexpectedBuildFailure at ProcessingPluginTest.kt:34

7 tests completed, 5 failed

> Task :java:gradle:test FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':java:gradle:test'.
> There were failing tests. See the report at: file:///Users/shermanm/git/processing4/java/gradle/build/reports/tests/test/index.html

* Try:
> Run with --scan to get full insights.

BUILD FAILED in 7s
66 actionable tasks: 2 executed, 64 up-to-date

Diving into the report link, you'll find the modules all fail:

  • ProcessingPluginTest. testImportingLibrary
  • ProcessingPluginTest. testJavaSourceFile
  • ProcessingPluginTest. testMultiplePDE
  • ProcessingPluginTest. testSinglePDE
  • ProcessingPluginTest. testWithUnsavedSource
Image

Clicking into their reports, they fail with the same core issue in the middle: Could not resolve all files for configuration ':compileClasspath'. Could not find org.processing:core:unspecified.

Here's one full report:

org.gradle.testkit.runner.UnexpectedBuildFailure: Unexpected build execution failure in /var/folders/l2/l_2__0cx0_3f0vy9c53zbw401lm217/T/junit15354415828793566169/sketch with arguments [build]

Output:
> Task :preprocessPDE
> Task :scanLibrariesPDE
> Task :addLegacyDependenciesPDE
> Task :checkKotlinGradlePluginConfigurationErrors SKIPPED
> Task :convertXmlValueResourcesForMain NO-SOURCE
> Task :copyNonXmlValueResourcesForMain NO-SOURCE
> Task :prepareComposeResourcesTaskForMain NO-SOURCE
> Task :generateResourceAccessorsForMain SKIPPED
> Task :generateActualResourceCollectorsForMain SKIPPED
> Task :generateComposeResClass SKIPPED
> Task :compileKotlin NO-SOURCE
> Task :compileJava FAILED
[Incubating] Problems report is available at: file:///private/var/folders/l2/l_2__0cx0_3f0vy9c53zbw401lm217/T/junit15354415828793566169/sketch/build/reports/problems/problems-report.html

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileJava'.
> Could not resolve all files for configuration ':compileClasspath'.
   > Could not find org.processing:core:unspecified.
     Searched in the following locations:
       - https://jogamp.org/deployment/maven/org/processing/core/unspecified/core-unspecified.pom
       - https://repo.maven.apache.org/maven2/org/processing/core/unspecified/core-unspecified.pom
       - file:/Users/shermanm/.m2/repository/org/processing/core/unspecified/core-unspecified.pom
     Required by:
         root project :

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.

Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

For more on this, please refer to https://docs.gradle.org/8.11/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.

BUILD FAILED in 481ms
4 actionable tasks: 4 executed

	at app//org.gradle.testkit.runner.internal.DefaultGradleRunner.lambda$build$2(DefaultGradleRunner.java:274)
	at app//org.gradle.testkit.runner.internal.DefaultGradleRunner.run(DefaultGradleRunner.java:367)
	at app//org.gradle.testkit.runner.internal.DefaultGradleRunner.build(DefaultGradleRunner.java:272)
	at app//ProcessingPluginTest.createTemporaryProcessingSketch(ProcessingPluginTest.kt:34)
	at app//ProcessingPluginTest.testWithUnsavedSource(ProcessingPluginTest.kt:195)
	at java.base@17.0.17/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base@17.0.17/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base@17.0.17/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base@17.0.17/java.lang.reflect.Method.invoke(Method.java:569)
	at app//org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at app//org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at app//org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at app//org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at app//org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at app//org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
	at app//org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
	at app//org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
	at app//org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
	at app//org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at app//org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at app//org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at app//org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at app//org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at app//org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at app//org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)
	at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:54)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:53)
	at java.base@17.0.17/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base@17.0.17/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base@17.0.17/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base@17.0.17/java.lang.reflect.Method.invoke(Method.java:569)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92)
	at jdk.proxy1/jdk.proxy1.$Proxy4.processTestClass(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:183)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71)
	at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
	at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)

Thanks to git bisect I've isolated this as the offending commit, merged in PR #1423 :

821d62c5e43b8e4e72aa2cb4fae56d092ef98c94 is the first bad commit
commit 821d62c5e43b8e4e72aa2cb4fae56d092ef98c94
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Tue Feb 10 01:25:49 2026 +0100

    Write and load version.properties for plugin (#1423)
    
    Add a writeVersion Gradle task that writes project.version to build/resources/main/version.properties, so the plugin can access the project version at runtime. This way the version number of the plugin and the used version of processing.core will be the same.

 java/gradle/build.gradle.kts                    | 12 ++++++++++++
 java/gradle/src/main/kotlin/ProcessingPlugin.kt |  5 ++++-
 2 files changed, 16 insertions(+), 1 deletion(-)

This was written by @Stefterv . I'll reproduce the conversation from the discord below.

snippet

No response

Additional context

This was discussed in the Discord devs-chat channel. Reproduced here to not be forgotten!

@Stefterv

Ah the Gradle Plugin uses the local version of org.processing:core:unspecified to run tests, which seems to not have been build/referenced. I suspected a missing dependency on one of the required gradle tasks

@Stefterv

Oh lovely :core needs to be signed for that to work
And we don't do signing in tests for obv reasons
Also the published gradle plugins disappeared from their verification so I suspect there should've been an email on the processing-bot email about why

Would you like to work on the issue?

I’m not sure yet

Activity

  1. marksherman commented on Mar 25, 2026

    @marksherman
    Author

    For the time being, we (my students and I) have figured out how to run individual tests using IntelliJ so we're ok to keep moving despite this.

  2. knupel commented on Jun 9, 2026

    @knupel

    Same family error.
    Editor : VS Code
    Computer : Mac Book Pro M5 max

    ➜  processing4 git:(main) ✗ ./gradlew build
    
    > Task :core:compileJava
    Note: Some input files use or override a deprecated API.
    Note: Recompile with -Xlint:deprecation for details.
    
    > Task :java:preprocessor:generateGrammarSource
    warning(109): JavaParser.g4:37:0: options ignored in imported grammar JavaParser
    
    > Task :java:libraries:io:compileJava
    Note: Some input files use or override a deprecated API.
    Note: Recompile with -Xlint:deprecation for details.
    
    > Task :java:libraries:serial:compileJava
    Note: /Users/stan/EN COURS/CODE/PERSO/PROCESSING/processing4/java/libraries/serial/src/processing/serial/Serial.java uses or overrides a deprecated API.
    Note: Recompile with -Xlint:deprecation for details.
    
    > Task :app:compileKotlin
    w: file:///Users/stan/EN%20COURS/CODE/PERSO/PROCESSING/processing4/app/src/processing/app/Messages.kt:236:21 Condition is always 'true'.
    w: file:///Users/stan/EN%20COURS/CODE/PERSO/PROCESSING/processing4/app/src/processing/app/ui/PDEWelcome.kt:85:31 'fun painterResource(resourcePath: String): Painter' is deprecated. Migrate to the Compose resources library. See https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-images-resources.html If you need to load resources specificly from Java classpath, you should still use the new resource library and use a snippet from https://github.com/JetBrains/compose-multiplatform-core/pull/1457.
    w: file:///Users/stan/EN%20COURS/CODE/PERSO/PROCESSING/processing4/app/src/processing/app/ui/PDEWelcome.kt:292:45 'fun painterResource(resourcePath: String): Painter' is deprecated. Migrate to the Compose resources library. See https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-images-resources.html If you need to load resources specificly from Java classpath, you should still use the new resource library and use a snippet from https://github.com/JetBrains/compose-multiplatform-core/pull/1457.
    w: file:///Users/stan/EN%20COURS/CODE/PERSO/PROCESSING/processing4/app/src/processing/app/ui/PDEWelcome.kt:312:45 'fun painterResource(resourcePath: String): Painter' is deprecated. Migrate to the Compose resources library. See https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-images-resources.html If you need to load resources specificly from Java classpath, you should still use the new resource library and use a snippet from https://github.com/JetBrains/compose-multiplatform-core/pull/1457.
    w: file:///Users/stan/EN%20COURS/CODE/PERSO/PROCESSING/processing4/app/src/processing/app/ui/PDEWelcome.kt:328:45 'fun painterResource(resourcePath: String): Painter' is deprecated. Migrate to the Compose resources library. See https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-images-resources.html If you need to load resources specificly from Java classpath, you should still use the new resource library and use a snippet from https://github.com/JetBrains/compose-multiplatform-core/pull/1457.
    w: file:///Users/stan/EN%20COURS/CODE/PERSO/PROCESSING/processing4/app/src/processing/app/ui/PDEWelcome.kt:385:34 'static fun getContentFile(name: String!): File!' is deprecated. Deprecated in Java.
    w: file:///Users/stan/EN%20COURS/CODE/PERSO/PROCESSING/processing4/app/src/processing/app/ui/PDEWelcome.kt:386:34 'static fun getContentFile(name: String!): File!' is deprecated. Deprecated in Java.
    w: file:///Users/stan/EN%20COURS/CODE/PERSO/PROCESSING/processing4/app/src/processing/app/ui/PDEWelcome.kt:387:34 'static fun getContentFile(name: String!): File!' is deprecated. Deprecated in Java.
    w: file:///Users/stan/EN%20COURS/CODE/PERSO/PROCESSING/processing4/app/src/processing/app/ui/PDEWelcome.kt:388:34 'static fun getContentFile(name: String!): File!' is deprecated. Deprecated in Java.
    w: file:///Users/stan/EN%20COURS/CODE/PERSO/PROCESSING/processing4/app/src/processing/app/ui/PDEWelcome.kt:474:27 'fun painterResource(resourcePath: String): Painter' is deprecated. Migrate to the Compose resources library. See https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-images-resources.html If you need to load resources specificly from Java classpath, you should still use the new resource library and use a snippet from https://github.com/JetBrains/compose-multiplatform-core/pull/1457.
    w: file:///Users/stan/EN%20COURS/CODE/PERSO/PROCESSING/processing4/app/src/processing/app/ui/Start.kt:85:39 'fun painterResource(resourcePath: String): Painter' is deprecated. Migrate to the Compose resources library. See https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-images-resources.html If you need to load resources specificly from Java classpath, you should still use the new resource library and use a snippet from https://github.com/JetBrains/compose-multiplatform-core/pull/1457.
    w: file:///Users/stan/EN%20COURS/CODE/PERSO/PROCESSING/processing4/app/src/processing/app/ui/WelcomeSurvey.kt:43:23 'fun painterResource(resourcePath: String): Painter' is deprecated. Migrate to the Compose resources library. See https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-images-resources.html If you need to load resources specificly from Java classpath, you should still use the new resource library and use a snippet from https://github.com/JetBrains/compose-multiplatform-core/pull/1457.
    w: file:///Users/stan/EN%20COURS/CODE/PERSO/PROCESSING/processing4/app/src/processing/app/ui/WelcomeToBeta.kt:58:31 'fun painterResource(resourcePath: String): Painter' is deprecated. Migrate to the Compose resources library. See https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-images-resources.html If you need to load resources specificly from Java classpath, you should still use the new resource library and use a snippet from https://github.com/JetBrains/compose-multiplatform-core/pull/1457.
    w: file:///Users/stan/EN%20COURS/CODE/PERSO/PROCESSING/processing4/app/src/processing/app/ui/theme/Locale.kt:50:45 'fun getProperty(key: String?, default: String): String' is deprecated. Use get instead.
    
    > Task :app:compileJava
    /Users/stan/EN COURS/CODE/PERSO/PROCESSING/processing4/app/src/processing/app/Base.java:2212: warning: [dep-ann] deprecated item is not annotated with @Deprecated
      static public File getSettingsFolder() {
                         ^
    /Users/stan/EN COURS/CODE/PERSO/PROCESSING/processing4/app/src/processing/app/syntax/JEditTextArea.java:243: warning: [dep-ann] deprecated item is not annotated with @Deprecated
      public int getScrollPosition() {
                 ^
    /Users/stan/EN COURS/CODE/PERSO/PROCESSING/processing4/app/src/processing/app/syntax/JEditTextArea.java:252: warning: [dep-ann] deprecated item is not annotated with @Deprecated
      public void setScrollPosition(int what) {
                  ^
    Note: Some input files use or override a deprecated API.
    Note: Recompile with -Xlint:deprecation for details.
    3 warnings
    
    > Task :java:compileJava
    Note: Some input files use or override a deprecated API.
    Note: Recompile with -Xlint:deprecation for details.
    
    > Task :java:compileTestJava
    Note: /Users/stan/EN COURS/CODE/PERSO/PROCESSING/processing4/java/test/processing/mode/java/ParserTests.java uses or overrides a deprecated API.
    Note: Recompile with -Xlint:deprecation for details.
    
    Command line edition for Processing unspecified (Java Mode)
    
    --help               Show this help text. Congratulations.
    
    --sketch=<name>      Specify the sketch folder (required)
    --output=<name>      Specify the output folder (optional and
                         cannot be the same as the sketch folder.)
    
    --force              The sketch will not build if the output
                         folder already exists, because the contents
                         will be replaced. This option erases the
                         folder first. Use with extreme caution!
    
    --build              Preprocess and compile a sketch into .class files.
    --run                Preprocess, compile, and run a sketch.
    --present            Preprocess, compile, and run a sketch in presentation mode.
    
    --export             Export an application.
    --variant            Specify the platform and architecture (Export only).
    --no-java            Do not embed Java.
    
    Starting with 4.0, the --platform option has been removed
    because of the variety of platforms and architectures now available.
    Use the --variant option instead, for instance:
    
    variant        platform
    -------------  ---------------------------
    macos-x86_64   macOS (Intel 64-bit)
    macos-aarch64  macOS (Apple Silicon)
    windows-amd64  Windows (Intel 64-bit)
    linux-amd64    Linux (Intel 64-bit)
    linux-arm      Linux (Raspberry Pi 32-bit)
    linux-aarch64  Linux (Raspberry Pi 64-bit)
    
    The --build, --run, --present, or --export must be the final parameter
    passed to Processing. Arguments passed following one of those four will
    be passed through to the sketch itself, and therefore available to the
    sketch via the 'args' field. To pass options understood by PApplet.main(),
    write a custom main() method so that the preprocessor does not add one.
    https://github.com/processing/processing4/wiki/Command-Line
    
    Finished.
    
    > Task :app:test
    
    LocaleKtTest > testLocale() FAILED
        java.lang.AssertionError at Assertions.kt:264
            Caused by: java.lang.AssertionError at LocaleKtTest.kt:16
    
    OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
    
    > Task :app:test FAILED
    
    19 tests completed, 1 failed
    [Incubating] Problems report is available at: file:///Users/stan/EN%20COURS/CODE/PERSO/PROCESSING/processing4/.build/reports/problems/problems-report.html
    
    FAILURE: Build failed with an exception.
    
    * What went wrong:
    Execution failed for task ':app:test'.
    > There were failing tests. See the report at: file:///Users/stan/EN%20COURS/CODE/PERSO/PROCESSING/processing4/app/build/reports/tests/test/index.html
    
    * Try:
    > Run with --scan to get full insights.
    
    BUILD FAILED in 1m 42s
    55 actionable tasks: 51 executed, 4 up-to-date
    ➜  processing4 git:(main) ✗ 
    
  3. catilac commented on Jul 6, 2026

    @catilac
    Collaborator

    the local tests are running now

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions