mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
testng: allow suites to be defined in yaml (IDEA-94400)
This commit is contained in:
+1
-1
@@ -43,7 +43,7 @@ public abstract class AbstractTestNGSuiteConfigurationProducer extends TestNGCon
|
||||
if (containingFile == null) return false;
|
||||
final VirtualFile virtualFile = containingFile.getVirtualFile();
|
||||
if (virtualFile == null || !virtualFile.isValid()) return false;
|
||||
if (!TestNGUtil.isTestngXML(virtualFile)) return false;
|
||||
if (!TestNGUtil.isTestngSuiteFile(virtualFile)) return false;
|
||||
RunnerAndConfigurationSettings settings = cloneTemplateConfiguration(context);
|
||||
setupConfigurationModule(context, configuration);
|
||||
final Module originalModule = configuration.getConfigurationModule().getModule();
|
||||
|
||||
+5
-5
@@ -15,11 +15,11 @@
|
||||
*/
|
||||
package com.theoryinpractice.testng.configuration.browser;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.execution.configuration.BrowseModuleValueActionListener;
|
||||
import com.intellij.openapi.fileChooser.FileChooser;
|
||||
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.execution.configuration.BrowseModuleValueActionListener;
|
||||
|
||||
/**
|
||||
* @author Hani Suleiman
|
||||
@@ -36,12 +36,12 @@ public class SuiteBrowser extends BrowseModuleValueActionListener
|
||||
@Override
|
||||
public boolean isFileVisible(VirtualFile virtualFile, boolean showHidden) {
|
||||
if(!showHidden && virtualFile.getName().charAt(0) == '.') return false;
|
||||
return virtualFile.isDirectory() || "xml".equals(virtualFile.getExtension());
|
||||
return virtualFile.isDirectory() || "xml".equals(virtualFile.getExtension()) || "yaml".equals(virtualFile.getExtension());
|
||||
}
|
||||
};
|
||||
descriptor.setDescription("Please select the testng.xml suite file");
|
||||
descriptor.setDescription("Please select the xml or yaml suite file");
|
||||
descriptor.setTitle("Select Suite");
|
||||
VirtualFile file = FileChooser.chooseFile(descriptor, getProject(), null);
|
||||
VirtualFile file = FileChooser.chooseFile(descriptor, getProject(), null);
|
||||
return file != null ? file.getPath() : null;
|
||||
}
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ public class TestNGSearchScope extends GlobalSearchScope {
|
||||
|
||||
@Override
|
||||
public boolean contains(@NotNull VirtualFile file) {
|
||||
return myFileIndex.isInContent(file) && TestNGUtil.isTestngXML(file);
|
||||
return myFileIndex.isInContent(file) && TestNGUtil.isTestngSuiteFile(file);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -21,10 +21,8 @@ import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiMethod;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
import com.intellij.psi.xml.XmlFile;
|
||||
import com.theoryinpractice.testng.configuration.TestNGConfiguration;
|
||||
import org.testng.xml.Parser;
|
||||
|
||||
@@ -52,26 +50,27 @@ public class TestNGTestSuite extends TestNGTestObject {
|
||||
|
||||
@Override
|
||||
public void checkConfiguration() throws RuntimeConfigurationException {
|
||||
final TestData data = myConfig.getPersistantData();
|
||||
String suiteName = myConfig.getPersistantData().getSuiteName();
|
||||
try {
|
||||
final Parser parser = new Parser(data.getSuiteName());
|
||||
final Parser parser = new Parser(suiteName);
|
||||
parser.setLoadClasses(false);
|
||||
synchronized (PARSE_LOCK) {
|
||||
parser.parse();//try to parse suite.xml
|
||||
}
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw new RuntimeConfigurationException("Unable to parse '" + data.getSuiteName() + "' specified");
|
||||
catch (Throwable e) {
|
||||
//there is no appropriate snakeyaml in the classpath (one compatible with bundled testng version),
|
||||
// but yaml parser tries to load classes despite loadClasses = false here and thus it will fail anyway
|
||||
//no validation for yaml suites possible
|
||||
if (!suiteName.endsWith(".yaml")) {
|
||||
throw new RuntimeConfigurationException("Unable to parse '" + suiteName + "' specified");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isConfiguredByElement(PsiElement element) {
|
||||
final PsiFile containingFile = element.getContainingFile();
|
||||
if (containingFile instanceof XmlFile) {
|
||||
final VirtualFile virtualFile = PsiUtilCore.getVirtualFile(containingFile);
|
||||
return virtualFile != null && Comparing.strEqual(myConfig.getPersistantData().getSuiteName(), virtualFile.getPath());
|
||||
}
|
||||
return false;
|
||||
final VirtualFile virtualFile = PsiUtilCore.getVirtualFile(element);
|
||||
return virtualFile != null && Comparing.strEqual(myConfig.getPersistantData().getSuiteName(), virtualFile.getPath());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -444,10 +444,16 @@ public class TestNGUtil {
|
||||
return aListenerClass != null && psiClass.isInheritor(aListenerClass, true);
|
||||
}
|
||||
|
||||
public static boolean isTestngXML(final VirtualFile virtualFile) {
|
||||
if ("xml".equalsIgnoreCase(virtualFile.getExtension()) && virtualFile.isInLocalFileSystem() && virtualFile.isValid()) {
|
||||
final String result = NanoXmlUtil.parseHeader(virtualFile).getRootTagLocalName();
|
||||
if (result != null && result.equals(SUITE_TAG_NAME)) {
|
||||
public static boolean isTestngSuiteFile(final VirtualFile virtualFile) {
|
||||
if (virtualFile.isInLocalFileSystem() && virtualFile.isValid()) {
|
||||
String extension = virtualFile.getExtension();
|
||||
if ("xml".equalsIgnoreCase(extension)) {
|
||||
final String result = NanoXmlUtil.parseHeader(virtualFile).getRootTagLocalName();
|
||||
if (result != null && result.equals(SUITE_TAG_NAME)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if ("yaml".equals(extension)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user