You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ti...@apache.org on 2019/11/10 00:15:03 UTC
[maven-surefire] 01/02: [SUREFIRE-1712] Running tests with JDK13
fails with Unsupported class file major version 57
This is an automated email from the ASF dual-hosted git repository.
tibordigana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git
commit 46cd88c6c92f4fb0cfc75eda7ee8ce6912d0c49a
Author: tibordigana <ti...@apache.org>
AuthorDate: Sun Nov 10 00:47:26 2019 +0100
[SUREFIRE-1712] Running tests with JDK13 fails with Unsupported class file major version 57
---
.../plugin/surefire/AbstractSurefireMojo.java | 6 ++-
.../ModularClasspathForkConfiguration.java | 36 ++-----------
.../AbstractSurefireMojoJava7PlusTest.java | 15 ++++--
.../ModularClasspathForkConfigurationTest.java | 15 ++----
.../maven/surefire/booter/ModularClasspath.java | 10 ++--
...urefire1712ExtractedModulenameWithoutASMIT.java | 53 ++++++++++++++++++
.../pom.xml | 63 ++++++++++++++++++++++
.../src/main/java/module-info.java | 23 ++++++++
.../src/main/java/wtf/g4s8/oot/Foo.java | 35 ++++++++++++
.../src/test/java/module-info.java | 25 +++++++++
.../src/test/java/wtf/g4s8/oot/test/FooTest.java | 35 ++++++++++++
11 files changed, 260 insertions(+), 56 deletions(-)
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
index 4ee933b..5683b7f 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
@@ -1901,8 +1901,10 @@ public abstract class AbstractSurefireMojo
packages.add( substringBeforeLast( className, "." ) );
}
- ModularClasspath modularClasspath = new ModularClasspath( moduleDescriptor, testModulepath.getClassPath(),
- packages, getTestClassesDirectory() );
+ getConsoleLogger().debug( "main module descriptor name: " + result.getMainModuleDescriptor().name() );
+
+ ModularClasspath modularClasspath = new ModularClasspath( result.getMainModuleDescriptor().name(),
+ testModulepath.getClassPath(), packages, getTestClassesDirectory() );
Artifact[] additionalInProcArtifacts =
{ getCommonArtifact(), getExtensionsArtifact(), getApiArtifact(), getLoggerApiArtifact() };
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfiguration.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfiguration.java
index 55818a2..af38bc5 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfiguration.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfiguration.java
@@ -28,15 +28,11 @@ import org.apache.maven.surefire.booter.ModularClasspath;
import org.apache.maven.surefire.booter.ModularClasspathConfiguration;
import org.apache.maven.surefire.booter.StartupConfiguration;
import org.apache.maven.surefire.booter.SurefireBooterForkException;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ModuleVisitor;
import javax.annotation.Nonnegative;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.File;
-import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Collection;
@@ -50,7 +46,6 @@ import static java.io.File.pathSeparatorChar;
import static org.apache.maven.plugin.surefire.SurefireHelper.escapeToPlatformPath;
import static org.apache.maven.shared.utils.StringUtils.replace;
import static org.apache.maven.surefire.util.internal.StringUtils.NL;
-import static org.objectweb.asm.Opcodes.ASM7;
/**
* @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
@@ -92,13 +87,13 @@ public class ModularClasspathForkConfiguration
ModularClasspath modularClasspath = modularClasspathConfiguration.getModularClasspath();
- File descriptor = modularClasspath.getModuleDescriptor();
+ String moduleName = modularClasspath.getModuleNameFromDescriptor();
List<String> modulePath = modularClasspath.getModulePath();
Collection<String> packages = modularClasspath.getPackages();
File patchFile = modularClasspath.getPatchFile();
List<String> classpath = toCompleteClasspath( config );
- File argsFile = createArgsFile( descriptor, modulePath, classpath, packages, patchFile, startClass );
+ File argsFile = createArgsFile( moduleName, modulePath, classpath, packages, patchFile, startClass );
cli.createArg().setValue( "@" + escapeToPlatformPath( argsFile.getAbsolutePath() ) );
}
@@ -112,7 +107,7 @@ public class ModularClasspathForkConfiguration
}
@Nonnull
- File createArgsFile( @Nonnull File moduleDescriptor, @Nonnull List<String> modulePath,
+ File createArgsFile( @Nonnull String moduleName, @Nonnull List<String> modulePath,
@Nonnull List<String> classPath, @Nonnull Collection<String> packages,
@Nonnull File patchFile, @Nonnull String startClassName )
throws IOException
@@ -169,8 +164,6 @@ public class ModularClasspathForkConfiguration
.append( NL );
}
- final String moduleName = toModuleName( moduleDescriptor );
-
args.append( "--patch-module" )
.append( NL )
.append( moduleName )
@@ -218,27 +211,4 @@ public class ModularClasspathForkConfiguration
return surefireArgs;
}
}
-
- @Nonnull
- String toModuleName( @Nonnull File moduleDescriptor ) throws IOException
- {
- if ( !moduleDescriptor.isFile() )
- {
- throw new IOException( "No such Jigsaw module-descriptor exists " + moduleDescriptor.getAbsolutePath() );
- }
-
- final StringBuilder sb = new StringBuilder();
- new ClassReader( new FileInputStream( moduleDescriptor ) ).accept( new ClassVisitor( ASM7 )
- {
- @Override
- public ModuleVisitor visitModule( String name, int access, String version )
- {
- sb.setLength( 0 );
- sb.append( name );
- return super.visitModule( name, access, version );
- }
- }, 0 );
-
- return sb.toString();
- }
}
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoJava7PlusTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoJava7PlusTest.java
index 0850e2a..1f0309b 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoJava7PlusTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoJava7PlusTest.java
@@ -30,6 +30,7 @@ import org.apache.maven.surefire.booter.ModularClasspathConfiguration;
import org.apache.maven.surefire.booter.StartupConfiguration;
import org.apache.maven.surefire.suite.RunResult;
import org.apache.maven.surefire.util.DefaultScanResult;
+import org.codehaus.plexus.languages.java.jpms.JavaModuleDescriptor;
import org.codehaus.plexus.languages.java.jpms.LocationManager;
import org.codehaus.plexus.languages.java.jpms.ResolvePathsRequest;
import org.codehaus.plexus.languages.java.jpms.ResolvePathsResult;
@@ -82,6 +83,9 @@ public class AbstractSurefireMojoJava7PlusTest
@Mock
private LocationManager locationManager;
+ @Mock
+ private JavaModuleDescriptor descriptor;
+
@Test
@SuppressWarnings( "checkstyle:linelength" )
public void shouldHaveStartupConfigForModularClasspath()
@@ -142,8 +146,11 @@ public class AbstractSurefireMojoJava7PlusTest
when( req.setJdkHome( anyString() ) ).thenReturn( req );
when( req.setMainModuleDescriptor( eq( moduleInfo.getAbsolutePath() ) ) ).thenReturn( req );
+ when( descriptor.name() ).thenReturn( "abc" );
+
@SuppressWarnings( "unchecked" )
ResolvePathsResult<String> res = mock( ResolvePathsResult.class );
+ when( res.getMainModuleDescriptor() ).thenReturn( descriptor );
when( res.getClasspathElements() ).thenReturn( asList( "non-modular.jar", "junit.jar", "hamcrest.jar" ) );
Map<String, ModuleNameSource> mod = new LinkedHashMap<>();
mod.put( "modular.jar", null );
@@ -203,9 +210,10 @@ public class AbstractSurefireMojoJava7PlusTest
assertThat( argument2.getValue().getMessage() )
.isEqualTo( "low version" );
ArgumentCaptor<String> argument = ArgumentCaptor.forClass( String.class );
- verify( logger, times( 8 ) ).debug( argument.capture() );
+ verify( logger, times( 9 ) ).debug( argument.capture() );
assertThat( argument.getAllValues() )
- .containsExactly( "test classpath: non-modular.jar junit.jar hamcrest.jar",
+ .containsExactly( "main module descriptor name: abc",
+ "test classpath: non-modular.jar junit.jar hamcrest.jar",
"test modulepath: modular.jar classes",
"provider classpath: surefire-provider.jar",
"test(compact) classpath: non-modular.jar junit.jar hamcrest.jar",
@@ -229,13 +237,12 @@ public class AbstractSurefireMojoJava7PlusTest
.isEqualTo( new Classpath( singleton( "surefire-provider.jar" ) ) );
assertThat( conf.getClasspathConfiguration() ).isInstanceOf( ModularClasspathConfiguration.class );
ModularClasspathConfiguration mcc = ( ModularClasspathConfiguration ) conf.getClasspathConfiguration();
- assertThat( mcc.getModularClasspath().getModuleDescriptor() ).isEqualTo( moduleInfo );
+ assertThat( mcc.getModularClasspath().getModuleNameFromDescriptor() ).isEqualTo( "abc" );
assertThat( mcc.getModularClasspath().getPackages() ).containsOnly( "org.apache" );
assertThat( mcc.getModularClasspath().getPatchFile().getAbsolutePath() )
.isEqualTo( "test-classes" );
assertThat( mcc.getModularClasspath().getModulePath() )
.containsExactly( "modular.jar", "classes" );
- assertThat( ( Object ) mcc.getTestClasspath() ).isEqualTo( new Classpath( res.getClasspathElements() ) );
}
private static File mockFile( String absolutePath )
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfigurationTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfigurationTest.java
index 72eafb9..806f3eb 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfigurationTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfigurationTest.java
@@ -29,7 +29,6 @@ import org.apache.maven.surefire.booter.ModularClasspathConfiguration;
import org.apache.maven.surefire.booter.StartupConfiguration;
import org.junit.Test;
-import javax.annotation.Nonnull;
import java.io.File;
import java.util.Collection;
import java.util.Collections;
@@ -67,15 +66,7 @@ public class ModularClasspathForkConfigurationTest
ModularClasspathForkConfiguration config = new ModularClasspathForkConfiguration( booter, tmp, "", pwd,
new Properties(), "",
Collections.<String, String>emptyMap(), new String[0], true, 1, true,
- new Platform(), new NullConsoleLogger() )
- {
- @Nonnull
- @Override
- String toModuleName( @Nonnull File moduleDescriptor )
- {
- return "abc";
- }
- };
+ new Platform(), new NullConsoleLogger() );
File patchFile = new File( "target" + separatorChar + "test-classes" );
File descriptor = new File( tmp, "module-info.class" );
@@ -87,7 +78,7 @@ public class ModularClasspathForkConfigurationTest
String startClassName = ForkedBooter.class.getName();
File jigsawArgsFile =
- config.createArgsFile( descriptor, modulePath, classPath, packages, patchFile, startClassName );
+ config.createArgsFile( "abc", modulePath, classPath, packages, patchFile, startClassName );
assertThat( jigsawArgsFile )
.isNotNull();
@@ -143,7 +134,7 @@ public class ModularClasspathForkConfigurationTest
assertThat( argsFileLines.get( 12 ) )
.isEqualTo( ForkedBooter.class.getName() );
- ModularClasspath modularClasspath = new ModularClasspath( descriptor, modulePath, packages, patchFile );
+ ModularClasspath modularClasspath = new ModularClasspath( "abc", modulePath, packages, patchFile );
Classpath testClasspathUrls = new Classpath( singleton( "target" + separator + "test-classes" ) );
Classpath surefireClasspathUrls = Classpath.emptyClasspath();
ModularClasspathConfiguration modularClasspathConfiguration =
diff --git a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ModularClasspath.java b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ModularClasspath.java
index 9607b27..7bf8bd0 100644
--- a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ModularClasspath.java
+++ b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ModularClasspath.java
@@ -35,25 +35,25 @@ import static java.util.Collections.unmodifiableList;
*/
public final class ModularClasspath
{
- private final File moduleDescriptor;
+ private final String moduleNameFromDescriptor;
private final List<String> modulePath;
private final Collection<String> packages;
private final File patchFile;
- public ModularClasspath( @Nonnull File moduleDescriptor, @Nonnull List<String> modulePath,
+ public ModularClasspath( @Nonnull String moduleNameFromDescriptor, @Nonnull List<String> modulePath,
@Nonnull Collection<String> packages,
@Nonnull File patchFile )
{
- this.moduleDescriptor = moduleDescriptor;
+ this.moduleNameFromDescriptor = moduleNameFromDescriptor;
this.modulePath = modulePath;
this.packages = packages;
this.patchFile = patchFile;
}
@Nonnull
- public File getModuleDescriptor()
+ public String getModuleNameFromDescriptor()
{
- return moduleDescriptor;
+ return moduleNameFromDescriptor;
}
@Nonnull
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1712ExtractedModulenameWithoutASMIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1712ExtractedModulenameWithoutASMIT.java
new file mode 100644
index 0000000..92c56ad
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1712ExtractedModulenameWithoutASMIT.java
@@ -0,0 +1,53 @@
+package org.apache.maven.surefire.its.jiras;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.surefire.its.AbstractJigsawIT;
+import org.junit.Test;
+
+import java.io.IOException;
+
+/**
+ * See the JIRA https://issues.apache.org/jira/browse/SUREFIRE-1712
+ *
+ * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
+ * @since 3.0.0-M4
+ */
+public class Surefire1712ExtractedModulenameWithoutASMIT
+ extends AbstractJigsawIT
+{
+ @Test
+ public void test()
+ throws IOException
+ {
+ assumeJava9()
+ .debugLogging()
+ .executeTest()
+ .assertTestSuiteResults( 1, 0, 0, 0 )
+ .verifyErrorFreeLog()
+ .verifyTextInLog( "main module descriptor name: wtf.g4s8.oot" );
+ }
+
+ @Override
+ protected String getProjectDirectoryName()
+ {
+ return "surefire-1712-extracted-modulename-without-asm";
+ }
+}
diff --git a/surefire-its/src/test/resources/surefire-1712-extracted-modulename-without-asm/pom.xml b/surefire-its/src/test/resources/surefire-1712-extracted-modulename-without-asm/pom.xml
new file mode 100644
index 0000000..f2cb6aa
--- /dev/null
+++ b/surefire-its/src/test/resources/surefire-1712-extracted-modulename-without-asm/pom.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>abc</groupId>
+ <artifactId>xyz</artifactId>
+ <version>1.0</version>
+
+ <properties>
+ <junit-platform.version>5.5.2</junit-platform.version>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <maven.compiler.release>9</maven.compiler.release>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>hamcrest</artifactId>
+ <version>2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-engine</artifactId>
+ <version>5.5.2</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>3.8.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>${surefire.version}</version>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/surefire-its/src/test/resources/surefire-1712-extracted-modulename-without-asm/src/main/java/module-info.java b/surefire-its/src/test/resources/surefire-1712-extracted-modulename-without-asm/src/main/java/module-info.java
new file mode 100644
index 0000000..a0b3588
--- /dev/null
+++ b/surefire-its/src/test/resources/surefire-1712-extracted-modulename-without-asm/src/main/java/module-info.java
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module wtf.g4s8.oot
+{
+ exports wtf.g4s8.oot;
+}
diff --git a/surefire-its/src/test/resources/surefire-1712-extracted-modulename-without-asm/src/main/java/wtf/g4s8/oot/Foo.java b/surefire-its/src/test/resources/surefire-1712-extracted-modulename-without-asm/src/main/java/wtf/g4s8/oot/Foo.java
new file mode 100644
index 0000000..1540031
--- /dev/null
+++ b/surefire-its/src/test/resources/surefire-1712-extracted-modulename-without-asm/src/main/java/wtf/g4s8/oot/Foo.java
@@ -0,0 +1,35 @@
+package wtf.g4s8.oot;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public final class Foo
+{
+ private final int base;
+
+ public Foo( int base )
+ {
+ this.base = base;
+ }
+
+ public int add( final int x )
+ {
+ return this.base + x;
+ }
+}
diff --git a/surefire-its/src/test/resources/surefire-1712-extracted-modulename-without-asm/src/test/java/module-info.java b/surefire-its/src/test/resources/surefire-1712-extracted-modulename-without-asm/src/test/java/module-info.java
new file mode 100644
index 0000000..7bbf986
--- /dev/null
+++ b/surefire-its/src/test/resources/surefire-1712-extracted-modulename-without-asm/src/test/java/module-info.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module wtf.g4s8.oot.test
+{
+ requires wtf.g4s8.oot;
+ requires org.junit.jupiter.api;
+ requires transitive org.hamcrest;
+}
diff --git a/surefire-its/src/test/resources/surefire-1712-extracted-modulename-without-asm/src/test/java/wtf/g4s8/oot/test/FooTest.java b/surefire-its/src/test/resources/surefire-1712-extracted-modulename-without-asm/src/test/java/wtf/g4s8/oot/test/FooTest.java
new file mode 100644
index 0000000..d8aa49d
--- /dev/null
+++ b/surefire-its/src/test/resources/surefire-1712-extracted-modulename-without-asm/src/test/java/wtf/g4s8/oot/test/FooTest.java
@@ -0,0 +1,35 @@
+package wtf.g4s8.oot.test;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.hamcrest.Matchers;
+import org.junit.jupiter.api.Test;
+import wtf.g4s8.oot.Foo;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+
+public class FooTest
+{
+ @Test
+ public void addTest()
+ {
+ assertThat( new Foo( 1 ).add( 1 ), Matchers.equalTo( 2 ) );
+ }
+}