You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ra...@apache.org on 2008/11/15 00:43:16 UTC

svn commit: r714191 - in /commons/proper/scxml/trunk: ./ src/main/java/org/apache/commons/scxml/ src/main/java/org/apache/commons/scxml/model/ src/test/java/org/apache/commons/scxml/model/

Author: rahul
Date: Fri Nov 14 15:43:16 2008
New Revision: 714191

URL: http://svn.apache.org/viewvc?rev=714191&view=rev
Log:
<assign> doesn't remove all children of old node.
A variant of a patch thanks to Joel Truher <joel at truher dot org>.
Adding Joel to list of contributors.
Also fixed a minor formatting inconsistency in a related error message.
SCXML-89

Added:
    commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/model/assign-test-01.xml   (props changed)
      - copied unchanged from r714183, commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/model/assign-test.xml
    commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/model/assign-test-02.xml   (with props)
Removed:
    commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/model/assign-test.xml
Modified:
    commons/proper/scxml/trunk/pom.xml
    commons/proper/scxml/trunk/project.xml
    commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml/Builtin.java
    commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml/model/Assign.java
    commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/model/AssignTest.java

Modified: commons/proper/scxml/trunk/pom.xml
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/pom.xml?rev=714191&r1=714190&r2=714191&view=diff
==============================================================================
--- commons/proper/scxml/trunk/pom.xml (original)
+++ commons/proper/scxml/trunk/pom.xml Fri Nov 14 15:43:16 2008
@@ -117,6 +117,9 @@
     <contributor>
       <name>Jakob Sachse</name>
     </contributor>
+    <contributor>
+      <name>Joel Truher</name>
+    </contributor>
   </contributors>
 
   <dependencies>

Modified: commons/proper/scxml/trunk/project.xml
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/project.xml?rev=714191&r1=714190&r2=714191&view=diff
==============================================================================
--- commons/proper/scxml/trunk/project.xml (original)
+++ commons/proper/scxml/trunk/project.xml Fri Nov 14 15:43:16 2008
@@ -164,6 +164,9 @@
     <contributor>
       <name>Jakob Sachse</name>
     </contributor>
+    <contributor>
+      <name>Joel Truher</name>
+    </contributor>
   </contributors>
   
   <dependencies>

