Subversion Repositories Applications.papyrus

Rev

Blame | Last modification | View Log | RSS feed

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
<!--
        we use a strict-mode DTD to ensure that the box model is the same for these
        basic tests
-->
<html>
        <head>
                <style type="text/css">
                        @import "../../resources/dojo.css";
                        html, body {
                                padding: 0px;
                                margin: 0px;
                                border: 0px;
                        }

                        #sq100 {
                                background-color: black;
                                color: white;
                                position: absolute;
                                left: 100px;
                                top: 100px;
                                width: 100px;
                                height: 100px;
                                border: 0px;
                                padding: 0px;
                                margin: 0px;
                                overflow: hidden;
                        }

                </style>
                <title>testing dojo.NodeList</title>
                <script type="text/javascript" src="../../dojo.js" 
                        djConfig="isDebug: true, noFirebugLite: true"></script>
                <script type="text/javascript">
                        dojo.require("doh.runner");
                        dojo.addOnLoad(function(){
                                var c = dojo.byId("c1");
                                var t = dojo.byId("t"); 
                                var s = dojo.byId("sq100"); 
                                var fourElementNL = new dojo.NodeList(c, t, c, t);
                                doh.register("t", 
                                        [
                                                // constructor tests
                                                function ctor(){
                                                        var nl = new dojo.NodeList();
                                                        nl.push(c);
                                                        doh.is(1, nl.length);
                                                },
                                                function ctorArgs(){
                                                        var nl = new dojo.NodeList(4);
                                                        nl.push(c);
                                                        doh.is(5, nl.length);
                                                },
                                                function ctorArgs2(){
                                                        var nl = new dojo.NodeList(c, t);
                                                        doh.is(2, nl.length);
                                                        doh.is(c, nl[0]);
                                                        doh.is(t, nl[1]);
                                                },
                                                // iteration and array tests
                                                function forEach(){
                                                        var lastItem;
                                                        var nl = new dojo.NodeList(c, t);
                                                        nl.forEach(function(i){ lastItem = i; });
                                                        doh.is(t, lastItem);

                                                        var r = nl.forEach(function(i, idx, arr){
                                                                doh.t(arr.constructor == dojo.NodeList);
                                                                doh.is(2, arr.length);
                                                        });
                                                        doh.t(r.constructor == dojo.NodeList);
                                                        doh.is(r, nl);
                                                },
                                                
                                                function indexOf(){
                                                        doh.is(0, fourElementNL.indexOf(c));
                                                        doh.is(1, fourElementNL.indexOf(t));
                                                        doh.is(-1, fourElementNL.indexOf(null));
                                                },
                                                
                                                function lastIndexOf(){
                                                        doh.is(2, fourElementNL.lastIndexOf(c));
                                                        doh.is(3, fourElementNL.lastIndexOf(t));
                                                        doh.is(-1, fourElementNL.lastIndexOf(null));
                                                },
                                                
                                                function every(){
                                                        var ctr = 0;
                                                        var ret = fourElementNL.every(function(){
                                                                ctr++;
                                                                return true;
                                                        });
                                                        doh.is(4, ctr);
                                                        doh.t(ret);

                                                        ctr = 0;
                                                        var ret = fourElementNL.every(function(){
                                                                ctr++;
                                                                return false;
                                                        });
                                                        doh.is(1, ctr);
                                                        doh.f(ret);
                                                },
                                                
                                                function some(){
                                                        var ret = fourElementNL.some(function(){
                                                                return true;
                                                        });
                                                        doh.t(ret);

                                                        var ret = fourElementNL.some(function(i){
                                                                return (i.id == "t");
                                                        });
                                                        doh.t(ret);
                                                },
                                                
                                                function map(){
                                                        var ret = fourElementNL.map(function(){
                                                                return true;
                                                        });

                                                        doh.is(ret, [true, true, true, true]);
                                                        var cnt = 0;
                                                        var ret = fourElementNL.map(function(){
                                                                return cnt++;
                                                        });
                                                        // doh.is(ret, [0, 1, 2, 3]);

                                                        doh.t(ret.constructor == dojo.NodeList);

                                                        // make sure that map() returns a NodeList
                                                        var sum = 0;
                                                        fourElementNL.map(function(){ return 2; }).forEach( function(x){ sum += x; } );
                                                        doh.is(sum, 8);
                                                },

                                                function slice(){
                                                        var pnl = new dojo.NodeList(t, t, c);
                                                        doh.is(2, pnl.slice(1).length);
                                                        doh.is(3, pnl.length);
                                                        doh.is(c, pnl.slice(-1)[0]);
                                                        doh.is(2, pnl.slice(-2).length);
                                                },

                                                function splice(){
                                                        var pnl = new dojo.NodeList(t, t, c);
                                                        console.debug(pnl.splice(1));
                                                        /*
                                                        doh.is(2, pnl.splice(1).length);
                                                        doh.is(1, pnl.length);
                                                        pnl = new dojo.NodeList(t, t, c);
                                                        doh.is(c, pnl.splice(-1)[0]);
                                                        doh.is(2, pnl.length);
                                                        pnl = new dojo.NodeList(t, t, c);
                                                        doh.is(2, pnl.splice(-2).length);
                                                        */
                                                },

                                                function spliceInsert(){
                                                        // insert 1
                                                        var pnl = new dojo.NodeList(t, t, c);
                                                        pnl.splice(0, 0, c);
                                                        doh.is(4, pnl.length);
                                                        doh.is(c, pnl[0]);

                                                        // insert multiple
                                                        pnl = new dojo.NodeList(t, t, c);
                                                        pnl.splice(0, 0, c, s);
                                                        doh.is(5, pnl.length);
                                                        doh.is(c, pnl[0]);
                                                        doh.is(s, pnl[1]);
                                                        doh.is(t, pnl[2]);

                                                        // insert multiple at offset
                                                        pnl = new dojo.NodeList(t, t, c);
                                                        pnl.splice(1, 0, c, s);
                                                        doh.is(5, pnl.length);
                                                        doh.is(t, pnl[0]);
                                                        doh.is(c, pnl[1]);
                                                        doh.is(s, pnl[2]);
                                                        doh.is(t, pnl[3]);
                                                },

                                                function spliceDel(){
                                                        // clobbery 1
                                                        var pnl = new dojo.NodeList(c, t, s);
                                                        pnl.splice(0, 1);
                                                        doh.is(2, pnl.length);
                                                        doh.is(t, pnl[0]);

                                                        // clobber multiple
                                                        pnl = new dojo.NodeList(c, t, s);
                                                        pnl.splice(0, 2);
                                                        doh.is(1, pnl.length);
                                                        doh.is(s, pnl[0]);

                                                        // ...at an offset
                                                        pnl = new dojo.NodeList(c, t, s);
                                                        pnl.splice(1, 1);
                                                        doh.is(2, pnl.length);
                                                        doh.is(c, pnl[0]);
                                                        doh.is(s, pnl[1]);

                                                },

                                                function spliceInsertDel(){
                                                        // clobbery 1
                                                        var pnl = new dojo.NodeList(c, t, s);
                                                        pnl.splice(1, 1, s);
                                                        doh.is(3, pnl.length);
                                                        doh.is(dojo.NodeList(c, s, s), pnl);

                                                        pnl = new dojo.NodeList(c, t, s);
                                                        pnl.splice(1, 2, s);
                                                        doh.is(2, pnl.length);
                                                        doh.is(dojo.NodeList(c, s), pnl);
                                                },

                                                // sub-search
                                                function query(){
                                                        var pnl = new dojo.NodeList(t);
                                                        doh.is(c, pnl.query("span")[0]);
                                                        doh.is(t, dojo.query("body").query(":last-child")[0]);
                                                        doh.is(c, dojo.query("body").query(":last-child")[1]);
                                                        doh.is(1, pnl.query().length);
                                                },
                                                
                                                function filter(){
                                                        doh.is(dojo.query("body :first-child").filter(":last-child")[0], c);
                                                        doh.is(1, dojo.query("*").filter(function(n){ return (n.nodeName.toLowerCase() == "span"); }).length);

                                                        var filterObj = {
                                                                filterFunc: function(n){
                                                                        return (n.nodeName.toLowerCase() == "span");
                                                                }
                                                        };
                                                        doh.is(1, dojo.query("*").filter(filterObj.filterFunc).length);
                                                        doh.is(1, dojo.query("*").filter(filterObj.filterFunc, filterObj).length);
                                                },

                                                // layout DOM functions
                                                function coords(){
                                                        var tnl = new dojo.NodeList(dojo.byId('sq100'))
                                                        doh.t(dojo.isArray(tnl));
                                                        doh.is(100, tnl.coords()[0].w);
                                                        doh.is(100, tnl.coords()[0].h);
                                                        doh.is(document.body.getElementsByTagName("*").length, dojo.query("body *").coords().length);
                                                },
                                                
                                                function styleGet(){
                                                        // test getting
                                                        var tnl = new dojo.NodeList(s);
                                                        doh.is(1, tnl.style("opacity")[0]);
                                                        tnl.push(t);
                                                        dojo.style(t, "opacity", 0.5);
                                                        doh.is(0.5, tnl.style("opacity").slice(-1)[0]);
                                                        tnl.style("opacity", 1);
                                                },

                                                function styleSet(){
                                                        // test setting
                                                        var tnl = new dojo.NodeList(s, t);
                                                        tnl.style("opacity", 0.5);
                                                        doh.is(0.5, dojo.style(tnl[0], "opacity"));
                                                        doh.is(0.5, dojo.style(tnl[1], "opacity"));
                                                        // reset
                                                        tnl.style("opacity", 1);
                                                },
                                                
                                                function styles(){
                                                        var tnl = new dojo.NodeList(s, t);
                                                        tnl.styles("opacity", 1);
                                                        doh.is(1, tnl.styles("opacity")[0]);
                                                        dojo.style(t, "opacity", 0.5);
                                                        doh.is(1.0, tnl.styles("opacity")[0]);
                                                        doh.is(0.5, tnl.styles("opacity")[1]);
                                                        // reset things
                                                        tnl.styles("opacity", 1);
                                                },

                                                function concat(){
                                                        var spans = dojo.query("span");
                                                        var divs = dojo.query("div");
                                                        console.debug(spans.concat(divs));
                                                        doh.is(spans.concat(divs).constructor, dojo.NodeList);
                                                        doh.is((divs.length + spans.length), spans.concat(divs).length);
                                                },

                                                function concat2(t){
                                                        var spans = dojo.query("span");
                                                        var divs = dojo.query("div");
                                                        doh.is(spans.concat([]).constructor, dojo.NodeList);
                                                },
                                                
                                                function place(t){
                                                        var ih = "<div><span></span></div><span class='thud'><b>blah</b></span>";
                                                        
                                                        var tn = document.createElement("div");
                                                        tn.innerHTML = ih;
                                                        dojo.body().appendChild(tn);
                                                        var nl = dojo.query("b", tn).place(tn, "first");
                                                        doh.t(nl.constructor == dojo.NodeList);
                                                        doh.is(1, nl.length);
                                                        doh.is("b", nl[0].nodeName.toLowerCase());
                                                        doh.is(tn, nl[0].parentNode);
                                                        doh.is(tn.firstChild, nl[0]);
                                                },
                                                
                                                function orphan(t){
                                                        var ih = "<div><span></span></div><span class='thud'><b>blah</b></span>";
                                                        
                                                        var tn = document.createElement("div");
                                                        tn.innerHTML = ih;
                                                        dojo.body().appendChild(tn);
                                                        var nl = dojo.query("span", tn).orphan();
                                                        doh.t(nl.constructor == dojo.NodeList);

                                                        doh.is(2, nl.length);
                                                        doh.is(1, tn.getElementsByTagName("*").length);

                                                        tn.innerHTML = ih;
                                                        var nl = dojo.query("*", tn).orphan("b");
                                                        doh.is(1, nl.length);
                                                        doh.is("blah", nl[0].innerHTML);
                                                },

                                                /*                                              
                                                // FIXME
                                                function adopt(t){
                                                },
                                                
                                                function addContent(t){
                                                },
                                                */
                                                
                                                function connect(t){
                                                        var ih = "<div><span></span></div><span class='thud'><button>blah</button></span>";
                                                        
                                                        var tn = document.createElement("div");
                                                        tn.innerHTML = ih;
                                                        dojo.body().appendChild(tn);

                                                        var ctr = 0;
                                                        var nl = dojo.query("button", tn).connect("onclick", function(){
                                                                ctr++;
                                                        });
                                                        nl[0].click();
                                                        doh.is(1, ctr);
                                                        nl[0].click();
                                                        nl[0].click();
                                                        doh.is(3, ctr);
                                                }
                                        ]
                                );
                                doh.run();
                        });
                </script>
        </head>
        <body>
                <h1>testing dojo.NodeList</h1>
                <div id="sq100">
                        100px square, abs
                </div>
                <div id="t">
                        <span id="c1">c1</span>
                </div>
        </body>
</html>