Remove leading question mark when constructing URLSearchParams

This commit is contained in:
CYBAI 2018-12-25 12:19:06 +08:00
parent f4aafe8caa
commit 9de8e7adc0
3 changed files with 17 additions and 4 deletions

View file

@ -54,9 +54,17 @@ impl URLSearchParams {
match init { match init {
Some(USVStringOrURLSearchParams::USVString(init)) => { Some(USVStringOrURLSearchParams::USVString(init)) => {
// Step 2. // Step 2.
*query.list.borrow_mut() = form_urlencoded::parse(init.0.as_bytes()) let init_bytes = match init.0.chars().next() {
.into_owned() Some(first_char) if first_char == '?' => {
.collect(); let (_, other_bytes) = init.0.as_bytes().split_at(1);
other_bytes
},
_ => init.0.as_bytes(),
};
*query.list.borrow_mut() =
form_urlencoded::parse(init_bytes).into_owned().collect();
}, },
Some(USVStringOrURLSearchParams::URLSearchParams(init)) => { Some(USVStringOrURLSearchParams::URLSearchParams(init)) => {
// Step 3. // Step 3.

View file

@ -674610,7 +674610,7 @@
"testharness" "testharness"
], ],
"url/urlsearchparams-constructor.any.js": [ "url/urlsearchparams-constructor.any.js": [
"6fff03f00fdddd915f91bbec7973ebc1326b3b5a", "398021dde2f35f427399c639871bfbb8106a3279",
"testharness" "testharness"
], ],
"url/urlsearchparams-delete.any.js": [ "url/urlsearchparams-delete.any.js": [

View file

@ -14,6 +14,11 @@ test(function() {
assert_equals(params.toString(), "") assert_equals(params.toString(), "")
}, "URLSearchParams constructor, no arguments") }, "URLSearchParams constructor, no arguments")
test(function () {
var params = new URLSearchParams("?a=b")
assert_equals(params.toString(), "a=b")
}, 'URLSearchParams constructor, remove leading "?"')
test(() => { test(() => {
var params = new URLSearchParams(DOMException); var params = new URLSearchParams(DOMException);
assert_equals(params.toString(), "INDEX_SIZE_ERR=1&DOMSTRING_SIZE_ERR=2&HIERARCHY_REQUEST_ERR=3&WRONG_DOCUMENT_ERR=4&INVALID_CHARACTER_ERR=5&NO_DATA_ALLOWED_ERR=6&NO_MODIFICATION_ALLOWED_ERR=7&NOT_FOUND_ERR=8&NOT_SUPPORTED_ERR=9&INUSE_ATTRIBUTE_ERR=10&INVALID_STATE_ERR=11&SYNTAX_ERR=12&INVALID_MODIFICATION_ERR=13&NAMESPACE_ERR=14&INVALID_ACCESS_ERR=15&VALIDATION_ERR=16&TYPE_MISMATCH_ERR=17&SECURITY_ERR=18&NETWORK_ERR=19&ABORT_ERR=20&URL_MISMATCH_ERR=21&QUOTA_EXCEEDED_ERR=22&TIMEOUT_ERR=23&INVALID_NODE_TYPE_ERR=24&DATA_CLONE_ERR=25") assert_equals(params.toString(), "INDEX_SIZE_ERR=1&DOMSTRING_SIZE_ERR=2&HIERARCHY_REQUEST_ERR=3&WRONG_DOCUMENT_ERR=4&INVALID_CHARACTER_ERR=5&NO_DATA_ALLOWED_ERR=6&NO_MODIFICATION_ALLOWED_ERR=7&NOT_FOUND_ERR=8&NOT_SUPPORTED_ERR=9&INUSE_ATTRIBUTE_ERR=10&INVALID_STATE_ERR=11&SYNTAX_ERR=12&INVALID_MODIFICATION_ERR=13&NAMESPACE_ERR=14&INVALID_ACCESS_ERR=15&VALIDATION_ERR=16&TYPE_MISMATCH_ERR=17&SECURITY_ERR=18&NETWORK_ERR=19&ABORT_ERR=20&URL_MISMATCH_ERR=21&QUOTA_EXCEEDED_ERR=22&TIMEOUT_ERR=23&INVALID_NODE_TYPE_ERR=24&DATA_CLONE_ERR=25")