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">
<html>
        <head>
                <title>testing form and xhr utils</title>
                <style type="text/css">
                        @import "../../resources/dojo.css";
                </style>
                <script type="text/javascript" 
                        src="../../dojo.js" djConfig="isDebug: true"></script>
                <script type="text/javascript">
                        dojo.require("doh.runner");
                        dojo.addOnLoad(function(){
                                var f1fo = { blah: "blah" };
                                var f1foStr = "blah=blah";
                                var f1foJson = '{"blah": "blah"}';

                                var f2fo = { 
                                        blah: "blah",
                                        multi: [
                                                "thud",
                                                "thonk"
                                        ],
                                        textarea: "textarea_value"
                                };
                                var f2foStr = "blah=blah&multi=thud&multi=thonk&textarea=textarea_value";
                                var f2foJson = '{"blah": "blah", "multi": ["thud", "thonk"], "textarea": "textarea_value"}';

                                var f3fo = { 
                                        spaces: "string with spaces"
                                };
                                var f3foStr = "spaces=string%20with%20spaces&";
                                var f3foJson = '{"spaces": "string with spaces"}';

                                doh.register("t", 
                                        [
                                                function formNodeToObject(t){
                                                        t.is(f1fo , dojo.formToObject(dojo.byId("f1")));
                                                },
                                                function formIdToObject(t){
                                                        t.is(f1fo , dojo.formToObject("f1"));
                                                },
                                                function formToObjectWithMultiSelect(t){
                                                        t.is(f2fo , dojo.formToObject("f2"));
                                                },
                                                function objectToQuery(t){
                                                        t.is(f1foStr , dojo.objectToQuery(f1fo));
                                                },
                                                function objectToQueryArr(t){
                                                        t.is(f2foStr, dojo.objectToQuery(f2fo));
                                                },
                                                function formToQuery(t){
                                                        t.is(f1foStr, dojo.formToQuery("f1"));
                                                },
                                                function formToQueryArr(t){
                                                        t.is(f2foStr, dojo.formToQuery("f2"));
                                                },
                                                function formToJson(t){
                                                        t.is(f1foJson, dojo.formToJson("f1"));
                                                },
                                                function formToJsonArr(t){
                                                        t.is(f2foJson, dojo.formToJson("f2"));
                                                },
                                                function queryToObject(t){
                                                        t.is(f1fo , dojo.queryToObject(f1foStr));
                                                        t.is(f2fo , dojo.queryToObject(f2foStr));
                                                        t.is(f3fo , dojo.queryToObject(f3foStr));
                                                },
                                                function textContentHandler(t){
                                                        t.is("foo bar baz ", 
                                                                dojo._contentHandlers.text({
                                                                        responseText: "foo bar baz "
                                                                })
                                                        );
                                                },
                                                function jsonContentHandler(t){
                                                        var jsonObj = {
                                                                foo: "bar",
                                                                baz: [
                                                                        { thonk: "blarg" },
                                                                        "xyzzy!"
                                                                ]
                                                        };
                                                        t.is(jsonObj, 
                                                                dojo._contentHandlers.json({
                                                                        responseText: dojo.toJson(jsonObj)
                                                                })
                                                        );
                                                },
                                                function jsonCFContentHandler(t){
                                                        var jsonObj = {
                                                                foo: "bar",
                                                                baz: [
                                                                        { thonk: "blarg" },
                                                                        "xyzzy!"
                                                                ]
                                                        };
                                                        var e;
                                                        try{
                                                                dojo._contentHandlers["json-comment-filtered"]({
                                                                        responseText: dojo.toJson(jsonObj)
                                                                })
                                                        }catch(ex){
                                                                e = ex;
                                                        }finally{
                                                                // did we fail closed?
                                                                t.is((typeof e), "object");
                                                        }
                                                        t.is(jsonObj,
                                                                dojo._contentHandlers["json-comment-filtered"]({
                                                                        responseText: "\tblag\n/*"+dojo.toJson(jsonObj)+"*/\n\r\t\r"
                                                                })
                                                        );
                                                },
                                                function jsContentHandler(t){
                                                        var jsonObj = {
                                                                foo: "bar",
                                                                baz: [
                                                                        { thonk: "blarg" },
                                                                        "xyzzy!"
                                                                ]
                                                        };
                                                        t.is(jsonObj,
                                                                dojo._contentHandlers["javascript"]({
                                                                        responseText: "("+dojo.toJson(jsonObj)+")"
                                                                })
                                                        );
                                                        t.t(dojo._contentHandlers["javascript"]({
                                                                        responseText: "true;"
                                                                })
                                                        );
                                                        t.f(dojo._contentHandlers["javascript"]({
                                                                        responseText: "false;"
                                                                })
                                                        );
                                                },
                                                function xmlContentHandler(t){
                                                        var fauxObj = {
                                                                foo: "bar",
                                                                baz: [
                                                                        { thonk: "blarg" },
                                                                        "xyzzy!"
                                                                ]
                                                        };
                                                        t.is(fauxObj,
                                                                dojo._contentHandlers["xml"]({ responseXML: fauxObj })
                                                        );
                                                },
                                                function xhrGet(t){
                                                        var d = new doh.Deferred();
                                                        var td = dojo.xhrGet({
                                                                url: "xhr.html", // self
                                                                preventCache: true,
                                                                load: function(text, ioArgs){
                                                                        t.is(4, ioArgs.xhr.readyState);
                                                                        return text; //must return a value here or the parent test deferred fails.
                                                                }
                                                        });
                                                        t.t(td instanceof dojo.Deferred);
                                                        td.addCallback(d, "callback");
                                                        return d;
                                                },
                                                function xhrGet404(t){
                                                        var d = new doh.Deferred();
                                                        try{
                                                                var td = dojo.xhrGet({
                                                                        url: "xhr_blarg.html", // doesn't exist
                                                                        error: function(err, ioArgs){
                                                                                t.is(404, ioArgs.xhr.status);
                                                                                return err; //must return a value here or the parent test deferred fails.
                                                                        }
                                                                });
                                                                // td.addErrback(d, "callback");
                                                        }catch(e){
                                                                d.callback(true);
                                                        }
                                                        // return d;
                                                },
                                                function xhrGetContent(t){
                                                        var d = new doh.Deferred();
                                                        var td = dojo.xhrGet({
                                                                url: "xhr.html?color=blue",
                                                                content: {
                                                                        foo: [ "bar", "baz" ],
                                                                        thud: "thonk",
                                                                        xyzzy: 3
                                                                }
                                                        });
                                                        td.addCallback(function(text){
                                                                // console.debug(td, td.xhr, td.args);
                                                                t.is("xhr.html?color=blue&foo=bar&foo=baz&thud=thonk&xyzzy=3", 
                                                                                td.ioArgs.url);
                                                                d.callback(true);
                                                        });
                                                        return d;
                                                },
                                                function xhrGetForm(t){
                                                        var d = new doh.Deferred();
                                                        var td = dojo.xhrGet({
                                                                url: "xhr.html", // self
                                                                form: "f3"
                                                        });
                                                        td.addCallback(function(xhr){
                                                                // console.debug(td.args.url);
                                                                t.is("xhr.html?spaces=string%20with%20spaces", td.ioArgs.url);
                                                                d.callback(true);
                                                        });
                                                        return d;
                                                },
                                                function xhrGetFormWithContent(t){
                                                        // ensure that stuff passed via content over-rides
                                                        // what's specified in the form
                                                        var d = new doh.Deferred();
                                                        var td = dojo.xhrGet({
                                                                url: "xhr.html", // self
                                                                form: "f3",
                                                                content: { spaces: "blah" }
                                                        });
                                                        td.addCallback(function(xhr){
                                                                // console.debug(td.args.url);
                                                                t.is("xhr.html?spaces=blah", td.ioArgs.url);
                                                                d.callback(true);
                                                        });
                                                        return d;
                                                },
                                                function xhrPost(t){
                                                        var d = new doh.Deferred();
                                                        var td = dojo.xhrPost({
                                                                url: "xhr.html?foo=bar", // self
                                                                content: { color: "blue"},
                                                                handle: function(res, ioArgs){
                                                                        if((dojo._isDocumentOk(ioArgs.xhr))||
                                                                                (ioArgs.xhr.status == 405)
                                                                        ){
                                                                                d.callback(true);
                                                                        }else{
                                                                                d.errback(false);
                                                                        }                                                               
                                                                }
                                                        });
                                                        // t.t(td instanceof dojo.Deferred);
                                                        return d;
                                                },
                                                function xhrPostWithContent(t){
                                                        var d = new doh.Deferred();
                                                        var td = dojo.xhrPost({
                                                                url: "xhr.html",
                                                                content: {
                                                                        foo: [ "bar", "baz" ],
                                                                        thud: "thonk",
                                                                        xyzzy: 3
                                                                }
                                                        });
                                                        td.addBoth(function(text){
                                                                t.is("foo=bar&foo=baz&thud=thonk&xyzzy=3", 
                                                                                td.ioArgs.query);
                                                                if(     (dojo._isDocumentOk(td.ioArgs.xhr))||
                                                                        (td.ioArgs.xhr.status == 405)
                                                                ){
                                                                        d.callback(true);
                                                                }else{
                                                                        d.errback(false);
                                                                }
                                                        });
                                                        return d;
                                                },
                                                function xhrPostForm(t){
                                                        var d = new doh.Deferred();
                                                        var form = dojo.byId("f4");

                                                        //Make sure we can send a form to its 
                                                        //action URL.   See trac: #2844.
                                                        var td = dojo.xhrPost({
                                                                form: form
                                                        });
                                                        td.addCallback(function(){
                                                                d.callback(true);
                                                        });
                                                        td.addErrback(function(error){
                                                                d.callback(error);
                                                        });
                                                        // t.t(td instanceof dojo.Deferred);
                                                        return d;
                                                },
                                                function rawXhrPost(t){
                                                        var d = new doh.Deferred();
                                                        var td = dojo.rawXhrPost({
                                                                url: "xhr.html", // self
                                                                postContent: "foo=bar&color=blue&height=average",
                                                                handle: function(res, ioArgs){
                                                                        if((dojo._isDocumentOk(ioArgs.xhr))||
                                                                                (ioArgs.xhr.status == 405)
                                                                        ){
                                                                                d.callback(true);
                                                                        }else{
                                                                                d.errback(false);
                                                                        }                                                               
                                                                }
                                                        });
                                                        // t.t(td instanceof dojo.Deferred);
                                                        return d;
                                                },
                                                function xhrPut(t){
                                                        var d = new doh.Deferred();
                                                        var td = dojo.xhrPut({
                                                                url: "xhrDummyMethod.php?foo=bar", // self
                                                                content: { color: "blue"},
                                                                handle: function(res, ioArgs){
                                                                        if((dojo._isDocumentOk(ioArgs.xhr))||
                                                                                (ioArgs.xhr.status == 403)
                                                                        ){
                                                                                d.callback(true);
                                                                        }else{
                                                                                d.errback(false);
                                                                        }                                                               
                                                                }
                                                        });
                                                        // t.t(td instanceof dojo.Deferred);
                                                        return d;
                                                },
                                                function xhrDelete(t){
                                                        var d = new doh.Deferred();
                                                        var td = dojo.xhrDelete({
                                                                url: "xhrDummyMethod.php", // self
                                                                preventCache: true,
                                                                handle: function(res, ioArgs){
                                                                        if((dojo._isDocumentOk(ioArgs.xhr))||
                                                                                (ioArgs.xhr.status == 403)
                                                                        ){
                                                                                d.callback(true);
                                                                        }else{
                                                                                d.errback(false);
                                                                        }                                                               
                                                                }
                                                        });
                                                        // t.t(td instanceof dojo.Deferred);
                                                        return d;
                                                },
                                                function xhrCancel(t){
                                                        var d = new doh.Deferred();
                                                        var td = dojo.xhrPost({
                                                                url: "xhrDummyMethod.php", // self
                                                                handle: function(res, ioArgs){
                                                                        if(res instanceof Error && res.dojoType == "cancel"){
                                                                                d.callback(true);
                                                                        }else{
                                                                                d.errback(false);
                                                                        }                                                               
                                                                }
                                                        });
                                                        td.cancel();
                                                        // t.t(td instanceof dojo.Deferred);
                                                        return d;
                                                }
                                                // FIXME: need to add tests for wrapForm
                                        ]
                                );
                                doh.run();
                        });
                </script>
        </head>
        <body>
                <form id="f1" style="border: 1px solid black;">
                        <input type="text" name="blah" value="blah">
                        <input type="text" name="no_value" value="blah" disabled>
                        <input type="button" name="no_value2" value="blah">
                </form>
                <form id="f2" style="border: 1px solid black;">
                        <input type="text" name="blah" value="blah">
                        <input type="text" name="no_value" value="blah" disabled>
                        <input type="button" name="no_value2" value="blah">
                        <select type="select" multiple name="multi" size="5">
                                <option value="blah">blah</option>
                                <option value="thud" selected>thud</option>
                                <option value="thonk" selected>thonk</option>
                        </select>
                        <textarea name="textarea">textarea_value</textarea>
                </form>
                <form id="f3" style="border: 1px solid black;">
                        <input type="hidden" name="spaces" value="string with spaces">
                </form>
                <form id="f4" style="border: 1px solid black;" action="xhrDummyMethod.php">
                        <input type="hidden" name="action" value="Form with input named action">
                </form>
        </body>
</html>