From f43c604bf343fbd83cf9b992c0729017af690f62 Mon Sep 17 00:00:00 2001 From: CYBAI Date: Mon, 7 Jan 2019 00:19:30 +0800 Subject: [PATCH] Implement URLSearchParams.prototype.sort() --- components/script/dom/urlsearchparams.rs | 11 +++ .../script/dom/webidls/URLSearchParams.webidl | 3 + tests/wpt/metadata/url/idlharness.any.js.ini | 13 --- .../url/urlsearchparams-sort.any.js.ini | 98 ------------------- 4 files changed, 14 insertions(+), 111 deletions(-) diff --git a/components/script/dom/urlsearchparams.rs b/components/script/dom/urlsearchparams.rs index 27f1cce7fc5..57c86898482 100644 --- a/components/script/dom/urlsearchparams.rs +++ b/components/script/dom/urlsearchparams.rs @@ -168,6 +168,17 @@ impl URLSearchParamsMethods for URLSearchParams { self.update_steps(); } + // https://url.spec.whatwg.org/#dom-urlsearchparams-sort + fn Sort(&self) { + // Step 1. + self.list + .borrow_mut() + .sort_by(|(a, _), (b, _)| a.encode_utf16().cmp(b.encode_utf16())); + + // Step 2. + self.update_steps(); + } + // https://url.spec.whatwg.org/#stringification-behavior fn Stringifier(&self) -> DOMString { DOMString::from(self.serialize_utf8()) diff --git a/components/script/dom/webidls/URLSearchParams.webidl b/components/script/dom/webidls/URLSearchParams.webidl index 8e72b207c0c..1c495cde1a1 100644 --- a/components/script/dom/webidls/URLSearchParams.webidl +++ b/components/script/dom/webidls/URLSearchParams.webidl @@ -16,6 +16,9 @@ interface URLSearchParams { sequence getAll(USVString name); boolean has(USVString name); void set(USVString name, USVString value); + + void sort(); + // Be careful with implementing iterable interface. // Search params might be mutated by URL::SetSearch while iterating (discussed in PR #10351). iterable; diff --git a/tests/wpt/metadata/url/idlharness.any.js.ini b/tests/wpt/metadata/url/idlharness.any.js.ini index e643f436ad8..bcc77ddf03d 100644 --- a/tests/wpt/metadata/url/idlharness.any.js.ini +++ b/tests/wpt/metadata/url/idlharness.any.js.ini @@ -2,15 +2,9 @@ [idlharness] expected: FAIL - [URLSearchParams interface: operation sort()] - expected: FAIL - [Testing Symbol.iterator property of iterable interface URLSearchParams] expected: FAIL - [URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "sort()" with the proper type] - expected: FAIL - [URL interface: legacy window alias] expected: FAIL @@ -19,12 +13,5 @@ [idlharness] expected: FAIL - [URLSearchParams interface: operation sort()] - expected: FAIL - [Testing Symbol.iterator property of iterable interface URLSearchParams] expected: FAIL - - [URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "sort()" with the proper type] - expected: FAIL - diff --git a/tests/wpt/metadata/url/urlsearchparams-sort.any.js.ini b/tests/wpt/metadata/url/urlsearchparams-sort.any.js.ini index 7502f7ffaa9..ea25a6c5496 100644 --- a/tests/wpt/metadata/url/urlsearchparams-sort.any.js.ini +++ b/tests/wpt/metadata/url/urlsearchparams-sort.any.js.ini @@ -1,105 +1,7 @@ [urlsearchparams-sort.any.html] - [Parse and sort: a🌈&a💩] - expected: FAIL - - [URL parse and sort: z=z&a=a&z=y&a=b&z=x&a=c&z=w&a=d&z=v&a=e&z=u&a=f&z=t&a=g] - expected: FAIL - - [URL parse and sort: bbb&bb&aaa&aa=x&aa=y] - expected: FAIL - - [URL parse and sort: é&e�&é] - expected: FAIL - - [Parse and sort: ffi&🌈] - expected: FAIL - - [URL parse and sort: �=x&&�=a] - expected: FAIL - - [Parse and sort: z=z&=f&=t&=x] - expected: FAIL - [Sorting non-existent params removes ? from URL] expected: FAIL - [Parse and sort: é&e�&é] - expected: FAIL - - [URL parse and sort: ffi&🌈] - expected: FAIL - - [Parse and sort: z=z&a=a&z=y&a=b&z=x&a=c&z=w&a=d&z=v&a=e&z=u&a=f&z=t&a=g] - expected: FAIL - - [Parse and sort: z=b&a=b&z=a&a=a] - expected: FAIL - - [Parse and sort: bbb&bb&aaa&aa=x&aa=y] - expected: FAIL - - [Parse and sort: �=x&&�=a] - expected: FAIL - - [URL parse and sort: a🌈&a💩] - expected: FAIL - - [URL parse and sort: z=b&a=b&z=a&a=a] - expected: FAIL - - [URL parse and sort: z=z&=f&=t&=x] - expected: FAIL - - [urlsearchparams-sort.any.worker.html] - [Parse and sort: a🌈&a💩] - expected: FAIL - - [URL parse and sort: z=z&a=a&z=y&a=b&z=x&a=c&z=w&a=d&z=v&a=e&z=u&a=f&z=t&a=g] - expected: FAIL - - [URL parse and sort: bbb&bb&aaa&aa=x&aa=y] - expected: FAIL - - [URL parse and sort: é&e�&é] - expected: FAIL - - [Parse and sort: ffi&🌈] - expected: FAIL - - [URL parse and sort: �=x&&�=a] - expected: FAIL - - [Parse and sort: z=z&=f&=t&=x] - expected: FAIL - [Sorting non-existent params removes ? from URL] expected: FAIL - - [Parse and sort: é&e�&é] - expected: FAIL - - [URL parse and sort: ffi&🌈] - expected: FAIL - - [Parse and sort: z=z&a=a&z=y&a=b&z=x&a=c&z=w&a=d&z=v&a=e&z=u&a=f&z=t&a=g] - expected: FAIL - - [Parse and sort: z=b&a=b&z=a&a=a] - expected: FAIL - - [Parse and sort: bbb&bb&aaa&aa=x&aa=y] - expected: FAIL - - [Parse and sort: �=x&&�=a] - expected: FAIL - - [URL parse and sort: a🌈&a💩] - expected: FAIL - - [URL parse and sort: z=b&a=b&z=a&a=a] - expected: FAIL - - [URL parse and sort: z=z&=f&=t&=x] - expected: FAIL -