[Laszlo-dev] Re: For your review: Fix for lpp-737: XPath won't match attribute values with / in them

Jim Grandy jgrandy at laszlosystems.com
Mon Jan 23 12:12:18 PST 2006


This looks like a great candidate for a unit test...

...so I wrote one, and found a bug: you don't handle escaped quotes  
correctly.

Approved if you fix this bug and also include a unit test against  
LzParsedPath.as.

<canvas debug="true">
     <include href="lzunit"/>

     <script><![CDATA[
         function compareArrays(a1, a2)
         {
             Debug.format("%w, %w\n", a1, a2);
             // assumes arrays are shallow
             if (a1.length != a2.length)
                 return false;
             for (var i = 0; i < a1.length; i++)
             {
                 if (a1[i] != a2[i])
                     return false;
             }
             return true;
         }

         function splitSlashes0(rest)
         {
             return rest.split( "/" );
         }

         function splitSlashes1(rest)
         {
             var nodes = [];
             var currnode = '';
             var instring = false;
             for (var i = 0; i < rest.length; i++) {
                 var c = rest.charAt(i);
                 if (instring == false && c == "/") {
                     // only count slashes as new nodes if we're not  
inside a string
                     // literal

                     nodes.push(currnode);
                     currnode = '';
                     continue;
                 } else if (c == "'") {
                     instring = instring ? false : true;
                 }
                 currnode += c;
             }
             nodes.push(currnode);
             return nodes;
         }
     ]]></script>

     <TestSuite>

         <TestCase>

             <method name="exerciseOne" args="f">
                 assertTrue(compareArrays(["one"], f("one")));
                 assertTrue(compareArrays(["one", "two"], f("one/ 
two")));
                 assertTrue(compareArrays(["one", "'two/three'"], f 
("one/'two/three'")));
                 assertTrue(compareArrays(["one", "'two/three 
\'four'"], f("one/'two/three\'four'")));
                 assertTrue(compareArrays(["one", "'two/three\'four/ 
five'"], f("one/'two/three\'four/five'")));
             </method>

             <method name="testBasic0">
                 exerciseOne(splitSlashes0);
             </method>
             <method name="testBasic1">
                 exerciseOne(splitSlashes1);
             </method>
         </TestCase>

     </TestSuite>

</canvas>

On Jan 23, 2006, at 11:07 AM, Max Carlson wrote:

> Change 37505 by mcarlson at max-thinkpad on 2006/01/23 11:04:12 *pending*
>
>         Summary: Fix for lpp-737: XPath won't match attribute  
> values with / in t
> hem
>
>         New Features:
>
>         Bugs Fixed: lpp-737
>
>         Technical Reviewer:  (pending)
>         QA Reviewer:  (pending)
>         Doc Reviewer:  (pending)
>
>         Documentation:
>
>         Release Notes:
>
>         Details:
>
>         Tests:
>
> Affected files ...
>
> ... //depot/lps-dev/WEB-INF/lps/lfc/data/LzParsedPath.as#5 edit
> <changeset-37505.zip>



More information about the Laszlo-dev mailing list