UNPKG

10.5 kBJavaScriptView Raw
1var prettyjson = process.env.EXPRESS_COV ? require('../lib-cov/prettyjson') : require('../lib/prettyjson');
2var should = require('should');
3
4describe('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
230describe('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
310describe('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});