Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ include(":testng-reflection-utils")
include(":testng-runner-api")
include(":testng-test-kit")
include(":testng-test-osgi")
include(":testng-jaxb")

enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")

Expand Down
1 change: 1 addition & 0 deletions testng-core/testng-core-build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ tasks.withType<GroovyCompile>().configureEach {

dependencies {
api(projects.testngCoreApi)
implementation("jakarta.xml.bind:jakarta.xml.bind-api:4.0.2")
// Annotations have to be available on the compile classpath for the proper compilation
compileOnly("com.github.spotbugs:spotbugs:4.8.1")
api("org.jcommander:jcommander:1.83")
Expand Down
27 changes: 27 additions & 0 deletions testng-jaxb/src/main/java/org/testng/xml/jaxb/JaxbParser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package org.testng.xml.jaxb;

import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.JAXBException;
import java.io.InputStream;
import org.testng.xml.ISuiteParser;
import org.testng.xml.XmlSuite;
import org.testng.xml.jaxb.mappers.SuiteMapper;

public class JaxbParser implements ISuiteParser {

@Override
public XmlSuite parse(String filePath, InputStream is, boolean loadClasses) {
try {
JAXBContext jaxbContext = JAXBContext.newInstance(Suite.class);
Suite suite = (Suite) jaxbContext.createUnmarshaller().unmarshal(is);
return SuiteMapper.toXmlSuite(suite);
} catch (JAXBException e) {
throw new RuntimeException(e);
}
}

@Override
public boolean accept(String fileName) {
return fileName.endsWith(".xml");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.testng.xml.jaxb.mappers;

import java.util.List;
import java.util.stream.Collectors;
import org.testng.xml.jaxb.Listener;
import org.testng.xml.jaxb.Listeners;

public class ListenersMapper {

public static List<String> toXmlListeners(Listeners listeners) {
return listeners.getListener().stream()
.map(Listener::getClassName)
.collect(Collectors.toList());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.testng.xml.jaxb.mappers;

import java.util.List;
import java.util.stream.Collectors;
import org.testng.xml.XmlMethodSelector;
import org.testng.xml.jaxb.MethodSelectors;
import org.testng.xml.jaxb.Script;
import org.testng.xml.jaxb.SelectorClass;

public class MethodSelectorsMapper {

public static List<XmlMethodSelector> toXmlMethodSelectors(MethodSelectors methodSelectors) {
return methodSelectors.getMethodSelector().stream()
.map(
ms -> {
XmlMethodSelector xmlMethodSelector = new XmlMethodSelector();
if (ms.getScript() != null) {
Script script = ms.getScript();
xmlMethodSelector.setScript(ScriptMapper.toXmlScript(script));
} else if (ms.getSelectorClass() != null && !ms.getSelectorClass().isEmpty()) {
SelectorClass sc = ms.getSelectorClass().get(0);
xmlMethodSelector.setName(sc.getName());
xmlMethodSelector.setPriority(Integer.parseInt(sc.getPriority()));
}
return xmlMethodSelector;
})
.collect(Collectors.toList());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.testng.xml.jaxb.mappers;

import java.util.List;
import java.util.stream.Collectors;
import org.testng.xml.XmlPackage;
import org.testng.xml.jaxb.Packages;

public class PackagesMapper {

public static List<XmlPackage> toXmlPackages(Packages packages) {
return packages.getPackage().stream()
.map(p -> new XmlPackage(p.getName()))
.collect(Collectors.toList());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package org.testng.xml.jaxb.mappers;

import java.util.Map;
import java.util.stream.Collectors;
import org.testng.xml.jaxb.Parameter;

public class ParameterMapper {

public static Map<String, String> toXmlParameters(java.util.List<Parameter> parameters) {
return parameters.stream().collect(Collectors.toMap(Parameter::getName, Parameter::getValue));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.testng.xml.jaxb.mappers;

import java.util.stream.Collectors;
import org.testng.xml.XmlScript;
import org.testng.xml.jaxb.Script;

public class ScriptMapper {

public static XmlScript toXmlScript(Script script) {
XmlScript xmlScript = new XmlScript();
xmlScript.setLanguage(script.getLanguage());
xmlScript.setExpression(
script.getContent().stream().map(Object::toString).collect(Collectors.joining()));
return xmlScript;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.testng.xml.jaxb.mappers;

import java.util.List;
import java.util.stream.Collectors;
import org.testng.xml.jaxb.SuiteFile;
import org.testng.xml.jaxb.SuiteFiles;

public class SuiteFilesMapper {

public static List<String> toXmlSuiteFiles(SuiteFiles suiteFiles) {
return suiteFiles.getSuiteFile().stream().map(SuiteFile::getPath).collect(Collectors.toList());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package org.testng.xml.jaxb.mappers;

import org.testng.xml.XmlSuite;
import org.testng.xml.jaxb.Suite;

public class SuiteMapper {

public static XmlSuite toXmlSuite(Suite suite) {
XmlSuite xmlSuite = new XmlSuite();
xmlSuite.setName(suite.getName());
if (suite.getVerbose() != null) {
xmlSuite.setVerbose(Integer.parseInt(suite.getVerbose()));
}
if (suite.getParallel() != null) {
xmlSuite.setParallel(XmlSuite.ParallelMode.getValidParallel(suite.getParallel()));
}
if (suite.getThreadCount() != null) {
xmlSuite.setThreadCount(Integer.parseInt(suite.getThreadCount()));
}
if (suite.getDataProviderThreadCount() != null) {
xmlSuite.setDataProviderThreadCount(Integer.parseInt(suite.getDataProviderThreadCount()));
}
if (suite.getConfigfailurepolicy() != null) {
xmlSuite.setConfigFailurePolicy(
XmlSuite.FailurePolicy.getValidPolicy(suite.getConfigfailurepolicy()));
}
if (suite.getGroupByInstances() != null) {
xmlSuite.setGroupByInstances(Boolean.parseBoolean(suite.getGroupByInstances()));
}
if (suite.getAllowReturnValues() != null) {
xmlSuite.setAllowReturnValues(Boolean.parseBoolean(suite.getAllowReturnValues()));
}
xmlSuite.setTimeOut(suite.getTimeOut());

for (Object o : suite.getListenersOrPackagesOrTest()) {
if (o instanceof org.testng.xml.jaxb.Listeners) {
xmlSuite.setListeners(ListenersMapper.toXmlListeners((org.testng.xml.jaxb.Listeners) o));
} else if (o instanceof org.testng.xml.jaxb.Packages) {
xmlSuite.setPackages(PackagesMapper.toXmlPackages((org.testng.xml.jaxb.Packages) o));
} else if (o instanceof org.testng.xml.jaxb.Test) {
xmlSuite.addTest(TestMapper.toXmlTest((org.testng.xml.jaxb.Test) o));
} else if (o instanceof org.testng.xml.jaxb.Parameter) {
xmlSuite
.getParameters()
.put(
((org.testng.xml.jaxb.Parameter) o).getName(),
((org.testng.xml.jaxb.Parameter) o).getValue());
} else if (o instanceof org.testng.xml.jaxb.MethodSelectors) {
xmlSuite.setMethodSelectors(
MethodSelectorsMapper.toXmlMethodSelectors((org.testng.xml.jaxb.MethodSelectors) o));
} else if (o instanceof org.testng.xml.jaxb.SuiteFiles) {
xmlSuite.setSuiteFiles(
SuiteFilesMapper.toXmlSuiteFiles((org.testng.xml.jaxb.SuiteFiles) o));
}
}

return xmlSuite;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package org.testng.xml.jaxb.mappers;

import org.testng.xml.XmlTest;
import org.testng.xml.jaxb.Test;

public class TestMapper {

public static XmlTest toXmlTest(Test test) {
XmlTest xmlTest = new XmlTest();
xmlTest.setName(test.getName());
if (test.getVerbose() != null) {
xmlTest.setVerbose(Integer.parseInt(test.getVerbose()));
}
if (test.getSkipfailedinvocationcounts() != null) {
xmlTest.setSkipFailedInvocationCounts(
Boolean.parseBoolean(test.getSkipfailedinvocationcounts()));
}
if (test.getPreserveOrder() != null) {
xmlTest.setPreserveOrder(Boolean.parseBoolean(test.getPreserveOrder()));
}
if (test.getGroupByInstances() != null) {
xmlTest.setGroupByInstances(Boolean.parseBoolean(test.getGroupByInstances()));
}
if (test.getAllowReturnValues() != null) {
xmlTest.setAllowReturnValues(Boolean.parseBoolean(test.getAllowReturnValues()));
}
xmlTest.setParameters(ParameterMapper.toXmlParameters(test.getParameter()));
return xmlTest;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
org.testng.xml.jaxb.JaxbParser
Loading
Loading