You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							271 lines
						
					
					
						
							6.5 KiB
						
					
					
				
			
		
		
	
	
							271 lines
						
					
					
						
							6.5 KiB
						
					
					
				var test = require('tape'); | 
						|
var forEach = require('for-each'); | 
						|
 | 
						|
var inspect = require('../'); | 
						|
 | 
						|
test('bad indent options', function (t) { | 
						|
    forEach([ | 
						|
        undefined, | 
						|
        true, | 
						|
        false, | 
						|
        -1, | 
						|
        1.2, | 
						|
        Infinity, | 
						|
        -Infinity, | 
						|
        NaN | 
						|
    ], function (indent) { | 
						|
        t['throws']( | 
						|
            function () { inspect('', { indent: indent }); }, | 
						|
            TypeError, | 
						|
            inspect(indent) + ' is invalid' | 
						|
        ); | 
						|
    }); | 
						|
 | 
						|
    t.end(); | 
						|
}); | 
						|
 | 
						|
test('simple object with indent', function (t) { | 
						|
    t.plan(2); | 
						|
 | 
						|
    var obj = { a: 1, b: 2 }; | 
						|
 | 
						|
    var expectedSpaces = [ | 
						|
        '{', | 
						|
        '  a: 1,', | 
						|
        '  b: 2', | 
						|
        '}' | 
						|
    ].join('\n'); | 
						|
    var expectedTabs = [ | 
						|
        '{', | 
						|
        '	a: 1,', | 
						|
        '	b: 2', | 
						|
        '}' | 
						|
    ].join('\n'); | 
						|
 | 
						|
    t.equal(inspect(obj, { indent: 2 }), expectedSpaces, 'two'); | 
						|
    t.equal(inspect(obj, { indent: '\t' }), expectedTabs, 'tabs'); | 
						|
}); | 
						|
 | 
						|
test('two deep object with indent', function (t) { | 
						|
    t.plan(2); | 
						|
 | 
						|
    var obj = { a: 1, b: { c: 3, d: 4 } }; | 
						|
 | 
						|
    var expectedSpaces = [ | 
						|
        '{', | 
						|
        '  a: 1,', | 
						|
        '  b: {', | 
						|
        '    c: 3,', | 
						|
        '    d: 4', | 
						|
        '  }', | 
						|
        '}' | 
						|
    ].join('\n'); | 
						|
    var expectedTabs = [ | 
						|
        '{', | 
						|
        '	a: 1,', | 
						|
        '	b: {', | 
						|
        '		c: 3,', | 
						|
        '		d: 4', | 
						|
        '	}', | 
						|
        '}' | 
						|
    ].join('\n'); | 
						|
 | 
						|
    t.equal(inspect(obj, { indent: 2 }), expectedSpaces, 'two'); | 
						|
    t.equal(inspect(obj, { indent: '\t' }), expectedTabs, 'tabs'); | 
						|
}); | 
						|
 | 
						|
test('simple array with all single line elements', function (t) { | 
						|
    t.plan(2); | 
						|
 | 
						|
    var obj = [1, 2, 3, 'asdf\nsdf']; | 
						|
 | 
						|
    var expected = '[ 1, 2, 3, \'asdf\\nsdf\' ]'; | 
						|
 | 
						|
    t.equal(inspect(obj, { indent: 2 }), expected, 'two'); | 
						|
    t.equal(inspect(obj, { indent: '\t' }), expected, 'tabs'); | 
						|
}); | 
						|
 | 
						|
