diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/AbstractTestNGSuiteConfigurationProducer.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/AbstractTestNGSuiteConfigurationProducer.java index f2afa9b73467..5996c0894a5a 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/AbstractTestNGSuiteConfigurationProducer.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/AbstractTestNGSuiteConfigurationProducer.java @@ -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(); diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/browser/SuiteBrowser.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/browser/SuiteBrowser.java index 952e5ca79bd1..5f43b0940a19 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/browser/SuiteBrowser.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/browser/SuiteBrowser.java @@ -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; } diff --git a/plugins/testng/src/com/theoryinpractice/testng/inspection/TestNGSearchScope.java b/plugins/testng/src/com/theoryinpractice/testng/inspection/TestNGSearchScope.java index d3a47e277c15..5120835ccf7c 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/inspection/TestNGSearchScope.java +++ b/plugins/testng/src/com/theoryinpractice/testng/inspection/TestNGSearchScope.java @@ -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 diff --git a/plugins/testng/src/com/theoryinpractice/testng/model/TestNGTestSuite.java b/plugins/testng/src/com/theoryinpractice/testng/model/TestNGTestSuite.java index 23ee89153aeb..7b91c4ba01e8 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/model/TestNGTestSuite.java +++ b/plugins/testng/src/com/theoryinpractice/testng/model/TestNGTestSuite.java @@ -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()); } } diff --git a/plugins/testng/src/com/theoryinpractice/testng/util/TestNGUtil.java b/plugins/testng/src/com/theoryinpractice/testng/util/TestNGUtil.java index ddeebdf3617a..f46163327909 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/util/TestNGUtil.java +++ b/plugins/testng/src/com/theoryinpractice/testng/util/TestNGUtil.java @@ -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; } }