Modified: commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml/Builtin.java
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml/Builtin.java?rev=714191&r1=714190&r2=714191&view=diff
==============================================================================
--- commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml/Builtin.java (original)
+++ commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml/Builtin.java Fri Nov 14 15:43:16 2008
@@ -126,7 +126,7 @@
         } else {
             if (length > 1) {
                 Log log = LogFactory.getLog(Builtin.class);
-                log.warn("Data(): Multiple nodes matching XPath expression"
+                log.warn("Data(): Multiple nodes matching XPath expression \""
                     + path + "\", returning first");
             }
             return result.item(0);
@@ -209,7 +209,7 @@
         } else {
             if (length > 1) {
                 Log log = LogFactory.getLog(Builtin.class);
-                log.warn("Data(): Multiple nodes matching XPath expression"
+                log.warn("Data(): Multiple nodes matching XPath expression \""
                     + path + "\", returning first");
             }
             return result.item(0);

Modified: commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml/model/Assign.java
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml/model/Assign.java?rev=714191&r1=714190&r2=714191&view=diff
==============================================================================
--- commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml/model/Assign.java (original)
+++ commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml/model/Assign.java Fri Nov 14 15:43:16 2008
@@ -196,10 +196,11 @@
                         newNode = eval.evalLocation(ctx, expr);
                     }
                     // Remove all children
-                    for (Node child = oldNode.getFirstChild();
-                            child != null;
-                            child = child.getNextSibling()) {
-                        oldNode.removeChild(child);
+                    Node removeChild = oldNode.getFirstChild();
+                    while (removeChild != null) {
+                        Node nextChild = removeChild.getNextSibling();
+                        oldNode.removeChild(removeChild);
+                        removeChild = nextChild;
                     }
                     if (newNode != null) {
                         // Adopt new children

Modified: commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/model/AssignTest.java
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/model/AssignTest.java?rev=714191&r1=714190&r2=714191&view=diff
==============================================================================
--- commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/model/AssignTest.java (original)
+++ commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/model/AssignTest.java Fri Nov 14 15:43:16 2008
@@ -45,21 +45,24 @@
     }
 
     // Test data
+    private URL assign01, assign02;
     private SCXMLExecutor exec;
 
     /**
      * Set up instance variables required by this test case.
      */
     public void setUp() {
-        URL assignSample = this.getClass().getClassLoader().
-            getResource("org/apache/commons/scxml/model/assign-test.xml");
-        exec = SCXMLTestHelper.getExecutor(assignSample);
+        assign01 = this.getClass().getClassLoader().
+            getResource("org/apache/commons/scxml/model/assign-test-01.xml");
+        assign02 = this.getClass().getClassLoader().
+            getResource("org/apache/commons/scxml/model/assign-test-02.xml");
     }
 
     /**
      * Tear down instance variables required by this test case.
      */
     public void tearDown() {
+        assign01 = assign02 = null;
         exec = null;
     }
 
@@ -67,6 +70,7 @@
      * Test the implementation
      */
     public void testAssignSrc() {
+        exec = SCXMLTestHelper.getExecutor(assign01);
         Set currentStates = exec.getCurrentStatus().getStates();
         assertEquals(1, currentStates.size());
         assertEquals("assign3", ((State)currentStates.iterator().
@@ -74,7 +78,16 @@
         assertTrue(exec.getCurrentStatus().isFinal());
     }
 
-     public static void main(String args[]) {
+    public void testAssignDeep() {
+        exec = SCXMLTestHelper.getExecutor(assign02);
+        Set currentStates = exec.getCurrentStatus().getStates();
+        assertEquals(1, currentStates.size());
+        assertEquals("assign3", ((State)currentStates.iterator().
+            next()).getId());
+        assertTrue(exec.getCurrentStatus().isFinal());
+    }
+
+    public static void main(String args[]) {
         TestRunner.run(suite());
     }
 }

Propchange: commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/model/assign-test-01.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/model/assign-test-01.xml
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/model/assign-test-01.xml
------------------------------------------------------------------------------
    svn:mergeinfo = 

Added: commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/model/assign-test-02.xml
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/model/assign-test-02.xml?rev=714191&view=auto
==============================================================================
--- commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/model/assign-test-02.xml (added)
+++ commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/model/assign-test-02.xml Fri Nov 14 15:43:16 2008
@@ -0,0 +1,46 @@
+<?xml version="1.0"?>
+<!--
+   * 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.
+-->
+<!-- Regress JIRA 89, incomplete child removal -->
+<scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:rad="http://foo/bar" version="1.0" initialstate="assign1">
+   <datamodel>
+       <data name="source">
+           <rad:foo>
+               <rad:a>1</rad:a>
+               <rad:b>2</rad:b>
+           </rad:foo>
+       </data>
+       <data name="destination">
+           <rad:bar>
+               <rad:a>3</rad:a>
+               <rad:b>4</rad:b>
+           </rad:bar>
+       </data>
+   </datamodel>
+   <!-- verify the destination contents -->
+   <state id="assign1" final="true">
+       <transition cond="Data(destination,'rad:bar/rad:a') eq 3 and Data(destination,'rad:bar/rad:b') eq 4" target="assign2" />
+   </state>
+   <!-- copy the new contents and verify -->
+   <state id="assign2">
+       <onentry>
+           <assign location="Data(destination,'rad:bar')" expr="Data(source,'rad:foo')" />
+       </onentry>
+       <transition cond="Data(destination,'rad:bar/rad:a') eq 1 and Data(destination,'rad:bar/rad:b') eq 2" target="assign3" />
+   </state>
+   <state id="assign3" final="true" />
+</scxml>

Propchange: commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/model/assign-test-02.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/model/assign-test-02.xml
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL