@ -1,44 +1,44 @@
'use strict' ;
require ( '../common' ) ;
const common = require ( '../common' ) ;
const assert = require ( 'assert' ) ;
const util = require ( 'util' ) ;
const vm = require ( 'vm' ) ;
assert . e qual( util . inspect ( 1 ) , '1' ) ;
assert . e qual( util . inspect ( false ) , 'false' ) ;
assert . e qual( util . inspect ( '' ) , "''" ) ;
assert . e qual( util . inspect ( 'hello' ) , "'hello'" ) ;
assert . e qual( util . inspect ( function ( ) { } ) , '[Function]' ) ;
assert . e qual( util . inspect ( undefined ) , 'undefined' ) ;
assert . e qual( util . inspect ( null ) , 'null' ) ;
assert . e qual( util . inspect ( /foo(bar\n)?/gi ) , '/foo(bar\\n)?/gi' ) ;
assert . strictE qual( util . inspect ( 1 ) , '1' ) ;
assert . strictE qual( util . inspect ( false ) , 'false' ) ;
assert . strictE qual( util . inspect ( '' ) , "''" ) ;
assert . strictE qual( util . inspect ( 'hello' ) , "'hello'" ) ;
assert . strictE qual( util . inspect ( function ( ) { } ) , '[Function]' ) ;
assert . strictE qual( util . inspect ( undefined ) , 'undefined' ) ;
assert . strictE qual( util . inspect ( null ) , 'null' ) ;
assert . strictE qual( util . inspect ( /foo(bar\n)?/gi ) , '/foo(bar\\n)?/gi' ) ;
assert . strictEqual ( util . inspect ( new Date ( 'Sun, 14 Feb 2010 11:48:40 GMT' ) ) ,
new Date ( '2010-02-14T12:48:40+01:00' ) . toISOString ( ) ) ;
assert . strictEqual ( util . inspect ( new Date ( '' ) ) , ( new Date ( '' ) ) . toString ( ) ) ;
assert . e qual( util . inspect ( '\n\u0001' ) , "'\\n\\u0001'" ) ;
assert . strictE qual( util . inspect ( '\n\u0001' ) , "'\\n\\u0001'" ) ;
assert . e qual( util . inspect ( [ ] ) , '[]' ) ;
assert . e qual( util . inspect ( Object . create ( [ ] ) ) , 'Array {}' ) ;
assert . e qual( util . inspect ( [ 1 , 2 ] ) , '[ 1, 2 ]' ) ;
assert . e qual( util . inspect ( [ 1 , [ 2 , 3 ] ] ) , '[ 1, [ 2, 3 ] ]' ) ;
assert . strictE qual( util . inspect ( [ ] ) , '[]' ) ;
assert . strictE qual( util . inspect ( Object . create ( [ ] ) ) , 'Array {}' ) ;
assert . strictE qual( util . inspect ( [ 1 , 2 ] ) , '[ 1, 2 ]' ) ;
assert . strictE qual( util . inspect ( [ 1 , [ 2 , 3 ] ] ) , '[ 1, [ 2, 3 ] ]' ) ;
assert . e qual( util . inspect ( { } ) , '{}' ) ;
assert . e qual( util . inspect ( { a : 1 } ) , '{ a: 1 }' ) ;
assert . e qual( util . inspect ( { a : function ( ) { } } ) , '{ a: [Function: a] }' ) ;
assert . e qual( util . inspect ( { a : 1 , b : 2 } ) , '{ a: 1, b: 2 }' ) ;
assert . e qual( util . inspect ( { 'a' : { } } ) , '{ a: {} }' ) ;
assert . e qual( util . inspect ( { 'a' : { 'b' : 2 } } ) , '{ a: { b: 2 } }' ) ;
assert . e qual( util . inspect ( { 'a' : { 'b' : { 'c' : { 'd' : 2 } } } } ) ,
assert . strictE qual( util . inspect ( { } ) , '{}' ) ;
assert . strictE qual( util . inspect ( { a : 1 } ) , '{ a: 1 }' ) ;
assert . strictE qual( util . inspect ( { a : function ( ) { } } ) , '{ a: [Function: a] }' ) ;
assert . strictE qual( util . inspect ( { a : 1 , b : 2 } ) , '{ a: 1, b: 2 }' ) ;
assert . strictE qual( util . inspect ( { 'a' : { } } ) , '{ a: {} }' ) ;
assert . strictE qual( util . inspect ( { 'a' : { 'b' : 2 } } ) , '{ a: { b: 2 } }' ) ;
assert . strictE qual( util . inspect ( { 'a' : { 'b' : { 'c' : { 'd' : 2 } } } } ) ,
'{ a: { b: { c: [Object] } } }' ) ;
assert . e qual( util . inspect ( { 'a' : { 'b' : { 'c' : { 'd' : 2 } } } } , false , null ) ,
assert . strictE qual( util . inspect ( { 'a' : { 'b' : { 'c' : { 'd' : 2 } } } } , false , null ) ,
'{ a: { b: { c: { d: 2 } } } }' ) ;
assert . e qual( util . inspect ( [ 1 , 2 , 3 ] , true ) , '[ 1, 2, 3, [length]: 3 ]' ) ;
assert . e qual( util . inspect ( { 'a' : { 'b' : { 'c' : 2 } } } , false , 0 ) ,
assert . strictE qual( util . inspect ( [ 1 , 2 , 3 ] , true ) , '[ 1, 2, 3, [length]: 3 ]' ) ;
assert . strictE qual( util . inspect ( { 'a' : { 'b' : { 'c' : 2 } } } , false , 0 ) ,
'{ a: [Object] }' ) ;
assert . e qual( util . inspect ( { 'a' : { 'b' : { 'c' : 2 } } } , false , 1 ) ,
assert . strictE qual( util . inspect ( { 'a' : { 'b' : { 'c' : 2 } } } , false , 1 ) ,
'{ a: { b: [Object] } }' ) ;
assert . e qual( util . inspect ( Object . create ( { } ,
assert . strictE qual( util . inspect ( Object . create ( { } ,
{ visible : { value : 1 , enumerable : true } , hidden : { value : 2 } } ) ) ,
'{ visible: 1 }'
) ;
@ -53,23 +53,29 @@ assert(!/Object/.test(
for ( const showHidden of [ true , false ] ) {
const ab = new ArrayBuffer ( 4 ) ;
const dv = new DataView ( ab , 1 , 2 ) ;
assert . equal ( util . inspect ( ab , showHidden ) , 'ArrayBuffer { byteLength: 4 }' ) ;
assert . equal ( util . inspect ( new DataView ( ab , 1 , 2 ) , showHidden ) ,
assert . strictEqual (
util . inspect ( ab , showHidden ) ,
'ArrayBuffer { byteLength: 4 }'
) ;
assert . strictEqual ( util . inspect ( new DataView ( ab , 1 , 2 ) , showHidden ) ,
'DataView {\n' +
' byteLength: 2,\n' +
' byteOffset: 1,\n' +
' buffer: ArrayBuffer { byteLength: 4 } }' ) ;
assert . equal ( util . inspect ( ab , showHidden ) , 'ArrayBuffer { byteLength: 4 }' ) ;
assert . equal ( util . inspect ( dv , showHidden ) ,
assert . strictEqual (
util . inspect ( ab , showHidden ) ,
'ArrayBuffer { byteLength: 4 }'
) ;
assert . strictEqual ( util . inspect ( dv , showHidden ) ,
'DataView {\n' +
' byteLength: 2,\n' +
' byteOffset: 1,\n' +
' buffer: ArrayBuffer { byteLength: 4 } }' ) ;
ab . x = 42 ;
dv . y = 1337 ;
assert . e qual( util . inspect ( ab , showHidden ) ,
assert . strictE qual( util . inspect ( ab , showHidden ) ,
'ArrayBuffer { byteLength: 4, x: 42 }' ) ;
assert . e qual( util . inspect ( dv , showHidden ) ,
assert . strictE qual( util . inspect ( dv , showHidden ) ,
'DataView {\n' +
' byteLength: 2,\n' +
' byteOffset: 1,\n' +
@ -81,23 +87,29 @@ for (const showHidden of [true, false]) {
for ( const showHidden of [ true , false ] ) {
const ab = vm . runInNewContext ( 'new ArrayBuffer(4)' ) ;
const dv = vm . runInNewContext ( 'new DataView(ab, 1, 2)' , { ab : ab } ) ;
assert . equal ( util . inspect ( ab , showHidden ) , 'ArrayBuffer { byteLength: 4 }' ) ;
assert . equal ( util . inspect ( new DataView ( ab , 1 , 2 ) , showHidden ) ,
assert . strictEqual (
util . inspect ( ab , showHidden ) ,
'ArrayBuffer { byteLength: 4 }'
) ;
assert . strictEqual ( util . inspect ( new DataView ( ab , 1 , 2 ) , showHidden ) ,
'DataView {\n' +
' byteLength: 2,\n' +
' byteOffset: 1,\n' +
' buffer: ArrayBuffer { byteLength: 4 } }' ) ;
assert . equal ( util . inspect ( ab , showHidden ) , 'ArrayBuffer { byteLength: 4 }' ) ;
assert . equal ( util . inspect ( dv , showHidden ) ,
assert . strictEqual (
util . inspect ( ab , showHidden ) ,
'ArrayBuffer { byteLength: 4 }'
) ;
assert . strictEqual ( util . inspect ( dv , showHidden ) ,
'DataView {\n' +
' byteLength: 2,\n' +
' byteOffset: 1,\n' +
' buffer: ArrayBuffer { byteLength: 4 } }' ) ;
ab . x = 42 ;
dv . y = 1337 ;
assert . e qual( util . inspect ( ab , showHidden ) ,
assert . strictE qual( util . inspect ( ab , showHidden ) ,
'ArrayBuffer { byteLength: 4, x: 42 }' ) ;
assert . e qual( util . inspect ( dv , showHidden ) ,
assert . strictE qual( util . inspect ( dv , showHidden ) ,
'DataView {\n' +
' byteLength: 2,\n' +
' byteOffset: 1,\n' +
@ -120,7 +132,7 @@ for (const showHidden of [true, false]) {
const array = new constructor ( new ArrayBuffer ( byteLength ) , 0 , length ) ;
array [ 0 ] = 65 ;
array [ 1 ] = 97 ;
assert . e qual( util . inspect ( array , true ) ,
assert . strictE qual( util . inspect ( array , true ) ,
` ${ constructor . name } [ \n ` +
` 65, \n ` +
` 97, \n ` +
@ -129,7 +141,10 @@ for (const showHidden of [true, false]) {
` [byteLength]: ${ byteLength } , \n ` +
` [byteOffset]: 0, \n ` +
` [buffer]: ArrayBuffer { byteLength: ${ byteLength } } ] ` ) ;
assert . equal ( util . inspect ( array , false ) , ` ${ constructor . name } [ 65, 97 ] ` ) ;
assert . strictEqual (
util . inspect ( array , false ) ,
` ${ constructor . name } [ 65, 97 ] `
) ;
} ) ;
// Now check that declaring a TypedArray in a different context works the same
@ -152,7 +167,7 @@ for (const showHidden of [true, false]) {
} ) ;
array [ 0 ] = 65 ;
array [ 1 ] = 97 ;
assert . e qual( util . inspect ( array , true ) ,
assert . strictE qual( util . inspect ( array , true ) ,
` ${ constructor . name } [ \n ` +
` 65, \n ` +
` 97, \n ` +
@ -161,7 +176,10 @@ for (const showHidden of [true, false]) {
` [byteLength]: ${ byteLength } , \n ` +
` [byteOffset]: 0, \n ` +
` [buffer]: ArrayBuffer { byteLength: ${ byteLength } } ] ` ) ;
assert . equal ( util . inspect ( array , false ) , ` ${ constructor . name } [ 65, 97 ] ` ) ;
assert . strictEqual (
util . inspect ( array , false ) ,
` ${ constructor . name } [ 65, 97 ] `
) ;
} ) ;
// Due to the hash seed randomization it's not deterministic the order that
@ -173,7 +191,7 @@ for (const showHidden of [true, false]) {
{ visible : { value : 1 , enumerable : true } , hidden : { value : 2 } } ) , true ) ;
if ( out !== '{ [hidden]: 2, visible: 1 }' &&
out !== '{ visible: 1, [hidden]: 2 }' ) {
assert . ok ( false ) ;
common . fail ( ` unexpected value for out ${ out } ` ) ;
}
}
@ -184,11 +202,11 @@ for (const showHidden of [true, false]) {
hidden : { value : 'secret' } } ) , true ) ;
if ( out !== "{ [hidden]: 'secret', name: 'Tim' }" &&
out !== "{ name: 'Tim', [hidden]: 'secret' }" ) {
assert ( false ) ;
common . fail ( ` unexpected value for out ${ out } ` ) ;
}
}
assert . e qual(
assert . strictE qual(
util . inspect ( Object . create ( null ,
{ name : { value : 'Tim' , enumerable : true } ,
hidden : { value : 'secret' } } ) ) ,
@ -197,18 +215,18 @@ assert.equal(
// Dynamic properties
assert . e qual( util . inspect ( { get readonly ( ) { } } ) ,
assert . strictE qual( util . inspect ( { get readonly ( ) { } } ) ,
'{ readonly: [Getter] }' ) ;
assert . e qual( util . inspect ( { get readwrite ( ) { } , set readwrite ( val ) { } } ) ,
assert . strictE qual( util . inspect ( { get readwrite ( ) { } , set readwrite ( val ) { } } ) ,
'{ readwrite: [Getter/Setter] }' ) ;
assert . e qual( util . inspect ( { set writeonly ( val ) { } } ) ,
assert . strictE qual( util . inspect ( { set writeonly ( val ) { } } ) ,
'{ writeonly: [Setter] }' ) ;
var value = { } ;
value [ 'a' ] = value ;
assert . e qual( util . inspect ( value ) , '{ a: [Circular] }' ) ;
assert . strictE qual( util . inspect ( value ) , '{ a: [Circular] }' ) ;
// Array with dynamic properties
value = [ 1 , 2 , 3 ] ;
@ -220,22 +238,22 @@ Object.defineProperty(
get : ( ) => { this . push ( true ) ; return this . length ; }
}
) ;
assert . e qual( util . inspect ( value ) , '[ 1, 2, 3, growingLength: [Getter] ]' ) ;
assert . strictE qual( util . inspect ( value ) , '[ 1, 2, 3, growingLength: [Getter] ]' ) ;
// Function with properties
value = function ( ) { } ;
value . aprop = 42 ;
assert . e qual( util . inspect ( value ) , '{ [Function: value] aprop: 42 }' ) ;
assert . strictE qual( util . inspect ( value ) , '{ [Function: value] aprop: 42 }' ) ;
// Regular expressions with properties
value = /123/ig ;
value . aprop = 42 ;
assert . e qual( util . inspect ( value ) , '{ /123/gi aprop: 42 }' ) ;
assert . strictE qual( util . inspect ( value ) , '{ /123/gi aprop: 42 }' ) ;
// Dates with properties
value = new Date ( 'Sun, 14 Feb 2010 11:48:40 GMT' ) ;
value . aprop = 42 ;
assert . e qual( util . inspect ( value ) , '{ 2010-02-14T11:48:40.000Z aprop: 42 }'
assert . strictE qual( util . inspect ( value ) , '{ 2010-02-14T11:48:40.000Z aprop: 42 }'
) ;
// test the internal isDate implementation
@ -244,19 +262,22 @@ var d = new Date2();
var orig = util . inspect ( d ) ;
Date2 . prototype . foo = 'bar' ;
var after = util . inspect ( d ) ;
assert . e qual( orig , after ) ;
assert . strictE qual( orig , after ) ;
// test positive/negative zero
assert . e qual( util . inspect ( 0 ) , '0' ) ;
assert . e qual( util . inspect ( - 0 ) , '-0' ) ;
assert . strictE qual( util . inspect ( 0 ) , '0' ) ;
assert . strictE qual( util . inspect ( - 0 ) , '-0' ) ;
// test for sparse array
var a = [ 'foo' , 'bar' , 'baz' ] ;
assert . e qual( util . inspect ( a ) , '[ \'foo\', \'bar\', \'baz\' ]' ) ;
assert . strictE qual( util . inspect ( a ) , '[ \'foo\', \'bar\', \'baz\' ]' ) ;
delete a [ 1 ] ;
assert . equal ( util . inspect ( a ) , '[ \'foo\', , \'baz\' ]' ) ;
assert . equal ( util . inspect ( a , true ) , '[ \'foo\', , \'baz\', [length]: 3 ]' ) ;
assert . equal ( util . inspect ( new Array ( 5 ) ) , '[ , , , , ]' ) ;
assert . strictEqual ( util . inspect ( a ) , '[ \'foo\', , \'baz\' ]' ) ;
assert . strictEqual (
util . inspect ( a , true ) ,
'[ \'foo\', , \'baz\', [length]: 3 ]'
) ;
assert . strictEqual ( util . inspect ( new Array ( 5 ) ) , '[ , , , , ]' ) ;
// test for Array constructor in different context
{
@ -300,9 +321,12 @@ var getterAndSetter = Object.create(null, {
set : function ( ) { }
}
} ) ;
assert . equal ( util . inspect ( getter , true ) , '{ [a]: [Getter] }' ) ;
assert . equal ( util . inspect ( setter , true ) , '{ [b]: [Setter] }' ) ;
assert . equal ( util . inspect ( getterAndSetter , true ) , '{ [c]: [Getter/Setter] }' ) ;
assert . strictEqual ( util . inspect ( getter , true ) , '{ [a]: [Getter] }' ) ;
assert . strictEqual ( util . inspect ( setter , true ) , '{ [b]: [Setter] }' ) ;
assert . strictEqual (
util . inspect ( getterAndSetter , true ) ,
'{ [c]: [Getter/Setter] }'
) ;
// exceptions should print the error message, not '{}'
const errors = [ ] ;
@ -311,17 +335,17 @@ errors.push(new Error('FAIL'));
errors . push ( new TypeError ( 'FAIL' ) ) ;
errors . push ( new SyntaxError ( 'FAIL' ) ) ;
errors . forEach ( function ( err ) {
assert . e qual( util . inspect ( err ) , err . stack ) ;
assert . strictE qual( util . inspect ( err ) , err . stack ) ;
} ) ;
try {
undef ( ) ; // eslint-disable-line no-undef
} catch ( e ) {
assert . e qual( util . inspect ( e ) , e . stack ) ;
assert . strictE qual( util . inspect ( e ) , e . stack ) ;
}
var ex = util . inspect ( new Error ( 'FAIL' ) , true ) ;
assert . ok ( ex . indexOf ( 'Error: FAIL' ) != - 1 ) ;
assert . ok ( ex . indexOf ( '[stack]' ) != - 1 ) ;
assert . ok ( ex . indexOf ( '[message]' ) != - 1 ) ;
assert ( ex . includes ( 'Error: FAIL' ) ) ;
assert ( ex . includes ( '[stack]' ) ) ;
assert ( ex . includes ( '[message]' ) ) ;
// Doesn't capture stack trace
function BadCustomError ( msg ) {
Error . call ( this ) ;
@ -331,11 +355,14 @@ function BadCustomError(msg) {
{ value : 'BadCustomError' , enumerable : false } ) ;
}
util . inherits ( BadCustomError , Error ) ;
assert . equal ( util . inspect ( new BadCustomError ( 'foo' ) ) , '[BadCustomError: foo]' ) ;
assert . strictEqual (
util . inspect ( new BadCustomError ( 'foo' ) ) ,
'[BadCustomError: foo]'
) ;
// GH-1941
// should not throw:
assert . e qual( util . inspect ( Object . create ( Date . prototype ) ) , 'Date {}' ) ;
assert . strictE qual( util . inspect ( Object . create ( Date . prototype ) ) , 'Date {}' ) ;
// GH-1944
assert . doesNotThrow ( function ( ) {
@ -366,7 +393,7 @@ assert.doesNotThrow(function() {
// GH-2225
{
const x = { inspect : util . inspect } ;
assert . ok ( util . inspect ( x ) . indexOf ( 'inspect' ) != - 1 ) ;
assert . strictEqual ( util . inspect ( x ) . includes ( 'inspect' ) , true ) ;
}
// util.inspect should not display the escaped value of a key.
@ -380,9 +407,14 @@ var w = {
var y = [ 'a' , 'b' , 'c' ] ;
y [ '\\\\\\' ] = 'd' ;
assert . ok ( util . inspect ( w ) ,
'{ \'\\\': 1, \'\\\\\': 2, \'\\\\\\\': 3, \'\\\\\\\\\': 4 }' ) ;
assert . ok ( util . inspect ( y ) , '[ \'a\', \'b\', \'c\', \'\\\\\\\': \'d\' ]' ) ;
assert . strictEqual (
util . inspect ( w ) ,
'{ \'\\\': 1, \'\\\\\': 2, \'\\\\\\\': 3, \'\\\\\\\\\': 4 }'
) ;
assert . strictEqual (
util . inspect ( y ) ,
'[ \'a\', \'b\', \'c\', \'\\\\\\\': \'d\' ]'
) ;
// util.inspect.styles and util.inspect.colors
function test_color_style ( style , input , implicit ) {
@ -395,7 +427,10 @@ function test_color_style(style, input, implicit) {
var with_color = util . inspect ( input , false , 0 , true ) ;
var expect = '\u001b[' + color [ 0 ] + 'm' + without_color +
'\u001b[' + color [ 1 ] + 'm' ;
assert . equal ( with_color , expect , 'util.inspect color for style ' + style ) ;
assert . strictEqual (
with_color ,
expect ,
` util.inspect color for style ${ style } ` ) ;
}
test_color_style ( 'special' , function ( ) { } ) ;
@ -419,30 +454,59 @@ assert.doesNotThrow(function() {
let subject = { foo : 'bar' , hello : 31 , a : { b : { c : { d : 0 } } } } ;
Object . defineProperty ( subject , 'hidden' , { enumerable : false , value : null } ) ;
assert ( util . inspect ( subject , { showHidden : false } ) . indexOf ( 'hidden' ) === - 1 ) ;
assert ( util . inspect ( subject , { showHidden : true } ) . indexOf ( 'hidden' ) !== - 1 ) ;
assert ( util . inspect ( subject , { colors : false } ) . indexOf ( '\u001b[32m' ) === - 1 ) ;
assert ( util . inspect ( subject , { colors : true } ) . indexOf ( '\u001b[32m' ) !== - 1 ) ;
assert ( util . inspect ( subject , { depth : 2 } ) . indexOf ( 'c: [Object]' ) !== - 1 ) ;
assert ( util . inspect ( subject , { depth : 0 } ) . indexOf ( 'a: [Object]' ) !== - 1 ) ;
assert ( util . inspect ( subject , { depth : null } ) . indexOf ( '{ d: 0 }' ) !== - 1 ) ;
assert . strictEqual (
util . inspect ( subject , { showHidden : false } ) . includes ( 'hidden' ) ,
false
) ;
assert . strictEqual (
util . inspect ( subject , { showHidden : true } ) . includes ( 'hidden' ) ,
true
) ;
assert . strictEqual (
util . inspect ( subject , { colors : false } ) . includes ( '\u001b[32m' ) ,
false
) ;
assert . strictEqual (
util . inspect ( subject , { colors : true } ) . includes ( '\u001b[32m' ) ,
true
) ;
assert . strictEqual (
util . inspect ( subject , { depth : 2 } ) . includes ( 'c: [Object]' ) ,
true
) ;
assert . strictEqual (
util . inspect ( subject , { depth : 0 } ) . includes ( 'a: [Object]' ) ,
true
) ;
assert . strictEqual (
util . inspect ( subject , { depth : null } ) . includes ( '{ d: 0 }' ) ,
true
) ;
// "customInspect" option can enable/disable calling inspect() on objects
subject = { inspect : function ( ) { return 123 ; } } ;
assert ( util . inspect ( subject ,
{ customInspect : true } ) . indexOf ( '123' ) !== - 1 ) ;
assert ( util . inspect ( subject ,
{ customInspect : true } ) . indexOf ( 'inspect' ) === - 1 ) ;
assert ( util . inspect ( subject ,
{ customInspect : false } ) . indexOf ( '123' ) === - 1 ) ;
assert ( util . inspect ( subject ,
{ customInspect : false } ) . indexOf ( 'inspect' ) !== - 1 ) ;
assert . strictEqual (
util . inspect ( subject , { customInspect : true } ) . includes ( '123' ) ,
true
) ;
assert . strictEqual (
util . inspect ( subject , { customInspect : true } ) . includes ( 'inspect' ) ,
false
) ;
assert . strictEqual (
util . inspect ( subject , { customInspect : false } ) . includes ( '123' ) ,
false
) ;
assert . strictEqual (
util . inspect ( subject , { customInspect : false } ) . includes ( 'inspect' ) ,
true
) ;
// custom inspect() functions should be able to return other Objects
subject . inspect = function ( ) { return { foo : 'bar' } ; } ;
assert . equal ( util . inspect ( subject ) , '{ foo: \'bar\' }' ) ;
assert . strictE qual( util . inspect ( subject ) , '{ foo: \'bar\' }' ) ;
subject . inspect = function ( depth , opts ) {
assert . strictEqual ( opts . customInspectOptions , true ) ;
@ -459,7 +523,7 @@ function test_lines(input) {
var without_color = util . inspect ( input ) ;
var with_color = util . inspect ( input , { colors : true } ) ;
assert . e qual( count_lines ( without_color ) , count_lines ( with_color ) ) ;
assert . strictE qual( count_lines ( without_color ) , count_lines ( with_color ) ) ;
}
test_lines ( [ 1 , 2 , 3 , 4 , 5 , 6 , 7 ] ) ;
@ -480,84 +544,96 @@ test_lines({
} ) ;
// test boxed primitives output the correct values
assert . equal ( util . inspect ( new String ( 'test' ) ) , '[String: \'test\']' ) ;
assert . equal ( util . inspect ( Object ( Symbol ( 'test' ) ) ) , '[Symbol: Symbol(test)]' ) ;
assert . equal ( util . inspect ( new Boolean ( false ) ) , '[Boolean: false]' ) ;
assert . equal ( util . inspect ( new Boolean ( true ) ) , '[Boolean: true]' ) ;
assert . equal ( util . inspect ( new Number ( 0 ) ) , '[Number: 0]' ) ;
assert . equal ( util . inspect ( new Number ( - 0 ) ) , '[Number: -0]' ) ;
assert . equal ( util . inspect ( new Number ( - 1.1 ) ) , '[Number: -1.1]' ) ;
assert . equal ( util . inspect ( new Number ( 13.37 ) ) , '[Number: 13.37]' ) ;
assert . strictEqual ( util . inspect ( new String ( 'test' ) ) , '[String: \'test\']' ) ;
assert . strictEqual (
util . inspect ( Object ( Symbol ( 'test' ) ) ) ,
'[Symbol: Symbol(test)]'
) ;
assert . strictEqual ( util . inspect ( new Boolean ( false ) ) , '[Boolean: false]' ) ;
assert . strictEqual ( util . inspect ( new Boolean ( true ) ) , '[Boolean: true]' ) ;
assert . strictEqual ( util . inspect ( new Number ( 0 ) ) , '[Number: 0]' ) ;
assert . strictEqual ( util . inspect ( new Number ( - 0 ) ) , '[Number: -0]' ) ;
assert . strictEqual ( util . inspect ( new Number ( - 1.1 ) ) , '[Number: -1.1]' ) ;
assert . strictEqual ( util . inspect ( new Number ( 13.37 ) ) , '[Number: 13.37]' ) ;
// test boxed primitives with own properties
var str = new String ( 'baz' ) ;
str . foo = 'bar' ;
assert . e qual( util . inspect ( str ) , '{ [String: \'baz\'] foo: \'bar\' }' ) ;
assert . strictE qual( util . inspect ( str ) , '{ [String: \'baz\'] foo: \'bar\' }' ) ;
var bool = new Boolean ( true ) ;
bool . foo = 'bar' ;
assert . e qual( util . inspect ( bool ) , '{ [Boolean: true] foo: \'bar\' }' ) ;
assert . strictE qual( util . inspect ( bool ) , '{ [Boolean: true] foo: \'bar\' }' ) ;
var num = new Number ( 13.37 ) ;
num . foo = 'bar' ;
assert . e qual( util . inspect ( num ) , '{ [Number: 13.37] foo: \'bar\' }' ) ;
assert . strictE qual( util . inspect ( num ) , '{ [Number: 13.37] foo: \'bar\' }' ) ;
// test es6 Symbol
if ( typeof Symbol !== 'undefined' ) {
assert . e qual( util . inspect ( Symbol ( ) ) , 'Symbol()' ) ;
assert . e qual( util . inspect ( Symbol ( 123 ) ) , 'Symbol(123)' ) ;
assert . e qual( util . inspect ( Symbol ( 'hi' ) ) , 'Symbol(hi)' ) ;
assert . e qual( util . inspect ( [ Symbol ( ) ] ) , '[ Symbol() ]' ) ;
assert . e qual( util . inspect ( { foo : Symbol ( ) } ) , '{ foo: Symbol() }' ) ;
assert . strictE qual( util . inspect ( Symbol ( ) ) , 'Symbol()' ) ;
assert . strictE qual( util . inspect ( Symbol ( 123 ) ) , 'Symbol(123)' ) ;
assert . strictE qual( util . inspect ( Symbol ( 'hi' ) ) , 'Symbol(hi)' ) ;
assert . strictE qual( util . inspect ( [ Symbol ( ) ] ) , '[ Symbol() ]' ) ;
assert . strictE qual( util . inspect ( { foo : Symbol ( ) } ) , '{ foo: Symbol() }' ) ;
const options = { showHidden : true } ;
let subject = { } ;
subject [ Symbol ( 'symbol' ) ] = 42 ;
assert . equal ( util . inspect ( subject ) , '{}' ) ;
assert . equal ( util . inspect ( subject , options ) , '{ [Symbol(symbol)]: 42 }' ) ;
assert . strictEqual ( util . inspect ( subject ) , '{}' ) ;
assert . strictEqual (
util . inspect ( subject , options ) ,
'{ [Symbol(symbol)]: 42 }'
) ;
subject = [ 1 , 2 , 3 ] ;
subject [ Symbol ( 'symbol' ) ] = 42 ;
assert . e qual( util . inspect ( subject ) , '[ 1, 2, 3 ]' ) ;
assert . e qual( util . inspect ( subject , options ) ,
assert . strictE qual( util . inspect ( subject ) , '[ 1, 2, 3 ]' ) ;
assert . strictE qual( util . inspect ( subject , options ) ,
'[ 1, 2, 3, [length]: 3, [Symbol(symbol)]: 42 ]' ) ;
}
// test Set
assert . e qual( util . inspect ( new Set ( ) ) , 'Set {}' ) ;
assert . e qual( util . inspect ( new Set ( [ 1 , 2 , 3 ] ) ) , 'Set { 1, 2, 3 }' ) ;
assert . strictE qual( util . inspect ( new Set ( ) ) , 'Set {}' ) ;
assert . strictE qual( util . inspect ( new Set ( [ 1 , 2 , 3 ] ) ) , 'Set { 1, 2, 3 }' ) ;
var set = new Set ( [ 'foo' ] ) ;
set . bar = 42 ;
assert . equal ( util . inspect ( set , true ) , 'Set { \'foo\', [size]: 1, bar: 42 }' ) ;
assert . strictEqual (
util . inspect ( set , true ) ,
'Set { \'foo\', [size]: 1, bar: 42 }'
) ;
// test Map
{
assert . e qual( util . inspect ( new Map ( ) ) , 'Map {}' ) ;
assert . e qual( util . inspect ( new Map ( [ [ 1 , 'a' ] , [ 2 , 'b' ] , [ 3 , 'c' ] ] ) ) ,
assert . strictE qual( util . inspect ( new Map ( ) ) , 'Map {}' ) ;
assert . strictE qual( util . inspect ( new Map ( [ [ 1 , 'a' ] , [ 2 , 'b' ] , [ 3 , 'c' ] ] ) ) ,
'Map { 1 => \'a\', 2 => \'b\', 3 => \'c\' }' ) ;
const map = new Map ( [ [ 'foo' , null ] ] ) ;
map . bar = 42 ;
assert . e qual( util . inspect ( map , true ) ,
assert . strictE qual( util . inspect ( map , true ) ,
'Map { \'foo\' => null, [size]: 1, bar: 42 }' ) ;
}
// test Promise
assert . equal ( util . inspect ( Promise . resolve ( 3 ) ) , 'Promise { 3 }' ) ;
assert . equal ( util . inspect ( Promise . reject ( 3 ) ) , 'Promise { <rejected> 3 }' ) ;
assert . equal ( util . inspect ( new Promise ( function ( ) { } ) ) , 'Promise { <pending> }' ) ;
assert . strictEqual ( util . inspect ( Promise . resolve ( 3 ) ) , 'Promise { 3 }' ) ;
assert . strictEqual ( util . inspect ( Promise . reject ( 3 ) ) , 'Promise { <rejected> 3 }' ) ;
assert . strictEqual (
util . inspect ( new Promise ( function ( ) { } ) ) ,
'Promise { <pending> }'
) ;
var promise = Promise . resolve ( 'foo' ) ;
promise . bar = 42 ;
assert . equal ( util . inspect ( promise ) , 'Promise { \'foo\', bar: 42 }' ) ;
assert . strictE qual( util . inspect ( promise ) , 'Promise { \'foo\', bar: 42 }' ) ;
// Make sure it doesn't choke on polyfills. Unlike Set/Map, there is no standard
// interface to synchronously inspect a Promise, so our techniques only work on
// a bonafide native Promise.
var oldPromise = Promise ;
global . Promise = function ( ) { this . bar = 42 ; } ;
assert . e qual( util . inspect ( new Promise ( ) ) , '{ bar: 42 }' ) ;
assert . strictE qual( util . inspect ( new Promise ( ) ) , '{ bar: 42 }' ) ;
global . Promise = oldPromise ;
// Map/Set Iterators
@ -591,7 +667,7 @@ function checkAlignment(container) {
var npos = line . search ( /\d/ ) ;
if ( npos !== - 1 ) {
if ( pos !== undefined )
assert . e qual( pos , npos , 'container items not aligned' ) ;
assert . strictE qual( pos , npos , 'container items not aligned' ) ;
pos = npos ;
}
} ) ;
@ -624,22 +700,22 @@ checkAlignment(new Map(big_array.map(function(y) { return [y, null]; })));
const x = new ObjectSubclass ( ) ;
x . foo = 42 ;
assert . e qual( util . inspect ( x ) ,
assert . strictE qual( util . inspect ( x ) ,
'ObjectSubclass { foo: 42 }' ) ;
assert . e qual( util . inspect ( new ArraySubclass ( 1 , 2 , 3 ) ) ,
assert . strictE qual( util . inspect ( new ArraySubclass ( 1 , 2 , 3 ) ) ,
'ArraySubclass [ 1, 2, 3 ]' ) ;
assert . e qual( util . inspect ( new SetSubclass ( [ 1 , 2 , 3 ] ) ) ,
assert . strictE qual( util . inspect ( new SetSubclass ( [ 1 , 2 , 3 ] ) ) ,
'SetSubclass { 1, 2, 3 }' ) ;
assert . e qual( util . inspect ( new MapSubclass ( [ [ 'foo' , 42 ] ] ) ) ,
assert . strictE qual( util . inspect ( new MapSubclass ( [ [ 'foo' , 42 ] ] ) ) ,
'MapSubclass { \'foo\' => 42 }' ) ;
assert . e qual( util . inspect ( new PromiseSubclass ( function ( ) { } ) ) ,
assert . strictE qual( util . inspect ( new PromiseSubclass ( function ( ) { } ) ) ,
'PromiseSubclass { <pending> }' ) ;
}
// Corner cases.
{
const x = { constructor : 42 } ;
assert . e qual( util . inspect ( x ) , '{ constructor: 42 }' ) ;
assert . strictE qual( util . inspect ( x ) , '{ constructor: 42 }' ) ;
}
{
@ -650,17 +726,17 @@ checkAlignment(new Map(big_array.map(function(y) { return [y, null]; })));
} ,
enumerable : true
} ) ;
assert . e qual( util . inspect ( x ) , '{ constructor: [Getter] }' ) ;
assert . strictE qual( util . inspect ( x ) , '{ constructor: [Getter] }' ) ;
}
{
const x = new function ( ) { } ;
assert . e qual( util . inspect ( x ) , '{}' ) ;
assert . strictE qual( util . inspect ( x ) , '{}' ) ;
}
{
const x = Object . create ( null ) ;
assert . e qual( util . inspect ( x ) , '{}' ) ;
assert . strictE qual( util . inspect ( x ) , '{}' ) ;
}
// The following maxArrayLength tests were introduced after v6.0.0 was released.