added more exhaustive xml test cases
authorMatthias Kramm <kramm@quiss.org>
Thu, 5 Feb 2009 16:44:07 +0000 (17:44 +0100)
committerMatthias Kramm <kramm@quiss.org>
Thu, 5 Feb 2009 16:44:07 +0000 (17:44 +0100)
lib/as3/ok/xml.as [new file with mode: 0644]
lib/as3/ok/xml_ns.as [new file with mode: 0644]

diff --git a/lib/as3/ok/xml.as b/lib/as3/ok/xml.as
new file mode 100644 (file)
index 0000000..da948ed
--- /dev/null
@@ -0,0 +1,162 @@
+package {
+    import flash.display.MovieClip
+    public class Main extends flash.display.MovieClip {
+        var count:int = 1;
+        var num:int = 29;
+        function assert(b:Boolean) {
+            if(b) {
+                trace("ok "+count+"/"+num);
+            } else {
+                trace("error "+count+"/"+num);
+            }
+            count = count + 1
+        }
+        function Main() {
+            /* ------ basic sanity tests ------ */
+            var x:XML = <test>}</test>;
+
+            <test>This XML doesn't do anything!
+            </test>
+            ;
+            /Neither does this regexp!/
+            ;
+            
+            var y = 3;
+            <test>test</test>
+
+            assert(true);
+
+            var f2 = function(s:String) {assert(true);} 
+            var f3 = function(s:String) {assert(true);} 
+
+            f2(<![CDATA[ bla bla bla /* package String uint 
+             int finally try for ]]>);
+            
+            //f3(<![CDATA[ ]]]>);
+
+            /* ----- xml objects ----- */
+    
+            var x1:XML = <tree name="test">
+                            <branch bname="t1">Branch 1</branch>
+                            <branch bname="t2">Branch 2</branch>
+                        </tree>
+
+            assert(typeof(x1)=="xml");
+
+            /* ------ access --------- */
+
+            assert(x1. * == x1.children())
+            assert((x1.*)[0].text() == "Branch 1")
+            assert(x1.branch[0] == x1.child("branch")[0])
+            assert((x1.*.@bname)[0] == "t1");
+
+            assert(x1.@name.parent() == x1);
+            assert(x1.@["name"].parent() == x1);
+            var s1= <t x="a" y="b" z="c" />
+            assert(s1.@* == s1.attributes())
+
+            /* ------ comments ------- */
+
+            var x3 = <x><!-- </x>xxxx -->Test</x>;
+            assert(x3.toString() == "Test")
+
+            /* ------ descendants ---- */
+
+            var x4 = <l1>
+                        <l2>
+                            <l3>v1</l3>
+                            <x3>e1</x3>
+                        </l2>
+                        <r2>
+                            <x3>e2</x3>
+                            <l3>v2</l3>
+                        </r2>
+                     </l1>
+            assert(x4..l3[0] == x4.l2.l3)
+
+            var s:String="";
+            for each(var c:XML in x4..l3) {
+                s += c.toString();
+            }
+            assert(s=="v1v2");
+           
+            s="";
+            for each(var e:XML in x1..@bname) {
+                s += e.toString();
+            }
+            assert(s=="t1t2");
+            
+            s="";
+            for each(var e in x1..@*) {
+                s += e.toString();
+            }
+            assert(s=="testt1t2");
+
+            /* ----- filtering ----- */
+            
+            var x5:XML = <participants>
+                            <person gender="m" id="1">John Doe</person>
+                            <person gender="f" id="2">Ellen Doe</person>
+                            <person gender="m">John Smith</person>
+                            <person gender="f" id="4">Jane Smith</person>
+                        </participants>
+
+            var l:XMLList = x5.*;
+            var l2:XMLList = l.(@gender=="m");
+            assert(l2.length()==2 && l2[0].text()=="John Doe" && l2[1].text()=="John Smith");
+            l2 = x5.*.(@gender=="f").(hasOwnProperty("@id") && @id>2)
+            assert(l2.text() =="Jane Smith");
+            
+            /* ----- replacement ----- */
+
+            var x10:XML = <a><b a="x"><c/></b></a>
+            var x11:XML = <a><b a="y"><d/></b></a>
+            
+            assert(x10 != x11);
+            x11.b.d = <c/>;
+            assert(x10 != x11);
+            x11.b.@a = "x";
+            assert(x10 == x11);
+
+            var x12:XML = <x><a/></x>;
+            x12.a += <b/>;
+
+            assert(x12 == <x><a/><b/></x>);
+
+            x12.* = <c/>;
+            assert(x12 == <x><c/></x>);
+            x12.* = <b/>;
+
+            /* ----- deletion ----- */
+
+            delete x12.a
+            assert(x12 == <x><b/></x>);
+            delete x12.*
+            assert(x12 == <x/>);
+            delete x10.b.c
+            delete x10.b.@a
+            assert(x10 == <a><b/></a>);
+            delete x11.b.c
+            delete x11.b.@*
+            assert(x10 == x11);
+
+            /* ----- special characters ----- */
+
+            var x20 = <x> >&</x>;
+            assert(x20.toString() == ">&");
+            var x21 = <x a="&quot;&lt;&gt;"/>;
+            assert(x21.@a == "\"<>");
+            var x22 = <x/>;
+
+            /* ----- substitution ----- */
+
+            var x2:XML = <{"tree"} {"na"+"me"}="test">
+                             <{{3: "branch"}[3]} bname={"t1"}>{"Branch" + " " + 1}</{"branch"}>
+                            <branch bname="t2">Branch 2</branch>
+                        </tree>
+            assert(x1 == x2);
+
+            trace("[exit]");
+        }
+    }
+}
diff --git a/lib/as3/ok/xml_ns.as b/lib/as3/ok/xml_ns.as
new file mode 100644 (file)
index 0000000..e798d3a
--- /dev/null
@@ -0,0 +1,47 @@
+package {
+    import flash.display.MovieClip
+    public class Main extends flash.display.MovieClip {
+        var count:int = 1;
+        var num:int = 9;
+        function assert(b:Boolean) {
+            if(b) {
+                trace("ok "+count+"/"+num);
+            } else {
+                trace("error "+count+"/"+num);
+            }
+            count = count + 1
+        }
+        function Main() {
+            var x:XML = 
+                <tests xmlns:test1="http://www.quiss.org/test1/"
+                       xmlns:test2="http://www.quiss.org/test2/"
+                       xmlns:test3="http://www.quiss.org/test3/">
+                    <test1:test>P1</test1:test>
+                    <test2:test>P2</test2:test>
+                    <test3:test a="b">P3</test3:test>
+                </tests>
+
+            var top:Namespace = x.namespace();
+            var ns1:Namespace = x.namespace("test1");
+            var ns2:Namespace = x.namespace("test2");
+            var ns3:Namespace = x.namespace("test3");
+            assert(ns1 == new Namespace("http://www.quiss.org/test1/"));
+            assert(ns2 == new Namespace("http://www.quiss.org/test2/"));
+            assert(x.ns1::test == "P1");
+            assert(x.ns2::test == "P2");
+
+            assert(x.ns1::* == "P1")
+
+            default xml namespace = ns2;
+            assert(x.test == "P2")
+
+            assert(x.*::* == (x.ns1::*+x.ns2::*+x.ns3::*))
+            assert(x..@*::* == "b");
+
+            x.ns2::test = x.ns3::test;
+            assert(x..@a.toString() == "bb");
+
+            trace("[exit]");
+        }
+    }
+}