|
@@ -0,0 +1,348 @@
|
|
|
|
+var prettyjson = process.env.EXPRESS_COV ? require('../lib-cov/prettyjson') : require('../lib/prettyjson');
|
|
|
|
+var should = require('should');
|
|
|
|
+
|
|
|
|
+describe('prettyjson general tests', function() {
|
|
|
|
+
|
|
|
|
+ it("should output a string exactly equal as the input", function() {
|
|
|
|
+
|
|
|
|
+ var input = 'This is a string';
|
|
|
|
+ var output = prettyjson.render(input);
|
|
|
|
+
|
|
|
|
+ output.should.equal(input);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it("should output a string with indentation", function() {
|
|
|
|
+
|
|
|
|
+ var input = 'This is a string';
|
|
|
|
+ var output = prettyjson.render(input, {}, 4);
|
|
|
|
+
|
|
|
|
+ output.should.equal(' ' + input);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it("should output a multiline string with indentation", function() {
|
|
|
|
+
|
|
|
|
+ var input = 'multiple\nlines'
|
|
|
|
+ var output = prettyjson.render(input, {}, 4);
|
|
|
|
+
|
|
|
|
+ output.should.equal(' """\n multiple\n lines\n """');
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it("should output an array of strings", function() {
|
|
|
|
+
|
|
|
|
+ var input = ['first string', 'second string'];
|
|
|
|
+ var output = prettyjson.render(input);
|
|
|
|
+
|
|
|
|
+ output.should.equal([
|
|
|
|
+ '- '.green + input[0],
|
|
|
|
+ '- '.green + input[1]
|
|
|
|
+ ].join('\n'));
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it("should output an array of arrays", function() {
|
|
|
|
+
|
|
|
|
+ var input = ['first string', ['nested 1', 'nested 2'], 'second string'];
|
|
|
|
+ var output = prettyjson.render(input);
|
|
|
|
+
|
|
|
|
+ output.should.equal([
|
|
|
|
+ '- '.green + input[0],
|
|
|
|
+ '- '.green,
|
|
|
|
+ ' ' + '- '.green + input[1][0],
|
|
|
|
+ ' ' + '- '.green + input[1][1],
|
|
|
|
+ '- '.green + input[2]
|
|
|
|
+ ].join('\n'));
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it("should output a hash of strings", function() {
|
|
|
|
+
|
|
|
|
+ var input = {param1: 'first string', param2: 'second string'};
|
|
|
|
+ var output = prettyjson.render(input);
|
|
|
|
+
|
|
|
|
+ output.should.equal([
|
|
|
|
+ 'param1: '.green + 'first string',
|
|
|
|
+ 'param2: '.green + 'second string'
|
|
|
|
+ ].join('\n'));
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it("should output a hash of hashes", function() {
|
|
|
|
+
|
|
|
|
+ var input = {first_param: {subparam: 'first string', subparam2: 'another string'}, second_param: 'second string'};
|
|
|
|
+ var output = prettyjson.render(input);
|
|
|
|
+
|
|
|
|
+ output.should.equal([
|
|
|
|
+ 'first_param: '.green,
|
|
|
|
+ ' ' + 'subparam: '.green + ' first string',
|
|
|
|
+ ' ' + 'subparam2: '.green + 'another string',
|
|
|
|
+ 'second_param: '.green + 'second string'
|
|
|
|
+ ].join('\n'));
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it("should indent correctly the hashes keys", function() {
|
|
|
|
+
|
|
|
|
+ var input = {very_large_param: 'first string', param: 'second string'};
|
|
|
|
+ var output = prettyjson.render(input);
|
|
|
|
+
|
|
|
|
+ output.should.equal([
|
|
|
|
+ 'very_large_param: '.green + 'first string',
|
|
|
|
+ 'param: '.green + ' second string'
|
|
|
|
+ ].join('\n'));
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it("should output a really nested object", function() {
|
|
|
|
+
|
|
|
|
+ var input = {
|
|
|
|
+ first_param: {
|
|
|
|
+ subparam: 'first string',
|
|
|
|
+ subparam2: 'another string',
|
|
|
|
+ subparam3: ["different", "values", "in an array"]
|
|
|
|
+ },
|
|
|
|
+ second_param: 'second string',
|
|
|
|
+ an_array: [{
|
|
|
|
+ param3: 'value',
|
|
|
|
+ param10: 'other value'
|
|
|
|
+ }],
|
|
|
|
+ empty_array: []
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ var output = prettyjson.render(input);
|
|
|
|
+
|
|
|
|
+ output.should.equal([
|
|
|
|
+ 'first_param: '.green,
|
|
|
|
+ ' ' + 'subparam: '.green + ' first string',
|
|
|
|
+ ' ' + 'subparam2: '.green + 'another string',
|
|
|
|
+ ' ' + 'subparam3: '.green,
|
|
|
|
+ ' ' + '- '.green + 'different',
|
|
|
|
+ ' ' + '- '.green + 'values',
|
|
|
|
+ ' ' + '- '.green + 'in an array',
|
|
|
|
+ 'second_param: '.green + 'second string',
|
|
|
|
+ 'an_array: '.green,
|
|
|
|
+ ' ' + '- '.green,
|
|
|
|
+ ' ' + 'param3: '.green + ' value',
|
|
|
|
+ ' ' + 'param10: '.green + 'other value',
|
|
|
|
+ 'empty_array: '.green,
|
|
|
|
+ ' (empty array)'
|
|
|
|
+ ].join('\n'));
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it("should allow to configure colors for hash keys", function() {
|
|
|
|
+ var input = {param1: 'first string', param2: 'second string'};
|
|
|
|
+ var output = prettyjson.render(input, {keysColor: 'blue'});
|
|
|
|
+
|
|
|
|
+ output.should.equal([
|
|
|
|
+ 'param1: '.blue + 'first string',
|
|
|
|
+ 'param2: '.blue + 'second string'
|
|
|
|
+ ].join('\n'));
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it("should allow to configure colors for numbers", function() {
|
|
|
|
+ var input = {param1: 17, param2: 22.3};
|
|
|
|
+ var output = prettyjson.render(input, {numberColor: 'red'});
|
|
|
|
+
|
|
|
|
+ output.should.equal([
|
|
|
|
+ 'param1: '.green + '17'.red,
|
|
|
|
+ 'param2: '.green + '22.3'.red
|
|
|
|
+ ].join('\n'));
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it("should allow to configure rainbow as color", function() {
|
|
|
|
+ var input = {param_long: 'first string', param2: 'second string'};
|
|
|
|
+ var output = prettyjson.render(input, {keysColor: 'rainbow'});
|
|
|
|
+
|
|
|
|
+ output.should.equal([
|
|
|
|
+ 'param_long: '.rainbow + 'first string',
|
|
|
|
+ 'param2: '.rainbow + ' second string'
|
|
|
|
+ ].join('\n'));
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it("should allow to configure the default indentation", function() {
|
|
|
|
+ var input = {param: ['first string', "second string"]};
|
|
|
|
+ var output = prettyjson.render(input, {defaultIndentation: 4});
|
|
|
|
+
|
|
|
|
+ output.should.equal([
|
|
|
|
+ 'param: '.green,
|
|
|
|
+ ' ' + '- '.green + 'first string',
|
|
|
|
+ ' ' + '- '.green + 'second string'
|
|
|
|
+ ].join('\n'));
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it("should allow to configure the empty message for arrays", function() {
|
|
|
|
+ var input = [];
|
|
|
|
+ var output = prettyjson.render(input, {emptyArrayMsg: '(empty)'});
|
|
|
|
+
|
|
|
|
+ output.should.equal([
|
|
|
|
+ '(empty)'
|
|
|
|
+ ].join('\n'));
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it("should allow to configure colors for strings", function() {
|
|
|
|
+ var input = {param1: 'first string', param2: 'second string'};
|
|
|
|
+ var output = prettyjson.render(input, {keysColor: 'blue', stringColor: 'red'});
|
|
|
|
+
|
|
|
|
+ output.should.equal([
|
|
|
|
+ 'param1: '.blue + 'first string'.red,
|
|
|
|
+ 'param2: '.blue + 'second string'.red
|
|
|
|
+ ].join('\n'));
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it("should allow to not use colors", function() {
|
|
|
|
+ var input = {param1: 'first string', param2: ['second string']};
|
|
|
|
+ var output = prettyjson.render(input, {noColor: true});
|
|
|
|
+
|
|
|
|
+ output.should.equal([
|
|
|
|
+ 'param1: first string',
|
|
|
|
+ 'param2: ',
|
|
|
|
+ ' - second string'
|
|
|
|
+ ].join('\n'));
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it("should allow to print simple arrays inline", function() {
|
|
|
|
+ var input = {installs: ['first string', 'second string', false, 13]};
|
|
|
|
+ var output = prettyjson.render(input, {inlineArrays: true});
|
|
|
|
+
|
|
|
|
+ output.should.equal(
|
|
|
|
+ 'installs: '.green + 'first string, second string, false, 13');
|
|
|
|
+
|
|
|
|
+ input = {installs: [ ['first string', 'second string'], 'third string']};
|
|
|
|
+ output = prettyjson.render(input, {inlineArrays: true});
|
|
|
|
+
|
|
|
|
+ output.should.equal([
|
|
|
|
+ 'installs: '.green,
|
|
|
|
+ ' ' + '- '.green + 'first string, second string',
|
|
|
|
+ ' ' + '- '.green + 'third string'
|
|
|
|
+ ].join('\n'));
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it("should not print an object prototype", function() {
|
|
|
|
+ var Input = function() {
|
|
|
|
+ this.param1 = 'first string';
|
|
|
|
+ this.param2 = 'second string';
|
|
|
|
+ };
|
|
|
|
+ Input.prototype = {randomProperty: 'idontcare'};
|
|
|
|
+
|
|
|
|
+ var output = prettyjson.render(new Input);
|
|
|
|
+
|
|
|
|
+ output.should.equal([
|
|
|
|
+ 'param1: '.green + 'first string',
|
|
|
|
+ 'param2: '.green + 'second string'
|
|
|
|
+ ].join('\n'));
|
|
|
|
+ });
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+describe('Printing numbers, booleans and other objects', function() {
|
|
|
|
+ it("should print numbers correctly ", function() {
|
|
|
|
+ var input = 12345;
|
|
|
|
+ var output = prettyjson.render(input, {}, 4);
|
|
|
|
+
|
|
|
|
+ output.should.equal(' ' + '12345'.blue);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it("should print booleans correctly ", function() {
|
|
|
|
+ var input = true;
|
|
|
|
+ var output = prettyjson.render(input, {}, 4);
|
|
|
|
+
|
|
|
|
+ output.should.equal(' ' + 'true'.green);
|
|
|
|
+
|
|
|
|
+ input = false;
|
|
|
|
+ output = prettyjson.render(input, {}, 4);
|
|
|
|
+
|
|
|
|
+ output.should.equal(' ' + 'false'.red);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it("should print a null object correctly ", function() {
|
|
|
|
+ var input = null;
|
|
|
|
+ var output = prettyjson.render(input, {}, 4);
|
|
|
|
+
|
|
|
|
+ output.should.equal(' ' + 'null'.grey);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it("should print an Error correctly ", function() {
|
|
|
|
+ Error.stackTraceLimit = 1;
|
|
|
|
+ var input = new Error('foo');
|
|
|
|
+ var stack = input.stack.split('\n');
|
|
|
|
+ var output = prettyjson.render(input, {}, 4);
|
|
|
|
+
|
|
|
|
+ output.should.equal([
|
|
|
|
+ ' ' + 'stack: '.green,
|
|
|
|
+ ' ' + '- '.green + stack[0],
|
|
|
|
+ ' ' + '- '.green + stack[1],
|
|
|
|
+ ' ' + 'message: '.green + 'foo'
|
|
|
|
+ ].join('\n'));
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it('should print serializable items in an array inline', function() {
|
|
|
|
+ var dt = new Date();
|
|
|
|
+ var output = prettyjson.render([ 'a', 3, null, true, false, dt]);
|
|
|
|
+
|
|
|
|
+ output.should.equal([
|
|
|
|
+ '- '.green + 'a',
|
|
|
|
+ '- '.green + '3'.blue,
|
|
|
|
+ '- '.green + 'null'.grey,
|
|
|
|
+ '- '.green + 'true'.green,
|
|
|
|
+ '- '.green + 'false'.red,
|
|
|
|
+ '- '.green + dt
|
|
|
|
+ ].join('\n'));
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it('should print dates correctly', function() {
|
|
|
|
+ var input = new Date();
|
|
|
|
+ var expected = input.toString();
|
|
|
|
+ var output = prettyjson.render(input, {}, 4);
|
|
|
|
+
|
|
|
|
+ output.should.equal(' ' + expected);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it('should print dates in objects correctly', function() {
|
|
|
|
+ var dt1 = new Date();
|
|
|
|
+ var dt2 = new Date();
|
|
|
|
+
|
|
|
|
+ var input = {
|
|
|
|
+ dt1: dt2,
|
|
|
|
+ dt2: dt2
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ var output = prettyjson.render(input, {}, 4);
|
|
|
|
+
|
|
|
|
+ output.should.equal([
|
|
|
|
+ ' ' + 'dt1: '.green + dt1.toString(),
|
|
|
|
+ ' ' + 'dt2: '.green + dt2.toString()].join('\n'));
|
|
|
|
+ });
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+describe('prettyjson.renderString() method', function(){
|
|
|
|
+ it('should return an empty string if input is empty', function(){
|
|
|
|
+ var input = '';
|
|
|
|
+
|
|
|
|
+ var output = prettyjson.renderString(input);
|
|
|
|
+
|
|
|
|
+ output.should.equal('');
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it('should return an empty string if input is not a string', function(){
|
|
|
|
+ var output = prettyjson.renderString({});
|
|
|
|
+ output.should.equal('');
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it('should return an error message if the input is an invalid JSON string', function(){
|
|
|
|
+ var output = prettyjson.renderString('not valid!!');
|
|
|
|
+ output.should.equal('Error:'.red + ' Not valid JSON!');
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it('should return the prettyfied string if it is a valid JSON string', function(){
|
|
|
|
+ var output = prettyjson.renderString('{"test": "OK"}');
|
|
|
|
+ output.should.equal('test: '.green + 'OK');
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it('should dismiss trailing characters which are not JSON', function(){
|
|
|
|
+ var output = prettyjson.renderString('characters that are not JSON at all... {"test": "OK"}');
|
|
|
|
+ output.should.equal("characters that are not JSON at all... \n" + 'test: '.green + 'OK');
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it('should dismiss trailing characters which are not JSON with an array', function(){
|
|
|
|
+ var output = prettyjson.renderString('characters that are not JSON at all... ["test"]');
|
|
|
|
+ output.should.equal("characters that are not JSON at all... \n" + '- '.green + 'test');
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ it('should be able to accept the options parameter', function(){
|
|
|
|
+ var output = prettyjson.renderString('{"test": "OK"}', {stringColor: 'red'});
|
|
|
|
+ output.should.equal('test: '.green + 'OK'.red);
|
|
|
|
+ });
|
|
|
|
+});
|