1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2 "http://www.w3.org/TR/html4/strict.dtd">
5 <title>testing form and xhr utils</title>
6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7 <style type="text/css">
8 @import "../../resources/dojo.css";
10 <script type="text/javascript"
11 src="../../dojo.js" djConfig="isDebug: true"></script>
12 <script type="text/javascript">
13 dojo.require("doh.runner");
14 dojo.addOnLoad(function(){
15 var f1fo = { 'blah': "blah" };
16 var f1foStr = "blah=blah";
17 var f1foJson = '{"blah":"blah"}';
25 textarea: "textarea_value"
27 var f2foStr = "blah=blah&multi=thud&multi=thonk&textarea=textarea_value";
28 var f2foJson = '{"blah":"blah","multi":["thud","thonk"],"textarea":"textarea_value"}';
31 spaces: "string with spaces"
33 var f3foStr = "spaces=string%20with%20spaces&";
34 var f3foJson = '{"spaces":"string with spaces"}';
36 var f5fo = { 'blåh': "bláh" };
37 var f5foStr = "bl%C3%A5h=bl%C3%A1h";
38 var f5foJson = '{"blåh":"bláh"}';
43 function formNodeToObject(t){
44 t.is(f1fo , dojo.formToObject(dojo.byId("f1")));
45 t.is(f5fo , dojo.formToObject(dojo.byId("f5")));
47 function formIdToObject(t){
48 t.is(f1fo , dojo.formToObject("f1"));
49 t.is(f5fo , dojo.formToObject("f5"));
51 function formToObjectWithMultiSelect(t){
52 t.is(f2fo , dojo.formToObject("f2"));
54 function objectToQuery(t){
55 t.is(f1foStr , dojo.objectToQuery(f1fo));
56 t.is(f5foStr , dojo.objectToQuery(f5fo));
58 function objectToQueryArr(t){
59 t.is(f2foStr, dojo.objectToQuery(f2fo));
61 function formToQuery(t){
62 t.is(f1foStr, dojo.formToQuery("f1"));
63 t.is(f5foStr, dojo.formToQuery("f5"));
65 function formToQueryArr(t){
66 t.is(f2foStr, dojo.formToQuery("f2"));
68 function formToJson(t){
69 t.is(f1foJson, dojo.formToJson("f1"));
70 t.is(f5foJson, dojo.formToJson("f5"));
72 function formToJsonArr(t){
73 t.is(f2foJson, dojo.formToJson("f2"));
75 function queryToObject(t){
76 t.is(f1fo , dojo.queryToObject(f1foStr));
77 t.is(f2fo , dojo.queryToObject(f2foStr));
78 t.is(f3fo , dojo.queryToObject(f3foStr));
79 t.is(f5fo , dojo.queryToObject(f5foStr));
81 function textContentHandler(t){
83 dojo._contentHandlers.text({
84 responseText: "foo bar baz "
88 function jsonContentHandler(t){
97 dojo._contentHandlers.json({
98 responseText: dojo.toJson(jsonObj)
102 function jsonCFContentHandler(t){
112 dojo._contentHandlers["json-comment-filtered"]({
113 responseText: dojo.toJson(jsonObj)
118 // did we fail closed?
119 t.is((typeof e), "object");
122 dojo._contentHandlers["json-comment-filtered"]({
123 responseText: "\tblag\n/*"+dojo.toJson(jsonObj)+"*/\n\r\t\r"
127 function jsContentHandler(t){
136 dojo._contentHandlers["javascript"]({
137 responseText: "("+dojo.toJson(jsonObj)+")"
140 t.t(dojo._contentHandlers["javascript"]({
141 responseText: "true;"
144 t.f(dojo._contentHandlers["javascript"]({
145 responseText: "false;"
149 function xmlContentHandler(t){
158 dojo._contentHandlers["xml"]({ responseXML: fauxObj })
162 var d = new doh.Deferred();
163 var td = dojo.xhrGet({
164 url: "xhr.html", // self
166 load: function(text, ioArgs){
167 t.is(4, ioArgs.xhr.readyState);
168 return text; //must return a value here or the parent test deferred fails.
171 t.t(td instanceof dojo.Deferred);
172 td.addCallback(d, "callback");
175 function xhrGet404(t){
176 var d = new doh.Deferred();
178 var td = dojo.xhrGet({
179 url: "xhr_blarg.html", // doesn't exist
180 error: function(err, ioArgs){
181 t.is(404, ioArgs.xhr.status);
182 return err; //must return a value here or the parent test deferred fails.
185 // td.addErrback(d, "callback");
191 function xhrGetContent(t){
192 var d = new doh.Deferred();
193 var td = dojo.xhrGet({
194 url: "xhr.html?color=blue",
196 foo: [ "bar", "baz" ],
201 td.addCallback(function(text){
202 // console.debug(td, td.xhr, td.args);
203 t.is("xhr.html?color=blue&foo=bar&foo=baz&thud=thonk&xyzzy=3",
209 function xhrGetForm(t){
210 var d = new doh.Deferred();
211 var td = dojo.xhrGet({
212 url: "xhr.html", // self
215 td.addCallback(function(xhr){
216 // console.debug(td.args.url);
217 t.is("xhr.html?spaces=string%20with%20spaces", td.ioArgs.url);
222 function xhrGetFormWithContent(t){
223 // ensure that stuff passed via content over-rides
224 // what's specified in the form
225 var d = new doh.Deferred();
226 var td = dojo.xhrGet({
227 url: "xhr.html", // self
229 content: { spaces: "blah" }
231 td.addCallback(function(xhr){
232 // console.debug(td.args.url);
233 t.is("xhr.html?spaces=blah", td.ioArgs.url);
239 var d = new doh.Deferred();
240 var td = dojo.xhrPost({
241 url: "xhr.html?foo=bar", // self
242 content: { color: "blue"},
243 handle: function(res, ioArgs){
244 if((dojo._isDocumentOk(ioArgs.xhr))||
245 (ioArgs.xhr.status == 405)
253 // t.t(td instanceof dojo.Deferred);
256 function xhrPostWithContent(t){
257 var d = new doh.Deferred();
258 var td = dojo.xhrPost({
261 foo: [ "bar", "baz" ],
266 td.addBoth(function(text){
267 t.is("foo=bar&foo=baz&thud=thonk&xyzzy=3",
269 if( (dojo._isDocumentOk(td.ioArgs.xhr))||
270 (td.ioArgs.xhr.status == 405)
279 function xhrPostForm(t){
280 var d = new doh.Deferred();
281 var form = dojo.byId("f4");
283 //Make sure we can send a form to its
284 //action URL. See trac: #2844.
285 var td = dojo.xhrPost({
288 td.addCallback(function(){
291 td.addErrback(function(error){
294 // t.t(td instanceof dojo.Deferred);
297 function rawXhrPost(t){
298 var d = new doh.Deferred();
299 var td = dojo.rawXhrPost({
300 url: "xhr.html", // self
301 postContent: "foo=bar&color=blue&height=average",
302 handle: function(res, ioArgs){
303 if((dojo._isDocumentOk(ioArgs.xhr))||
304 (ioArgs.xhr.status == 405)
312 // t.t(td instanceof dojo.Deferred);
316 var d = new doh.Deferred();
317 var td = dojo.xhrPut({
318 url: "xhrDummyMethod.php?foo=bar", // self
319 content: { color: "blue"},
320 handle: function(res, ioArgs){
321 if((dojo._isDocumentOk(ioArgs.xhr))||
322 (ioArgs.xhr.status == 403)
330 // t.t(td instanceof dojo.Deferred);
333 function xhrDelete(t){
334 var d = new doh.Deferred();
335 var td = dojo.xhrDelete({
336 url: "xhrDummyMethod.php", // self
338 handle: function(res, ioArgs){
339 if((dojo._isDocumentOk(ioArgs.xhr))||
340 (ioArgs.xhr.status == 403)
348 // t.t(td instanceof dojo.Deferred);
351 function xhrCancel(t){
352 var d = new doh.Deferred();
353 var td = dojo.xhrPost({
354 url: "xhrDummyMethod.php", // self
355 handle: function(res, ioArgs){
356 if(res instanceof Error && res.dojoType == "cancel"){
364 // t.t(td instanceof dojo.Deferred);
367 // FIXME: need to add tests for wrapForm
375 <form id="f1" style="border: 1px solid black;">
376 <input type="text" name="blah" value="blah">
377 <input type="text" name="no_value" value="blah" disabled>
378 <input type="button" name="no_value2" value="blah">
380 <form id="f2" style="border: 1px solid black;">
381 <input type="text" name="blah" value="blah">
382 <input type="text" name="no_value" value="blah" disabled>
383 <input type="button" name="no_value2" value="blah">
384 <select type="select" multiple name="multi" size="5">
385 <option value="blah">blah</option>
386 <option value="thud" selected>thud</option>
387 <option value="thonk" selected>thonk</option>
389 <textarea name="textarea">textarea_value</textarea>
391 <form id="f3" style="border: 1px solid black;">
392 <input type="hidden" name="spaces" value="string with spaces">
394 <form id="f4" style="border: 1px solid black;" action="xhrDummyMethod.php">
395 <input type="hidden" name="action" value="Form with input named action">
397 <form id="f5" style="border: 1px solid black;">
398 <input type="text" name="blåh" value="bláh">
399 <input type="text" name="no_value" value="blah" disabled>
400 <input type="button" name="no_value2" value="blah">