1 | var prettyjson = process.env.EXPRESS_COV ? require('../lib-cov/prettyjson') : require('../lib/prettyjson');
|
2 | var should = require('should');
|
3 |
|
4 | describe('prettyjson general tests', function() {
|
5 |
|
6 | it("should output a string exactly equal as the input", function() {
|
7 |
|
8 | var input = 'This is a string';
|
9 | var output = prettyjson.render(input);
|
10 |
|
11 | output.should.equal(input);
|
12 | });
|
13 |
|
14 | it("should output a string with indentation", function() {
|
15 |
|
16 | var input = 'This is a string';
|
17 | var output = prettyjson.render(input, {}, 4);
|
18 |
|
19 | output.should.equal(' ' + input);
|
20 | });
|
21 |
|
22 | it("should output a multiline string with indentation", function() {
|
23 |
|
24 | var input = 'multiple\nlines'
|
25 | var output = prettyjson.render(input, {}, 4);
|
26 |
|
27 | output.should.equal(' """\n multiple\n lines\n """');
|
28 | });
|
29 |
|
30 | it("should output an array of strings", function() {
|
31 |
|
32 | var input = ['first string', 'second string'];
|
33 | var output = prettyjson.render(input);
|
34 |
|
35 | output.should.equal([
|
36 | '- '.green + input[0],
|
37 | '- '.green + input[1]
|
38 | ].join('\n'));
|
39 | });
|
40 |
|
41 | it("should output an array of arrays", function() {
|
42 |
|
43 | var input = ['first string', ['nested 1', 'nested 2'], 'second string'];
|
44 | var output = prettyjson.render(input);
|
45 |
|
46 | output.should.equal([
|
47 | '- '.green + input[0],
|
48 | '- '.green,
|
49 | ' ' + '- '.green + input[1][0],
|
50 | ' ' + '- '.green + input[1][1],
|
51 | '- '.green + input[2]
|
52 | ].join('\n'));
|
53 | });
|
54 |
|
55 | it("should output a hash of strings", function() {
|
56 |
|
57 | var input = {param1: 'first string', param2: 'second string'};
|
58 | var output = prettyjson.render(input);
|
59 |
|
60 | output.should.equal([
|
61 | 'param1: '.green + 'first string',
|
62 | 'param2: '.green + 'second string'
|
63 | ].join('\n'));
|
64 | });
|
65 |
|
66 | it("should output a hash of hashes", function() {
|
67 |
|
68 | var input = {first_param: {subparam: 'first string', subparam2: 'another string'}, second_param: 'second string'};
|
69 | var output = prettyjson.render(input);
|
70 |
|
71 | output.should.equal([
|
72 | 'first_param: '.green,
|
73 | ' ' + 'subparam: '.green + ' first string',
|
74 | ' ' + 'subparam2: '.green + 'another string',
|
75 | 'second_param: '.green + 'second string'
|
76 | ].join('\n'));
|
77 | });
|
78 |
|
79 | it("should indent correctly the hashes keys", function() {
|
80 |
|
81 | var input = {very_large_param: 'first string', param: 'second string'};
|
82 | var output = prettyjson.render(input);
|
83 |
|
84 | output.should.equal([
|
85 | 'very_large_param: '.green + 'first string',
|
86 | 'param: '.green + ' second string'
|
87 | ].join('\n'));
|
88 | });
|
89 |
|
90 | it("should output a really nested object", function() {
|
91 |
|
92 | var input = {
|
93 | first_param: {
|
94 | subparam: 'first string',
|
95 | subparam2: 'another string',
|
96 | subparam3: ["different", "values", "in an array"]
|
97 | },
|
98 | second_param: 'second string',
|
99 | an_array: [{
|
100 | param3: 'value',
|
101 | param10: 'other value'
|
102 | }],
|
103 | empty_array: []
|
104 | };
|
105 |
|
106 | var output = prettyjson.render(input);
|
107 |
|
108 | output.should.equal([
|
109 | 'first_param: '.green,
|
110 | ' ' + 'subparam: '.green + ' first string',
|
111 | ' ' + 'subparam2: '.green + 'another string',
|
112 | ' ' + 'subparam3: '.green,
|
113 | ' ' + '- '.green + 'different',
|
114 | ' ' + '- '.green + 'values',
|
115 | ' ' + '- '.green + 'in an array',
|
116 | 'second_param: '.green + 'second string',
|
117 | 'an_array: '.green,
|
118 | ' ' + '- '.green,
|
119 | ' ' + 'param3: '.green + ' value',
|
120 | ' ' + 'param10: '.green + 'other value',
|
121 | 'empty_array: '.green,
|
122 | ' (empty array)'
|
123 | ].join('\n'));
|
124 | });
|
125 |
|
126 | it("should allow to configure colors for hash keys", function() {
|
127 | var input = {param1: 'first string', param2: 'second string'};
|
128 | var output = prettyjson.render(input, {keysColor: 'blue'});
|
129 |
|
130 | output.should.equal([
|
131 | 'param1: '.blue + 'first string',
|
132 | 'param2: '.blue + 'second string'
|
133 | ].join('\n'));
|
134 | });
|
135 |
|
136 | it("should allow to configure colors for numbers", function() {
|
137 | var input = {param1: 17, param2: 22.3};
|
138 | var output = prettyjson.render(input, {numberColor: 'red'});
|
139 |
|
140 | output.should.equal([
|
141 | 'param1: '.green + '17'.red,
|
142 | 'param2: '.green + '22.3'.red
|
143 | ].join('\n'));
|
144 | });
|
145 |
|
146 | it("should allow to configure rainbow as color", function() {
|
147 | var input = {param_long: 'first string', param2: 'second string'};
|
148 | var output = prettyjson.render(input, {keysColor: 'rainbow'});
|
149 |
|
150 | output.should.equal([
|
151 | 'param_long: '.rainbow + 'first string',
|
152 | 'param2: '.rainbow + ' second string'
|
153 | ].join('\n'));
|
154 | });
|
155 |
|
156 | it("should allow to configure the default indentation", function() {
|
157 | var input = {param: ['first string', "second string"]};
|
158 | var output = prettyjson.render(input, {defaultIndentation: 4});
|
159 |
|
160 | output.should.equal([
|
161 | 'param: '.green,
|
162 | ' ' + '- '.green + 'first string',
|
163 | ' ' + '- '.green + 'second string'
|
164 | ].join('\n'));
|
165 | });
|
166 |
|
167 | it("should allow to configure the empty message for arrays", function() {
|
168 | var input = [];
|
169 | var output = prettyjson.render(input, {emptyArrayMsg: '(empty)'});
|
170 |
|
171 | output.should.equal([
|
172 | '(empty)'
|
173 | ].join('\n'));
|
174 | });
|
175 |
|
176 | it("should allow to configure colors for strings", function() {
|
177 | var input = {param1: 'first string', param2: 'second string'};
|
178 | var output = prettyjson.render(input, {keysColor: 'blue', stringColor: 'red'});
|
179 |
|
180 | output.should.equal([
|
181 | 'param1: '.blue + 'first string'.red,
|
182 | 'param2: '.blue + 'second string'.red
|
183 | ].join('\n'));
|
184 | });
|
185 |
|
186 | it("should allow to not use colors", function() {
|
187 | var input = {param1: 'first string', param2: ['second string']};
|
188 | var output = prettyjson.render(input, {noColor: true});
|
189 |
|
190 | output.should.equal([
|
191 | 'param1: first string',
|
192 | 'param2: ',
|
193 | ' - second string'
|
194 | ].join('\n'));
|
195 | });
|
196 |
|
197 | it("should allow to print simple arrays inline", function() {
|
198 | var input = {installs: ['first string', 'second string', false, 13]};
|
199 | var output = prettyjson.render(input, {inlineArrays: true});
|
200 |
|
201 | output.should.equal(
|
202 | 'installs: '.green + 'first string, second string, false, 13');
|
203 |
|
204 | input = {installs: [ ['first string', 'second string'], 'third string']};
|
205 | output = prettyjson.render(input, {inlineArrays: true});
|
206 |
|
207 | output.should.equal([
|
208 | 'installs: '.green,
|
209 | ' ' + '- '.green + 'first string, second string',
|
210 | ' ' + '- '.green + 'third string'
|
211 | ].join('\n'));
|
212 | });
|
213 |
|
214 | it("should not print an object prototype", function() {
|
215 | var Input = function() {
|
216 | this.param1 = 'first string';
|
217 | this.param2 = 'second string';
|
218 | };
|
219 | Input.prototype = {randomProperty: 'idontcare'};
|
220 |
|
221 | var output = prettyjson.render(new Input);
|
222 |
|
223 | output.should.equal([
|
224 | 'param1: '.green + 'first string',
|
225 | 'param2: '.green + 'second string'
|
226 | ].join('\n'));
|
227 | });
|
228 | });
|
229 |
|
230 | describe('Printing numbers, booleans and other objects', function() {
|
231 | it("should print numbers correctly ", function() {
|
232 | var input = 12345;
|
233 | var output = prettyjson.render(input, {}, 4);
|
234 |
|
235 | output.should.equal(' ' + '12345'.blue);
|
236 | });
|
237 |
|
238 | it("should print booleans correctly ", function() {
|
239 | var input = true;
|
240 | var output = prettyjson.render(input, {}, 4);
|
241 |
|
242 | output.should.equal(' ' + 'true'.green);
|
243 |
|
244 | input = false;
|
245 | output = prettyjson.render(input, {}, 4);
|
246 |
|
247 | output.should.equal(' ' + 'false'.red);
|
248 | });
|
249 |
|
250 | it("should print a null object correctly ", function() {
|
251 | var input = null;
|
252 | var output = prettyjson.render(input, {}, 4);
|
253 |
|
254 | output.should.equal(' ' + 'null'.grey);
|
255 | });
|
256 |
|
257 | it("should print an Error correctly ", function() {
|
258 | Error.stackTraceLimit = 1;
|
259 | var input = new Error('foo');
|
260 | var stack = input.stack.split('\n');
|
261 | var output = prettyjson.render(input, {}, 4);
|
262 |
|
263 | output.should.equal([
|
264 | ' ' + 'stack: '.green,
|
265 | ' ' + '- '.green + stack[0],
|
266 | ' ' + '- '.green + stack[1],
|
267 | ' ' + 'message: '.green + ' foo'
|
268 | ].join('\n'));
|
269 | });
|
270 |
|
271 | it('should print serializable items in an array inline', function() {
|
272 | var dt = new Date();
|
273 | var output = prettyjson.render([ 'a', 3, null, true, false, dt]);
|
274 |
|
275 | output.should.equal([
|
276 | '- '.green + 'a',
|
277 | '- '.green + '3'.blue,
|
278 | '- '.green + 'null'.grey,
|
279 | '- '.green + 'true'.green,
|
280 | '- '.green + 'false'.red,
|
281 | '- '.green + dt
|
282 | ].join('\n'));
|
283 | });
|
284 |
|
285 | it('should print dates correctly', function() {
|
286 | var input = new Date();
|
287 | var expected = input.toString();
|
288 | var output = prettyjson.render(input, {}, 4);
|
289 |
|
290 | output.should.equal(' ' + expected);
|
291 | });
|
292 |
|
293 | it('should print dates in objects correctly', function() {
|
294 | var dt1 = new Date();
|
295 | var dt2 = new Date();
|
296 |
|
297 | var input = {
|
298 | dt1: dt2,
|
299 | dt2: dt2
|
300 | };
|
301 |
|
302 | var output = prettyjson.render(input, {}, 4);
|
303 |
|
304 | output.should.equal([
|
305 | ' ' + 'dt1: '.green + dt1.toString(),
|
306 | ' ' + 'dt2: '.green + dt2.toString()].join('\n'));
|
307 | });
|
308 | });
|
309 |
|
310 | describe('prettyjson.renderString() method', function(){
|
311 | it('should return an empty string if input is empty', function(){
|
312 | var input = '';
|
313 |
|
314 | var output = prettyjson.renderString(input);
|
315 |
|
316 | output.should.equal('');
|
317 | });
|
318 |
|
319 | it('should return an empty string if input is not a string', function(){
|
320 | var output = prettyjson.renderString({});
|
321 | output.should.equal('');
|
322 | });
|
323 |
|
324 | it('should return an error message if the input is an invalid JSON string', function(){
|
325 | var output = prettyjson.renderString('not valid!!');
|
326 | output.should.equal('Error:'.red + ' Not valid JSON!');
|
327 | });
|
328 |
|
329 | it('should return the prettyfied string if it is a valid JSON string', function(){
|
330 | var output = prettyjson.renderString('{"test": "OK"}');
|
331 | output.should.equal('test: '.green + 'OK');
|
332 | });
|
333 |
|
334 | it('should dismiss trailing characters which are not JSON', function(){
|
335 | var output = prettyjson.renderString('characters that are not JSON at all... {"test": "OK"}');
|
336 | output.should.equal("characters that are not JSON at all... \n" + 'test: '.green + 'OK');
|
337 | });
|
338 |
|
339 | it('should dismiss trailing characters which are not JSON with an array', function(){
|
340 | var output = prettyjson.renderString('characters that are not JSON at all... ["test"]');
|
341 | output.should.equal("characters that are not JSON at all... \n" + '- '.green + 'test');
|
342 | });
|
343 |
|
344 | it('should be able to accept the options parameter', function(){
|
345 | var output = prettyjson.renderString('{"test": "OK"}', {stringColor: 'red'});
|
346 | output.should.equal('test: '.green + 'OK'.red);
|
347 | });
|
348 | });
|