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 404322f048 Adding ability to run a single sub-test for tests under
jtreg.
new 622dbf0093 Merge pull request #6067 from
jlahoda/jtreg-run-single-test-case
404322f048 is described below
commit 404322f0484d249c3f5077bfcf9c8730c71f7a5d
Author: Jan Lahoda <[email protected]>
AuthorDate: Sat Jan 14 22:58:33 2023 +0100
Adding ability to run a single sub-test for tests under jtreg.
---
ide/gsf.testrunner.ui/nbproject/project.xml | 1 +
java/java.openjdk.project/nbproject/project.xml | 25 +++++++++
.../java/openjdk/jtreg/ActionProviderImpl.java | 41 ++++++++++++--
.../java/openjdk/jtreg/ClassPathProviderImpl.java | 17 +++++-
.../java/openjdk/jtreg}/TestClassInfoTask.java | 8 +--
.../java/openjdk/project/ActionProviderImpl.java | 12 ++++
.../openjdk/project/ClassPathProviderImpl.java | 2 +-
.../modules/java/openjdk/project/JDKProject.java | 1 +
.../project/UnitTestForSourceQueryImpl.java | 64 +++++++++++++++++++++
java/java.testrunner.ui/nbproject/project.xml | 1 +
java/testng.ui/nbproject/project.xml | 14 ++++-
.../testng/ui/actions/TestClassInfoTask.java | 56 ++++++++++++-------
.../testng/ui/actions/RetoucheTestBase.java | 10 ----
.../testng/ui/actions/TestClassInfoTaskTest.java | 65 ++++++++++++++++++++++
14 files changed, 273 insertions(+), 44 deletions(-)
diff --git a/ide/gsf.testrunner.ui/nbproject/project.xml
b/ide/gsf.testrunner.ui/nbproject/project.xml
index b54d0943cf..1fd2cb0553 100644
--- a/ide/gsf.testrunner.ui/nbproject/project.xml
+++ b/ide/gsf.testrunner.ui/nbproject/project.xml
@@ -266,6 +266,7 @@
<friend>org.netbeans.modules.groovy.support</friend>
<friend>org.netbeans.modules.hudson.ui</friend>
<friend>org.netbeans.modules.java.lsp.server</friend>
+ <friend>org.netbeans.modules.java.openjdk.project</friend>
<friend>org.netbeans.modules.java.testrunner.ui</friend>
<friend>org.netbeans.modules.javascript.jstestdriver</friend>
<friend>org.netbeans.modules.javascript.karma</friend>
diff --git a/java/java.openjdk.project/nbproject/project.xml
b/java/java.openjdk.project/nbproject/project.xml
index 52f92e18ab..1c9909c89a 100644
--- a/java/java.openjdk.project/nbproject/project.xml
+++ b/java/java.openjdk.project/nbproject/project.xml
@@ -136,6 +136,14 @@
<specification-version>1.64</specification-version>
</run-dependency>
</dependency>
+ <dependency>
+
<code-name-base>org.netbeans.modules.gsf.testrunner.ui</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>1.34</specification-version>
+ </run-dependency>
+ </dependency>
<dependency>
<code-name-base>org.netbeans.modules.java.lexer</code-name-base>
<build-prerequisite/>
@@ -188,6 +196,14 @@
<specification-version>2.36</specification-version>
</run-dependency>
</dependency>
+ <dependency>
+
<code-name-base>org.netbeans.modules.java.testrunner.ui</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>1.23</specification-version>
+ </run-dependency>
+ </dependency>
<dependency>
<code-name-base>org.netbeans.modules.lexer</code-name-base>
<build-prerequisite/>
@@ -197,6 +213,15 @@
<specification-version>1.66</specification-version>
</run-dependency>
</dependency>
+ <dependency>
+
<code-name-base>org.netbeans.modules.parsing.api</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <release-version>1</release-version>
+ <specification-version>9.26</specification-version>
+ </run-dependency>
+ </dependency>
<dependency>
<code-name-base>org.netbeans.modules.parsing.indexing</code-name-base>
<build-prerequisite/>
diff --git
a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/ActionProviderImpl.java
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/ActionProviderImpl.java
index 6bc5d24c4d..6f200eec43 100644
---
a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/ActionProviderImpl.java
+++
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/ActionProviderImpl.java
@@ -64,6 +64,7 @@ import org.netbeans.modules.java.openjdk.project.Settings;
import org.netbeans.spi.java.classpath.support.ClassPathSupport;
import org.netbeans.spi.project.ActionProgress;
import org.netbeans.spi.project.ActionProvider;
+import org.netbeans.spi.project.SingleMethod;
import org.netbeans.spi.project.ui.CustomizerProvider2;
import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor;
@@ -97,7 +98,7 @@ import org.openide.windows.OutputListener;
*
* @author lahvac
*/
-@ServiceProvider(service=ActionProvider.class)
+@ServiceProvider(service=ActionProvider.class, position=1_000_000)
public class ActionProviderImpl implements ActionProvider {
private static final Logger LOG =
Logger.getLogger(ActionProviderImpl.class.getName());
@@ -107,6 +108,8 @@ public class ActionProviderImpl implements ActionProvider {
COMMAND_TEST_SINGLE,
COMMAND_DEBUG_TEST_SINGLE,
COMMAND_PROFILE_TEST_SINGLE,
+ SingleMethod.COMMAND_RUN_SINGLE_METHOD,
+ SingleMethod.COMMAND_DEBUG_SINGLE_METHOD
};
@Override
@@ -129,9 +132,29 @@ public class ActionProviderImpl implements ActionProvider {
"DN_Running=Running ({0})",
"LBL_IncorrectVersionSelectJTReg=Location of JTReg:",
"TITLE_IncorrectVersionSelectJTReg=Version of JTReg appears to
be incorrect, please select a correct version"})
- public static ExecutorTask createAndRunTest(Lookup context, String
command) {
- final FileObject file = context.lookup(FileObject.class);
+ public static ExecutorTask createAndRunTest(Lookup context, String
inputCommand) {
+ FileObject file;
+ String query;
+ String command;
+
+ if (SingleMethod.COMMAND_RUN_SINGLE_METHOD.equals(inputCommand) ||
+ SingleMethod.COMMAND_DEBUG_SINGLE_METHOD.equals(inputCommand)) {
+ SingleMethod singleMethod = context.lookup(SingleMethod.class);
+
+ assert singleMethod != null;
+
+ file = singleMethod.getFile();
+ query = singleMethod.getMethodName();
+ command =
SingleMethod.COMMAND_RUN_SINGLE_METHOD.equals(inputCommand) ?
COMMAND_TEST_SINGLE
+
: COMMAND_DEBUG_TEST_SINGLE;
+ } else {
+ file = context.lookup(FileObject.class);
+ query = null;
+ command = inputCommand;
+ }
+
ensureProjectsRegistered(file);
+
String ioName = COMMAND_DEBUG_TEST_SINGLE.equals(command) ?
Bundle.DN_Debugging(file.getName()) : Bundle.DN_Running(file.getName());
StopAction newStop = new StopAction();
ReRunAction newReRun = new ReRunAction(COMMAND_TEST_SINGLE);
@@ -305,7 +328,11 @@ public class ActionProviderImpl implements ActionProvider {
}
break;
}
- options.add(FileUtil.toFile(file).getAbsolutePath());
+ String testPath = FileUtil.toFile(file).getAbsolutePath();
+ if (query != null) {
+ testPath += "?" + query;
+ }
+ options.add(testPath);
try {
stop.started();
Process jtregProcess = new
ProcessBuilder(options).start();
@@ -702,6 +729,12 @@ public class ActionProviderImpl implements ActionProvider {
public boolean isActionEnabled(String command, Lookup context) throws
IllegalArgumentException {
FileObject file = context.lookup(FileObject.class);
+ if (file == null) {
+ SingleMethod singleMethod = context.lookup(SingleMethod.class);
+
+ file = singleMethod != null ? singleMethod.getFile() : null;
+ }
+
if (file == null)
return false;
diff --git
a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/ClassPathProviderImpl.java
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/ClassPathProviderImpl.java
index 36ce45d091..88f5f3b2d0 100644
---
a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/ClassPathProviderImpl.java
+++
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/ClassPathProviderImpl.java
@@ -77,10 +77,21 @@ public class ClassPathProviderImpl implements
ClassPathProvider {
if (javac) {
ClassPath langtoolsCP = ClassPath.getClassPath(keyRoot,
ClassPath.COMPILE);
Library testngLib =
LibraryManager.getDefault().getLibrary("testng");
+ Library junit5Lib =
LibraryManager.getDefault().getLibrary("junit_5");
- if (testngLib != null) {
- return
ClassPathSupport.createProxyClassPath(ClassPathSupport.createClassPath(testngLib.getContent("classpath").toArray(new
URL[0])),
-
langtoolsCP);
+ if (testngLib != null || junit5Lib != null) {
+ List<ClassPath> parts = new ArrayList<>();
+
+ if (testngLib != null) {
+
parts.add(ClassPathSupport.createClassPath(testngLib.getContent("classpath").toArray(new
URL[0])));
+ }
+ if (junit5Lib != null) {
+
parts.add(ClassPathSupport.createClassPath(junit5Lib.getContent("classpath").toArray(new
URL[0])));
+ }
+
+ parts.add(langtoolsCP);
+
+ return
ClassPathSupport.createProxyClassPath(parts.toArray(new ClassPath[0]));
}
if (langtoolsCP == null)
diff --git
a/java/testng.ui/src/org/netbeans/modules/testng/ui/actions/TestClassInfoTask.java
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/TestClassInfoTask.java
similarity index 98%
copy from
java/testng.ui/src/org/netbeans/modules/testng/ui/actions/TestClassInfoTask.java
copy to
java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/TestClassInfoTask.java
index eddfc91564..f2df2ea03a 100644
---
a/java/testng.ui/src/org/netbeans/modules/testng/ui/actions/TestClassInfoTask.java
+++
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/TestClassInfoTask.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.netbeans.modules.testng.ui.actions;
+package org.netbeans.modules.java.openjdk.jtreg;
import com.sun.source.tree.ClassTree;
import com.sun.source.tree.MethodTree;
@@ -61,11 +61,11 @@ public final class TestClassInfoTask implements
CancellableTask<CompilationContr
private String className;
private String methodName;
private FileObject fo;
-
+
/**
* <b>DO NOT USE!</b> Package private due to use in tests
*/
- static String ANNOTATION = "org.testng.annotations.Test"; //NOI18N
+ static String ANNOTATION = "toolbox.TestRunner.Test"; //NOI18N
TestClassInfoTask(int caretPosition) {
this.caretPosition = caretPosition;
@@ -107,7 +107,7 @@ public final class TestClassInfoTask implements
CancellableTask<CompilationContr
String getPackageName() {
return packageName;
}
-
+
FileObject getFileObject() {
return fo;
}
diff --git
a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ActionProviderImpl.java
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ActionProviderImpl.java
index b39c5683b8..cba40fd7d7 100644
---
a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ActionProviderImpl.java
+++
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ActionProviderImpl.java
@@ -38,6 +38,7 @@ import org.netbeans.modules.java.openjdk.common.ShortcutUtils;
import org.netbeans.spi.java.classpath.support.ClassPathSupport;
import org.netbeans.spi.project.ActionProgress;
import org.netbeans.spi.project.ActionProvider;
+import org.netbeans.spi.project.SingleMethod;
import org.netbeans.spi.project.ui.support.ProjectSensitiveActions;
import org.openide.execution.ExecutorTask;
import org.openide.filesystems.FileObject;
@@ -151,6 +152,8 @@ public class ActionProviderImpl implements ActionProvider {
filteredActions.retainAll(Arrays.asList(actions));
filteredActions.add(COMMAND_BUILD_GENERIC_FAST);
filteredActions.add(COMMAND_PROFILE_TEST_SINGLE);
+
filteredActions.add(SingleMethod.COMMAND_RUN_SINGLE_METHOD);
+
filteredActions.add(SingleMethod.COMMAND_DEBUG_SINGLE_METHOD);
supported = filteredActions.toArray(new String[0]);
break;
}
@@ -178,6 +181,15 @@ public class ActionProviderImpl implements ActionProvider {
}
}
}
+ if (SingleMethod.COMMAND_RUN_SINGLE_METHOD.equals(command) ||
+ SingleMethod.COMMAND_DEBUG_SINGLE_METHOD.equals(command)) {
+ for (ActionProvider ap :
Lookup.getDefault().lookupAll(ActionProvider.class)) {
+ if (new
HashSet<>(Arrays.asList(ap.getSupportedActions())).contains(command) &&
ap.isActionEnabled(command, context)) {
+ ap.invokeAction(command, context);
+ return ;
+ }
+ }
+ }
FileObject scriptFO = script;
Settings settings = project.getLookup().lookup(Settings.class);
Properties props = new Properties();
diff --git
a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ClassPathProviderImpl.java
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ClassPathProviderImpl.java
index bca41f058d..dbecca5936 100644
---
a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ClassPathProviderImpl.java
+++
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ClassPathProviderImpl.java
@@ -194,7 +194,7 @@ public class ClassPathProviderImpl implements
ClassPathProvider {
this.repository = repository;
}
- private static final String[] TEST_LIBRARIES = new String[] {"testng",
"junit_4"};
+ private static final String[] TEST_LIBRARIES = new String[] {"testng",
"junit_4", "junit_5"};
private static URL projectDir2FakeTarget(FileObject projectDir) throws
MalformedURLException {
return
FileUtil.getArchiveRoot(projectDir.toURI().resolve("fake-target.jar").toURL());
diff --git
a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/JDKProject.java
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/JDKProject.java
index 35d6396617..4e98d449e2 100644
---
a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/JDKProject.java
+++
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/JDKProject.java
@@ -222,6 +222,7 @@ public class JDKProject implements Project {
new Settings(this),
new BinaryForSourceQueryImpl(this,
cpp.getSourceCP()),
CProjectConfigurationProviderImpl.create(this),
+ new UnitTestForSourceQueryImpl(this),
this);
this.lookup = LookupProviderSupport.createCompositeLookup(base,
"Projects/" + PROJECT_KEY + "/Lookup");
} catch (Throwable t) {
diff --git
a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/UnitTestForSourceQueryImpl.java
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/UnitTestForSourceQueryImpl.java
new file mode 100644
index 0000000000..8bba362c33
--- /dev/null
+++
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/UnitTestForSourceQueryImpl.java
@@ -0,0 +1,64 @@
+/*
+ * 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.
+ */
+package org.netbeans.modules.java.openjdk.project;
+
+import java.net.URL;
+import java.util.Arrays;
+import org.netbeans.api.java.project.JavaProjectConstants;
+import org.netbeans.api.project.ProjectUtils;
+import org.netbeans.api.project.SourceGroup;
+import org.netbeans.modules.java.openjdk.project.JDKProject;
+import
org.netbeans.spi.java.queries.MultipleRootsUnitTestForSourceQueryImplementation;
+import org.openide.filesystems.FileObject;
+import org.openide.filesystems.FileUtil;
+
+/**
+ *
+ * @author lahvac
+ */
+public class UnitTestForSourceQueryImpl implements
MultipleRootsUnitTestForSourceQueryImplementation {
+
+ private final JDKProject prj;
+
+ public UnitTestForSourceQueryImpl(JDKProject prj) {
+ this.prj = prj;
+ }
+
+ @Override
+ public URL[] findUnitTests(FileObject source) {
+ SourceGroup[] groups = ProjectUtils.getSources(prj)
+
.getSourceGroups(SourcesImpl.SOURCES_TYPE_JDK_PROJECT_TESTS);
+ return notInReturn(source, groups);
+ }
+
+ @Override
+ public URL[] findSources(FileObject unitTest) {
+ SourceGroup[] groups = ProjectUtils.getSources(prj)
+
.getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA);
+ return notInReturn(unitTest, groups);
+ }
+
+ private URL[] notInReturn(FileObject file, SourceGroup[] groups) {
+ return Arrays.stream(groups)
+ .map(sg -> sg.getRootFolder())
+ .filter(root -> FileUtil.isParentOf(root, file) || root
== file)
+ .map(f -> f.toURL())
+ .toArray(s -> new URL[s]);
+ }
+}
diff --git a/java/java.testrunner.ui/nbproject/project.xml
b/java/java.testrunner.ui/nbproject/project.xml
index e9147c5546..30b1e91f25 100644
--- a/java/java.testrunner.ui/nbproject/project.xml
+++ b/java/java.testrunner.ui/nbproject/project.xml
@@ -197,6 +197,7 @@
<friend-packages>
<friend>org.netbeans.modules.gradle.test</friend>
<friend>org.netbeans.modules.java.lsp.server</friend>
+ <friend>org.netbeans.modules.java.openjdk.project</friend>
<friend>org.netbeans.modules.junit.ant.ui</friend>
<friend>org.netbeans.modules.junit.ui</friend>
<friend>org.netbeans.modules.maven.junit.ui</friend>
diff --git a/java/testng.ui/nbproject/project.xml
b/java/testng.ui/nbproject/project.xml
index 1bbbafb617..971beaa66b 100644
--- a/java/testng.ui/nbproject/project.xml
+++ b/java/testng.ui/nbproject/project.xml
@@ -456,14 +456,24 @@
<compile-dependency/>
<test/>
</test-dependency>
+ <test-dependency>
+
<code-name-base>org.netbeans.modules.parsing.indexing</code-name-base>
+ <test/>
+ </test-dependency>
<test-dependency>
<code-name-base>org.netbeans.modules.parsing.lucene</code-name-base>
<compile-dependency/>
<test/>
</test-dependency>
+ <test-dependency>
+
<code-name-base>org.netbeans.modules.parsing.nb</code-name-base>
+ </test-dependency>
<test-dependency>
<code-name-base>org.netbeans.modules.progress.ui</code-name-base>
</test-dependency>
+ <test-dependency>
+
<code-name-base>org.netbeans.modules.projectapi.nb</code-name-base>
+ </test-dependency>
<test-dependency>
<code-name-base>org.netbeans.modules.projectui</code-name-base>
<compile-dependency/>
@@ -498,12 +508,12 @@
<code-name-base>org.openide.text</code-name-base>
</test-dependency>
<test-dependency>
- <code-name-base>org.openide.util.ui</code-name-base>
+
<code-name-base>org.openide.util.lookup</code-name-base>
<compile-dependency/>
<test/>
</test-dependency>
<test-dependency>
-
<code-name-base>org.openide.util.lookup</code-name-base>
+ <code-name-base>org.openide.util.ui</code-name-base>
<compile-dependency/>
<test/>
</test-dependency>
diff --git
a/java/testng.ui/src/org/netbeans/modules/testng/ui/actions/TestClassInfoTask.java
b/java/testng.ui/src/org/netbeans/modules/testng/ui/actions/TestClassInfoTask.java
index eddfc91564..5a9bb9b781 100644
---
a/java/testng.ui/src/org/netbeans/modules/testng/ui/actions/TestClassInfoTask.java
+++
b/java/testng.ui/src/org/netbeans/modules/testng/ui/actions/TestClassInfoTask.java
@@ -34,6 +34,8 @@ import java.util.stream.Collectors;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.QualifiedNameable;
import javax.lang.model.element.TypeElement;
import javax.lang.model.util.Elements;
import javax.swing.text.BadLocationException;
@@ -66,6 +68,7 @@ public final class TestClassInfoTask implements
CancellableTask<CompilationContr
* <b>DO NOT USE!</b> Package private due to use in tests
*/
static String ANNOTATION = "org.testng.annotations.Test"; //NOI18N
+ static String TESTNG_ANNOTATION_PACKAGE = "org.testng.annotations";
//NOI18N
TestClassInfoTask(int caretPosition) {
this.caretPosition = caretPosition;
@@ -139,39 +142,52 @@ public final class TestClassInfoTask implements
CancellableTask<CompilationContr
}
TypeElement typeElement = (TypeElement) info.getTrees().getElement(new
TreePath(new TreePath(info.getCompilationUnit()), clazz));
Elements elements = info.getElements();
+ boolean hasClassLevelAnnotation = hasTestNGTestAnnotation(elements,
typeElement);
List<TestMethod> result = new ArrayList<>();
for (TreePath tp : methods) {
if (cancel.get()) {
return null;
}
Element element = info.getTrees().getElement(tp);
- if (element != null) {
- List<? extends AnnotationMirror> allAnnotationMirrors =
elements.getAllAnnotationMirrors(element);
- for (Iterator<? extends AnnotationMirror> it =
allAnnotationMirrors.iterator(); it.hasNext();) {
- AnnotationMirror annotationMirror = it.next();
- TypeElement annTypeElement = (TypeElement)
annotationMirror.getAnnotationType().asElement();
- if
(annTypeElement.getQualifiedName().contentEquals(ANNOTATION)) {
- String mn = element.getSimpleName().toString();
- SourcePositions sp =
info.getTrees().getSourcePositions();
- int start = (int)
sp.getStartPosition(tp.getCompilationUnit(), tp.getLeaf());
- int preferred =
info.getTreeUtilities().findNameSpan((MethodTree) tp.getLeaf())[0];
- int end = (int)
sp.getEndPosition(tp.getCompilationUnit(), tp.getLeaf());
- Document doc =
info.getSnapshot().getSource().getDocument(false);
- try {
- result.add(new
TestMethod(typeElement.getQualifiedName().toString(), new
SingleMethod(fileObject, mn),
- doc != null ? doc.createPosition(start) :
new SimplePosition(start),
- doc != null ?
doc.createPosition(preferred) : new SimplePosition(preferred),
- doc != null ? doc.createPosition(end) :
new SimplePosition(end)));
- } catch (BadLocationException ex) {
- //ignore
+ if (element != null && element.getKind() == ElementKind.METHOD) {
+ if (hasTestNGTestAnnotation(elements, element) ||
+ (hasClassLevelAnnotation &&
element.getModifiers().contains(Modifier.PUBLIC) &&
+ !hasTestNGAnnotation(elements, element))) {
+ String mn = element.getSimpleName().toString();
+ SourcePositions sp = info.getTrees().getSourcePositions();
+ int start = (int)
sp.getStartPosition(tp.getCompilationUnit(), tp.getLeaf());
+ int preferred =
info.getTreeUtilities().findNameSpan((MethodTree) tp.getLeaf())[0];
+ int end = (int) sp.getEndPosition(tp.getCompilationUnit(),
tp.getLeaf());
+ Document doc =
info.getSnapshot().getSource().getDocument(false);
+ try {
+ result.add(new
TestMethod(typeElement.getQualifiedName().toString(), new
SingleMethod(fileObject, mn),
+ doc != null ? doc.createPosition(start) : new
SimplePosition(start),
+ doc != null ? doc.createPosition(preferred) :
new SimplePosition(preferred),
+ doc != null ? doc.createPosition(end) : new
SimplePosition(end)));
+ } catch (BadLocationException ex) {
+ //ignore
}
}
}
}
- }
return result;
}
+ private static boolean hasTestNGTestAnnotation(Elements elements, Element
element) {
+ return elements.getAllAnnotationMirrors(element)
+ .stream()
+ .map(am -> (TypeElement)
am.getAnnotationType().asElement())
+ .anyMatch(annTypeElement ->
annTypeElement.getQualifiedName().contentEquals(ANNOTATION));
+ }
+
+ private static boolean hasTestNGAnnotation(Elements elements, Element
element) {
+ return elements.getAllAnnotationMirrors(element)
+ .stream()
+ .map(am -> (TypeElement)
am.getAnnotationType().asElement())
+ .map(te -> (QualifiedNameable) te.getEnclosingElement())
+ .anyMatch(annTypeElement ->
annTypeElement.getQualifiedName().contentEquals(TESTNG_ANNOTATION_PACKAGE));
+ }
+
@ServiceProvider(service=Factory.class)
public static final class ComputeTestMethodsImpl implements Factory {
diff --git
a/java/testng.ui/test/unit/src/org/netbeans/modules/testng/ui/actions/RetoucheTestBase.java
b/java/testng.ui/test/unit/src/org/netbeans/modules/testng/ui/actions/RetoucheTestBase.java
index e5e9268cc1..11afdedbc4 100644
---
a/java/testng.ui/test/unit/src/org/netbeans/modules/testng/ui/actions/RetoucheTestBase.java
+++
b/java/testng.ui/test/unit/src/org/netbeans/modules/testng/ui/actions/RetoucheTestBase.java
@@ -74,16 +74,6 @@ public class RetoucheTestBase extends NbTestCase {
new String[]{},
new Object[]{loader, cpp});
testFO = FileUtil.createFolder(src,
"sample/pkg/").createData("Test.java");
- TestUtilities.copyStringToFile(testFO,
- "package sample.pkg;\n" +
- "\n" +
- "public class Test {\n" +
- "\n" +
- " @Deprecated\n" +
- " void method() {\n" +
- " }\n" +
- "\n" +
- "}\n");
}
protected FileObject getTestFO() {
diff --git
a/java/testng.ui/test/unit/src/org/netbeans/modules/testng/ui/actions/TestClassInfoTaskTest.java
b/java/testng.ui/test/unit/src/org/netbeans/modules/testng/ui/actions/TestClassInfoTaskTest.java
index 4eeb3a8a32..060cda5417 100644
---
a/java/testng.ui/test/unit/src/org/netbeans/modules/testng/ui/actions/TestClassInfoTaskTest.java
+++
b/java/testng.ui/test/unit/src/org/netbeans/modules/testng/ui/actions/TestClassInfoTaskTest.java
@@ -18,8 +18,11 @@
*/
package org.netbeans.modules.testng.ui.actions;
+import java.util.concurrent.atomic.AtomicBoolean;
import org.netbeans.api.java.source.JavaSource;
+import org.netbeans.api.java.source.JavaSource.Phase;
import org.netbeans.api.java.source.TestUtilities;
+import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;
@@ -32,8 +35,20 @@ public class TestClassInfoTaskTest extends RetoucheTestBase {
static {
TestClassInfoTask.ANNOTATION = "java.lang.Deprecated";
+ TestClassInfoTask.TESTNG_ANNOTATION_PACKAGE = "java.lang";
}
+ private static final String DEFAULT_TEST_DATA =
+ "package sample.pkg;\n" +
+ "\n" +
+ "public class Test {\n" +
+ "\n" +
+ " @Deprecated\n" +
+ " void method() {\n" +
+ " }\n" +
+ "\n" +
+ "}\n";
+
public TestClassInfoTaskTest(String testName) {
super(testName);
}
@@ -44,6 +59,7 @@ public class TestClassInfoTaskTest extends RetoucheTestBase {
}
public void testCursorInMethod() throws Exception {
+ TestUtilities.copyStringToFile(getTestFO(), DEFAULT_TEST_DATA);
JavaSource src = JavaSource.forFileObject(getTestFO());
TestClassInfoTask task = new TestClassInfoTask(70);
src.runUserActionTask(task, true);
@@ -53,6 +69,7 @@ public class TestClassInfoTaskTest extends RetoucheTestBase {
}
public void testCursorInClass() throws Exception {
+ TestUtilities.copyStringToFile(getTestFO(), DEFAULT_TEST_DATA);
JavaSource src = JavaSource.forFileObject(getTestFO());
TestClassInfoTask task = new TestClassInfoTask(42);
src.runUserActionTask(task, true);
@@ -62,6 +79,7 @@ public class TestClassInfoTaskTest extends RetoucheTestBase {
}
public void testCursorInClass2() throws Exception {
+ TestUtilities.copyStringToFile(getTestFO(), DEFAULT_TEST_DATA);
JavaSource src = JavaSource.forFileObject(getTestFO());
TestClassInfoTask task = new TestClassInfoTask(0);
src.runUserActionTask(task, true);
@@ -71,6 +89,7 @@ public class TestClassInfoTaskTest extends RetoucheTestBase {
}
public void testCursorInClass3() throws Exception {
+ TestUtilities.copyStringToFile(getTestFO(), DEFAULT_TEST_DATA);
JavaSource src = JavaSource.forFileObject(getTestFO());
TestClassInfoTask task = new TestClassInfoTask(87);
src.runUserActionTask(task, true);
@@ -95,4 +114,50 @@ public class TestClassInfoTaskTest extends RetoucheTestBase
{
assertEquals("", task.getPackageName());
assertEquals("Test", task.getClassName());
}
+
+ public void testClassAnnotated1() throws Exception {
+ String code = "package test;\n" +
+ "@Deprecated\n" +
+ "public class Test {\n" +
+ " public void method1() {\n" +
+ " //test1\n" +
+ " }\n" +
+ " @SuppressWarnings(\"\")\n" +
+ " public void method2() {\n" +
+ " //test2\n" +
+ " }\n" +
+ " void method3() {\n" +
+ " //test3\n" +
+ " }\n" +
+ " public static void method4() {\n" +
+ " //test4\n" +
+ " }\n" +
+ "}\n";
+ TestUtilities.copyStringToFile(getTestFO(), code);
+ JavaSource src = JavaSource.forFileObject(getTestFO());
+ TestClassInfoTask task1 = new
TestClassInfoTask(code.indexOf("//test1"));
+ src.runUserActionTask(task1, true);
+ assertEquals("method1", task1.getMethodName());
+ assertEquals("test", task1.getPackageName());
+ assertEquals("Test", task1.getClassName());
+ TestClassInfoTask task2 = new
TestClassInfoTask(code.indexOf("//test2"));
+ src.runUserActionTask(task2, true);
+ assertNull(task2.getMethodName());
+ assertEquals("test", task2.getPackageName());
+ assertEquals("Test", task2.getClassName());
+ TestClassInfoTask task3 = new
TestClassInfoTask(code.indexOf("//test3"));
+ src.runUserActionTask(task3, true);
+ assertNull(task3.getMethodName());
+ assertEquals("test", task3.getPackageName());
+ assertEquals("Test", task3.getClassName());
+ TestClassInfoTask task4 = new
TestClassInfoTask(code.indexOf("//test4"));
+ src.runUserActionTask(task4, true);
+ assertEquals("method4", task4.getMethodName());
+ assertEquals("test", task4.getPackageName());
+ assertEquals("Test", task4.getClassName());
+ src.runUserActionTask(cc -> {
+ cc.toPhase(Phase.ELEMENTS_RESOLVED);
+ assertEquals(2, TestClassInfoTask.computeTestMethods(cc, new
AtomicBoolean(), -1).size());
+ }, true);
+ }
}
---------------------------------------------------------------------
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