1 | var assert = require('assert');
|
2 | var decode = require('../index').decode;
|
3 | var standaloneDecode = require('../decode');
|
4 |
|
5 | describe('decode', function () {
|
6 | it('x-query-string/decode is available', function () {
|
7 | assert.deepStrictEqual(standaloneDecode, decode);
|
8 | });
|
9 |
|
10 | it('decode basic types', function () {
|
11 | var str = 'a=1&b=B&c=true&d=false';
|
12 | var result = decode(str);
|
13 | var expected = {
|
14 | a: '1',
|
15 | b: 'B',
|
16 | c: 'true',
|
17 | d: 'false'
|
18 | };
|
19 |
|
20 | assert.deepStrictEqual(expected, result);
|
21 | });
|
22 |
|
23 | it('decode null', function () {
|
24 | var str = 'a';
|
25 | var expected = { a: null };
|
26 |
|
27 | assert.deepStrictEqual(decode(str), expected);
|
28 | });
|
29 |
|
30 | it('decode emptry string', function () {
|
31 | var str = 'a=';
|
32 | var expected = { a: '' };
|
33 |
|
34 | assert.deepStrictEqual(decode(str), expected);
|
35 | });
|
36 |
|
37 | it('decode special char', function () {
|
38 | var str = 'str=a%5B0%5D%3D1';
|
39 | var expected = { str: 'a[0]=1' };
|
40 |
|
41 | assert.deepStrictEqual(decode(str), expected);
|
42 | });
|
43 |
|
44 | it('decode multi-byte string', function () {
|
45 |
|
46 | var str = 'str=%E4%BD%A0%E5%A5%BD';
|
47 | var expected = { str: '你好' };
|
48 |
|
49 | assert.deepStrictEqual(decode(str), expected);
|
50 | });
|
51 |
|
52 | it('decode emoji', function () {
|
53 | var str = 'emoji=%E2%9C%8C%EF%B8%8F';
|
54 | var expected = { emoji: '✌️' };
|
55 |
|
56 | assert.deepStrictEqual(decode(str), expected);
|
57 | });
|
58 |
|
59 | it('decode array', function () {
|
60 | var str = 'a%5B%5D=1&a%5B%5D=2';
|
61 | var expected = { a: ['1', '2'] };
|
62 |
|
63 | assert.deepStrictEqual(decode(str), expected);
|
64 | });
|
65 |
|
66 | it('decode array with index', function () {
|
67 | var str = 'a%5B0%5D=1&a%5B1%5D=2';
|
68 | var expected = { a: ['1', '2'] };
|
69 |
|
70 | assert.deepStrictEqual(decode(str), expected);
|
71 | });
|
72 |
|
73 | it('decode object', function () {
|
74 |
|
75 | var str = 'a%5Bb%5D%5Bc%5D=3';
|
76 | var expected = { a: { b: { c: '3' } } };
|
77 |
|
78 | assert.deepStrictEqual(decode(str), expected);
|
79 | });
|
80 |
|
81 | it('decode array of object', function () {
|
82 |
|
83 | var str = 'a%5B0%5D%5Bb%5D=2&a%5B1%5D%5Bc%5D=3';
|
84 | var expected = { a: [ { b: '2' }, { c: '3' } ] };
|
85 |
|
86 | assert.deepStrictEqual(decode(str), expected);
|
87 | });
|
88 |
|
89 | it('decode complex object', function () {
|
90 | var str = 'a=1&b=B&c=true&d=false&e&f%5B%5D=1&f%5B%5D=2&f%5B%5D=3&g%5Ba%5D=1&h%5B0%5D%5Ba%5D=1&h%5B1%5D%5Bb%5D=2&i%5B0%5D%5Ba%5D%5B%5D=1&i%5B0%5D%5Ba%5D%5B%5D=2&i%5B0%5D%5Ba%5D%5B%5D=3&i%5B1%5D%5Bb%5D%5Ba%5D=1&i%5B1%5D%5Bb%5D%5Bb%5D=2&i%5B1%5D%5Bb%5D%5Bc%5D%5B%5D=3&i%5B1%5D%5Bb%5D%5Bc%5D%5B%5D=4&i%5B1%5D%5Bb%5D%5Bc%5D%5B%5D=5&str=%F0%9F%8D%8E%20is%20%E8%8B%B9%E6%9E%9C%20in%20Chinese.%20%E2%9C%8C%EF%B8%8F';
|
91 | var expected = {
|
92 | a: '1',
|
93 | b: 'B',
|
94 | c: 'true',
|
95 | d: 'false',
|
96 | e: null,
|
97 | f: ['1', '2', '3'],
|
98 | g: { a: '1' },
|
99 | h: [ { a: '1' }, { b: '2' } ],
|
100 | i: [ { a: ['1', '2', '3'] }, { b: { a: '1', b: '2', c: ['3', '4', '5'] } } ],
|
101 | str: '🍎 is 苹果 in Chinese. ✌️'
|
102 | };
|
103 |
|
104 | assert.deepStrictEqual(decode(str), expected);
|
105 | });
|
106 | });
|