X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=test%2Funit%2Fajax.js;h=beec2c537655639748e463e3cb788aaa077baf70;hb=3e0cc815043c2425819743e907a0ce263a7ce164;hp=87430c93a28cede36a018269531875d5bac5a927;hpb=ab3ba4a81252c4357a7aab5f24d765d41d47986e;p=jquery.git diff --git a/test/unit/ajax.js b/test/unit/ajax.js index 87430c9..beec2c5 100644 --- a/test/unit/ajax.js +++ b/test/unit/ajax.js @@ -71,9 +71,9 @@ test("jQuery.ajax() - success callbacks - (url, options) syntax", function() { }); test("jQuery.ajax() - success/error callbacks (remote)", function() { - + var supports = jQuery.support.cors; - + expect( supports ? 9 : 6 ); jQuery.ajaxSetup({ timeout: 0 }); @@ -221,7 +221,7 @@ test("jQuery.ajax() - success callbacks (order)", function() { jQuery.ajaxSetup({ timeout: 0 }); stop(); - + var testString = ""; setTimeout(function(){ @@ -280,33 +280,43 @@ test("jQuery.ajax() - error callbacks", function() { test(".ajax() - headers" , function() { - // No multiple line headers in IE - expect( jQuery.browser.msie ? 2 : 4 ); - + expect( 2 ); + stop(); - - jQuery.ajax({ - url: url("data/headers.php"), - success: function( _1 , _2 , xhr ){ - ok(true, "success"); - equals( xhr.getResponseHeader( "Single-Line" ) , "Hello World" , "Single line header" ); - // No multiple line headers in IE - if ( ! jQuery.browser.msie ) { - // Each browser has its own unique way to deal with spaces after line breaks - // in multiple line headers, so we use regular expressions - ok( /^Hello\s+World$/.test( xhr.getResponseHeader( "Multiple-Line" ) ) , "Multiple line" ); - ok( /^Hello\s+Beautiful\s+World$/.test( xhr.getResponseHeader( "Multiple-Multiple-Line" ) ) , "Multiple multiple line" ); + + var requestHeaders = { + siMPle: "value", + "SometHing-elsE": "other value", + OthEr: "something else" + }, + list = [], + i; + + for( i in requestHeaders ) { + list.push( i ); + } + + jQuery.ajax(url("data/headers.php?keys="+list.join( "_" ) ), { + headers: requestHeaders, + success: function( data , _ , xhr ) { + var tmp = []; + for ( i in requestHeaders ) { + tmp.push( i , ": " , requestHeaders[ i ] , "\n" ); } + tmp = tmp.join( "" ); + + equals( data , tmp , "Headers were sent" ); + equals( xhr.getResponseHeader( "Sample-Header" ) , "Hello World" , "Sample header received" ); start(); }, error: function(){ ok(false, "error"); } }); - + }); test(".ajax() - hash", function() { expect(3); - + jQuery.ajax({ url: "data/name.html#foo", beforeSend: function( xhr, settings ) { @@ -314,7 +324,7 @@ test(".ajax() - hash", function() { return false; } }); - + jQuery.ajax({ url: "data/name.html?abc#foo", beforeSend: function( xhr, settings ) { @@ -322,7 +332,7 @@ test(".ajax() - hash", function() { return false; } }); - + jQuery.ajax({ url: "data/name.html?abc#foo", data: { "test": 123 }, @@ -336,7 +346,7 @@ test(".ajax() - hash", function() { test(".ajax() - 304", function() { expect( 1 ); stop(); - + jQuery.ajax({ url: url("data/notmodified.php"), success: function(){ ok(true, "304 ok"); }, @@ -405,7 +415,7 @@ test("jQuery.ajax() - readyState (success)", function() { jQuery.ajaxSetup({ timeout: 0 }); stop(); - + var control = ""; setTimeout(function(){ @@ -416,7 +426,7 @@ test("jQuery.ajax() - readyState (success)", function() { control += xhr.readyState; } }, - complete: function(){ + complete: function(){ setTimeout( function() { equals( control , "1234" , "onreadystatechange was properly called" ); }, 13 ); @@ -432,7 +442,7 @@ test("jQuery.ajax() - readyState (abort)", function() { jQuery.ajaxSetup({ timeout: 0 }); stop(); - + var control = ""; setTimeout(function(){ @@ -446,7 +456,7 @@ test("jQuery.ajax() - readyState (abort)", function() { control += xhr.readyState; } }, - complete: function( xhr ){ + complete: function( xhr ){ setTimeout( function() { equals( control , "14" , "onreadystatechange was properly called" ); equals( xhr.readyState, 0 , "readyState is 0" ); @@ -463,9 +473,9 @@ test("jQuery.xhr() - reuse", function() { jQuery.ajaxSetup({ timeout: 0 }); stop(); - + var number = 0; - + setTimeout(function(){ jQuery('#foo').ajaxStart(function(){ ok( true, "ajaxStart" ); @@ -489,7 +499,7 @@ test("jQuery.xhr() - reuse", function() { success: function( _1 , _2 , xhr ){ ok(true, "success (1)"); xhr.complete(function() { - ok(true, "complete (1bis)"); + ok(true, "complete (1bis)"); }); xhr.open( "GET", url("data/name.html") ); xhr.success( function(){ ok(true, "beforeSend (2)"); } ) @@ -511,7 +521,7 @@ test("jQuery.xhr() - early binding", function() { jQuery.ajaxSetup({ timeout: 0 }); stop(); - + jQuery.xhr() .success( function(){ ok(true, "success"); } ) .error( function(){ ok(false, "error"); } ) @@ -521,20 +531,20 @@ test("jQuery.xhr() - early binding", function() { }); test("jQuery.xhr() - get native implementation", function() { - + var xhr = jQuery.xhr(true); - + ok( xhr.readyState !== undefined , "implements XMLHttpRequest" ); ok( ! jQuery.isFunction( xhr.success ) , "is not jQuery's abstraction" ); - + }); test("Ajax events with context", function() { expect(14); - + stop(); var context = document.createElement("div"); - + function event(e){ equals( this, context, e.type ); } @@ -550,7 +560,7 @@ test("Ajax events with context", function() { equals( typeof this.url, "string", "context is settings on callback " + msg ); }; } - + jQuery('#foo').add(context) .ajaxSend(event) .ajaxComplete(event) @@ -711,7 +721,7 @@ test("jQuery.ajax - HEAD requests", function() { success: function(data, status, xhr){ var h = xhr.getAllResponseHeaders(); ok( /Date/i.test(h), 'No Date in HEAD response' ); - + jQuery.ajax({ url: url("data/name.html"), data: { whip_it: "good" }, @@ -853,9 +863,9 @@ test("serialize()", function() { test("jQuery.param()", function() { expect(22); - + equals( !jQuery.ajaxSettings.traditional, true, "traditional flag, falsy by default" ); - + var params = {foo:"bar", baz:42, quux:"All your base are belong to us"}; equals( jQuery.param(params), "foo=bar&baz=42&quux=All+your+base+are+belong+to+us", "simple" ); @@ -870,13 +880,13 @@ test("jQuery.param()", function() { params = {foo: { bar: 'baz', beep: 42, quux: 'All your base are belong to us' } }; equals( jQuery.param(params), "foo%5Bbar%5D=baz&foo%5Bbeep%5D=42&foo%5Bquux%5D=All+your+base+are+belong+to+us", "even more arrays" ); - + params = { a:[1,2], b:{ c:3, d:[4,5], e:{ x:[6], y:7, z:[8,9] }, f:true, g:false, h:undefined }, i:[10,11], j:true, k:false, l:[undefined,0], m:"cowboy hat?" }; equals( decodeURIComponent( jQuery.param(params) ), "a[]=1&a[]=2&b[c]=3&b[d][]=4&b[d][]=5&b[e][x][]=6&b[e][y]=7&b[e][z][]=8&b[e][z][]=9&b[f]=true&b[g]=false&b[h]=undefined&i[]=10&i[]=11&j=true&k=false&l[]=undefined&l[]=0&m=cowboy+hat?", "huge structure" ); - + params = { a: [ 0, [ 1, 2 ], [ 3, [ 4, 5 ], [ 6 ] ], { b: [ 7, [ 8, 9 ], [ { c: 10, d: 11 } ], [ [ 12 ] ], [ [ [ 13 ] ] ], { e: { f: { g: [ 14, [ 15 ] ] } } }, 16 ] }, 17 ] }; equals( decodeURIComponent( jQuery.param(params) ), "a[]=0&a[1][]=1&a[1][]=2&a[2][]=3&a[2][1][]=4&a[2][1][]=5&a[2][2][]=6&a[3][b][]=7&a[3][b][1][]=8&a[3][b][1][]=9&a[3][b][2][0][c]=10&a[3][b][2][0][d]=11&a[3][b][3][0][]=12&a[3][b][4][0][0][]=13&a[3][b][5][e][f][g][]=14&a[3][b][5][e][f][g][1][]=15&a[3][b][]=16&a[]=17", "nested arrays" ); - + params = { a:[1,2], b:{ c:3, d:[4,5], e:{ x:[6], y:7, z:[8,9] }, f:true, g:false, h:undefined }, i:[10,11], j:true, k:false, l:[undefined,0], m:"cowboy hat?" }; equals( jQuery.param(params,true), "a=1&a=2&b=%5Bobject+Object%5D&i=10&i=11&j=true&k=false&l=undefined&l=0&m=cowboy+hat%3F", "huge structure, forced traditional" ); @@ -888,7 +898,7 @@ test("jQuery.param()", function() { equals( jQuery.param({"foo": {"bar": {}} }), "foo%5Bbar%5D=", "Empty object param" ); jQuery.ajaxSetup({ traditional: true }); - + var params = {foo:"bar", baz:42, quux:"All your base are belong to us"}; equals( jQuery.param(params), "foo=bar&baz=42&quux=All+your+base+are+belong+to+us", "simple" ); @@ -903,16 +913,16 @@ test("jQuery.param()", function() { params = {"foo[bar]":"baz", "foo[beep]":42, "foo[quux]":"All your base are belong to us"}; equals( jQuery.param(params), "foo%5Bbar%5D=baz&foo%5Bbeep%5D=42&foo%5Bquux%5D=All+your+base+are+belong+to+us", "even more arrays" ); - + params = { a:[1,2], b:{ c:3, d:[4,5], e:{ x:[6], y:7, z:[8,9] }, f:true, g:false, h:undefined }, i:[10,11], j:true, k:false, l:[undefined,0], m:"cowboy hat?" }; equals( jQuery.param(params), "a=1&a=2&b=%5Bobject+Object%5D&i=10&i=11&j=true&k=false&l=undefined&l=0&m=cowboy+hat%3F", "huge structure" ); - + params = { a: [ 0, [ 1, 2 ], [ 3, [ 4, 5 ], [ 6 ] ], { b: [ 7, [ 8, 9 ], [ { c: 10, d: 11 } ], [ [ 12 ] ], [ [ [ 13 ] ] ], { e: { f: { g: [ 14, [ 15 ] ] } } }, 16 ] }, 17 ] }; equals( jQuery.param(params), "a=0&a=1%2C2&a=3%2C4%2C5%2C6&a=%5Bobject+Object%5D&a=17", "nested arrays (not possible when jQuery.param.traditional == true)" ); - + params = { a:[1,2], b:{ c:3, d:[4,5], e:{ x:[6], y:7, z:[8,9] }, f:true, g:false, h:undefined }, i:[10,11], j:true, k:false, l:[undefined,0], m:"cowboy hat?" }; equals( decodeURIComponent( jQuery.param(params,false) ), "a[]=1&a[]=2&b[c]=3&b[d][]=4&b[d][]=5&b[e][x][]=6&b[e][y]=7&b[e][z][]=8&b[e][z][]=9&b[f]=true&b[g]=false&b[h]=undefined&i[]=10&i[]=11&j=true&k=false&l[]=undefined&l[]=0&m=cowboy+hat?", "huge structure, forced not traditional" ); - + params = { param1: null }; equals( jQuery.param(params,false), "param1=null", "Make sure that null params aren't traversed." ); }); @@ -961,7 +971,7 @@ test("pass-through request object", function() { test("ajax cache", function () { expect(18); - + stop(); var count = 0; @@ -1374,7 +1384,7 @@ test("jQuery.ajax() - script, Remote with POST", function() { expect(3); var base = window.location.href.replace(/[^\/]*$/, ""); - + stop(); jQuery.ajax({ @@ -1515,7 +1525,7 @@ test("jQuery.getJSON(String, Function) - JSON object", function() { test("jQuery.getJSON - Using Native JSON", function() { expect(2); - + var old = window.JSON; JSON = { parse: function(str){ @@ -1730,13 +1740,13 @@ test("jQuery.ajax - If-Modified-Since support", function() { jQuery.ajax({ url: url, ifModified: true, - success: function(data, status) { + success: function(data, status) { equals(status, "success"); - + jQuery.ajax({ url: url, ifModified: true, - success: function(data, status) { + success: function(data, status) { if ( data === "FAIL" ) { ok(true, "Opera is incapable of doing .setRequestHeader('If-Modified-Since')."); ok(true, "Opera is incapable of doing .setRequestHeader('If-Modified-Since')."); @@ -1777,13 +1787,13 @@ test("jQuery.ajax - Etag support", function() { jQuery.ajax({ url: url, ifModified: true, - success: function(data, status) { + success: function(data, status) { equals(status, "success"); - + jQuery.ajax({ url: url, ifModified: true, - success: function(data, status) { + success: function(data, status) { if ( data === "FAIL" ) { ok(true, "Opera is incapable of doing .setRequestHeader('If-None-Match')."); ok(true, "Opera is incapable of doing .setRequestHeader('If-None-Match')."); @@ -1813,58 +1823,41 @@ test("jQuery.ajax - Etag support", function() { }); }); -test("jQuery ajax - headers", function() { - - stop(); - - jQuery.ajax(url("data/css.php?wait=1&id=headers"), { - headers: { - testKey: "testValue" - }, - beforeSend: function( xhr ) { - equals( xhr.getRequestHeader("testKey") , "testValue" , "Headers properly set" ); - setTimeout( start , 13 ); - return false; - } - }); - -}); - test("jQuery ajax - failing cross-domain", function() { expect( 2 ); - + stop(); - + var i = 2; - + jQuery.ajax({ url: 'http://somewebsitethatdoesnotexist.com', success: function(){ ok( false , "success" ); }, error: function(xhr,_,e){ ok( true , "file not found: " + xhr.status + " => " + e ); }, complete: function() { if ( ! --i ) start(); } }); - + jQuery.ajax({ url: 'http://www.google.com', success: function(){ ok( false , "success" ); }, error: function(xhr,_,e){ ok( true , "access denied: " + xhr.status + " => " + e ); }, complete: function() { if ( ! --i ) start(); } }); - + }); test("jQuery ajax - atom+xml", function() { stop(); - + jQuery.ajax({ url: url( 'data/atom+xml.php' ), success: function(){ ok( true , "success" ); }, error: function(){ ok( false , "error" ); }, complete: function() { start(); } }); - + }); test("jQuery.ajax - active counter", function() { @@ -1874,7 +1867,7 @@ test("jQuery.ajax - active counter", function() { test( "jQuery.ajax - Location object as url (#7531)", 1, function () { var success = false; try { - var xhr = jQuery.ajax({ url: document.location }); + var xhr = jQuery.ajax({ url: window.location }); success = true; xhr.abort(); } catch (e) {}