UNPKG

twreporter-react

Version:

React-Redux site for The Reporter Foundation in Taiwan

349 lines (271 loc) 10.5 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 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); }); });