From d6c84c5bb55814df0063e04b12c4143d07cba3f7 Mon Sep 17 00:00:00 2001
From: Rick Waldron <waldron.rick@gmail.com>
Date: Mon, 15 Oct 2012 17:11:21 -0400
Subject: Breakout JSONP domain-related tests

---
 test/unit/ajax.js | 228 ++++++++++++++++++++++++++++++++++--------------------
 1 file changed, 142 insertions(+), 86 deletions(-)

diff --git a/test/unit/ajax.js b/test/unit/ajax.js
index 8c1033ee0..00b3bf82f 100644
--- a/test/unit/ajax.js
+++ b/test/unit/ajax.js
@@ -1110,7 +1110,7 @@ if ( jQuery.ajax && ( !isLocal || hasPHP ) ) {
 			}
 			equal( i, 1, "Test to make sure only one 'no-cache' parameter is there" );
 			ok( oldOne != "tobereplaced555", "Test to be sure parameter (if it was there) was replaced" );
-			if ( ++count == 6 ) {
+			if ( ++count === 6 ) {
 				start();
 			}
 		});
@@ -1449,53 +1449,20 @@ if ( jQuery.ajax && ( !isLocal || hasPHP ) ) {
 		});
 	});
 
+
 	jQuery.each( [ "Same Domain", "Cross Domain" ], function( crossDomain, label ) {
 
-		test( "jQuery.ajax() - JSONP, " + label, function() {
-			expect( 24 );
+
+		asyncTest( "jQuery.ajax() - JSONP, Query String (?n)" + label, function() {
+			expect( 4 );
 
 			var count = 0;
 			function plus() {
-				if ( ++count == 20 ) {
+				if ( ++count === 4 ) {
 					start();
 				}
 			}
 
-			stop();
-
-			jQuery.ajax({
-				url: "data/jsonp.php",
-				dataType: "jsonp",
-				crossDomain: crossDomain,
-				success: function( data ) {
-					ok( data.data, "JSON results returned (GET, no callback)" );
-					plus();
-				},
-				error: function( data ) {
-					ok( false, "Ajax error JSON (GET, no callback)" );
-					plus();
-				}
-			});
-
-			jQuery.ajax({
-				url: "data/jsonp.php",
-				dataType: "jsonp",
-				crossDomain: crossDomain,
-				success: function( data ) {
-					ok( data.data, ( this.alreadyDone ? "this re-used" : "first request" ) + ": JSON results returned (GET, no callback)" );
-					if ( !this.alreadyDone ) {
-						this.alreadyDone = true;
-						jQuery.ajax( this );
-					} else {
-						plus();
-					}
-				},
-				error: function( data ) {
-					ok( false, "Ajax error JSON (GET, no callback)" );
-					plus();
-				}
-			});
-
 			jQuery.ajax({
 				url: "data/jsonp.php?callback=?",
 				dataType: "jsonp",
@@ -1510,21 +1477,6 @@ if ( jQuery.ajax && ( !isLocal || hasPHP ) ) {
 				}
 			});
 
-			jQuery.ajax({
-				url: "data/jsonp.php",
-				dataType: "jsonp",
-				crossDomain: crossDomain,
-				data: "callback=?",
-				success: function( data ) {
-					ok( data.data, "JSON results returned (GET, data callback)" );
-					plus();
-				},
-				error: function( data ) {
-					ok( false, "Ajax error JSON (GET, data callback)" );
-					plus();
-				}
-			});
-
 			jQuery.ajax({
 				url: "data/jsonp.php?callback=??",
 				dataType: "jsonp",
@@ -1539,21 +1491,6 @@ if ( jQuery.ajax && ( !isLocal || hasPHP ) ) {
 				}
 			});
 
-			jQuery.ajax({
-				url: "data/jsonp.php",
-				dataType: "jsonp",
-				crossDomain: crossDomain,
-				data: "callback=??",
-				success: function( data ) {
-					ok( data.data, "JSON results returned (GET, data context-free callback)" );
-					plus();
-				},
-				error: function( data ) {
-					ok( false, "Ajax error JSON (GET, data context-free callback)" );
-					plus();
-				}
-			});
-
 			jQuery.ajax({
 				url: "data/jsonp.php/??",
 				dataType: "jsonp",
@@ -1581,6 +1518,17 @@ if ( jQuery.ajax && ( !isLocal || hasPHP ) ) {
 					plus();
 				}
 			});
+		});
+
+		asyncTest( "jQuery.ajax() - JSONP, Explicit jsonp/Callback param " + label, function() {
+			expect( 9 );
+
+			var count = 0;
+			function plus() {
+				if ( ++count === 4 ) {
+					start();
+				}
+			}
 
 			jQuery.ajax({
 				url: "data/jsonp.php",
@@ -1650,6 +1598,80 @@ if ( jQuery.ajax && ( !isLocal || hasPHP ) ) {
 				}
 			});
 
+			jQuery.ajax({
+				url: "data/jsonp.php?callback=XXX",
+				dataType: "jsonp",
+				jsonp: false,
+				jsonpCallback: "XXX",
+				crossDomain: crossDomain,
+				beforeSend: function() {
+					ok( /^data\/jsonp.php\?callback=XXX&_=\d+$/.test( this.url ), "The URL wasn't messed with (GET, custom callback name with no url manipulation)" );
+					plus();
+				},
+				success: function( data ) {
+					ok( data["data"], "JSON results returned (GET, custom callback name with no url manipulation)" );
+					plus();
+				},
+				error: function( data ) {
+					ok( false, "Ajax error JSON (GET, custom callback name with no url manipulation)" );
+					plus();
+				}
+			});
+		});
+
+
+		asyncTest( "jQuery.ajax() - JSONP, Callback in data, " + label, function() {
+			expect( 2 );
+
+			var count = 0;
+			function plus() {
+				if ( ++count === 2 ) {
+					start();
+				}
+			}
+
+			jQuery.ajax({
+				url: "data/jsonp.php",
+				dataType: "jsonp",
+				crossDomain: crossDomain,
+				data: "callback=?",
+				success: function( data ) {
+					ok( data.data, "JSON results returned (GET, data callback)" );
+					plus();
+				},
+				error: function( data ) {
+					ok( false, "Ajax error JSON (GET, data callback)" );
+					plus();
+				}
+			});
+
+			jQuery.ajax({
+				url: "data/jsonp.php",
+				dataType: "jsonp",
+				crossDomain: crossDomain,
+				data: "callback=??",
+				success: function( data ) {
+					ok( data.data, "JSON results returned (GET, data context-free callback)" );
+					plus();
+				},
+				error: function( data ) {
+					ok( false, "Ajax error JSON (GET, data context-free callback)" );
+					plus();
+				}
+			});
+		});
+
+
+		asyncTest( "jQuery.ajax() - JSONP, POST, " + label, function() {
+			expect( 3 );
+
+			var count = 0;
+			function plus() {
+				if ( ++count === 3 ) {
+					start();
+				}
+			}
+
 			jQuery.ajax({
 				type: "POST",
 				url: "data/jsonp.php",
@@ -1696,40 +1718,73 @@ if ( jQuery.ajax && ( !isLocal || hasPHP ) ) {
 					plus();
 				}
 			});
+		});
+
+		asyncTest( "jQuery.ajax() - JSONP, " + label, function() {
+			expect( 3 );
+
+			var count = 0;
+			function plus() {
+				if ( ++count === 2 ) {
+					start();
+				}
+			}
 
-			//#7578
 			jQuery.ajax({
 				url: "data/jsonp.php",
 				dataType: "jsonp",
 				crossDomain: crossDomain,
-				beforeSend: function() {
-					strictEqual( this.cache, false, "cache must be false on JSON request" );
+				success: function( data ) {
+					ok( data.data, "JSON results returned (GET, no callback)" );
+					plus();
+				},
+				error: function( data ) {
+					ok( false, "Ajax error JSON (GET, no callback)" );
 					plus();
-					return false;
 				}
 			});
 
 			jQuery.ajax({
-				url: "data/jsonp.php?callback=XXX",
+				url: "data/jsonp.php",
 				dataType: "jsonp",
-				jsonp: false,
-				jsonpCallback: "XXX",
 				crossDomain: crossDomain,
-				beforeSend: function() {
-					ok( /^data\/jsonp.php\?callback=XXX&_=\d+$/.test( this.url ), "The URL wasn't messed with (GET, custom callback name with no url manipulation)" );
-					plus();
-				},
 				success: function( data ) {
-					ok( data["data"], "JSON results returned (GET, custom callback name with no url manipulation)" );
-					plus();
+					ok( data.data, ( this.alreadyDone ? "this re-used" : "first request" ) + ": JSON results returned (GET, no callback)" );
+					if ( !this.alreadyDone ) {
+						this.alreadyDone = true;
+
+						// NOTE: "this" will create another request identical
+						// to the CALLING request
+						jQuery.ajax( this );
+					} else {
+						plus();
+					}
 				},
 				error: function( data ) {
-					ok( false, "Ajax error JSON (GET, custom callback name with no url manipulation)" );
+					ok( false, "Ajax error JSON (GET, no callback)" );
 					plus();
 				}
 			});
+		});
+
+		asyncTest( "jQuery.ajax() - #7578, " + label, function() {
+			expect( 1 );
+
+			jQuery.ajax({
+				url: "data/jsonp.php",
+				dataType: "jsonp",
+				crossDomain: crossDomain,
+				beforeSend: function() {
+					strictEqual( this.cache, false, "cache must be false on JSON request" );
+					start();
+					return false;
+				}
+			});
+		});
+
+		asyncTest( "jQuery.ajax() - #8205, " + label, function() {
+			expect( 2 );
 
-			//#8205
 			jQuery.ajax({
 				url: "data/jsonp.php",
 				dataType: "jsonp",
@@ -1749,8 +1804,9 @@ if ( jQuery.ajax && ( !isLocal || hasPHP ) ) {
 						return false;
 					}
 				});
-			}).always( plus );
-
+			}).always(function() {
+				start();
+			});
 		});
 	});
 
-- 
cgit v1.2.3