aboutsummaryrefslogtreecommitdiff
path: root/test/parallel/test-util-format.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/parallel/test-util-format.js')
-rw-r--r--test/parallel/test-util-format.js60
1 files changed, 60 insertions, 0 deletions
diff --git a/test/parallel/test-util-format.js b/test/parallel/test-util-format.js
index 2ef0528490..e07ec6d6a3 100644
--- a/test/parallel/test-util-format.js
+++ b/test/parallel/test-util-format.js
@@ -160,6 +160,66 @@ assert.strictEqual(util.format('%s', () => 5), '() => 5');
util.format('%s', new Foobar(5)),
'Foobar [ <5 empty items>, aaa: true ]'
);
+
+ // Subclassing:
+ class B extends Foo {}
+
+ function C() {}
+ C.prototype.toString = function() {
+ return 'Custom';
+ };
+
+ function D() {
+ C.call(this);
+ }
+ D.prototype = Object.create(C.prototype);
+
+ assert.strictEqual(
+ util.format('%s', new B()),
+ 'Bar'
+ );
+ assert.strictEqual(
+ util.format('%s', new C()),
+ 'Custom'
+ );
+ assert.strictEqual(
+ util.format('%s', new D()),
+ 'Custom'
+ );
+
+ D.prototype.constructor = D;
+ assert.strictEqual(
+ util.format('%s', new D()),
+ 'Custom'
+ );
+
+ D.prototype.constructor = null;
+ assert.strictEqual(
+ util.format('%s', new D()),
+ 'Custom'
+ );
+
+ D.prototype.constructor = { name: 'Foobar' };
+ assert.strictEqual(
+ util.format('%s', new D()),
+ 'Custom'
+ );
+
+ Object.defineProperty(D.prototype, 'constructor', {
+ get() {
+ throw new Error();
+ },
+ configurable: true
+ });
+ assert.strictEqual(
+ util.format('%s', new D()),
+ 'Custom'
+ );
+
+ assert.strictEqual(
+ util.format('%s', Object.create(null)),
+ '[Object: null prototype] {}'
+ );
}
// JSON format specifier