test('array with complex elements', function (t) { | 
						|
    t.plan(2); | 
						|
 | 
						|
    var obj = [1, { a: 1, b: { c: 1 } }, 'asdf\nsdf']; | 
						|
 | 
						|
    var expectedSpaces = [ | 
						|
        '[', | 
						|
        '  1,', | 
						|
        '  {', | 
						|
        '    a: 1,', | 
						|
        '    b: {', | 
						|
        '      c: 1', | 
						|
        '    }', | 
						|
        '  },', | 
						|
        '  \'asdf\\nsdf\'', | 
						|
        ']' | 
						|
    ].join('\n'); | 
						|
    var expectedTabs = [ | 
						|
        '[', | 
						|
        '	1,', | 
						|
        '	{', | 
						|
        '		a: 1,', | 
						|
        '		b: {', | 
						|
        '			c: 1', | 
						|
        '		}', | 
						|
        '	},', | 
						|
        '	\'asdf\\nsdf\'', | 
						|
        ']' | 
						|
    ].join('\n'); | 
						|
 | 
						|
    t.equal(inspect(obj, { indent: 2 }), expectedSpaces, 'two'); | 
						|
    t.equal(inspect(obj, { indent: '\t' }), expectedTabs, 'tabs'); | 
						|
}); | 
						|
 | 
						|
test('values', function (t) { | 
						|
    t.plan(2); | 
						|
    var obj = [{}, [], { 'a-b': 5 }]; | 
						|
 | 
						|
    var expectedSpaces = [ | 
						|
        '[', | 
						|
        '  {},', | 
						|
        '  [],', | 
						|
        '  {', | 
						|
        '    \'a-b\': 5', | 
						|
        '  }', | 
						|
        ']' | 
						|
    ].join('\n'); | 
						|
    var expectedTabs = [ | 
						|
        '[', | 
						|
        '	{},', | 
						|
        '	[],', | 
						|
        '	{', | 
						|
        '		\'a-b\': 5', | 
						|
        '	}', | 
						|
        ']' | 
						|
    ].join('\n'); | 
						|
 | 
						|
    t.equal(inspect(obj, { indent: 2 }), expectedSpaces, 'two'); | 
						|
    t.equal(inspect(obj, { indent: '\t' }), expectedTabs, 'tabs'); | 
						|
}); | 
						|
 | 
						|
test('Map', { skip: typeof Map !== 'function' }, function (t) { | 
						|
    var map = new Map(); | 
						|
    map.set({ a: 1 }, ['b']); | 
						|
    map.set(3, NaN); | 
						|
 | 
						|
    var expectedStringSpaces = [ | 
						|
        'Map (2) {', | 
						|
        '  { a: 1 } => [ \'b\' ],', | 
						|
        '  3 => NaN', | 
						|
        '}' | 
						|
    ].join('\n'); | 
						|
    var expectedStringTabs = [ | 
						|
        'Map (2) {', | 
						|
        '	{ a: 1 } => [ \'b\' ],', | 
						|
        '	3 => NaN', | 
						|
        '}' | 
						|
    ].join('\n'); | 
						|
    var expectedStringTabsDoubleQuotes = [ | 
						|
        'Map (2) {', | 
						|
        '	{ a: 1 } => [ "b" ],', | 
						|
        '	3 => NaN', | 
						|
        '}' | 
						|
    ].join('\n'); | 
						|
 | 
						|
    t.equal( | 
						|
        inspect(map, { indent: 2 }), | 
						|
        expectedStringSpaces, | 
						|
        'Map keys are not indented (two)' | 
						|
    ); | 
						|
    t.equal( | 
						|
        inspect(map, { indent: '\t' }), | 
						|
        expectedStringTabs, | 
						|
        'Map keys are not indented (tabs)' | 
						|
    ); | 
						|
    t.equal( | 
						|
        inspect(map, { indent: '\t', quoteStyle: 'double' }), | 
						|
        expectedStringTabsDoubleQuotes, | 
						|
        'Map keys are not indented (tabs + double quotes)' | 
						|
    ); | 
						|
 | 
						|
    t.equal(inspect(new Map(), { indent: 2 }), 'Map (0) {}', 'empty Map should show as empty (two)'); | 
						|
    t.equal(inspect(new Map(), { indent: '\t' }), 'Map (0) {}', 'empty Map should show as empty (tabs)'); | 
						|
 | 
						|
    var nestedMap = new Map(); | 
						|
    nestedMap.set(nestedMap, map); | 
						|
    var expectedNestedSpaces = [ | 
						|
        'Map (1) {', | 
						|
        '  [Circular] => Map (2) {', | 
						|
        '    { a: 1 } => [ \'b\' ],', | 
						|
        '    3 => NaN', | 
						|
        '  }', | 
						|
        '}' | 
						|
    ].join('\n'); | 
						|
    var expectedNestedTabs = [ | 
						|
        'Map (1) {', | 
						|
        '	[Circular] => Map (2) {', | 
						|
        '		{ a: 1 } => [ \'b\' ],', | 
						|
        '		3 => NaN', | 
						|
        '	}', | 
						|
        '}' | 
						|
    ].join('\n'); | 
						|
    t.equal(inspect(nestedMap, { indent: 2 }), expectedNestedSpaces, 'Map containing a Map should work (two)'); | 
						|
    t.equal(inspect(nestedMap, { indent: '\t' }), expectedNestedTabs, 'Map containing a Map should work (tabs)'); | 
						|
 | 
						|
    t.end(); | 
						|
}); | 
						|
 | 
						|
