This is an automated email from the ASF dual-hosted git repository.
mbien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new 9ecdd967c2 Improvement to let netbeans/maven execute tests in non
default test folders
new 5a97ccfe72 Merge pull request #4924 from
Honza-cz/generated-test-execution
9ecdd967c2 is described below
commit 9ecdd967c2068ad4269d5b80bb3e0ea3b606db53
Author: Jan Kostohryz <[email protected]>
AuthorDate: Sat Nov 5 23:17:19 2022 +0100
Improvement to let netbeans/maven execute tests in non default test folders
which were added by maven plugin: build-helper-maven-plugin/add-test-source
---
.../maven/execute/DefaultReplaceTokenProvider.java | 55 ++++++++------
.../execute/DefaultReplaceTokenProviderTest.java | 87 ++++++++++++++++++++--
2 files changed, 115 insertions(+), 27 deletions(-)
diff --git
a/java/maven/src/org/netbeans/modules/maven/execute/DefaultReplaceTokenProvider.java
b/java/maven/src/org/netbeans/modules/maven/execute/DefaultReplaceTokenProvider.java
index 32d272cd79..b6212bf21c 100644
---
a/java/maven/src/org/netbeans/modules/maven/execute/DefaultReplaceTokenProvider.java
+++
b/java/maven/src/org/netbeans/modules/maven/execute/DefaultReplaceTokenProvider.java
@@ -29,7 +29,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import javax.swing.ActionMap;
+import java.util.stream.Collectors;
import org.netbeans.api.annotations.common.CheckForNull;
import org.netbeans.api.java.project.JavaProjectConstants;
import org.netbeans.api.java.queries.UnitTestForSourceQuery;
@@ -44,7 +44,6 @@ import org.netbeans.modules.maven.NbMavenProjectImpl;
import org.netbeans.modules.maven.api.NbMavenProject;
import org.netbeans.modules.maven.classpath.MavenSourcesImpl;
import org.netbeans.modules.maven.configurations.M2ConfigProvider;
-import org.netbeans.modules.maven.runjar.MavenExecuteUtils;
import org.netbeans.modules.maven.spi.actions.ActionConvertor;
import org.netbeans.modules.maven.spi.actions.ReplaceTokenProvider;
import org.netbeans.spi.project.ActionProvider;
@@ -215,8 +214,13 @@ public class DefaultReplaceTokenProvider implements
ReplaceTokenProvider, Action
HashSet<String> test = new HashSet<String>();
addSelectedFiles(false, fos, test);
addSelectedFiles(true, fos, test);
- String files2test = test.toString().replace(" ", "");
- packClassname.append(files2test.substring(1,
files2test.length() - 1));
+
+ packClassname.append(test
+ .stream()
+ .map(String::trim)
+ .collect(Collectors.joining(","))
+ );
+
}
}
if (packClassname.length() > 0) { //#213671
@@ -249,25 +253,34 @@ public class DefaultReplaceTokenProvider implements
ReplaceTokenProvider, Action
private void addSelectedFiles(boolean testRoots, FileObject[] candidates,
HashSet<String> test) {
NbMavenProjectImpl prj =
project.getLookup().lookup(NbMavenProjectImpl.class);
if (prj != null) {
- URI[] roots = prj.getSourceRoots(testRoots);
- for (URI uri : roots) {
- FileObject root = FileUtil.toFileObject(Utilities.toFile(uri));
- // test if root isn't null -
NbMavenProjectImpl.getSourceRoots() might return a bogus
- // non test uri in case there are only test source roots.
- // NOTE that not sure if this is generaly the right place for
the fix. Even though it is
- // MavenProject which returns those uris, not sure if e.g.
that behaviour wasn't somewhere on the way overriden
- // by the nb maven module ...
- if(root != null) {
- for (FileObject candidate : candidates) {
- String relativePath = FileUtil.getRelativePath(root,
candidate);
- if (relativePath != null) {
- if (testRoots) {
- relativePath = relativePath.replace(".java",
"").replace('/', '.'); //NOI18N
- } else {
- relativePath = relativePath.replace(".java",
"Test").replace('/', '.'); //NOI18N
+ addSelectedFilesInGivenRoot(prj.getSourceRoots(testRoots),
candidates, testRoots, test);
+
addSelectedFilesInGivenRoot(prj.getGeneratedSourceRoots(testRoots), candidates,
testRoots, test);
+ }
+ }
+
+ private void addSelectedFilesInGivenRoot(URI[] roots, FileObject[]
candidates, boolean testRoots, HashSet<String> test) throws
IllegalArgumentException {
+ for (URI rootUri : roots) {
+ FileObject root = FileUtil.toFileObject(Utilities.toFile(rootUri));
+ // test if root isn't null - NbMavenProjectImpl.getSourceRoots()
might return a bogus
+ // non test uri in case there are only test source roots.
+ // NOTE that not sure if this is generaly the right place for the
fix. Even though it is
+ // MavenProject which returns those uris, not sure if e.g. that
behaviour wasn't somewhere on the way overriden
+ // by the nb maven module ...
+ if(root != null) {
+ for (FileObject candidate : candidates) {
+ String relativePath = FileUtil.getRelativePath(root,
candidate);
+ if (relativePath != null) {
+ if (testRoots) {
+ relativePath = relativePath.replace(".java",
"").replace('/', '.'); //NOI18N
+ if (candidate.isFolder()) {
+ relativePath += relativePath.isEmpty()
+ ? "**"
+ : ".**";
}
- test.add(relativePath);
+ } else {
+ relativePath = relativePath.replace(".java",
"Test").replace('/', '.'); //NOI18N
}
+ test.add(relativePath);
}
}
}
diff --git
a/java/maven/test/unit/src/org/netbeans/modules/maven/execute/DefaultReplaceTokenProviderTest.java
b/java/maven/test/unit/src/org/netbeans/modules/maven/execute/DefaultReplaceTokenProviderTest.java
index 4fbb743915..394a23f22d 100644
---
a/java/maven/test/unit/src/org/netbeans/modules/maven/execute/DefaultReplaceTokenProviderTest.java
+++
b/java/maven/test/unit/src/org/netbeans/modules/maven/execute/DefaultReplaceTokenProviderTest.java
@@ -16,9 +16,10 @@
* specific language governing permissions and limitations
* under the License.
*/
-
package org.netbeans.modules.maven.execute;
+import java.io.IOException;
+import java.util.Map;
import org.netbeans.api.project.Project;
import org.netbeans.api.project.ProjectManager;
import org.netbeans.junit.NbTestCase;
@@ -38,7 +39,8 @@ public class DefaultReplaceTokenProviderTest extends
NbTestCase {
private FileObject d;
- @Override protected void setUp() throws Exception {
+ @Override
+ protected void setUp() throws Exception {
clearWorkDir();
d = FileUtil.toFileObject(getWorkDir());
}
@@ -64,23 +66,96 @@ public class DefaultReplaceTokenProviderTest extends
NbTestCase {
// XXX test src/main/java selections
// XXX test selections across groups, or outside groups
// XXX test single methods
-
+
//#213671
assertEquals(null, ActionProviderImpl.replacements(p,
ActionProvider.COMMAND_RUN,
Lookup.EMPTY).get(DefaultReplaceTokenProvider.PACK_CLASSNAME));
assertEquals(null, ActionProviderImpl.replacements(p,
ActionProvider.COMMAND_RUN,
Lookup.EMPTY).get(DefaultReplaceTokenProvider.CLASSNAME));
assertEquals(null, ActionProviderImpl.replacements(p,
ActionProvider.COMMAND_RUN,
Lookup.EMPTY).get(DefaultReplaceTokenProvider.CLASSNAME_EXT));
-
+
}
-
+
public void testNgSingle() throws Exception {
TestFileUtils.writeFile(d, "pom.xml",
"<project><modelVersion>4.0.0</modelVersion>"
+
"<groupId>g</groupId><artifactId>a</artifactId><version>0</version></project>");
TestFileUtils.writeFile(d, "src/test/java/p1/FirstNGTest.java",
"package p1; class FirstNGTest {}");
TestFileUtils.writeFile(d, "src/main/java/p1/First.java", "package p1;
class First {}");
-
+
Project p = ProjectManager.getDefault().findProject(d);
assertEquals("p1.FirstNGTest", ActionProviderImpl.replacements(p,
ActionProvider.COMMAND_TEST_SINGLE,
Lookups.singleton(d.getFileObject("src/main/java/p1/First.java"))).get(DefaultReplaceTokenProvider.PACK_CLASSNAME));
}
+ public void testIntegration2Files() throws Exception {
+ pomWithHelperPluginAndExtraTestFolder();
+ TestFileUtils.writeFile(d, "src/extra-test/java/p1/ItTest.java",
+ "//license\n"
+ + "package p1;\n"
+ + "class ItTest {}");
+ TestFileUtils.writeFile(d,
"src/extra-test/java/p1/a/b/c/ItTestInlined.java",
+ "/*a comment*/ package p1.a. b.c ; class ItTestInlined {}");
//spabe between a and b is allowed
+
+ Project p = ProjectManager.getDefault().findProject(d);
+ DefaultReplaceTokenProvider instance = new
DefaultReplaceTokenProvider(p);
+ Map<String, String> replacements =
instance.createReplacements(ActionProviderImpl.COMMAND_INTEGRATION_TEST_SINGLE,
+ Lookups.fixed(
+ d.getFileObject("src/extra-test/java/p1/ItTest.java"),
+
d.getFileObject("src/extra-test/java/p1/a/b/c/ItTestInlined.java"))
+ );
+
+ final String packageClassName = replacements.get("packageClassName");
+ assertTrue(packageClassName.contains("p1.ItTest"));
+ assertTrue(packageClassName.contains("p1.a.b.c.ItTestInlined"));
+ }
+
+ private void pomWithHelperPluginAndExtraTestFolder() throws IOException {
+ TestFileUtils.writeFile(d, "pom.xml",
"<project><modelVersion>4.0.0</modelVersion>"
+ +
"<groupId>g</groupId><artifactId>a</artifactId><version>0</version><build>"
+ +
"<plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>build-helper-maven-plugin</artifactId>"
+ +
"<executions><execution><id>add-test-source</id><phase>generate-test-sources</phase><goals>"
+ +
"<goal>add-test-source</goal></goals><configuration><sources><source>src/extra-test/java</source></sources>"
+ +
"</configuration></execution></executions></plugin></plugins></build></project>");
+ }
+
+ public void testIntegrationPackage() throws Exception {
+ pomWithHelperPluginAndExtraTestFolder();
+ TestFileUtils.writeFile(d,
"src/extra-test/java/p1/a/b/c/ItTestInlined.java",
+ "/*a comment*/ package p1.a. b.c ; class ItTestInlined {}");
//space between a and b is allowed
+
+ Project p = ProjectManager.getDefault().findProject(d);
+
+ DefaultReplaceTokenProvider instance = new
DefaultReplaceTokenProvider(p);
+ Map<String, String> replacements =
instance.createReplacements(ActionProviderImpl.COMMAND_INTEGRATION_TEST_SINGLE,
+ Lookups.fixed(
+ d.getFileObject("src/extra-test/java/p1/a/b/c/"))
+ );
+
+ final String packageClassName = replacements.get("packageClassName");
+ assertTrue(packageClassName.contains("p1.a.b.c.**"));
+ }
+
+ public void testIntegration2FilesAndPacakge() throws Exception {
+ pomWithHelperPluginAndExtraTestFolder();
+ TestFileUtils.writeFile(d, "src/extra-test/java/p1/ItTest.java",
+ "//license\n"
+ + "package p1;\n"
+ + "class ItTest {}");
+ TestFileUtils.writeFile(d,
"src/extra-test/java/p1/a/b/c/ItTestInlined.java",
+ "/*a comment*/ package p1.a. b.c ; class ItTestInlined {}");
//space between a and b is allowed
+ TestFileUtils.writeFile(d, "src/extra-test/java/p1/d/ItTest3.java",
+ "package p1.d;\nclass ItTest3 {}");
+
+ Project p = ProjectManager.getDefault().findProject(d);
+ DefaultReplaceTokenProvider instance = new
DefaultReplaceTokenProvider(p);
+ Map<String, String> replacements =
instance.createReplacements(ActionProviderImpl.COMMAND_INTEGRATION_TEST_SINGLE,
+ Lookups.fixed(
+ d.getFileObject("src/extra-test/java/p1/ItTest.java"),
+
d.getFileObject("src/extra-test/java/p1/a/b/c/ItTestInlined.java"),
+ d.getFileObject("src/extra-test/java/p1/d/"))
+ );
+
+ final String packageClassName = replacements.get("packageClassName");
+ assertTrue(packageClassName.contains("p1.ItTest"));
+ assertTrue(packageClassName.contains("p1.a.b.c.ItTestInlined"));
+ assertTrue(packageClassName.contains("p1.d.**"));
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists