hillion     02/05/23 02:01:36

  Modified:    sources/org/apache/batik/css/engine CSSEngine.java
               test-resources/org/apache/batik/dom/svg unitTesting.xml
  Added:       test-resources/org/apache/batik/dom/svg
                        presentationAttrRemovalTest.svg
  Log:
  Fixed a bug with CSS computed style and presentation attributes removal + test.
  
  Revision  Changes    Path
  1.13      +44 -21    xml-batik/sources/org/apache/batik/css/engine/CSSEngine.java
  
  Index: CSSEngine.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/css/engine/CSSEngine.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- CSSEngine.java    21 May 2002 09:51:38 -0000      1.12
  +++ CSSEngine.java    23 May 2002 09:01:36 -0000      1.13
  @@ -58,7 +58,7 @@
    * This is the base class for all the CSS engines.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
  - * @version $Id: CSSEngine.java,v 1.12 2002/05/21 09:51:38 hillion Exp $
  + * @version $Id: CSSEngine.java,v 1.13 2002/05/23 09:01:36 hillion Exp $
    */
   public abstract class CSSEngine {
   
  @@ -1930,27 +1930,50 @@
           
           boolean comp = style.isComputed(idx);
   
  -        element = elt;
  -        try {
  -            LexicalUnit lu;
  -            lu = parser.parsePropertyValue(evt.getNewValue());
  -            ValueManager vm = valueManagers[idx];
  -            Value v = vm.createValue(lu, CSSEngine.this);
  -            style.putMask(idx, (short)0);
  -            style.putValue(idx, v);
  -            style.putOrigin(idx, StyleMap.NON_CSS_ORIGIN);
  -        } catch (Exception e) {
  -            String m = e.getMessage();
  -            String s =
  -                Messages.formatMessage("property.syntax.error.at",
  -                                       new Object[] { documentURI.toString(),
  -                                                      property,
  -                                                      evt.getNewValue(),
  -                                                      (m == null) ? "" : m });
  -            throw new DOMException(DOMException.SYNTAX_ERR, s);
  +        switch (evt.getAttrChange()) {
  +        case MutationEvent.ADDITION:
  +        case MutationEvent.MODIFICATION:
  +            element = elt;
  +            try {
  +                LexicalUnit lu;
  +                lu = parser.parsePropertyValue(evt.getNewValue());
  +                ValueManager vm = valueManagers[idx];
  +                Value v = vm.createValue(lu, CSSEngine.this);
  +                style.putMask(idx, (short)0);
  +                style.putValue(idx, v);
  +                style.putOrigin(idx, StyleMap.NON_CSS_ORIGIN);
  +            } catch (Exception e) {
  +                String m = e.getMessage();
  +                String s =
  +                    Messages.formatMessage("property.syntax.error.at",
  +                        new Object[]
  +                        { documentURI.toString(),
  +                          property,
  +                          evt.getNewValue(),
  +                          (m == null) ? "" : m });
  +                throw new DOMException(DOMException.SYNTAX_ERR, s);
  +            }
  +            element = null;
  +            cssBaseURI = null;
  +            break;
  +
  +        case MutationEvent.REMOVAL:
  +            // Invalidate all the values.
  +            elt.setComputedStyleMap(null, null);
  +            
  +            firePropertiesChangedEvent(elt, ALL_PROPERTIES);
  +                    
  +            Node c = getImportedChild(elt);
  +            if (c != null) {
  +                propagateChanges(c, ALL_PROPERTIES);
  +            }
  +            for (Node n = elt.getFirstChild();
  +                 n != null;
  +                 n = n.getNextSibling()) {
  +                propagateChanges(n, ALL_PROPERTIES);
  +            }
  +            return;
           }
  -        element = null;
  -        cssBaseURI = null;
   
           if (!comp) {
               // The previous value was not computed: nobody is
  
  
  
  1.4       +3 -2      
xml-batik/test-resources/org/apache/batik/dom/svg/unitTesting.xml
  
  Index: unitTesting.xml
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/test-resources/org/apache/batik/dom/svg/unitTesting.xml,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- unitTesting.xml   2 May 2002 14:15:03 -0000       1.3
  +++ unitTesting.xml   23 May 2002 09:01:36 -0000      1.4
  @@ -8,7 +8,7 @@
   
   <!-- ========================================================================= -->
   <!-- @author [EMAIL PROTECTED]                                                  -->
  -<!-- @version $Id: unitTesting.xml,v 1.3 2002/05/02 14:15:03 hillion Exp $  -->
  +<!-- @version $Id: unitTesting.xml,v 1.4 2002/05/23 09:01:36 hillion Exp $  -->
   <!-- ========================================================================= -->
   <testSuite id="dom.svg.unitTesting"
              name="org.apache.batik.dom.svg package - Unit Testing">
  @@ -36,10 +36,11 @@
       <!-- ================================================================ -->
       <!-- Self contained tests                                             -->
       <!-- ================================================================ -->
  -    <testGroup id="basic" name="Basic SVG DOM Testing"
  +    <testGroup id="dom.svg.basic" name="Basic SVG DOM Testing"
                  class="org.apache.batik.dom.svg.EcmaScriptSVGDOMTest">
           <test id="lengthTest"/>
           <test id="locatableTest"/>
  +        <test id="presentationAttrRemovalTest"/>
       </testGroup>
   
   </testSuite>
  
  
  
  1.1                  
xml-batik/test-resources/org/apache/batik/dom/svg/presentationAttrRemovalTest.svg
  
  Index: presentationAttrRemovalTest.svg
  ===================================================================
  <?xml version="1.0" standalone="no"?>
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
  "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd";>
  
  <!-- ========================================================================= -->
  <!-- Copyright (C) The Apache Software Foundation. All rights reserved.        -->
  <!--                                                                           -->
  <!-- This software is published under the terms of the Apache Software License -->
  <!-- version 1.1, a copy of which has been included with this distribution in  -->
  <!-- the LICENSE file.                                                         -->
  <!-- ========================================================================= -->
  
  <!-- ========================================================================= -->
  <!-- This test checks that the various RGB values read from the SVGColor       -->
  <!-- interface return accurate values.                                         -->
  <!--                                                                           -->
  <!-- @author [EMAIL PROTECTED]                                                  -->
  <!-- @version $Id: presentationAttrRemovalTest.svg,v 1.1 2002/05/23 09:01:36 hillion 
Exp $            -->
  <!-- ========================================================================= -->
  
  <svg xmlns="http://www.w3.org/2000/svg"; 
       xmlns:xlink="http://www.w3.org/1999/xlink"; 
       xmlns:test="http://xml.apache.org/batik/test";
       width="450" height="500" viewBox="0 0 450 500"
       onload="runTest(evt)">
  
    <test:testResult id="testResult" />
  
    <script type="text/ecmascript"><![CDATA[
       var testNS = "http://xml.apache.org/batik/test";;
  
       function runTest() {
           var result = document.getElementById("testResult");
           result.setAttributeNS(null, "result", "failed");
          
           var r1 = document.getElementById("r1")
           if (r1 == null){
            result.setAttributeNS(null, "errorCode", "cannot.find.test.element");
            var entry = document.createElementNS(testNS, "errorDescriptionEntry");
            entry.setAttributeNS(null, "id", "missing.element.id");
            entry.setAttributeNS(null, "value", "r1");
            result.appendChild(entry);
            return;
           }
  
           var compStyle = document.documentElement.getComputedStyle(r1, null);        
 
           if (compStyle.getPropertyValue("fill") != "rgb(0, 255, 0)") {
             result.setAttributeNS(null, "errorCode", "wrong.computed.style");
             var entry = document.createElementNS(testNS, "errorDescriptionEntry");
             entry.setAttributeNS(null, "value", "invalid.value");
             entry.setAttributeNS(null, "value", compStyle.getPropertyValue("fill"));
             result.appendChild(entry);
             return;
           }
  
           r1.removeAttributeNS(null, "fill");
  
           if (compStyle.getPropertyValue("fill") != "rgb(255, 0, 0)") {
             result.setAttributeNS(null, "errorCode", "wrong.computed.style");
             var entry = document.createElementNS(testNS, "errorDescriptionEntry");
             entry.setAttributeNS(null, "value", "invalid.value");
             entry.setAttributeNS(null, "value", compStyle.getPropertyValue("fill"));
             result.appendChild(entry);
             return;
           }
  
           result.setAttributeNS(null, "result", "passed");
       }
    ]]></script>
  
    <g fill="rgb(255, 0, 0)">
       <rect id="r1" x="0" y="0" width="100" height="100" fill="rgb(0, 255, 0)"/>
       <rect id="r2" x="20" y="20" width="100" height="100"/>
    </g>
  </svg>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to