More YAML work
diff --git a/src/main/java/org/testng/internal/Yaml.java b/src/main/java/org/testng/internal/Yaml.java
index 9db0a84..ae2b0b3 100644
--- a/src/main/java/org/testng/internal/Yaml.java
+++ b/src/main/java/org/testng/internal/Yaml.java
@@ -1,15 +1,23 @@
package org.testng.internal;
+import org.testng.IObjectFactory;
import org.testng.xml.XmlClass;
+import org.testng.xml.XmlPackage;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
+import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;
+/**
+ * YAML support for TestNG.
+ *
+ * @author cbeust
+ */
public class Yaml {
private static void addToMap(Map suite, String name, Map target) {
@@ -41,47 +49,139 @@
return parse(o);
}
+ private static void setField(Object xml, Map<?, ?> map, String key, String methodName,
+ Class<?> parameter) {
+ Object o = map.get(key);
+ if (o != null) {
+ Method m;
+ try {
+ m = xml.getClass().getMethod(methodName, parameter);
+ m.invoke(xml, o);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
private static XmlSuite parse(Map o) {
XmlSuite result = new XmlSuite();
+ //
+ // <suite>
+ //
Map<Object, Object> suite = (Map<Object, Object>) o.get("suite");
- result.setName((String) suite.get("name"));
- result.setVerbose((Integer) suite.get("verbose"));
+ setField(result, suite, "name", "setName", String.class);
+ setField(result, suite, "verbose", "setVerbose", Integer.class);
result.setParallel(((Boolean) suite.get("parallel")).toString());
result.setThreadCount((Integer) suite.get("thread-count"));
result.setDataProviderThreadCount((Integer) suite.get("data-provider-thread-count"));
+ result.setJUnit((Boolean) suite.get("junit"));
+ setField(result, suite, "configfailurepolicy", "setConfigFailurePolicy", String.class);
+ result.setThreadCount((Integer) suite.get("thread-count"));
+ result.setTimeOut((String) suite.get("time-out"));
+ setField(result, suite, "skipfailedinvocationcounts", "setSkipFailedInvocationCounts",
+ Boolean.class);
+ result.setObjectFactory((IObjectFactory) suite.get("object-factory"));
- addToMap(suite, "parameters", result.getParameters());
+
+ //
+ // <method-selectors>
+ //
+ {
+ List<Map<String, Object>> selectors =
+ (List<Map<String, Object>>) suite.get("method-selectors");
+ if (selectors != null) {
+ for (Map<String, Object> s : selectors) {
+ String cls = (String) s.get("selector-class");
+ if (cls != null) {
+ org.testng.xml.XmlMethodSelector ms = new org.testng.xml.XmlMethodSelector();
+ ms.setPriority((Integer) s.get("priority"));
+ ms.setName(cls);
+ result.getMethodSelectors().add(ms);
+ }
+ String script = (String) s.get("script");
+ if (script != null) {
+ org.testng.xml.XmlMethodSelector ms = new org.testng.xml.XmlMethodSelector();
+ ms.setExpression(script);
+ ms.setLanguage((String) s.get("language"));
+ result.getMethodSelectors().add(ms);
+ }
+ }
+ }
+ }
+
+ //
+ // <listeners>
+ //
addToList(suite, "listeners", result.getListeners());
+ //
+ // <packages>
+ //
{
- Map<String, Object> tests = (Map<String, Object>) suite.get("tests");
- if (tests != null) {
+ List<Map<String, String>> packages = (List<Map<String, String>>) suite.get("packages");
+ for (Map<String, String> p : packages) {
+ XmlPackage xp = new XmlPackage();
+ xp.setName(p.get("name"));
+ result.getXmlPackages().add(xp);
+ }
+ }
+
+ //
+ // <parameters>
+ //
+
+ addToMap(suite, "parameters", result.getParameters());
+
+
+ //
+ // <test>
+ //
+ {
+ List<Map<String, Object>> tests = (List<Map<String, Object>>) suite.get("tests");
+ for (Map<String, Object> test : tests) {
XmlTest xmlTest = new XmlTest(result);
- xmlTest.setName(tests.get("name").toString());
- List<Map<String, String>> classes = (List<Map<String, String>>) tests.get("classes");
+ xmlTest.setName(test.get("name").toString());
+ setField(xmlTest, test, "junit", "setJUnit", Boolean.class);
+ setField(xmlTest, test, "verbose", "setVerbose", Integer.class);
+ xmlTest.setParallel((String) test.get("parallel"));
+ setField(xmlTest, test, "thread-count", "setThreadCount", Integer.class);
+ setField(xmlTest, test, "time-out", "setTimeOut", Long.class);
+ setField(xmlTest, test, "skipfailedinvocationcounts", "setSkipFailedInvocationCounts",
+ Boolean.class);
+ setField(xmlTest, test, "preserve-order", "setPreserveOrder", Boolean.class);
+
+ //
+ // <classes>
+ //
+ List<Map<String, String>> classes = (List<Map<String, String>>) test.get("classes");
for (Map<String, String> c : classes) {
XmlClass xmlClass = new XmlClass(c.get("name"));
xmlTest.getXmlClasses().add(xmlClass);
}
+
+ //
+ // <parameter>
+ //
+
+ //
+ // <groups>
+ //
+
+ //
+ // <packages>
+ //
}
}
-// List<Map<String, String>> listeners = (List<Map<String, String>>) suite.get("listeners");
-// if (listeners != null) {
-// for (Map<String, String> listener : listeners) {
-// for (Map.Entry p : listener.entrySet()) {
-// result.getListeners().add(p.getValue().toString());
-// }
-// }
-// }
-
- // Map<Object, String> listeners = (Map<Object, String>) suite.get("listeners");
- // if (parameters != null) {
- // for (Map.Entry entry : listeners.entrySet()) {
- // System.out.println("Listener Entry:" + entry.getKey() + ":" + entry.getValue());
- // }
- // }
-
+
+ //
+ // <method-selectors>
+ //
+
+ //
+ // <suite-files>
+ //
+
System.out.println(result.toXml());
return result;
}
diff --git a/src/test/resources/testng-single.yaml b/src/test/resources/testng-single.yaml
index e701ffa..c93a682 100644
--- a/src/test/resources/testng-single.yaml
+++ b/src/test/resources/testng-single.yaml
@@ -5,16 +5,29 @@
thread-count: 4
data-provider-thread-count: 3
+ listeners:
+ - name: test.invokedmethodlistener.MyListener
+
+ method-selectors:
+ - selector-class: org.testng.internal.XmlMethodSelector
+ priority: 1
+ - script: groups.containsKey("test1")
+ language: beanshell
+
+ packages:
+ - name: test.testng355.org.apache.tapestry5
+ - name: test.testng355.org.apache.tapestry5.dom
+
parameters:
- name: n
value: 42
- name: p
value: 10
- listeners:
- - name: test.invokedmethodlistener.MyListener
-
tests:
- name: Test1
- classes:
- - name: test.tmp.A
\ No newline at end of file
+ - name: Test1
+ classes:
+ - name: test.tmp.A
+ - name: Test2
+ classes:
+ - name: test.tmp.B
\ No newline at end of file