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=&lt;minimal|ecma|xpath&gt;</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=&lt;testId&gt;</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


Reply via email to