set.js
1 'use strict'; 2 3 var test = require('tape'); 4 5 var setDunderProto = require('../set'); 6 7 test('setDunderProto', { skip: !setDunderProto }, function (t) { 8 if (!setDunderProto) { 9 throw 'should never happen; this is just for type narrowing'; // eslint-disable-line no-throw-literal 10 } 11 12 // @ts-expect-error 13 t['throws'](function () { setDunderProto(); }, TypeError, 'throws if no arguments'); 14 // @ts-expect-error 15 t['throws'](function () { setDunderProto(undefined); }, TypeError, 'throws with undefined and nothing'); 16 // @ts-expect-error 17 t['throws'](function () { setDunderProto(undefined, undefined); }, TypeError, 'throws with undefined and undefined'); 18 // @ts-expect-error 19 t['throws'](function () { setDunderProto(null); }, TypeError, 'throws with null and undefined'); 20 // @ts-expect-error 21 t['throws'](function () { setDunderProto(null, undefined); }, TypeError, 'throws with null and undefined'); 22 23 /** @type {{ inherited?: boolean }} */ 24 var obj = {}; 25 t.ok('toString' in obj, 'object initially has toString'); 26 27 setDunderProto(obj, null); 28 t.notOk('toString' in obj, 'object no longer has toString'); 29 30 t.notOk('inherited' in obj, 'object lacks inherited property'); 31 setDunderProto(obj, { inherited: true }); 32 t.equal(obj.inherited, true, 'object has inherited property'); 33 34 t.end(); 35 }); 36 37 test('no dunder proto', { skip: !!setDunderProto }, function (t) { 38 if ('__proto__' in Object.prototype) { 39 t['throws']( 40 // @ts-expect-error 41 function () { ({}).__proto__ = null; }, // eslint-disable-line no-proto 42 Error, 43 'throws when setting Object.prototype.__proto__' 44 ); 45 } else { 46 t.notOk('__proto__' in Object.prototype, 'no __proto__ in Object.prototype'); 47 } 48 49 t.end(); 50 });