test('Set', { skip: typeof Set !== 'function' }, function (t) { | 
						|
    var set = new Set(); | 
						|
    set.add({ a: 1 }); | 
						|
    set.add(['b']); | 
						|
    var expectedStringSpaces = [ | 
						|
        'Set (2) {', | 
						|
        '  {', | 
						|
        '    a: 1', | 
						|
        '  },', | 
						|
        '  [ \'b\' ]', | 
						|
        '}' | 
						|
    ].join('\n'); | 
						|
    var expectedStringTabs = [ | 
						|
        'Set (2) {', | 
						|
        '	{', | 
						|
        '		a: 1', | 
						|
        '	},', | 
						|
        '	[ \'b\' ]', | 
						|
        '}' | 
						|
    ].join('\n'); | 
						|
    t.equal(inspect(set, { indent: 2 }), expectedStringSpaces, 'new Set([{ a: 1 }, ["b"]]) should show size and contents (two)'); | 
						|
    t.equal(inspect(set, { indent: '\t' }), expectedStringTabs, 'new Set([{ a: 1 }, ["b"]]) should show size and contents (tabs)'); | 
						|
 | 
						|
    t.equal(inspect(new Set(), { indent: 2 }), 'Set (0) {}', 'empty Set should show as empty (two)'); | 
						|
    t.equal(inspect(new Set(), { indent: '\t' }), 'Set (0) {}', 'empty Set should show as empty (tabs)'); | 
						|
 | 
						|
    var nestedSet = new Set(); | 
						|
    nestedSet.add(set); | 
						|
    nestedSet.add(nestedSet); | 
						|
    var expectedNestedSpaces = [ | 
						|
        'Set (2) {', | 
						|
        '  Set (2) {', | 
						|
        '    {', | 
						|
        '      a: 1', | 
						|
        '    },', | 
						|
        '    [ \'b\' ]', | 
						|
        '  },', | 
						|
        '  [Circular]', | 
						|
        '}' | 
						|
    ].join('\n'); | 
						|
    var expectedNestedTabs = [ | 
						|
        'Set (2) {', | 
						|
        '	Set (2) {', | 
						|
        '		{', | 
						|
        '			a: 1', | 
						|
        '		},', | 
						|
        '		[ \'b\' ]', | 
						|
        '	},', | 
						|
        '	[Circular]', | 
						|
        '}' | 
						|
    ].join('\n'); | 
						|
    t.equal(inspect(nestedSet, { indent: 2 }), expectedNestedSpaces, 'Set containing a Set should work (two)'); | 
						|
    t.equal(inspect(nestedSet, { indent: '\t' }), expectedNestedTabs, 'Set containing a Set should work (tabs)'); | 
						|
 | 
						|
    t.end(); | 
						|
});
 | 
						|
 |