Index: LayoutTests/fast/domurl/url-searchparams-constructor.html |
diff --git a/LayoutTests/fast/domurl/url-searchparams-constructor.html b/LayoutTests/fast/domurl/url-searchparams-constructor.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c286bc06f9d699ca17ada1c9cbac6e3b177f425a |
--- /dev/null |
+++ b/LayoutTests/fast/domurl/url-searchparams-constructor.html |
@@ -0,0 +1,143 @@ |
+<!DOCTYPE html> |
+<meta charset="utf-8"> |
+<link rel="help" href="http://url.spec.whatwg.org/#urlsearchparams"> |
+<script src="../../resources/testharness.js"></script> |
+<script src="../../resources/testharnessreport.js"></script> |
+<script> |
+function assert_type_error(f, msg) { |
+ var e; |
+ try { |
+ f(); |
+ } catch (ex) { |
+ e = ex; |
+ } |
+ assert_true(e instanceof TypeError, "Expected a TypeError"); |
+ if (msg) |
+ assert_equals(e.message, msg); |
+} |
+ |
+test(function() { |
+ var params = new URLSearchParams(); |
+ assert_equals(params + "", ""); |
+ params = new URLSearchParams(""); |
+ assert_equals(params + "", ""); |
+ params = new URLSearchParams("a=b"); |
+ assert_equals(params + "", "a=b"); |
+ params = new URLSearchParams(params); |
+ assert_equals(params + "", "a=b"); |
+}, "Basic URLSearchParams construction"); |
+ |
+test(function() { |
+ assert_type_error(function () { URLSearchParams(); }, "Failed to construct 'URLSearchParams': Please use the 'new' operator, this DOM object constructor cannot be called as a function."); |
+ assert_type_error(function () { new URLSearchParams(DOMException.prototype); }); |
+ |
+ var params = new URLSearchParams(""); |
+ assert_true(params != null, "constructor returned non-null value."); |
+ assert_equals(params.__proto__, URLSearchParams.prototype, "expected URLSearchParams.prototype as prototype."); |
+ |
+ params = new URLSearchParams({}); |
+ assert_equals(params + "", "%5Bobject+Object%5D="); |
+}, "URLSearchParams constructor, empty."); |
+ |
+test(function() { |
+ var params = new URLSearchParams("a=b"); |
+ assert_true(params != null, "constructor returned non-null value."); |
+ assert_true(params.has("a"), "Search params object has name 'a'"); |
+ assert_false(params.has("b"), "Search params object has not got name 'b'"); |
+ |
+ var params = new URLSearchParams("a=b&c"); |
+ assert_true(params != null, "constructor returned non-null value."); |
+ assert_true(params.has("a"), "Search params object has name 'a'"); |
+ assert_true(params.has("c"), "Search params object has name 'c'"); |
+ |
+ var params = new URLSearchParams("&a&&& &&&&&a+b=& c&m%c3%b8%c3%b8"); |
+ assert_true(params != null, "constructor returned non-null value."); |
+ assert_true(params.has("a"), "Search params object has name 'a'"); |
+ assert_true(params.has("a b"), "Search params object has name 'a b'"); |
+ assert_true(params.has(" "), "Search params object has name ' '"); |
+ assert_false(params.has("c"), "Search params object did not have the name 'c'"); |
+ assert_true(params.has(" c"), "Search params object has name ' c'"); |
+ assert_true(params.has("møø"), "Search params object has name 'møø'"); |
+ |
+}, "URLSearchParams constructor, string."); |
+ |
+test(function() { |
+ var seed = new URLSearchParams("a=b&c=d"); |
+ var params = new URLSearchParams(seed); |
+ assert_true(params != null, "constructor returned non-null value."); |
+ assert_equals(params.get("a"), "b"); |
+ assert_equals(params.get("c"), "d"); |
+ assert_false(params.has("d")); |
+ // The name-value pairs are copied when created; later updates |
+ // should not be observable. |
+ seed.append("e", "f"); |
+ assert_false(params.has("e")); |
+ |
+ params.append("g", "h"); |
+ assert_false(seed.has("g")); |
+ |
+}, "URLSearchParams constructor, object."); |
+ |
+test(function() { |
+ var params = new URLSearchParams("a=b+c"); |
+ assert_equals(params.get("a"), "b c"); |
+ params = new URLSearchParams("a+b=c"); |
+ assert_equals(params.get("a b"), "c"); |
+}, "Parse +"); |
+ |
+test(function() { |
+ var params = new URLSearchParams("a=b c"); |
+ assert_equals(params.get("a"), "b c"); |
+ params = new URLSearchParams("a b=c"); |
+ assert_equals(params.get("a b"), "c"); |
+}, "Parse space"); |
+ |
+test(function() { |
+ var params = new URLSearchParams("a=b%20c"); |
+ assert_equals(params.get("a"), "b c"); |
+ params = new URLSearchParams("a%20b=c"); |
+ assert_equals(params.get("a b"), "c"); |
+}, "Parse %20"); |
+ |
+test(function() { |
+ var params = new URLSearchParams("a=b\0c"); |
+ assert_equals(params.get("a"), "b\0c"); |
+ params = new URLSearchParams("a\0b=c"); |
+ assert_equals(params.get("a\0b"), "c"); |
+}, "Parse \\0"); |
+ |
+test(function() { |
+ var params = new URLSearchParams("a=b%00c"); |
+ assert_equals(params.get("a"), "b\0c"); |
+ params = new URLSearchParams("a%00b=c"); |
+ assert_equals(params.get("a\0b"), "c"); |
+}, "Parse %00"); |
+ |
+test(function() { |
+ var params = new URLSearchParams("a=b\u2384"); |
+ assert_equals(params.get("a"), "b\u2384"); |
+ params = new URLSearchParams("a\u2384b=c"); |
+ assert_equals(params.get("a\u2384b"), "c"); |
+}, "Parse \u2384"); // Unicode Character "COMPOSITION SYMBOL" (U+2384) |
+ |
+test(function() { |
+ var params = new URLSearchParams("a=b%e2%8e%84"); |
+ assert_equals(params.get("a"), "b\u2384"); |
+ params = new URLSearchParams("a%e2%8e%84b=c"); |
+ assert_equals(params.get("a\u2384b"), "c"); |
+}, "Parse %e2%8e%84"); // Unicode Character "COMPOSITION SYMBOL" (U+2384) |
+ |
+test(function() { |
+ var params = new URLSearchParams('a=b\uD83D\uDCA9c'); |
+ assert_equals(params.get('a'), 'b\uD83D\uDCA9c'); |
+ params = new URLSearchParams('a\uD83D\uDCA9b=c'); |
+ assert_equals(params.get('a\uD83D\uDCA9b'), 'c'); |
+}, 'Parse \uD83D\uDCA9'); // Unicode Character 'PILE OF POO' (U+1F4A9) |
+ |
+test(function() { |
+ var params = new URLSearchParams('a=b%f0%9f%92%a9c'); |
+ assert_equals(params.get('a'), 'b\uD83D\uDCA9c'); |
+ params = new URLSearchParams('a%f0%9f%92%a9b=c'); |
+ assert_equals(params.get('a\uD83D\uDCA9b'), 'c'); |
+}, 'Parse %f0%9f%92%a9'); // Unicode Character 'PILE OF POO' (U+1F4A9) |
+</script> |