-
-
Notifications
You must be signed in to change notification settings - Fork 35.4k
Expand file tree
/
Copy pathtest-querystring-escape.js
More file actions
50 lines (43 loc) · 1.63 KB
/
test-querystring-escape.js
File metadata and controls
50 lines (43 loc) · 1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
'use strict';
require('../common');
const assert = require('assert');
const qs = require('querystring');
assert.strictEqual(qs.escape(5), '5');
assert.strictEqual(qs.escape('test'), 'test');
assert.strictEqual(qs.escape({}), '%5Bobject%20Object%5D');
assert.strictEqual(qs.escape([5, 10]), '5%2C10');
assert.strictEqual(qs.escape('Ŋōđĕ'), '%C5%8A%C5%8D%C4%91%C4%95');
assert.strictEqual(qs.escape('testŊōđĕ'), 'test%C5%8A%C5%8D%C4%91%C4%95');
assert.strictEqual(
qs.escape(`${String.fromCharCode(0xD800 + 1)}${String.fromCharCode(0xDC00)}`),
'%F0%90%90%80');
for (const invalid of [
String.fromCharCode(0xD800 + 1),
`${String.fromCharCode(0xD800 + 1)}test`,
`${String.fromCharCode(0xDC00)}test`,
`${String.fromCharCode(0xD800 + 1)}${String.fromCharCode(0x41)}`,
`${String.fromCharCode(0xD800 + 1)}${String.fromCharCode(0xD800)}`,
]) {
assert.throws(
() => qs.escape(invalid),
{
code: 'ERR_INVALID_URI',
name: 'URIError',
message: 'URI malformed',
},
);
}
// Using toString for objects
assert.strictEqual(
qs.escape({ test: 5, toString: () => 'test', valueOf: () => 10 }),
'test'
);
// `toString` is not callable, must throw an error.
// Error message will vary between different JavaScript engines, so only check
// that it is a `TypeError`.
assert.throws(() => qs.escape({ toString: 5 }), TypeError);
// Should use valueOf instead of non-callable toString.
assert.strictEqual(qs.escape({ toString: 5, valueOf: () => 'test' }), 'test');
// Error message will vary between different JavaScript engines, so only check
// that it is a `TypeError`.
assert.throws(() => qs.escape(Symbol('test')), TypeError);