1 |
|
2 |
|
3 |
|
4 |
|
5 | var formurlencoded = require('../').default;
|
6 |
|
7 |
|
8 |
|
9 |
|
10 | describe("formurlencoded.encode", () => {
|
11 |
|
12 | var obj = {
|
13 | str: 'val',
|
14 | num: 0,
|
15 | arr: [3, { prop: false }, 1, null, 6],
|
16 | obj: { prop1: null, prop2: ['elem'] }
|
17 | };
|
18 |
|
19 | console.log(`
|
20 | var formurlencoded = require('form-urlencoded');
|
21 | var obj = {
|
22 | str : 'val',
|
23 | num : 0,
|
24 | arr : [3, {prop : false}, 1, null, 6],
|
25 | obj : {prop1 : null, prop2 : ['elem']}
|
26 | };
|
27 |
|
28 | console.log(formurlencoded(obj));
|
29 | ${formurlencoded(obj).match(/(.{1,53})/g).map(n => '// ' + n).join('\n')}
|
30 |
|
31 | console.log(formurlencoded(obj, {
|
32 | ignorenull : true,
|
33 | skipIndex : true,
|
34 | sorted : true
|
35 | }));
|
36 | ${formurlencoded(obj, {
|
37 | ignorenull: true,
|
38 | skipIndex: true,
|
39 | sorted: true
|
40 | }).match(/(.{1,53})/g).map(n => '// ' + n).join('\n')}`);
|
41 |
|
42 | it("should return encoded data", () =>
|
43 | expect(
|
44 | formurlencoded({
|
45 | propStr1: 'str1',
|
46 | propStr2: 'str2'
|
47 | }), { sorted: true }
|
48 | ).toBe('propStr1=str1&propStr2=str2'));
|
49 |
|
50 | it("should return encoded data, with array properties", () =>
|
51 | expect(
|
52 | formurlencoded({
|
53 | propStr1: 'str1',
|
54 | propStr2: 'str2',
|
55 | propArr1: ['arrStr1', 'arrStr2']
|
56 | })
|
57 | ).toBe('propStr1=str1&propStr2=str2&propArr1%5B0%5D=arrStr1&propArr1%5B1%5D=arrStr2'));
|
58 |
|
59 | it("should return encoded data, with object properties", () =>
|
60 | expect(
|
61 | formurlencoded({
|
62 | propStr1: 'str1',
|
63 | propStr2: 'str2',
|
64 | propObj1: {
|
65 | objPropStr1: 'objStr1',
|
66 | objPropStr2: 'objStr2'
|
67 | }
|
68 | })
|
69 | ).toBe('propStr1=str1&propStr2=str2&propObj1%5BobjPropStr1%5D=objStr1&propObj1%5BobjPropStr2%5D=objStr2'));
|
70 |
|
71 | it("should return encoded data, with mixed object and array properties", () =>
|
72 | expect(formurlencoded({
|
73 | propStr1: 'str1',
|
74 | propStr2: 'str2',
|
75 | propObj1: {
|
76 | objPropStr1: 'objStr1',
|
77 | objPropStr2: 'objStr2',
|
78 | objPropObj1: {
|
79 | propObj1Str1: 'obj1Str1'
|
80 | },
|
81 | objPropArr1: [{
|
82 | propArr1Obj1Str1: 'obj1Str1'
|
83 | }, {
|
84 | propArr1Obj2Str1: 'obj2Str1'
|
85 | }]
|
86 | }
|
87 | })).toBe('propStr1=str1&propStr2=str2&propObj1%5BobjPropStr1%5D=objStr1&propObj1%5BobjPropStr2%5D=objStr2&propObj1%5BobjPropObj1%5D%5BpropObj1Str1%5D=obj1Str1&propObj1%5BobjPropArr1%5D%5B0%5D%5BpropArr1Obj1Str1%5D=obj1Str1&propObj1%5BobjPropArr1%5D%5B1%5D%5BpropArr1Obj2Str1%5D=obj2Str1'));
|
88 |
|
89 | it("should return encoded data, with numbers", () =>
|
90 | expect(
|
91 | formurlencoded({ propArr1: [1, 2, 3] })
|
92 | ).toBe('propArr1%5B0%5D=1&propArr1%5B1%5D=2&propArr1%5B2%5D=3'));
|
93 |
|
94 | it("should return encoded data, with booleans", () =>
|
95 | expect(
|
96 | formurlencoded({ propArr1: [true, false, true] })
|
97 | ).toBe('propArr1%5B0%5D=true&propArr1%5B1%5D=false&propArr1%5B2%5D=true'));
|
98 |
|
99 | it("should return encoded data, with null", () =>
|
100 | expect(
|
101 | formurlencoded({
|
102 | propNull1: null,
|
103 | propStr1: 'str1'
|
104 | })
|
105 | ).toBe('propNull1=null&propStr1=str1'));
|
106 |
|
107 | it("should return encoded data, with properties sorted", () =>
|
108 | expect(
|
109 | formurlencoded({ c: 4, b: { z: 3, y: 2 }, a: 1 }, { sorted: true })
|
110 | ).toBe('a=1&b%5By%5D=2&b%5Bz%5D=3&c=4'));
|
111 |
|
112 | it("should not break when null argument is given", () => {
|
113 | expect(
|
114 | formurlencoded(null, { sorted: true })
|
115 | ).toBe(null);
|
116 |
|
117 | expect(
|
118 | formurlencoded(undefined, { sorted: true })
|
119 | ).toBe(undefined);
|
120 | });
|
121 |
|
122 | it("should properly encode all ascii characters", () => {
|
123 | var testCharEncodingString = "";
|
124 | for (var i = 0; i < 256; i++) {
|
125 | testCharEncodingString += String.fromCharCode(i);
|
126 | }
|
127 |
|
128 | expect(
|
129 | formurlencoded({
|
130 | test: testCharEncodingString
|
131 | })
|
132 | ).toBe(
|
133 | 'test=%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F+%21%22%23%24%25%26%27%28%29%2A%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E%7F%C2%80%C2%81%C2%82%C2%83%C2%84%C2%85%C2%86%C2%87%C2%88%C2%89%C2%8A%C2%8B%C2%8C%C2%8D%C2%8E%C2%8F%C2%90%C2%91%C2%92%C2%93%C2%94%C2%95%C2%96%C2%97%C2%98%C2%99%C2%9A%C2%9B%C2%9C%C2%9D%C2%9E%C2%9F%C2%A0%C2%A1%C2%A2%C2%A3%C2%A4%C2%A5%C2%A6%C2%A7%C2%A8%C2%A9%C2%AA%C2%AB%C2%AC%C2%AD%C2%AE%C2%AF%C2%B0%C2%B1%C2%B2%C2%B3%C2%B4%C2%B5%C2%B6%C2%B7%C2%B8%C2%B9%C2%BA%C2%BB%C2%BC%C2%BD%C2%BE%C2%BF%C3%80%C3%81%C3%82%C3%83%C3%84%C3%85%C3%86%C3%87%C3%88%C3%89%C3%8A%C3%8B%C3%8C%C3%8D%C3%8E%C3%8F%C3%90%C3%91%C3%92%C3%93%C3%94%C3%95%C3%96%C3%97%C3%98%C3%99%C3%9A%C3%9B%C3%9C%C3%9D%C3%9E%C3%9F%C3%A0%C3%A1%C3%A2%C3%A3%C3%A4%C3%A5%C3%A6%C3%A7%C3%A8%C3%A9%C3%AA%C3%AB%C3%AC%C3%AD%C3%AE%C3%AF%C3%B0%C3%B1%C3%B2%C3%B3%C3%B4%C3%B5%C3%B6%C3%B7%C3%B8%C3%B9%C3%BA%C3%BB%C3%BC%C3%BD%C3%BE%C3%BF'
|
134 | );
|
135 | });
|
136 |
|
137 | it("should return encoded data, without null", () =>
|
138 | expect(
|
139 | formurlencoded({ propArr1: [null, null, 1] }, { ignorenull: true })
|
140 | ).toBe('propArr1%5B2%5D=1'));
|
141 |
|
142 | it("should return encoded empty array", () =>
|
143 | expect(
|
144 | formurlencoded({
|
145 | emptyArr: []
|
146 | })
|
147 | ).toBe('emptyArr%5B%5D'));
|
148 |
|
149 | it("should return encoded empty array inside an object", () =>
|
150 | expect(
|
151 | formurlencoded({
|
152 | parent: {
|
153 | foo: 'bar',
|
154 | emptyArr: []
|
155 | }
|
156 | })
|
157 | ).toBe('parent%5Bfoo%5D=bar&parent%5BemptyArr%5D%5B%5D'));
|
158 |
|
159 | it("should return encoded array inside an object with index", () =>
|
160 | expect(
|
161 | formurlencoded({
|
162 | parent: {
|
163 | foo: 'bar',
|
164 | emptyArr: ['first', 'second']
|
165 | }
|
166 | })
|
167 | ).toBe('parent%5Bfoo%5D=bar&parent%5BemptyArr%5D%5B0%5D=first&parent%5BemptyArr%5D%5B1%5D=second'));
|
168 |
|
169 | it("should return encoded array inside an object without index", () =>
|
170 | expect(
|
171 | formurlencoded({
|
172 | parent: {
|
173 | foo: 'bar',
|
174 | emptyArr: ['first', 'second']
|
175 | }
|
176 | }, { skipIndex: true })
|
177 | ).toBe('parent%5Bfoo%5D=bar&parent%5BemptyArr%5D%5B%5D=first&parent%5BemptyArr%5D%5B%5D=second'));
|
178 |
|
179 | it("should return array with index", () =>
|
180 | expect(
|
181 | formurlencoded({
|
182 | key: ['val1']
|
183 | })
|
184 | ).toBe('key%5B0%5D=val1'));
|
185 |
|
186 | it("should return array without index", () =>
|
187 | expect(
|
188 | formurlencoded({
|
189 | key: ['val1']
|
190 | }, { skipIndex: true })
|
191 | ).toBe('key%5B%5D=val1'));
|
192 |
|
193 | it("should return encoded urls with unicode characters", () =>
|
194 | expect(
|
195 | formurlencoded({
|
196 | parent: {
|
197 | foo: '😀'
|
198 | }
|
199 | })
|
200 | ).toBe('parent%5Bfoo%5D=%F0%9F%98%80'));
|
201 | });
|