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.
		
		
		
		
			
				
					272 lines
				
				6.5 KiB
			
		
		
			
		
	
	
					272 lines
				
				6.5 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								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();
							 | 
						||
| 
								 | 
							
								});
							 |