Removed errorThrown test for 404 responses seeing as Safari 3.x XHR sets the statusTe...
[jquery.git] / test / unit / ajax.js
index 1ed15b5..ec28b7c 100644 (file)
@@ -240,6 +240,53 @@ test("jQuery.ajax() - error callbacks", function() {
        });
 });
 
+test("jQuery.ajax() - textStatus and errorThrown values", function() {
+
+       var nb = 2;
+
+       expect( 2 * nb );
+       stop();
+
+       function startN() {
+               if ( !( --nb ) ) {
+                       start();
+               }
+       }
+
+       /*
+       Safari 3.x returns "OK" instead of "Not Found"
+       Safari 4.x doesn't have this issue so the test should be re-instated once
+       we drop support for 3.x
+
+       jQuery.ajax({
+               url: url("data/nonExistingURL"),
+               error: function( _ , textStatus , errorThrown ){
+                       strictEqual( textStatus, "error", "textStatus is 'error' for 404" );
+                       strictEqual( errorThrown, "Not Found", "errorThrown is 'Not Found' for 404");
+                       startN();
+               }
+       });
+       */
+
+       jQuery.ajax({
+               url: url("data/name.php?wait=5"),
+               error: function( _ , textStatus , errorThrown ){
+                       strictEqual( textStatus, "abort", "textStatus is 'abort' for abort" );
+                       strictEqual( errorThrown, "abort", "errorThrown is 'abort' for abort");
+                       startN();
+               }
+       }).abort();
+
+       jQuery.ajax({
+               url: url("data/name.php?wait=5"),
+               error: function( _ , textStatus , errorThrown ){
+                       strictEqual( textStatus, "mystatus", "textStatus is 'mystatus' for abort('mystatus')" );
+                       strictEqual( errorThrown, "mystatus", "errorThrown is 'mystatus' for abort('mystatus')");
+                       startN();
+               }
+       }).abort( "mystatus" );
+});
+
 test("jQuery.ajax() - responseText on error", function() {
 
        expect( 1 );
@@ -374,6 +421,18 @@ test(".ajax() - contentType" , function() {
 
 });
 
+test(".ajax() - protocol-less urls", function() {
+       expect(1);
+
+       jQuery.ajax({
+               url: "//somedomain.com",
+               beforeSend: function( xhr, settings ) {
+                       equals(settings.url, location.protocol + "//somedomain.com", "Make sure that the protocol is added.");
+                       return false;
+               }
+       });
+});
+
 test(".ajax() - hash", function() {
        expect(3);
 
@@ -1139,10 +1198,11 @@ test("jQuery.get(String, Hash, Function) - parse xml and use text() on nodes", f
 });
 
 test("jQuery.getScript(String, Function) - with callback", function() {
-       expect(2);
+       expect(3);
        stop();
-       jQuery.getScript(url("data/test.js"), function() {
+       jQuery.getScript(url("data/test.js"), function( data, _, jXHR ) {
                equals( foobar, "bar", 'Check if script was evaluated' );
+               strictEqual( data, jXHR.responseText, "Same-domain script requests returns the source of the script (#8082)" );
                setTimeout(start, 100);
        });
 });
@@ -1158,10 +1218,10 @@ test("jQuery.getScript(String, Function) - no callback", function() {
 jQuery.each( [ "Same Domain", "Cross Domain" ] , function( crossDomain , label ) {
 
        test("jQuery.ajax() - JSONP, " + label, function() {
-               expect(17);
+               expect(16);
 
                var count = 0;
-               function plus(){ if ( ++count == 17 ) start(); }
+               function plus(){ if ( ++count == 16 ) start(); }
 
                stop();
 
@@ -1269,23 +1329,6 @@ jQuery.each( [ "Same Domain", "Cross Domain" ] , function( crossDomain , label )
                        url: "data/jsonp.php",
                        dataType: "jsonp",
                        crossDomain: crossDomain,
-                       data: {
-                               callback: "?"
-                       },
-                       success: function(data){
-                               ok( data.data, "JSON results returned (GET, processed data callback)" );
-                               plus();
-                       },
-                       error: function(data){
-                               ok( false, "Ajax error JSON (GET, processed data callback)" );
-                               plus();
-                       }
-               });
-
-               jQuery.ajax({
-                       url: "data/jsonp.php",
-                       dataType: "jsonp",
-                       crossDomain: crossDomain,
                        jsonp: "callback",
                        success: function(data){
                                ok( data.data, "JSON results returned (GET, data obj callback)" );
@@ -2006,6 +2049,49 @@ test( "jQuery.ajax - statusCode" , function() {
        });
 });
 
+test("jQuery.ajax - transitive conversions", function() {
+
+       expect( 8 );
+
+       stop();
+
+       jQuery.when(
+
+               jQuery.ajax( url("data/json.php") , {
+                       converters: {
+                               "json myjson": function( data ) {
+                                       ok( true , "converter called" );
+                                       return data;
+                               }
+                       },
+                       dataType: "myjson",
+                       success: function() {
+                               ok( true , "Transitive conversion worked" );
+                               strictEqual( this.dataTypes[0] , "text" , "response was retrieved as text" );
+                               strictEqual( this.dataTypes[1] , "myjson" , "request expected myjson dataType" );
+                       }
+               }),
+
+               jQuery.ajax( url("data/json.php") , {
+                       converters: {
+                               "json myjson": function( data ) {
+                                       ok( true , "converter called (*)" );
+                                       return data;
+                               }
+                       },
+                       contents: false, /* headers are wrong so we ignore them */
+                       dataType: "* myjson",
+                       success: function() {
+                               ok( true , "Transitive conversion worked (*)" );
+                               strictEqual( this.dataTypes[0] , "text" , "response was retrieved as text (*)" );
+                               strictEqual( this.dataTypes[1] , "myjson" , "request expected myjson dataType (*)" );
+                       }
+               })
+
+       ).then( start , start );
+
+});
+
 test("jQuery.ajax - active counter", function() {
     ok( jQuery.active == 0, "ajax active counter should be zero: " + jQuery.active );
 });