UNPKG

prettyjson

Version:

Package for formatting JSON data in a coloured YAML-style, perfect for CLI output

251 lines (194 loc) 7.67 kB
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 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 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 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); }); }); 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); }); });