X-Git-Url: http://git.asbjorn.biz/?p=jquery.git;a=blobdiff_plain;f=src%2Fajax%2FajaxTest.js;h=92b432a33b9d7edbd231dfe04dbe10af29e53633;hp=7785a97a9b34f5b630c798143156f5e4da6bd43a;hb=2ef4093cf7f52383dd43bd361864edcda27e5c3c;hpb=12e63353391f1a556a73fe92bcd8e5f0ac277726 diff --git a/src/ajax/ajaxTest.js b/src/ajax/ajaxTest.js index 7785a97..92b432a 100644 --- a/src/ajax/ajaxTest.js +++ b/src/ajax/ajaxTest.js @@ -1,104 +1,189 @@ module("ajax"); -if ( location.protocol != "file:" ) { +// Safari 3 crashes when running these tests, sigh +if ( !jQuery.browser.safari ) { test("serialize()", function() { expect(1); - var data = $(':input').not('button').serialize(); // ignore button, IE takes text content as value, not relevant for this test - ok( data == 'action=Test&text2=Test&radio1=on&radio2=on&check=on&=on&hidden=&foo%5Bbar%5D=&name=name&=foobar&select1=&select2=3&select3=1', 'Check form serialization as query string' ); + equals( $(':input').not('button').serialize(), + 'action=Test&text2=Test&radio1=on&radio2=on&check=on&=on&hidden=&foo%5Bbar%5D=&name=name&=foobar&select1=&select2=3&select3=1&test=&id=', + 'Check form serialization as query string'); }); -test("param", function() { +test("$.param()", function() { expect(4); var params = {foo:"bar", baz:42, quux:"All your base are belong to us"}; - ok( $.param(params) == "foo=bar&baz=42&quux=All%20your%20base%20are%20belong%20to%20us", "simple" ); + equals( $.param(params), "foo=bar&baz=42&quux=All%20your%20base%20are%20belong%20to%20us", "simple" ); params = {someName: [1, 2, 3], regularThing: "blah" }; - ok( $.param(params) == "someName=1&someName=2&someName=3®ularThing=blah", "with array" ); + equals( $.param(params), "someName=1&someName=2&someName=3®ularThing=blah", "with array" ); params = {"foo[]":["baz", 42, "All your base are belong to us"]}; - ok( $.param(params) == "foo%5B%5D=baz&foo%5B%5D=42&foo%5B%5D=All%20your%20base%20are%20belong%20to%20us", "more array" ); + equals( $.param(params), "foo%5B%5D=baz&foo%5B%5D=42&foo%5B%5D=All%20your%20base%20are%20belong%20to%20us", "more array" ); params = {"foo[bar]":"baz", "foo[beep]":42, "foo[quux]":"All your base are belong to us"}; - ok( $.param(params) == "foo%5Bbar%5D=baz&foo%5Bbeep%5D=42&foo%5Bquux%5D=All%20your%20base%20are%20belong%20to%20us", "even more arrays" ); + equals( $.param(params), "foo%5Bbar%5D=baz&foo%5Bbeep%5D=42&foo%5Bquux%5D=All%20your%20base%20are%20belong%20to%20us", "even more arrays" ); +}); + +test("synchronous request", function() { + expect(1); + ok( /^{ "data"/.test( $.ajax({url: url("data/json_obj.js"), async: false}).responseText ), "check returned text" ); +}); + +test("synchronous request with callbacks", function() { + expect(2); + var result; + $.ajax({url: url("data/json_obj.js"), async: false, success: function(data) { ok(true, "sucess callback executed"); result = data; } }); + ok( /^{ "data"/.test( result ), "check returned text" ); }); test("pass-through request object", function() { expect(7); stop(true); + + var target = "data/name.html"; var count = 0; var success = function() { - if(count++ == 6) + if(count++ == 5) start(); - } - var target = "data/name.php"; + }; + ok( $.get(url(target), success), "get" ); ok( $.getIfModified(url(target), success), "getIfModified" ); ok( $.post(url(target), success), "post" ); ok( $.getScript(url("data/test.js"), success), "script" ); - ok( $.getJSON(url("data/json.php"), success), "json" ); + ok( $.getJSON(url("data/json_obj.js"), success), "json" ); ok( $.ajax({url: url(target), success: success}), "generic" ); }); -test("synchronous request", function() { - ok( /^{ "data"/.test( $.ajax({url: url("data/json.php"), async: false}).responseText ), "check returned text" ); +test("global ajaxSettings", function() { + expect(3); + + var tmp = jQuery.extend({}, jQuery.ajaxSettings); + var orig = { url: "data/with_fries.xml", data: null }; + var t; + + $.ajaxSetup({ data: {foo: 'bar', bar: 'BAR'} }); + + t = jQuery.extend({}, orig); + $.ajax(t); + ok( t.url.indexOf('foo') > -1 && t.url.indexOf('bar') > -1, "Check extending null" ); + + t = jQuery.extend({}, orig); + t.data = {}; + $.ajax(t); + ok( t.url.indexOf('foo') > -1 && t.url.indexOf('bar') > -1, "Check extending {}" ); + + t = jQuery.extend({}, orig); + t.data = { zoo: 'a', ping: 'b' }; + $.ajax(t); + ok( t.url.indexOf('ping') > -1 && t.url.indexOf('zoo') > -1 && t.url.indexOf('foo') > -1 && t.url.indexOf('bar') > -1, "Check extending { zoo: 'a', ping: 'b' }" ); + + jQuery.ajaxSettings = tmp; }); -test("synchronous request with callbacks", function() { - expect(2); - var result; - $.ajax({url: url("data/json.php"), async: false, success: function(data) { ok(true, "sucess callback executed"); result = data; } }); - ok( /^{ "data"/.test( result ), "check returned text" ); +test("load(String)", function() { + expect(1); + stop(true); // check if load can be called with only url + $('#first').load("data/name.html", start); }); -test("load(String, Object, Function) - simple: inject text into DOM", function() { +test("load(String, Function) - simple: inject text into DOM", function() { expect(2); stop(); - $('#first').load(url("data/name.php"), function() { + $('#first').load(url("data/name.html"), function() { ok( /^ERROR/.test($('#first').text()), 'Check if content was injected into the DOM' ); start(); }); }); -test("load(String, Object, Function) - inject without callback", function() { - expect(1); - stop(true); // check if load can be called with only url - $('#first').load("data/name.php"); -}); - -test("load(String, Object, Function) - check scripts", function() { +test("load(String, Function) - check scripts", function() { expect(7); stop(); - testFoo = undefined; - foobar = null; + window.testFoo = undefined; + window.foobar = null; var verifyEvaluation = function() { - ok( foobar == "bar", 'Check if script src was evaluated after load' ); - ok( $('#ap').html() == 'bar', 'Check if script evaluation has modified DOM'); + equals( foobar, "bar", 'Check if script src was evaluated after load' ); + equals( $('#ap').html(), 'bar', 'Check if script evaluation has modified DOM'); start(); }; - $('#first').load(url('data/test.php'), function() { + $('#first').load(url('data/test.html'), function() { ok( $('#first').html().match(/^html text/), 'Check content after loading html' ); - ok( $('#foo').html() == 'foo', 'Check if script evaluation has modified DOM'); - ok( testFoo == "foo", 'Check if script was evaluated after load' ); + equals( $('#foo').html(), 'foo', 'Check if script evaluation has modified DOM'); + equals( testFoo, "foo", 'Check if script was evaluated after load' ); setTimeout(verifyEvaluation, 600); }); }); -test("load(String, Object, Function) - check file with only a script tag", function() { +test("load(String, Function) - check file with only a script tag", function() { expect(3); stop(); testFoo = undefined; - $('#first').load(url('data/test2.php'), function() { + $('#first').load(url('data/test2.html'), function() { ok( $('#foo').html() == 'foo', 'Check if script evaluation has modified DOM'); ok( testFoo == "foo", 'Check if script was evaluated after load' ); start(); }); }); +test("$.get(String, Hash, Function) - parse xml and use text() on nodes", function() { + expect(2); + stop(); + $.get(url('data/dashboard.xml'), function(xml) { + var content = []; + $('tab', xml).each(function() { + content.push($(this).text()); + }); + equals( content[0], 'blabla', 'Check first tab'); + equals( content[1], 'blublu', 'Check second tab'); + start(); + }); +}); + +test("$.getIfModified(String, Hash, Function)", function() { + expect(1); + stop(); + $.getIfModified(url("data/name.html"), function(msg) { + ok( /^ERROR/.test(msg), 'Check ifModified' ); + start(); + }); +}); + +test("$.getScript(String, Function) - with callback", function() { + expect(2); + stop(); + $.getScript(url("data/test.js"), function() { + equals( foobar, "bar", 'Check if script was evaluated' ); + setTimeout(start, 100); + }); +}); + +test("$.getScript(String, Function) - no callback", function() { + expect(1); + stop(true); + $.getScript(url("data/test.js"), start); +}); + +test("$.ajax - xml: non-namespace elements inside namespaced elements", function() { + expect(3); + stop(); + $.ajax({ + url: url("data/with_fries.xml"), + dataType: "xml", + success: function(resp) { + equals( $("properties", resp).length, 1, 'properties in responseXML' ); + equals( $("jsconf", resp).length, 1, 'jsconf in responseXML' ); + equals( $("thing", resp).length, 2, 'things in responseXML' ); + start(); + } + }); +}); + test("test global handlers - success", function() { - expect(8); + expect( isLocal ? 4 : 8 ); stop(); + var counter = { complete: 0, success: 0, error: 0, send: 0 }, success = function() { counter.success++ }, error = function() { counter.error++ }, @@ -106,89 +191,112 @@ test("test global handlers - success", function() { send = function() { counter.send++ }; $('#foo').ajaxStart(complete).ajaxStop(complete).ajaxSend(send).ajaxComplete(complete).ajaxError(error).ajaxSuccess(success); + // start with successful test - $.ajax({url: url("data/name.php"), beforeSend: send, success: success, error: error, complete: function() { - ok( counter.error == 0, 'Check succesful request' ); - ok( counter.success == 2, 'Check succesful request' ); - ok( counter.complete == 3, 'Check succesful request' ); - ok( counter.send == 2, 'Check succesful request' ); - counter.error = counter.success = counter.complete = counter.send = 0; - $.ajaxTimeout(500); - $.ajax({url: url("data/name.php?wait=5"), beforeSend: send, success: success, error: error, complete: function() { - ok( counter.error == 2, 'Check failed request' ); - ok( counter.success == 0, 'Check failed request' ); - ok( counter.complete == 3, 'Check failed request' ); - ok( counter.send == 2, 'Check failed request' ); - start(); - }}); + $.ajax({url: url("data/name.html"), beforeSend: send, success: success, error: error, complete: function() { + equals( counter.error, 0, 'Check succesful request, error callback' ); + equals( counter.success, 2, 'Check succesful request, success callback' ); + equals( counter.complete, 3, 'Check succesful request, complete callback' ); + equals( counter.send, 2, 'Check succesful request, send callback' ); + + if ( !isLocal ) { + counter.error = counter.success = counter.complete = counter.send = 0; + $.ajaxTimeout(500); + + $.ajax({url: url("data/name.php?wait=5"), beforeSend: send, success: success, error: error, complete: function() { + equals( counter.error, 2, 'Check failed request, error callback' ); + equals( counter.success, 0, 'Check failed request, success callback' ); + equals( counter.complete, 3, 'Check failed request, failed callback' ); + equals( counter.send, 2, 'Check failed request, send callback' ); + start(); + }}); + } else + start(); }}); }); test("test global handlers - failure", function() { - expect(8); + expect( isLocal ? 4 : 8 ); stop(); + var counter = { complete: 0, success: 0, error: 0, send: 0 }, success = function() { counter.success++ }, error = function() { counter.error++ }, complete = function() { counter.complete++ }, send = function() { counter.send++ }; + $.ajaxTimeout(0); + $('#foo').ajaxStart(complete).ajaxStop(complete).ajaxSend(send).ajaxComplete(complete).ajaxError(error).ajaxSuccess(success); + $.ajax({url: url("data/name.php"), global: false, beforeSend: send, success: success, error: error, complete: function() { ok( counter.error == 0, 'Check sucesful request without globals' ); ok( counter.success == 1, 'Check sucesful request without globals' ); ok( counter.complete == 0, 'Check sucesful request without globals' ); ok( counter.send == 1, 'Check sucesful request without globals' ); - counter.error = counter.success = counter.complete = counter.send = 0; - $.ajaxTimeout(500); - $.ajax({url: url("data/name.php?wait=5"), global: false, beforeSend: send, success: success, error: error, complete: function() { - var x = counter; - ok( counter.error == 1, 'Check failed request without globals' ); - ok( counter.success == 0, 'Check failed request without globals' ); - ok( counter.complete == 0, 'Check failed request without globals' ); - ok( counter.send == 1, 'Check failed request without globals' ); - start(); - }}); + + if ( !isLocal ) { + counter.error = counter.success = counter.complete = counter.send = 0; + $.ajaxTimeout(500); + + $.ajax({url: url("data/name.php?wait=5"), global: false, beforeSend: send, success: success, error: error, complete: function() { + var x = counter; + ok( counter.error == 1, 'Check failed request without globals' ); + ok( counter.success == 0, 'Check failed request without globals' ); + ok( counter.complete == 0, 'Check failed request without globals' ); + ok( counter.send == 1, 'Check failed request without globals' ); + start(); + }}); + } else + start(); }}); }); -test("$.get(String, Hash, Function) - parse xml and use text() on nodes", function() { - expect(2); - stop(); - $.get(url('data/dashboard.xml'), function(xml) { - var content = []; - $('tab', xml).each(function() { - content.push($(this).text()); - }); - ok( content[0] == 'blabla', 'Check first tab'); - ok( content[1] == 'blublu', 'Check second tab'); - start(); - }); -}); - -test("$.getIfModified(String, Hash, Function)", function() { +test("$.ajax - beforeSend", function() { expect(1); stop(); - $.getIfModified(url("data/name.php"), function(msg) { - ok( /^ERROR/.test(msg), 'Check ifModified' ); - start(); + + var check = false; + + $.ajaxSetup({ timeout: 0 }); + + $.ajax({ + url: url("data/name.html"), + beforeSend: function(xml) { + check = true; + }, + success: function(data) { + ok( check, "check beforeSend was executed" ); + start(); + } }); }); -test("$.getScript(String, Function) - with callback", function() { - expect(2); +test("$.ajax - dataType html", function() { + expect(5); stop(); - $.getScript(url("data/test.js"), function() { - ok( foobar == "bar", 'Check if script was evaluated' ); - setTimeout(start, 100); + + foobar = null; + testFoo = undefined; + + var verifyEvaluation = function() { + ok( foobar == "bar", 'Check if script src was evaluated for datatype html' ); + start(); + }; + + $.ajax({ + dataType: "html", + url: url("data/test.html"), + success: function(data) { + $("#ap").html(data); + ok( data.match(/^html text/), 'Check content for datatype html' ); + ok( testFoo == "foo", 'Check if script was evaluated for datatype html' ); + setTimeout(verifyEvaluation, 600); + } }); }); -test("$.getScript(String, Function) - no callback", function() { - expect(1); - stop(true); - $.getScript(url("data/test.js")); -}); +if ( !isLocal ) { test("$.getJSON(String, Hash, Function) - JSON array", function() { expect(4); @@ -202,7 +310,7 @@ test("$.getJSON(String, Hash, Function) - JSON array", function() { }); }); -test("$.getJSON(String, Hash, Function) - JSON object", function() { +test("$.getJSON(String, Function) - JSON object", function() { expect(2); stop(); $.getJSON(url("data/json.php"), function(json) { @@ -226,30 +334,34 @@ test("$.post(String, Hash, Function) - simple with xml", function() { test("$.ajaxTimeout(Number) - with global timeout", function() { stop(); + var passed = 0; - var timeout; + $.ajaxTimeout(1000); + var pass = function() { passed++; - if(passed == 2) { + if ( passed == 2 ) { ok( true, 'Check local and global callbacks after timeout' ); - clearTimeout(timeout); - $('#main').unbind("ajaxError"); + $('#main').unbind("ajaxError"); start(); } }; - var fail = function() { - ok( false, 'Check for timeout failed' ); + + var fail = function(a,b,c) { + ok( false, 'Check for timeout failed ' + a + ' ' + b ); start(); }; - timeout = setTimeout(fail, 1500); + $('#main').ajaxError(pass); + $.ajax({ type: "GET", url: url("data/name.php?wait=5"), error: pass, success: fail }); + // reset timeout $.ajaxTimeout(0); }); @@ -299,58 +411,6 @@ test("$.ajax - simple post", function() { } }); }); - -test("$.ajax - dataType html", function() { - expect(5); - stop(); - foobar = null; - testFoo = undefined; - var verifyEvaluation = function() { - ok( foobar == "bar", 'Check if script src was evaluated for datatype html' ); - start(); - }; - $.ajax({ - dataType: "html", - url: url("data/test.php"), - success: function(data) { - ok( data.match(/^html text/), 'Check content for datatype html' ); - ok( testFoo == "foo", 'Check if script was evaluated for datatype html' ); - setTimeout(verifyEvaluation, 600); - } - }); -}); - -test("$.ajax - xml: non-namespace elements inside namespaced elements", function() { - expect(3); - stop(); - $.ajax({ - url: url("data/with_fries.xml"), - dataType: "xml", - success: function(resp) { - ok( $("properties", resp).length == 1, 'properties in responseXML' ); - ok( $("jsconf", resp).length == 1, 'jsconf in responseXML' ); - ok( $("thing", resp).length == 2, 'things in responseXML' ); - start(); - } - }); -}); - -test("$.ajax - beforeSend", function() { - expect(1); - stop(); - var check = false; - $.ajax({ - url: url("data/name.php"), - data: {'req': true}, - beforeSend: function(xml) { - check = true - }, - success: function(data) { - ok( check, "check beforeSend was executed" ); - start(); - } - }); -}); test("ajaxSetup()", function() { expect(1); @@ -365,18 +425,19 @@ test("ajaxSetup()", function() { $.ajax(); }); -test("evalScripts() with no script elements", function() { - expect(2); - - var data = "this is just some bogus text"; - $('#foo').html(data); - ok ( true, 'before evalScripts()'); - try { - $('#foo').evalScripts(); - } catch(e) { - ok (false, 'exception evaluating scripts: ' + e.message); - } - ok ( true, 'after evalScripts()'); +test("custom timeout does not set error message when timeout occurs, see #970", function() { + stop(); + $.ajax({ + url: "data/name.php?wait=10", + timeout: 500, + error: function(request, status) { + ok( status != null, "status shouldn't be null in error handler" ); + equals( "timeout", status ); + start(); + } + }); }); } + +}