OLD | NEW |
(Empty) | |
| 1 <!DOCTYPE html> |
| 2 <meta charset="utf-8"> |
| 3 <link rel="help" href="http://url.spec.whatwg.org/#urlsearchparams"> |
| 4 <script src="../../resources/testharness.js"></script> |
| 5 <script src="../../resources/testharnessreport.js"></script> |
| 6 <script> |
| 7 function assert_type_error(f, msg) { |
| 8 var e; |
| 9 try { |
| 10 f(); |
| 11 } catch (ex) { |
| 12 e = ex; |
| 13 } |
| 14 assert_true(e instanceof TypeError, "Expected a TypeError"); |
| 15 if (msg) |
| 16 assert_equals(e.message, msg); |
| 17 } |
| 18 |
| 19 test(function() { |
| 20 var params = new URLSearchParams(); |
| 21 assert_equals(params + "", ""); |
| 22 params = new URLSearchParams(""); |
| 23 assert_equals(params + "", ""); |
| 24 params = new URLSearchParams("a=b"); |
| 25 assert_equals(params + "", "a=b"); |
| 26 params = new URLSearchParams(params); |
| 27 assert_equals(params + "", "a=b"); |
| 28 }, "Basic URLSearchParams construction"); |
| 29 |
| 30 test(function() { |
| 31 assert_type_error(function () { URLSearchParams(); }, "Failed to construct '
URLSearchParams': Please use the 'new' operator, this DOM object constructor can
not be called as a function."); |
| 32 assert_type_error(function () { new URLSearchParams(DOMException.prototype);
}); |
| 33 |
| 34 var params = new URLSearchParams(""); |
| 35 assert_true(params != null, "constructor returned non-null value."); |
| 36 assert_equals(params.__proto__, URLSearchParams.prototype, "expected URLSear
chParams.prototype as prototype."); |
| 37 |
| 38 params = new URLSearchParams({}); |
| 39 assert_equals(params + "", "%5Bobject+Object%5D="); |
| 40 }, "URLSearchParams constructor, empty."); |
| 41 |
| 42 test(function() { |
| 43 var params = new URLSearchParams("a=b"); |
| 44 assert_true(params != null, "constructor returned non-null value."); |
| 45 assert_true(params.has("a"), "Search params object has name 'a'"); |
| 46 assert_false(params.has("b"), "Search params object has not got name 'b'"); |
| 47 |
| 48 var params = new URLSearchParams("a=b&c"); |
| 49 assert_true(params != null, "constructor returned non-null value."); |
| 50 assert_true(params.has("a"), "Search params object has name 'a'"); |
| 51 assert_true(params.has("c"), "Search params object has name 'c'"); |
| 52 |
| 53 var params = new URLSearchParams("&a&&& &&&&&a+b=& c&m%c3%b8%c3%b8"); |
| 54 assert_true(params != null, "constructor returned non-null value."); |
| 55 assert_true(params.has("a"), "Search params object has name 'a'"); |
| 56 assert_true(params.has("a b"), "Search params object has name 'a b'"); |
| 57 assert_true(params.has(" "), "Search params object has name ' '"); |
| 58 assert_false(params.has("c"), "Search params object did not have the name 'c
'"); |
| 59 assert_true(params.has(" c"), "Search params object has name ' c'"); |
| 60 assert_true(params.has("møø"), "Search params object has name 'møø'"); |
| 61 |
| 62 }, "URLSearchParams constructor, string."); |
| 63 |
| 64 test(function() { |
| 65 var seed = new URLSearchParams("a=b&c=d"); |
| 66 var params = new URLSearchParams(seed); |
| 67 assert_true(params != null, "constructor returned non-null value."); |
| 68 assert_equals(params.get("a"), "b"); |
| 69 assert_equals(params.get("c"), "d"); |
| 70 assert_false(params.has("d")); |
| 71 // The name-value pairs are copied when created; later updates |
| 72 // should not be observable. |
| 73 seed.append("e", "f"); |
| 74 assert_false(params.has("e")); |
| 75 |
| 76 params.append("g", "h"); |
| 77 assert_false(seed.has("g")); |
| 78 |
| 79 }, "URLSearchParams constructor, object."); |
| 80 |
| 81 test(function() { |
| 82 var params = new URLSearchParams("a=b+c"); |
| 83 assert_equals(params.get("a"), "b c"); |
| 84 params = new URLSearchParams("a+b=c"); |
| 85 assert_equals(params.get("a b"), "c"); |
| 86 }, "Parse +"); |
| 87 |
| 88 test(function() { |
| 89 var params = new URLSearchParams("a=b c"); |
| 90 assert_equals(params.get("a"), "b c"); |
| 91 params = new URLSearchParams("a b=c"); |
| 92 assert_equals(params.get("a b"), "c"); |
| 93 }, "Parse space"); |
| 94 |
| 95 test(function() { |
| 96 var params = new URLSearchParams("a=b%20c"); |
| 97 assert_equals(params.get("a"), "b c"); |
| 98 params = new URLSearchParams("a%20b=c"); |
| 99 assert_equals(params.get("a b"), "c"); |
| 100 }, "Parse %20"); |
| 101 |
| 102 test(function() { |
| 103 var params = new URLSearchParams("a=b\0c"); |
| 104 assert_equals(params.get("a"), "b\0c"); |
| 105 params = new URLSearchParams("a\0b=c"); |
| 106 assert_equals(params.get("a\0b"), "c"); |
| 107 }, "Parse \\0"); |
| 108 |
| 109 test(function() { |
| 110 var params = new URLSearchParams("a=b%00c"); |
| 111 assert_equals(params.get("a"), "b\0c"); |
| 112 params = new URLSearchParams("a%00b=c"); |
| 113 assert_equals(params.get("a\0b"), "c"); |
| 114 }, "Parse %00"); |
| 115 |
| 116 test(function() { |
| 117 var params = new URLSearchParams("a=b\u2384"); |
| 118 assert_equals(params.get("a"), "b\u2384"); |
| 119 params = new URLSearchParams("a\u2384b=c"); |
| 120 assert_equals(params.get("a\u2384b"), "c"); |
| 121 }, "Parse \u2384"); // Unicode Character "COMPOSITION SYMBOL" (U+2384) |
| 122 |
| 123 test(function() { |
| 124 var params = new URLSearchParams("a=b%e2%8e%84"); |
| 125 assert_equals(params.get("a"), "b\u2384"); |
| 126 params = new URLSearchParams("a%e2%8e%84b=c"); |
| 127 assert_equals(params.get("a\u2384b"), "c"); |
| 128 }, "Parse %e2%8e%84"); // Unicode Character "COMPOSITION SYMBOL" (U+2384) |
| 129 |
| 130 test(function() { |
| 131 var params = new URLSearchParams('a=b\uD83D\uDCA9c'); |
| 132 assert_equals(params.get('a'), 'b\uD83D\uDCA9c'); |
| 133 params = new URLSearchParams('a\uD83D\uDCA9b=c'); |
| 134 assert_equals(params.get('a\uD83D\uDCA9b'), 'c'); |
| 135 }, 'Parse \uD83D\uDCA9'); // Unicode Character 'PILE OF POO' (U+1F4A9) |
| 136 |
| 137 test(function() { |
| 138 var params = new URLSearchParams('a=b%f0%9f%92%a9c'); |
| 139 assert_equals(params.get('a'), 'b\uD83D\uDCA9c'); |
| 140 params = new URLSearchParams('a%f0%9f%92%a9b=c'); |
| 141 assert_equals(params.get('a\uD83D\uDCA9b'), 'c'); |
| 142 }, 'Parse %f0%9f%92%a9'); // Unicode Character 'PILE OF POO' (U+1F4A9) |
| 143 </script> |
OLD | NEW |