2019-02-18 18:02:38 +00:00
QUnit . module ( "serialize" , { afterEach : moduleTeardown } ) ;
2012-07-13 07:44:21 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "jQuery.param()" , function ( assert ) {
2018-06-20 16:07:44 +00:00
assert . expect ( 24 ) ;
2012-07-13 07:44:21 +00:00
2016-04-01 14:50:28 +00:00
var params ;
2012-07-13 07:44:21 +00:00
2015-08-16 06:59:58 +00:00
params = { "foo" : "bar" , "baz" : 42 , "quux" : "All your base are belong to us" } ;
2015-10-22 18:25:32 +00:00
assert . equal ( jQuery . param ( params ) , "foo=bar&baz=42&quux=All%20your%20base%20are%20belong%20to%20us" , "simple" ) ;
2012-07-13 07:44:21 +00:00
2016-05-10 09:12:28 +00:00
params = { "string" : "foo" , "null" : null , "undefined" : undefined } ;
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery . param ( params ) , "string=foo&null=&undefined=" , "handle nulls and undefineds properly" ) ;
2012-07-13 07:44:21 +00:00
2015-08-16 06:59:58 +00:00
params = { "someName" : [ 1 , 2 , 3 ] , "regularThing" : "blah" } ;
assert . equal ( jQuery . param ( params ) , "someName%5B%5D=1&someName%5B%5D=2&someName%5B%5D=3®ularThing=blah" , "with array" ) ;
2012-07-13 07:44:21 +00:00
2015-08-16 06:59:58 +00:00
params = { "foo" : [ "a" , "b" , "c" ] } ;
assert . equal ( jQuery . param ( params ) , "foo%5B%5D=a&foo%5B%5D=b&foo%5B%5D=c" , "with array of strings" ) ;
2012-07-13 07:44:21 +00:00
2015-08-16 06:59:58 +00:00
params = { "foo" : [ "baz" , 42 , "All your base are belong to us" ] } ;
2015-10-22 18:25:32 +00:00
assert . equal ( jQuery . param ( params ) , "foo%5B%5D=baz&foo%5B%5D=42&foo%5B%5D=All%20your%20base%20are%20belong%20to%20us" , "more array" ) ;
2012-07-13 07:44:21 +00:00
2015-08-16 06:59:58 +00:00
params = { "foo" : { "bar" : "baz" , "beep" : 42 , "quux" : "All your base are belong to us" } } ;
2015-10-22 18:25:32 +00:00
assert . equal ( jQuery . param ( params ) , "foo%5Bbar%5D=baz&foo%5Bbeep%5D=42&foo%5Bquux%5D=All%20your%20base%20are%20belong%20to%20us" , "even more arrays" ) ;
2012-07-13 07:44:21 +00:00
2016-05-10 09:12:28 +00:00
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?" } ;
2015-10-22 18:25:32 +00:00
assert . equal ( 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]=&i[]=10&i[]=11&j=true&k=false&l[]=&l[]=0&m=cowboy hat?" , "huge structure" ) ;
2012-07-13 07:44:21 +00:00
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 ] } ;
2015-08-16 06:59:58 +00:00
assert . equal ( 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" ) ;
2012-07-13 07:44:21 +00:00
2016-05-10 09:12:28 +00:00
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?" } ;
2015-10-22 18:25:32 +00:00
assert . equal ( jQuery . param ( params , true ) , "a=1&a=2&b=%5Bobject%20Object%5D&i=10&i=11&j=true&k=false&l=&l=0&m=cowboy%20hat%3F" , "huge structure, forced traditional" ) ;
2012-07-13 07:44:21 +00:00
2016-05-10 09:12:28 +00:00
assert . equal ( decodeURIComponent ( jQuery . param ( { "a" : [ 1 , 2 , 3 ] , "b[]" : [ 4 , 5 , 6 ] , "c[d]" : [ 7 , 8 , 9 ] , "e" : { "f" : [ 10 ] , "g" : [ 11 , 12 ] , "h" : 13 } } ) ) , "a[]=1&a[]=2&a[]=3&b[]=4&b[]=5&b[]=6&c[d][]=7&c[d][]=8&c[d][]=9&e[f][]=10&e[g][]=11&e[g][]=12&e[h]=13" , "Make sure params are not double-encoded." ) ;
2012-07-13 07:44:21 +00:00
// #7945
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery . param ( { "jquery" : "1.4.2" } ) , "jquery=1.4.2" , "Check that object with a jQuery property get serialized correctly" ) ;
2012-07-13 07:44:21 +00:00
2015-08-16 06:59:58 +00:00
params = { "foo" : "bar" , "baz" : 42 , "quux" : "All your base are belong to us" } ;
2016-04-01 14:50:28 +00:00
assert . equal ( jQuery . param ( params , true ) , "foo=bar&baz=42&quux=All%20your%20base%20are%20belong%20to%20us" , "simple" ) ;
2012-07-13 07:44:21 +00:00
2015-08-16 06:59:58 +00:00
params = { "someName" : [ 1 , 2 , 3 ] , "regularThing" : "blah" } ;
2016-04-01 14:50:28 +00:00
assert . equal ( jQuery . param ( params , true ) , "someName=1&someName=2&someName=3®ularThing=blah" , "with array" ) ;
2012-07-13 07:44:21 +00:00
2015-08-16 06:59:58 +00:00
params = { "foo" : [ "a" , "b" , "c" ] } ;
2016-04-01 14:50:28 +00:00
assert . equal ( jQuery . param ( params , true ) , "foo=a&foo=b&foo=c" , "with array of strings" ) ;
2012-07-13 07:44:21 +00:00
2015-08-16 06:59:58 +00:00
params = { "foo[]" : [ "baz" , 42 , "All your base are belong to us" ] } ;
2016-04-01 14:50:28 +00:00
assert . equal ( jQuery . param ( params , true ) , "foo%5B%5D=baz&foo%5B%5D=42&foo%5B%5D=All%20your%20base%20are%20belong%20to%20us" , "more array" ) ;
2012-07-13 07:44:21 +00:00
2015-08-16 06:59:58 +00:00
params = { "foo[bar]" : "baz" , "foo[beep]" : 42 , "foo[quux]" : "All your base are belong to us" } ;
2016-04-01 14:50:28 +00:00
assert . equal ( jQuery . param ( params , true ) , "foo%5Bbar%5D=baz&foo%5Bbeep%5D=42&foo%5Bquux%5D=All%20your%20base%20are%20belong%20to%20us" , "even more arrays" ) ;
2012-07-13 07:44:21 +00:00
2016-05-10 09:12:28 +00:00
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?" } ;
2016-04-01 14:50:28 +00:00
assert . equal ( jQuery . param ( params , true ) , "a=1&a=2&b=%5Bobject%20Object%5D&i=10&i=11&j=true&k=false&l=&l=0&m=cowboy%20hat%3F" , "huge structure" ) ;
2012-07-13 07:44:21 +00:00
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 ] } ;
2016-04-26 14:28:02 +00:00
assert . equal ( jQuery . param ( params , true ) , "a=0&a=1%2C2&a=3%2C4%2C5%2C6&a=%5Bobject%20Object%5D&a=17" , "nested arrays (not possible when traditional == true)" ) ;
2012-07-13 07:44:21 +00:00
2016-05-10 09:12:28 +00:00
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?" } ;
2016-04-01 14:50:28 +00:00
assert . equal ( 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]=&i[]=10&i[]=11&j=true&k=false&l[]=&l[]=0&m=cowboy hat?" , "huge structure, forced not traditional" ) ;
2012-07-13 07:44:21 +00:00
params = { "param1" : null } ;
2016-04-01 14:50:28 +00:00
assert . equal ( jQuery . param ( params ) , "param1=" , "Make sure that null params aren't traversed." ) ;
2012-07-13 07:44:21 +00:00
2016-03-17 14:06:11 +00:00
params = { "param1" : function ( ) { } , "param2" : function ( ) { return null ; } } ;
assert . equal ( jQuery . param ( params , false ) , "param1=¶m2=" , "object with function property that returns null value" ) ;
2015-08-16 06:59:58 +00:00
params = { "test" : { "length" : 3 , "foo" : "bar" } } ;
2016-04-01 14:50:28 +00:00
assert . equal ( jQuery . param ( params ) , "test%5Blength%5D=3&test%5Bfoo%5D=bar" , "Sub-object with a length property" ) ;
2012-07-13 07:44:21 +00:00
2015-08-07 02:49:14 +00:00
params = { "test" : [ 1 , 2 , null ] } ;
2016-04-01 14:50:28 +00:00
assert . equal ( jQuery . param ( params ) , "test%5B%5D=1&test%5B%5D=2&test%5B%5D=" , "object with array property with null value" ) ;
2018-06-20 16:07:44 +00:00
params = undefined ;
assert . equal ( jQuery . param ( params ) , "" , "jQuery.param( undefined ) === empty string" ) ;
2015-08-16 06:59:58 +00:00
} ) ;
2012-07-13 07:44:21 +00:00
2020-01-27 17:54:47 +00:00
QUnit [ jQuery . ajax ? "test" : "skip" ] ( "jQuery.param() not affected by ajaxSettings" , function ( assert ) {
2016-04-26 14:28:02 +00:00
assert . expect ( 1 ) ;
var oldTraditional = jQuery . ajaxSettings . traditional ;
jQuery . ajaxSettings . traditional = true ;
assert . equal (
jQuery . param ( { "foo" : [ "a" , "b" , "c" ] } ) ,
"foo%5B%5D=a&foo%5B%5D=b&foo%5B%5D=c" ,
"ajaxSettings.traditional is ignored"
) ;
jQuery . ajaxSettings . traditional = oldTraditional ;
} ) ;
2015-08-16 06:59:58 +00:00
QUnit . test ( "jQuery.param() Constructed prop values" , function ( assert ) {
2015-08-16 03:45:28 +00:00
assert . expect ( 4 ) ;
2012-07-13 07:44:21 +00:00
/** @constructor */
function Record ( ) {
2016-05-10 09:12:28 +00:00
this . prop = "val" ;
2012-07-13 07:44:21 +00:00
}
var MyString = String ,
MyNumber = Number ,
2015-08-16 06:59:58 +00:00
params = { "test" : new MyString ( "foo" ) } ;
2012-07-13 07:44:21 +00:00
2015-08-16 03:45:28 +00:00
assert . equal ( jQuery . param ( params , false ) , "test=foo" , "Do not mistake new String() for a plain object" ) ;
2012-07-13 07:44:21 +00:00
2015-08-16 06:59:58 +00:00
params = { "test" : new MyNumber ( 5 ) } ;
2015-08-16 03:45:28 +00:00
assert . equal ( jQuery . param ( params , false ) , "test=5" , "Do not mistake new Number() for a plain object" ) ;
2012-07-13 07:44:21 +00:00
params = { "test" : new Date ( ) } ;
2015-08-16 03:45:28 +00:00
assert . ok ( jQuery . param ( params , false ) , "(Non empty string returned) Do not mistake new Date() for a plain object" ) ;
2012-07-13 07:44:21 +00:00
// should allow non-native constructed objects
params = { "test" : new Record ( ) } ;
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery . param ( params , false ) , jQuery . param ( { "test" : { "prop" : "val" } } ) , "Allow non-native constructed objects" ) ;
} ) ;
2012-07-13 07:44:21 +00:00
2015-08-16 06:59:58 +00:00
QUnit . test ( "serialize()" , function ( assert ) {
assert . expect ( 6 ) ;
2012-07-13 07:44:21 +00:00
// Add html5 elements only for serialize because selector can't yet find them on non-html5 browsers
2015-08-16 06:59:58 +00:00
jQuery ( "#search" ) . after (
2013-01-23 17:23:46 +00:00
"<input type='email' id='html5email' name='email' value='dave@jquery.com' />" +
"<input type='number' id='html5number' name='number' value='43' />" +
"<input type='file' name='fileupload' />"
2012-07-13 07:44:21 +00:00
) ;
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery ( "#form" ) . serialize ( ) ,
2012-07-13 07:44:21 +00:00
"action=Test&radio2=on&check=on&hidden=&foo%5Bbar%5D=&name=name&search=search&email=dave%40jquery.com&number=43&select1=&select2=3&select3=1&select3=2&select5=3" ,
2015-08-16 06:59:58 +00:00
"Check form serialization as query string" ) ;
2012-07-13 07:44:21 +00:00
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery ( "input,select,textarea,button" , "#form" ) . serialize ( ) ,
2012-07-13 07:44:21 +00:00
"action=Test&radio2=on&check=on&hidden=&foo%5Bbar%5D=&name=name&search=search&email=dave%40jquery.com&number=43&select1=&select2=3&select3=1&select3=2&select5=3" ,
2015-08-16 06:59:58 +00:00
"Check input serialization as query string" ) ;
2012-07-13 07:44:21 +00:00
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery ( "#testForm" ) . serialize ( ) ,
2015-10-22 18:25:32 +00:00
"T3=%3F%0D%0AZ&H1=x&H2=&PWD=&T1=&T2=YES&My%20Name=me&S1=abc&S3=YES&S4=" ,
2015-08-16 06:59:58 +00:00
"Check form serialization as query string" ) ;
2012-07-13 07:44:21 +00:00
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery ( "input,select,textarea,button" , "#testForm" ) . serialize ( ) ,
2015-10-22 18:25:32 +00:00
"T3=%3F%0D%0AZ&H1=x&H2=&PWD=&T1=&T2=YES&My%20Name=me&S1=abc&S3=YES&S4=" ,
2015-08-16 06:59:58 +00:00
"Check input serialization as query string" ) ;
2012-07-13 07:44:21 +00:00
2015-08-16 06:59:58 +00:00
assert . equal ( jQuery ( "#form, #testForm" ) . serialize ( ) ,
2015-10-22 18:25:32 +00:00
"action=Test&radio2=on&check=on&hidden=&foo%5Bbar%5D=&name=name&search=search&email=dave%40jquery.com&number=43&select1=&select2=3&select3=1&select3=2&select5=3&T3=%3F%0D%0AZ&H1=x&H2=&PWD=&T1=&T2=YES&My%20Name=me&S1=abc&S3=YES&S4=" ,
2015-08-16 06:59:58 +00:00
"Multiple form serialization as query string" ) ;
2012-07-13 07:44:21 +00:00
2015-11-10 18:26:15 +00:00
assert . equal ( jQuery ( "#form, #testForm input, #testForm select, #testForm textarea, #testForm button" ) . serialize ( ) ,
2015-10-22 18:25:32 +00:00
"action=Test&radio2=on&check=on&hidden=&foo%5Bbar%5D=&name=name&search=search&email=dave%40jquery.com&number=43&select1=&select2=3&select3=1&select3=2&select5=3&T3=%3F%0D%0AZ&H1=x&H2=&PWD=&T1=&T2=YES&My%20Name=me&S1=abc&S3=YES&S4=" ,
2015-08-16 06:59:58 +00:00
"Mixed form/input serialization as query string" ) ;
2015-11-10 18:26:15 +00:00
2015-08-16 06:59:58 +00:00
jQuery ( "#html5email, #html5number" ) . remove ( ) ;
} ) ;