Author: ate
Date: Sat Nov 15 04:10:09 2014
New Revision: 1639831
URL: http://svn.apache.org/r1639831
Log:
SCXML-222: Add support for executing the SCXML IRP test cases
Added:
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java
(with props)
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/confMinimal.xsl
(with props)
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/tests.xml
(with props)
Modified:
commons/proper/scxml/trunk/pom.xml
Modified: commons/proper/scxml/trunk/pom.xml
URL:
http://svn.apache.org/viewvc/commons/proper/scxml/trunk/pom.xml?rev=1639831&r1=1639830&r2=1639831&view=diff
==============================================================================
--- commons/proper/scxml/trunk/pom.xml (original)
+++ commons/proper/scxml/trunk/pom.xml Sat Nov 15 04:10:09 2014
@@ -170,6 +170,12 @@
<artifactId>commons-beanutils</artifactId>
<version>1.9.2</version>
</dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>2.4</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<distributionManagement>
@@ -205,6 +211,7 @@
<directory>src/test/java</directory>
<includes>
<include>**/*.xml</include>
+ <include>**/*.xsl</include>
<include>**/*.gif</include>
</includes>
</testResource>
@@ -257,6 +264,17 @@
<cleanupDaemonThreads>false</cleanupDaemonThreads>
</configuration>
</plugin>
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <!-- Should agree with config in reporting section -->
+ <configuration>
+ <excludes combine.children="append">
+ <!--exclude stylesheet adapted from
http://www.w3.org/Voice/2013/scxml-irp/confXPath.xsl -->
+
<exclude>src/test/java/org/apache/commons/scxml2/w3c/confMinimal.xsl</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
</plugins>
</build>
@@ -297,6 +315,17 @@
</configuration>
</plugin>
-->
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <!-- Should agree with config in build section -->
+ <configuration>
+ <excludes combine.children="append">
+ <!--exclude stylesheet adapted from
http://www.w3.org/Voice/2013/scxml-irp/confXPath.xsl -->
+
<exclude>src/test/java/org/apache/commons/scxml2/w3c/confMinimal.xsl</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
</plugins>
</reporting>
@@ -357,6 +386,160 @@
</plugins>
</build>
</profile>
+ <profile>
+ <!-- download the W3C IRP tests and ecma and xpath stylesheets to
transform them, using:
+ $ mvn -P w3Tests.get
+ -->
+ <id>w3cTests.get</id>
+ <build>
+ <defaultGoal>test</defaultGoal>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <skipTests>true</skipTests>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>exec-maven-plugin</artifactId>
+ <version>1.3.2</version>
+ <executions>
+ <execution>
+ <phase>test</phase>
+ <goals>
+ <goal>java</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <mainClass>org.apache.commons.scxml2.w3c.W3CTests</mainClass>
+ <arguments>
+ <argument>get</argument>
+ </arguments>
+ <systemProperties>
+ <systemProperty>
+ <key>org.apache.commons.logging.Log</key>
+ <value>org.apache.commons.logging.impl.SimpleLog</value>
+ </systemProperty>
+ <systemProperty>
+ <key>org.apache.commons.logging.simplelog.defaultlog</key>
+ <value>${simplelog.defaultlog}</value>
+ </systemProperty>
+ </systemProperties>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <!-- make the W3C IRP tests by transforming them with the datamodel
specific stylesheets using:
+ $ mvn -P w3cTests.make
+ -->
+ <id>w3cTests.make</id>
+ <dependencies>
+ <!-- needed for XPath 2.0 support to transform w3c txml tests -->
+ <dependency>
+ <groupId>net.sf.saxon</groupId>
+ <artifactId>Saxon-HE</artifactId>
+ <version>9.6.0-1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <defaultGoal>test</defaultGoal>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <skipTests>true</skipTests>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>exec-maven-plugin</artifactId>
+ <version>1.3.2</version>
+ <executions>
+ <execution>
+ <phase>test</phase>
+ <goals>
+ <goal>java</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <mainClass>org.apache.commons.scxml2.w3c.W3CTests</mainClass>
+ <arguments>
+ <argument>make</argument>
+ </arguments>
+ <systemProperties>
+ <systemProperty>
+ <key>org.apache.commons.logging.Log</key>
+ <value>org.apache.commons.logging.impl.SimpleLog</value>
+ </systemProperty>
+ <systemProperty>
+ <key>org.apache.commons.logging.simplelog.defaultlog</key>
+ <value>${simplelog.defaultlog}</value>
+ </systemProperty>
+ </systemProperties>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <!-- Run one or multiple W3C IRP tests using optional system parameters
for datamodel and/or test id, using:
+ $ mvn -P w3cTests.run [-Ddatamodel=<ecma|xpath|minimal>]
[-Dtest=<testId>]
+
+ Also see: src/test/java/org/apache/commons/scxml2/w3c/tests.xml
+ which contains configurations per test (if it default is
enabled/disabled, status, etc.)
+ For precise details if and how tests are executed, see the
W3CTests.java class
+ -->
+ <id>w3cTests.run</id>
+ <build>
+ <defaultGoal>test</defaultGoal>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <skipTests>true</skipTests>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>exec-maven-plugin</artifactId>
+ <version>1.3.2</version>
+ <executions>
+ <execution>
+ <phase>test</phase>
+ <goals>
+ <goal>java</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <mainClass>org.apache.commons.scxml2.w3c.W3CTests</mainClass>
+ <arguments>
+ <argument>run</argument>
+ </arguments>
+ <systemProperties>
+ <systemProperty>
+ <key>org.apache.commons.logging.Log</key>
+ <value>org.apache.commons.logging.impl.SimpleLog</value>
+ </systemProperty>
+ <systemProperty>
+ <key>org.apache.commons.logging.simplelog.defaultlog</key>
+ <value>${simplelog.defaultlog}</value>
+ </systemProperty>
+ </systemProperties>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
</profiles>
</project>
Added:
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java
URL:
http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java?rev=1639831&view=auto
==============================================================================
---
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java
(added)
+++
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java
Sat Nov 15 04:10:09 2014
@@ -0,0 +1,758 @@
+/*
+ * 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.apache.commons.scxml2.w3c;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlValue;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.scxml2.SCXMLExecutor;
+import org.apache.commons.scxml2.env.Tracer;
+import org.apache.commons.scxml2.invoke.SimpleSCXMLInvoker;
+import org.apache.commons.scxml2.io.SCXMLReader;
+import org.apache.commons.scxml2.model.Final;
+import org.apache.commons.scxml2.model.SCXML;
+
+/**
+ * W3C SCXML 1.0 IRP tests: <a
href="http://www.w3.org/Voice/2013/scxml-irp/">http://www.w3.org/Voice/2013/scxml-irp/</a>.
+ * <p>
+ * The <b>W3CTests</b> class is standalone and can download and transform the
IRP tests locally using respectively
+ * commandline parameter <b>get</b> or <b>make</b>.
+ * </p>
+ * <p>
+ * To execute one or multiple IRP tests the commandline parameter <b>run</b>
must be specified.
+ * </p>
+ * <p>
+ * Optional environment parameter
<b>-Ddatamodel=<minimal|ecma|xpath></b> can be specified to limit the
+ * execution of the tests for and using only the specified datamodel language.
+ * </p>
+ * <p>
+ * Optional environment parameter <b>-Dtest=<testId></b> can be
specified to only execute a single test, which
+ * also can be combined with the <b>-Ddatamodel</b> parameter.
+ * </p>
+ * <p>
+ * The W3CTests also uses a separate <b><code>tests.xml</code></b>
configuration file, located in the
+ * <b><code>src/test/resources/w3c</code></b> directory, which is manually
maintained to enable|disable execution
+ * of tests (when <em>not</em> using the <b>-Dtest</b> parameter, which will
always execute the specified test).<br/>
+ * Furthermore, in this configuration file the current <em>success</em> or
<em>failure</em> status, and even more
+ * meta data per test is maintained.
+ * </p>
+ */
+@SuppressWarnings("unused")
+public class W3CTests {
+
+ private static final String SCXML_IRP_BASE_URL =
"http://www.w3.org/Voice/2013/scxml-irp/";
+ private static final String SCXML_IRP_MANIFEST_URI = "manifest.xml";
+ private static final String SCXML_IRP_ECMA_XSL_URI = "confEcma.xsl";
+ private static final String SCXML_IRP_XPATH_XSL_URI = "confXpath.xsl";
+
+ private static final String TESTS_SRC_DIR = "src/w3c/scxml-irp/";
+ private static final String TXML_TESTS_DIR = TESTS_SRC_DIR + "txml/";
+ private static final String MINIMAL_TESTS_DIR = TESTS_SRC_DIR + "minimal/";
+ private static final String ECMA_TESTS_DIR = TESTS_SRC_DIR + "ecma/";
+ private static final String XPATH_TESTS_DIR = TESTS_SRC_DIR + "xpath/";
+ private static final String PACKAGE_PATH =
"/"+W3CTests.class.getPackage().getName().replace('.','/');
+ private static final String TESTS_FILENAME = PACKAGE_PATH + "/tests.xml";
+ private static final String SCXML_IRP_MINIMAL_XSL_FILENAME = PACKAGE_PATH
+ "/confMinimal.xsl";
+
+ /**
+ * Tests model class used for loading the <b>tests.xml</b> configuration
file
+ */
+ @XmlRootElement(name="tests")
+ @XmlAccessorType(XmlAccessType.FIELD)
+ protected static class Tests {
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ protected static class Test {
+
+ @XmlAttribute(required=true)
+ private String id;
+ @XmlAttribute(required=true)
+ private Boolean mandatory;
+ @XmlAttribute(required=true)
+ private Boolean manual;
+ @XmlAttribute(required=true)
+ private boolean enabled;
+ @XmlAttribute
+ private String finalId;
+ @XmlAttribute
+ private Boolean implemented;
+ @XmlAttribute(name="minimal")
+ String minimalStatus;
+ @XmlAttribute(name="ecma")
+ String ecmaStatus;
+ @XmlAttribute(name="xpath")
+ String xpathStatus;
+ @XmlAttribute
+ Boolean xpathEnabled;
+ @XmlValue
+ private String comment;
+
+ public String getId() {
+ return id;
+ }
+
+ public boolean isMandatory() {
+ return mandatory;
+ }
+
+ public boolean isManual() {
+ return manual == null || manual;
+ }
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ public String getFinalState() {
+ return finalId;
+ }
+
+ public boolean isImplemented() {
+ return implemented == null || implemented;
+ }
+
+ public String getMinimalStatus() {
+ return minimalStatus;
+ }
+
+ public String getEcmaStatus() {
+ return ecmaStatus;
+ }
+
+ public String getXpathStatus() {
+ return xpathStatus;
+ }
+
+ public boolean isXPathEnabled() {
+ return xpathEnabled == null || xpathEnabled;
+ }
+
+ public String getComment() {
+ return comment;
+ }
+
+ public String toString() {
+ return id;
+ }
+ }
+
+ @XmlElement(name="test")
+ private ArrayList<Test> tests;
+
+ private LinkedHashMap<String, Test> testsMap;
+
+ public LinkedHashMap<String, Test> getTests() {
+ if (testsMap == null) {
+ testsMap = new LinkedHashMap<String, Test>();
+ if (tests != null) {
+ for (Test t : tests) {
+ testsMap.put(t.getId(), t);
+ }
+ }
+ }
+ return testsMap;
+ }
+ }
+
+ /**
+ * Datamodel enum representing the minimal, ecma and xpath datamodel types
used and tested by the W3C IRP tests.
+ */
+ protected enum Datamodel {
+
+ MINIMAL("minimal"),
+ ECMA("ecma"),
+ XPATH("xpath");
+
+ private final String value;
+
+ private Datamodel(final String value) {
+ this.value = value;
+ }
+
+ public String value() {
+ return value;
+ }
+
+ public static Datamodel fromValue(final String value) {
+ for (Datamodel datamodel : Datamodel.values()) {
+ if (datamodel.value().equals(value)) {
+ return datamodel;
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Assertions model class used for loading the W3C IRP tests manifest.xml
file, defining the meta data and
+ * source URIs for all the W3C IRP tests.
+ */
+ @XmlRootElement(name="assertions")
+ @XmlAccessorType(XmlAccessType.FIELD)
+ protected static class Assertions {
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ protected static class Assertion {
+
+ @XmlAttribute
+ private String id;
+ @XmlAttribute(name="specnum")
+ private String specnum;
+ @XmlAttribute(name="specid")
+ private String specid;
+ @XmlElement(name="test")
+ private ArrayList<TestCase> testCases;
+
+ public String getId() {
+ return id;
+ }
+
+ public String getSpecNum() {
+ return specnum;
+ }
+
+ public String getSpecId() {
+ return specid;
+ }
+
+ public List<TestCase> getTestCases() {
+ return testCases != null ? testCases :
Collections.<TestCase>emptyList();
+ }
+
+ public Datamodel getDatamodel() {
+ if ("#minimal-profile".equals(specid)) {
+ return Datamodel.MINIMAL;
+ }
+ else if ("#ecma-profile".equals(specid)) {
+ return Datamodel.ECMA;
+ }
+ else if ("#xpath-profile".equals(specid)) {
+ return Datamodel.XPATH;
+ }
+ return null;
+ }
+
+ public String toString() {
+ return id;
+ }
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ protected static class TestCase {
+
+ @XmlAttribute
+ private String id;
+ @XmlAttribute
+ private String manual;
+ @XmlAttribute
+ private String conformance;
+ @XmlElement(name="start")
+ private ArrayList<Resource> scxmlResources;
+ @XmlElement(name="dep")
+ private ArrayList<Resource> depResources;
+
+ private ArrayList<Resource> resources;
+
+ public String getId() {
+ return id;
+ }
+
+ public boolean isManual() {
+ return Boolean.parseBoolean(manual);
+ }
+
+ public boolean isOptional() {
+ return "mandatory".equals(conformance);
+ }
+
+ public List<Resource> getScxmlResources() {
+ return scxmlResources != null ? scxmlResources :
Collections.<Resource>emptyList();
+ }
+
+ public List<Resource> getResources() {
+ if (resources == null) {
+ resources = new ArrayList<Resource>();
+ if (scxmlResources != null) {
+ resources.addAll(scxmlResources);
+ }
+ if (depResources != null) {
+ resources.addAll(depResources);
+ // no longer needed
+ depResources = null;
+ }
+ }
+ return resources;
+ }
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ protected static class Resource {
+
+ @XmlAttribute
+ private String uri;
+
+ public String getUri() {
+ return uri;
+ }
+
+ public String getName() {
+ return uri.substring(uri.indexOf("/")+1, uri.indexOf("."));
+ }
+
+ public String getFilename() {
+ return uri.substring(uri.indexOf("/")+1);
+ }
+ }
+
+ @XmlElement(name="assert")
+ private ArrayList<Assertion> assertions;
+
+ private LinkedHashMap<String, Assertion> assertionsMap;
+
+ public LinkedHashMap<String, Assertion> getAssertions() {
+ if (assertionsMap == null) {
+ assertionsMap = new LinkedHashMap<String, Assertion>();
+ if (assertions != null) {
+ for (Assertion a : assertions) {
+ assertionsMap.put(a.getId(), a);
+ }
+ }
+ }
+ return assertionsMap;
+ }
+ }
+
+ /**
+ * Simple TestResult data struct for tracking test results
+ */
+ protected static class TestResults {
+ int testsSkipped;
+ int testsPassed;
+ int testsFailed;
+ int minimalPassed;
+ int minimalFailed;
+ int ecmaPassed;
+ int ecmaFailed;
+ int xpathPassed;
+ int xpathFailed;
+ ArrayList<String> failedTests = new ArrayList<String>();
+ }
+
+ /**
+ * W3CTests main function, see {@link #usage()} how to use.
+ * @param args
+ * @throws Exception
+ */
+ public static void main(final String[] args) throws Exception {
+ if (args.length > 0) {
+ if ("get".equals(args[0])) {
+ new W3CTests().getTests();
+ return;
+ }
+ else if ("make".equals(args[0])) {
+ new W3CTests().makeTests();
+ return;
+ }
+ else if ("run".equals(args[0])) {
+ Datamodel datamodel =
Datamodel.fromValue(System.getProperty("datamodel"));
+ String testId = System.getProperty("test");
+ new W3CTests().runTests(testId, datamodel);
+ return;
+ }
+ }
+ usage();
+ }
+
+ /**
+ * Usage prints the 'commandline' usage options.
+ */
+ protected static void usage() {
+ System.out.println("Usage: W3CTests <get|run>\n" +
+ " get - downloads the W3C IRP tests\n" +
+ " make - make previously downloaded W3C IRP tests by
transforming the .txml templates\n" +
+ " run - runs test(s), optionally only for a specific
datamodel (default: all)\n\n" +
+ "To run a single test, specify -Dtest=<testId>, otherwise all
enabled tests will be run.\n" +
+ "To only run test(s) for a specific datamodel, specify
-Ddatamodel=<minimal|ecma|xpath>.\n");
+ }
+
+ /**
+ * Downloads the W3C IRP manifest.xml, the IRP ecma and xpath stylesheets
to transform the tests, and the
+ * actual test templates (.txml) as defined in the manifest.xml
+ * @throws Exception
+ */
+ protected void getTests() throws Exception {
+ final File testsSrcDir = new File(TESTS_SRC_DIR);
+ if (!testsSrcDir.mkdirs()) {
+ FileUtils.cleanDirectory(testsSrcDir);
+ }
+ new File(TXML_TESTS_DIR).mkdirs();
+ new File(MINIMAL_TESTS_DIR).mkdirs();
+ new File(ECMA_TESTS_DIR).mkdirs();
+ new File(XPATH_TESTS_DIR).mkdirs();
+ System.out.println("Downloading IRP manifest: " + SCXML_IRP_BASE_URL +
SCXML_IRP_MANIFEST_URI);
+ FileUtils.copyURLToFile(new URL(SCXML_IRP_BASE_URL +
SCXML_IRP_MANIFEST_URI), new File(testsSrcDir, SCXML_IRP_MANIFEST_URI));
+ System.out.println("Downloading ecma stylesheet: " +
SCXML_IRP_BASE_URL + SCXML_IRP_ECMA_XSL_URI);
+ FileUtils.copyURLToFile(new URL(SCXML_IRP_BASE_URL +
SCXML_IRP_ECMA_XSL_URI), new File(testsSrcDir, SCXML_IRP_ECMA_XSL_URI));
+ System.out.println("Downloading xpath stylesheet: " +
SCXML_IRP_BASE_URL + SCXML_IRP_XPATH_XSL_URI);
+ FileUtils.copyURLToFile(new URL(SCXML_IRP_BASE_URL +
SCXML_IRP_XPATH_XSL_URI), new File(testsSrcDir, SCXML_IRP_XPATH_XSL_URI));
+ Assertions assertions = loadAssertions();
+ for (Assertions.Assertion entry : assertions.getAssertions().values())
{
+ for (Assertions.TestCase test : entry.getTestCases()) {
+ for (Assertions.Resource resource : test.getResources()) {
+ System.out.println("Downloading IRP test file: " +
SCXML_IRP_BASE_URL + resource.getUri());
+ FileUtils.copyURLToFile(new URL(SCXML_IRP_BASE_URL +
resource.getUri()), new File(TXML_TESTS_DIR + resource.getFilename()));
+ }
+ }
+ }
+ }
+
+ /**
+ * Transforms the W3C IRP tests.
+ * <p>
+ * Note: for transforming the IRP .txml test files XPath 2.0 is required,
for which the Saxon library is used.
+ * </p>
+ * @throws Exception
+ */
+ protected void makeTests() throws Exception {
+ final File testsSrcDir = new File(TESTS_SRC_DIR);
+
+ TransformerFactory factory =
TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl",null);
+
factory.setFeature("http://saxon.sf.net/feature/suppressXsltNamespaceCheck",
true);
+ Transformer ecmaTransformer = factory.newTransformer(new
StreamSource(new FileInputStream(new File(testsSrcDir,
SCXML_IRP_ECMA_XSL_URI))));
+ Transformer xpathTransformer = factory.newTransformer(new
StreamSource(new FileInputStream(new File(testsSrcDir,
SCXML_IRP_XPATH_XSL_URI))));
+ Transformer minimalTransformer = factory.newTransformer(new
StreamSource(getClass().getResourceAsStream(SCXML_IRP_MINIMAL_XSL_FILENAME)));
+ Assertions assertions = loadAssertions();
+ for (Assertions.Assertion entry : assertions.getAssertions().values())
{
+ for (Assertions.TestCase test : entry.getTestCases()) {
+ for (Assertions.Resource resource : test.getResources()) {
+ processResource(entry.getSpecId(), resource,
minimalTransformer, ecmaTransformer, xpathTransformer);
+ }
+ }
+ }
+ }
+
+ /**
+ * Unmarshall and return the W3C IRP tests manifest.xml
+ * @return an Assertions instance reprenting the W3C IRP tests manifest.xml
+ * @throws Exception
+ */
+ protected Assertions loadAssertions() throws Exception {
+ final JAXBContext jaxbContext =
JAXBContext.newInstance(Assertions.class);
+ final Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
+ return (Assertions)jaxbUnmarshaller.unmarshal(new File(TESTS_SRC_DIR,
SCXML_IRP_MANIFEST_URI));
+ }
+
+ /**
+ * Download and transform a W3C IRP test resource file
+ * @param specid the SCXML 1.0 spec id (anchor) for the current assertion,
+ * which is used to determine if, how and where the resource
should be transformed.
+ * @param resource The test resource definition
+ * @param minimalTransformer transformer to produce an minimal datamodel
SCXML document from the txml resource
+ * @param ecmaTransformer transformer to produce an ecmascript datamodel
SCXML document from the txml resource
+ * @param xpathTransformer transformer to produce a xpath datamodel based
SCXML document from the txml resource
+ * @throws Exception
+ */
+ protected void processResource(final String specid, final
Assertions.Resource resource,
+ final Transformer minimalTransformer, final
Transformer ecmaTransformer,
+ final Transformer xpathTransformer)
+ throws Exception {
+ System.out.println("processing IRP test file " +
resource.getFilename());
+ FileUtils.copyURLToFile(new URL(SCXML_IRP_BASE_URL +
resource.getUri()), new File(TXML_TESTS_DIR + resource.getFilename()));
+ if (specid.equals("#minimal-profile")) {
+ transformResource(resource, minimalTransformer, MINIMAL_TESTS_DIR);
+ }
+ else if (specid.equals("#ecma-profile")) {
+ transformResource(resource, ecmaTransformer, ECMA_TESTS_DIR);
+ }
+ else if (specid.equals("#xpath-profile")) {
+ transformResource(resource, xpathTransformer, XPATH_TESTS_DIR);
+ }
+ else {
+ transformResource(resource, ecmaTransformer, ECMA_TESTS_DIR);
+ transformResource(resource, xpathTransformer, XPATH_TESTS_DIR);
+ }
+ }
+
+ /**
+ * XSL transform a W3C IRP test SCXML resource to a datamodel specific
location and format,
+ * or simply copy a non SCXML resource to that location.
+ * @param resource the test resource definition
+ * @param transformer the XSL transformer to use
+ * @param targetDir the target location for the transformed SCXML
document, or the non-SCXML resource
+ * @throws Exception
+ */
+ protected void transformResource(final Assertions.Resource resource, final
Transformer transformer,
+ final String targetDir) throws Exception {
+ if (resource.getFilename().endsWith(".txml")) {
+ StreamSource txmlSource = new StreamSource(new FileInputStream(new
File(TXML_TESTS_DIR, resource.getFilename())));
+ transformer.transform(txmlSource, new StreamResult(new
FileOutputStream(new File(targetDir, resource.getName() + ".scxml"))));
+ }
+ else {
+ FileUtils.copyFile(new File(TXML_TESTS_DIR,
resource.getFilename()), new File(targetDir, resource.getFilename()));
+ }
+ }
+
+ protected void createCleanDirectory(final String path) throws Exception {
+ final File dir = new File(path);
+ if (!dir.mkdirs()) {
+ FileUtils.cleanDirectory(dir);
+ }
+ }
+
+ /**
+ * Run one or multiple W3C IRP tests
+ * @param testId a W3C IRP test id, or null to specify all tests to run
+ * @param datamodel only tests available for or executable with the
specified datamodel will be run (or all if null)
+ * @throws Exception
+ */
+ protected void runTests(final String testId, final Datamodel datamodel)
throws Exception {
+ final Assertions assertions = loadAssertions();
+ final Tests tests = loadTests();
+ final TestResults results = new TestResults();
+ if (testId != null) {
+ final Assertions.Assertion assertion =
assertions.getAssertions().get(testId);
+ if (assertion != null) {
+ runTest(assertion, tests, datamodel, true, results);
+ }
+ else {
+ throw new IllegalArgumentException("Unknown test with id:
"+testId);
+ }
+ }
+ else {
+ for (Assertions.Assertion entry :
assertions.getAssertions().values()) {
+ runTest(entry, tests, datamodel, false, results);
+ }
+ }
+ System.out.println(
+ "\nTest results running " +
+ (testId == null ? "all enabled tests" : "test "+testId) +
+ (datamodel != null ? " for the "+datamodel.value+" datamodel"
: "") +
+ ":\n" +
+ " number of tests :
"+(results.testsSkipped+results.testsPassed+results.testsFailed) +
+ " ("+results.testsPassed+" passed, "+results.testsFailed
+" failed, "+results.testsSkipped+" skipped)");
+ if (results.minimalPassed+results.minimalFailed > 0) {
+ System.out.println(
+ " mimimal datamodel: "+results.minimalPassed+" passed,
"+results.minimalFailed+" failed");
+ }
+ if (results.ecmaPassed+results.ecmaFailed > 0) {
+ System.out.println(
+ " ecma datamodel: "+results.ecmaPassed+" passed,
"+results.ecmaFailed+" failed");
+ }
+ if (results.xpathPassed+results.xpathFailed > 0) {
+ System.out.println(
+ " xpath datamodel: "+results.xpathPassed+" passed,
"+results.xpathFailed+" failed");
+ }
+ System.out.print("\n");
+ if (!results.failedTests.isEmpty()) {
+ System.out.println(" failed tests: ");
+ for (String filename : results.failedTests) {
+ System.out.println(" "+filename);
+ }
+ System.out.print("\n");
+ }
+ }
+
+ /**
+ * Loads the tests.xml configuration file into a Tests class configuration
model instance.
+ * @return a Tests instance for the tests.xml configuration file.
+ * @throws Exception
+ */
+ protected Tests loadTests() throws Exception {
+ final JAXBContext jaxbContext = JAXBContext.newInstance(Tests.class);
+ final Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
+ return
(Tests)jaxbUnmarshaller.unmarshal(getClass().getResource(TESTS_FILENAME));
+ }
+
+ /**
+ * Run a single W3C IRP test (assert)
+ * @param assertion The W3C IRP assert, defining one or more {@link
Assertions.TestCase}s
+ * @param tests the tests configurations
+ * @param datamodel the datamodel to limit and restrict the execution of
the test
+ * @param singleTest if true a single test id was specified which will be
executed even if disabled in the configuration.
+ * @throws Exception
+ */
+ protected void runTest(final Assertions.Assertion assertion, final Tests
tests, final Datamodel datamodel,
+ final boolean singleTest, TestResults results)
throws Exception {
+ final Tests.Test test = tests.getTests().get(assertion.getId());
+ if (test == null) {
+ throw new IllegalStateException("No test configuration found for
W3C IRP test with id: "+assertion.getId());
+ }
+ boolean skipped = true;
+ boolean passed = true;
+ if (singleTest || test.isEnabled()) {
+ if (datamodel != Datamodel.MINIMAL ||
datamodel.equals(assertion.getDatamodel())) {
+ if (datamodel == null || assertion.getDatamodel() == null ||
datamodel.equals(assertion.getDatamodel())) {
+ final Datamodel effectiveDM = datamodel != null ?
datamodel : assertion.getDatamodel();
+ for (Assertions.TestCase testCase :
assertion.getTestCases()) {
+ if (effectiveDM != null) {
+ switch (effectiveDM) {
+ case MINIMAL:
+ skipped = false;
+ if (runTests(assertion, testCase, test,
MINIMAL_TESTS_DIR, results.failedTests)) {
+ results.minimalPassed++;
+ }
+ else {
+ passed = false;
+ results.minimalFailed++;
+ }
+ break;
+ case ECMA:
+ skipped = false;
+ if (runTests(assertion, testCase, test,
ECMA_TESTS_DIR, results.failedTests)) {
+ results.ecmaPassed++;
+ }
+ else {
+ passed = false;
+ results.ecmaFailed++;
+ }
+ break;
+ case XPATH:
+ if (test.isXPathEnabled()) {
+ skipped = false;
+ if (runTests(assertion, testCase,
test, XPATH_TESTS_DIR, results.failedTests)) {
+ results.xpathPassed++;
+ }
+ else {
+ passed = false;
+ results.xpathFailed++;
+ }
+ }
+ break;
+ }
+ }
+ else {
+ skipped = false;
+ if (runTests(assertion, testCase, test,
ECMA_TESTS_DIR, results.failedTests)) {
+ results.ecmaPassed++;
+ }
+ else {
+ passed = false;
+ results.ecmaFailed++;
+ }
+ if (test.isXPathEnabled()) {
+ if (runTests(assertion, testCase, test,
XPATH_TESTS_DIR, results.failedTests)) {
+ results.xpathPassed++;
+ }
+ else {
+ passed = false;
+ results.xpathFailed++;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ if (skipped) {
+ results.testsSkipped++;
+ }
+ else if (passed) {
+ results.testsPassed++;
+ }
+ else {
+ results.testsFailed++;
+ }
+ }
+
+ /**
+ * Execute all W3C IRP SCXML tests for a specific {@link
Assertions.TestCase}
+ * @param assertion the W3C IRP test assert definition
+ * @param testCase the W3C IRP test definition
+ * @param test the test configuration
+ * @param scxmlDir the datamodel specific directory path containing the
SCXML document(s)
+ * @throws Exception
+ */
+ protected boolean runTests(final Assertions.Assertion assertion, final
Assertions.TestCase testCase,
+ final Tests.Test test, final String scxmlDir,
ArrayList<String> failedTests)
+ throws Exception {
+ boolean passed = true;
+ for (Assertions.Resource scxmlResource : testCase.getScxmlResources())
{
+ File scxmlFile = new File(scxmlDir,
scxmlResource.getName()+".scxml");
+ if (!runTest(testCase, test, scxmlFile)) {
+ passed = false;
+
failedTests.add(scxmlFile.getParentFile().getName()+"/"+scxmlFile.getName());
+ }
+ }
+ return passed;
+ }
+
+ /**
+ * Run a single W3C IRP SCXML test
+ * @param testCase the W3C IRP test definition
+ * @param test the test configuration
+ * @param scxmlFile the file handle for the SCXML document
+ */
+ protected boolean runTest(final Assertions.TestCase testCase, final
Tests.Test test, final File scxmlFile) {
+ try {
+ System.out.println("Executing test:
"+scxmlFile.getParentFile().getName()+"/"+scxmlFile.getName());
+ final Tracer trc = new Tracer();
+ final SCXML doc = SCXMLReader.read(new FileReader(scxmlFile));
+ if (doc == null) {
+ System.out.println(" FAIL: the SCXML file " +
+ scxmlFile.getCanonicalPath() + " can not be parsed!");
+ return false;
+ }
+ final SCXMLExecutor exec = new SCXMLExecutor(null, null, trc);
+ exec.setStateMachine(doc);
+ exec.addListener(doc, trc);
+ exec.registerInvokerClass("scxml", SimpleSCXMLInvoker.class);
+ exec.registerInvokerClass("http://www.w3.org/TR/scxml/",
SimpleSCXMLInvoker.class);
+ exec.go();
+ Final end;
+ while ((end = exec.getCurrentStatus().getFinalState()) == null) {
+ Thread.sleep(100);
+ exec.triggerEvents();
+ }
+ System.out.println(" final state: "+end.getId());
+ if (!testCase.isManual()) {
+ return end.getId().equals("pass");
+ }
+ else if (test.getFinalState() != null) {
+ return end.getId().equals(test.getFinalState());
+ }
+ else {
+ // todo: manual verification for specific tests
+ return false;
+ }
+ }
+ catch (Exception e) {
+ System.out.println(" FAIL: "+e.getMessage());
+ return false;
+ }
+ }
+}
Propchange:
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java
------------------------------------------------------------------------------
svn:keywords = Id
Added:
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/confMinimal.xsl
URL:
http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/confMinimal.xsl?rev=1639831&view=auto
==============================================================================
---
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/confMinimal.xsl
(added)
+++
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/confMinimal.xsl
Sat Nov 15 04:10:09 2014
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<!-- Copyright 1998-2003 W3C (MIT, ERCIM, Keio), All Rights Reserved. See
http://www.w3.org/Consortium/Legal/. -->
+<!-- Adapted from http://www.w3.org/Voice/2013/scxml-irp/confXPath.xsl -->
+<xsl:stylesheet
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:conf="http://www.w3.org/2005/scxml-conformance"
+ version="2.0">
+
+<!-- Copy everything that doesn't match other rules -->
+<xsl:template match="/ | @* | node()">
+ <xsl:copy>
+ <xsl:apply-templates select="@* | node()"/>
+ </xsl:copy>
+</xsl:template>
+
+<!-- Success criteria -->
+
+<xsl:template match="//@conf:targetpass">
+ <xsl:attribute name="target">pass</xsl:attribute>
+</xsl:template>
+
+<xsl:template match="conf:pass">
+ <final xmlns="http://www.w3.org/2005/07/scxml" id="pass"/>
+</xsl:template>
+
+<!-- Failure criteria -->
+
+<xsl:template match="//@conf:targetfail">
+ <xsl:attribute name="target">fail</xsl:attribute>
+</xsl:template>
+
+<xsl:template match="conf:fail">
+ <final xmlns="http://www.w3.org/2005/07/scxml" id="fail"/>
+</xsl:template>
+
+<!-- returns true if machine is in the state specified -->
+
+<xsl:template match="//@conf:inState">
+ <xsl:attribute name="cond">In(<xsl:value-of
select="."/>)</xsl:attribute>
+</xsl:template>
+
+</xsl:stylesheet>
Propchange:
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/confMinimal.xsl
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/confMinimal.xsl
------------------------------------------------------------------------------
svn:keywords = Id
Added:
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/tests.xml
URL:
http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/tests.xml?rev=1639831&view=auto
==============================================================================
---
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/tests.xml
(added)
+++
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/tests.xml
Sat Nov 15 04:10:09 2014
@@ -0,0 +1,234 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tests>
+ <test id="355" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="576" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="364" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="372" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="570" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="375" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="376" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="377" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="378" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="387" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="579" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="580" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="388" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="396" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="399" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="401" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="402" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="403" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="404" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="405" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="406" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="407" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="409" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="411" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="412" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="413" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="415" mandatory="true" manual="true" enabled="true"
finalId="final" ecma="final" xpath="final"/>
+ <test id="416" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="417" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="419" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="421" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="422" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail">fails with error: null</test>
+ <test id="423" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="503" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="504" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="505" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="506" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="533" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="144" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="147" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="148" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="149" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="150" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="151" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="152" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="153" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="155" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="pass"/>
+ <test id="156" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="pass"/>
+ <test id="525" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="pass"/>
+ <test id="158" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="159" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="276" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="277" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="279" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="280" mandatory="true" manual="false" enabled="false"
ecma="pass" xpath="fail"/>
+ <test id="550" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="551" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="552" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="286" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="287" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="288" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="">xpath fails with error: null</test>
+ <test id="487" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="294" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="527" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="528" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="529" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="298" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="343" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="488" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="301" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="302" mandatory="true" manual="false" enabled="true"
ecma="pass" xpathEnabled="false"/>
+ <test id="303" mandatory="true" manual="false" enabled="true"
ecma="pass" xpathEnabled="false"/>
+ <test id="304" mandatory="true" manual="false" enabled="true"
ecma="pass" xpathEnabled="false"/>
+ <test id="307" mandatory="true" manual="true" enabled="false"
ecma="fail" xpath="">xpath fails with error: null</test>
+ <test id="309" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="310" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="311" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="312" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="313" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="314" mandatory="true" manual="true" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="344" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="318" mandatory="true" manual="false" enabled="false"
ecma="pass" xpath="">xpath fails with error: null</test>
+ <test id="319" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="321" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="">xpath fails with error: null</test>
+ <test id="322" mandatory="true" manual="false" enabled="false"
ecma="pass" xpath="">xpath fails with error: null</test>
+ <test id="323" mandatory="true" manual="false" enabled="false"
ecma="pass" xpath="">xpath fails with error: null</test>
+ <test id="324" mandatory="true" manual="false" enabled="false"
ecma="pass" xpath="">xpath fails with error: null</test>
+ <test id="325" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="">xpath fails with error: null</test>
+ <test id="326" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="">xpath fails with error: null</test>
+ <test id="329" mandatory="true" manual="false" enabled="false"
ecma="pass" xpath="">xpath fails with error: null</test>
+ <test id="330" mandatory="true" manual="false" enabled="false"
ecma="pass" xpath="fail"/>
+ <test id="331" mandatory="true" manual="false" enabled="false"
ecma="pass" xpath="">xpath fails with error: null</test>
+ <test id="332" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="">xpath fails with error: null</test>
+ <test id="333" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="pass"/>
+ <test id="335" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="pass"/>
+ <test id="336" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="337" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="pass"/>
+ <test id="338" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="339" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="pass"/>
+ <test id="342" mandatory="true" manual="false" enabled="false"
ecma="pass" xpath="fail">xpath fails with error: null</test>
+ <test id="346" mandatory="true" manual="false" enabled="false"
ecma="pass" xpath="fail"/>
+ <test id="172" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="173" mandatory="true" manual="false" enabled="false"
ecma="pass" xpath="pass"/>
+ <test id="174" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="175" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="">xpath: Fails to complete</test>
+ <test id="176" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="pass"/>
+ <test id="178" mandatory="true" manual="true" enabled="true"
finalId="final" ecma="final" xpath="final"/>
+ <test id="179" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="183" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="pass"/>
+ <test id="185" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="186" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="pass"/>
+ <test id="187" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">fails with error: null</test>
+ <test id="194" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="198" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="199" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="200" mandatory="true" manual="false" enabled="true"
ecma="true" xpath="true"/>
+ <test id="201" mandatory="false" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="205" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="pass"/>
+ <test id="521" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="553" mandatory="true" manual="false" enabled="false"
ecma="pass" xpath="fail"/>
+ <test id="207" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="208" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="210" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="215" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails with error: null</test>
+ <test id="216" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="220" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="223" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="224" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="225" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="226" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="228" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="229" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="230" mandatory="true" manual="true" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="232" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="233" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="234" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="235" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="236" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="237" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="239" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="240" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="241" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="242" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="243" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="244" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="245" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="247" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="250" mandatory="true" manual="true" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="252" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="253" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="530" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="554" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="436" mandatory="true" manual="false" enabled="true"
minimal="pass"/>
+ <test id="278" mandatory="false" manual="false" enabled="false"
ecma="fail"/>
+ <test id="444" mandatory="false" manual="false" enabled="true"
ecma="pass"/>
+ <test id="445" mandatory="false" manual="false" enabled="false"
ecma="fail"/>
+ <test id="448" mandatory="false" manual="false" enabled="false"
ecma="fail"/>
+ <test id="449" mandatory="false" manual="false" enabled="false"
ecma="fail"/>
+ <test id="451" mandatory="false" manual="false" enabled="true"
ecma="pass"/>
+ <test id="452" mandatory="false" manual="false" enabled="true"
ecma="pass"/>
+ <test id="453" mandatory="false" manual="false" enabled="true"
ecma="pass"/>
+ <test id="456" mandatory="false" manual="false" enabled="true"
ecma="pass"/>
+ <test id="446" mandatory="false" manual="false" enabled="false"
ecma="fail"/>
+ <test id="557" mandatory="false" manual="false" enabled="false"
ecma="fail"/>
+ <test id="558" mandatory="false" manual="false" enabled="false"
ecma="fail"/>
+ <test id="560" mandatory="false" manual="false" enabled="false"
ecma="fail"/>
+ <test id="578" mandatory="false" manual="false" enabled="false"
ecma="fail"/>
+ <test id="561" mandatory="false" manual="false" enabled="false"
ecma="fail"/>
+ <test id="562" mandatory="false" manual="false" enabled="false"
ecma="fail"/>
+ <test id="569" mandatory="false" manual="false" enabled="false"
ecma="fail"/>
+ <test id="457" mandatory="false" manual="false" enabled="false"
ecma="fail"/>
+ <test id="459" mandatory="false" manual="false" enabled="true"
ecma="pass"/>
+ <test id="460" mandatory="false" manual="false" enabled="true"
ecma="pass"/>
+ <test id="463" mandatory="false" manual="false" enabled="false"
xpath="fail"/>
+ <test id="464" mandatory="false" manual="false" enabled="true"
xpath="pass"/>
+ <test id="465" mandatory="false" manual="false" enabled="false"
xpath="fail"/>
+ <test id="466" mandatory="false" manual="false" enabled="false"
xpath="fail"/>
+ <test id="467" mandatory="false" manual="false" enabled="true"
xpath="pass"/>
+ <test id="468" mandatory="false" manual="false" enabled="false"
xpath="fail"/>
+ <test id="469" mandatory="false" manual="false" enabled="false"
xpath="fail"/>
+ <test id="470" mandatory="false" manual="false" enabled="true"
xpath="pass"/>
+ <test id="473" mandatory="false" manual="false" enabled="false"
xpath="">xpath fails with error: null</test>
+ <test id="474" mandatory="false" manual="false" enabled="false"
xpath="">xpath fails with error: null</test>
+ <test id="475" mandatory="false" manual="false" enabled="false"
xpath="">xpath fails with error: null</test>
+ <test id="476" mandatory="false" manual="false" enabled="false"
xpath="">xpath fails with error: null</test>
+ <test id="477" mandatory="false" manual="false" enabled="false"
xpath="">xpath fails with error: null</test>
+ <test id="478" mandatory="false" manual="false" enabled="false"
xpath="">xpath fails with error: null</test>
+ <test id="479" mandatory="false" manual="false" enabled="false"
xpath="">xpath fails with error: null</test>
+ <test id="480" mandatory="false" manual="false" enabled="true"
xpath="pass"/>
+ <test id="481" mandatory="false" manual="false" enabled="false"
xpath="">xpath fails with error: null</test>
+ <test id="482" mandatory="false" manual="false" enabled="false"
xpath="fail"/>
+ <test id="483" mandatory="false" manual="false" enabled="false"
xpath="fail"/>
+ <test id="537" mandatory="false" manual="false" enabled="false"
xpath="fail"/>
+ <test id="539" mandatory="false" manual="false" enabled="false"
xpath="fail"/>
+ <test id="540" mandatory="false" manual="false" enabled="false"
xpath="fail"/>
+ <test id="542" mandatory="false" manual="false" enabled="false"
xpath="fail"/>
+ <test id="543" mandatory="false" manual="false" enabled="false"
xpath="fail"/>
+ <test id="544" mandatory="false" manual="false" enabled="true"
xpath="pass"/>
+ <test id="545" mandatory="false" manual="false" enabled="true"
xpath="pass"/>
+ <test id="546" mandatory="false" manual="false" enabled="true"
xpath="pass"/>
+ <test id="547" mandatory="false" manual="false" enabled="true"
xpath="pass"/>
+ <test id="555" mandatory="false" manual="false" enabled="true"
xpath="pass"/>
+ <test id="568" mandatory="false" manual="false" enabled="false"
xpath="fail"/>
+ <test id="189" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="190" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="191" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="192" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="193" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="347" mandatory="true" manual="false" enabled="false"
ecma="" xpath="">Fails to complete</test>
+ <test id="348" mandatory="true" manual="false" enabled="true"
ecma="pass" xpath="pass"/>
+ <test id="349" mandatory="true" manual="false" enabled="false"
ecma="pass" xpath="">xpath fails with error: null</test>
+ <test id="350" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="">xpath fails with error: null</test>
+ <test id="351" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="">xpath fails with error: null</test>
+ <test id="352" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="">xpath fails with error: null</test>
+ <test id="354" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="pass"/>
+ <test id="495" mandatory="true" manual="false" enabled="true"
ecma="true" xpath="true"/>
+ <test id="496" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="fail"/>
+ <test id="500" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="">xpath fails with error: null</test>
+ <test id="501" mandatory="true" manual="false" enabled="false"
ecma="fail" xpath="">xpath fails with error: null</test>
+ <test id="509" mandatory="false" manual="false" enabled="false"
implemented="false"/>
+ <test id="510" mandatory="false" manual="false" enabled="false"
implemented="false"/>
+ <test id="513" mandatory="false" manual="true" enabled="false"
implemented="false"/>
+ <test id="518" mandatory="true" manual="false" enabled="false"
implemented="false"/>
+ <test id="519" mandatory="false" manual="false" enabled="false"
implemented="false"/>
+ <test id="520" mandatory="false" manual="false" enabled="false"
implemented="false"/>
+ <test id="522" mandatory="false" manual="false" enabled="false"
implemented="false"/>
+ <test id="531" mandatory="false" manual="false" enabled="false"
implemented="false"/>
+ <test id="532" mandatory="false" manual="false" enabled="false"
implemented="false"/>
+ <test id="534" mandatory="false" manual="false" enabled="false"
implemented="false"/>
+ <test id="567" mandatory="false" manual="false" enabled="false"
implemented="false"/>
+ <test id="577" mandatory="false" manual="false" enabled="false"
implemented="false"/>
+</tests>
Propchange:
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/tests.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/tests.xml
------------------------------------------------------------------------------
svn:keywords = Id
Propchange:
commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/tests.xml
------------------------------------------------------------------------------
svn:mime-type = text/plain