sormuras / junit-platform-maven-plugin

Maven Plugin launching the JUnit Platform
Apache License 2.0
61 stars 15 forks source link

Plugin fails with "Unmatched braces in the pattern" #38

Open dmitry-timofeev opened 4 years ago

dmitry-timofeev commented 4 years ago

Hi @sormuras ,

Thanks for the plugin — it is wonderful it supports JUnit Platform features (selectors in particular), allowing to plug engines more easily! I bumped into the following issue:

Plugin fails with error "Unmatched braces in the pattern" if an exception is thrown that contains an opening curly brace.

The simplest reproducing test:

  @Test
  void throwingMethod() {
    throw new RuntimeException(""
        + "{\n"
        + "}\n");
  }

The error message:

[WARNING] [WORKER]   JUnit Jupiter:JavadocTestEngineTest:throwingMethod()
[WARNING] [WORKER]     MethodSource [className = javadoctest.engine.JavadocTestEngineTest, methodName = throwingMethod, methodParameterTypes = ']
[ERROR] Calling worker failed: Unmatched braces in the pattern.
Full stack-trace (when run in debug mode `-X`): ``` [ERROR] Failed to execute goal de.sormuras.junit:junit-platform-maven-plugin:1.0.0-M5:launch (run-doc-tests) on project javadoc-test-junit-platform-engine: Execution failed!: java.lang.RuntimeException: Calling worker failed! Unmatched braces in the pattern. -> [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal de.sormuras.junit:junit-platform-maven-plugin:1.0.0-M5:launch (run-doc-tests) on project javadoc-test-junit-platform-engine: Execution failed! at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192) at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105) at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957) at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289) at org.apache.maven.cli.MavenCli.main (MavenCli.java:193) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:567) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282) at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406) at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347) Caused by: org.apache.maven.plugin.MojoExecutionException: Execution failed! at de.sormuras.junit.platform.maven.plugin.JUnitPlatformMojo.executeDirect (JUnitPlatformMojo.java:441) at de.sormuras.junit.platform.maven.plugin.JUnitPlatformMojo.execute (JUnitPlatformMojo.java:424) at de.sormuras.junit.platform.maven.plugin.JUnitPlatformMojo.execute (JUnitPlatformMojo.java:411) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192) at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105) at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957) at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289) at org.apache.maven.cli.MavenCli.main (MavenCli.java:193) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:567) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282) at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406) at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347) Caused by: java.util.concurrent.ExecutionException: java.lang.RuntimeException: Calling worker failed! at java.util.concurrent.FutureTask.report (FutureTask.java:122) at java.util.concurrent.FutureTask.get (FutureTask.java:205) at de.sormuras.junit.platform.maven.plugin.JUnitPlatformMojo.executeDirect (JUnitPlatformMojo.java:436) at de.sormuras.junit.platform.maven.plugin.JUnitPlatformMojo.execute (JUnitPlatformMojo.java:424) at de.sormuras.junit.platform.maven.plugin.JUnitPlatformMojo.execute (JUnitPlatformMojo.java:411) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192) at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105) at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957) at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289) at org.apache.maven.cli.MavenCli.main (MavenCli.java:193) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:567) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282) at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406) at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347) Caused by: java.lang.RuntimeException: Calling worker failed! at de.sormuras.junit.platform.isolator.Isolator.evaluate (Isolator.java:87) at de.sormuras.junit.platform.maven.plugin.JUnitPlatformMojo.lambda$executeDirect$7 (JUnitPlatformMojo.java:434) at java.util.concurrent.FutureTask.run (FutureTask.java:264) at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1128) at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:628) at java.lang.Thread.run (Thread.java:830) Caused by: java.lang.IllegalArgumentException: Unmatched braces in the pattern. at java.text.MessageFormat.applyPattern (MessageFormat.java:520) at java.text.MessageFormat. (MessageFormat.java:370) at java.text.MessageFormat.format (MessageFormat.java:859) at de.sormuras.junit.platform.isolator.worker.Worker.warn (Worker.java:54) at de.sormuras.junit.platform.isolator.worker.Worker.lambda$call$0 (Worker.java:118) at java.util.Arrays$ArrayList.forEach (Arrays.java:4411) at de.sormuras.junit.platform.isolator.worker.Worker.call (Worker.java:118) at de.sormuras.junit.platform.isolator.worker.Worker.call (Worker.java:28) at de.sormuras.junit.platform.isolator.Isolator.evaluate (Isolator.java:84) at de.sormuras.junit.platform.maven.plugin.JUnitPlatformMojo.lambda$executeDirect$7 (JUnitPlatformMojo.java:434) at java.util.concurrent.FutureTask.run (FutureTask.java:264) at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1128) at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:628) at java.lang.Thread.run (Thread.java:830) ```

It seems the message will be truncated (and cause an error) once an opening curly brace occurs.


Plugin version: 1.0.0-M5 Maven: 3.6.3 JDK: OpenJDK 13

sormuras commented 4 years ago

Dooh. Found the root cause at

https://github.com/sormuras/junit-platform-isolator/blob/8f5bf62fac788f4add522229bce1c5ff9146b91c/junit-platform-isolator-worker/src/main/java/de/sormuras/junit/platform/isolator/worker/Worker.java#L118

This logging API is using java.text.MessageFormat.format which needs a lot of escaping.