mirror of
https://github.com/nodejs/node.git
synced 2025-12-28 07:50:41 +00:00
node-api: use local files for instanceof test
PR-URL: https://github.com/nodejs/node/pull/60190 Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
This commit is contained in:
parent
7c0995c21b
commit
77d81979a3
@ -1,58 +1,9 @@
|
||||
'use strict';
|
||||
const common = require('../../common');
|
||||
const fs = require('fs');
|
||||
const assert = require('assert');
|
||||
|
||||
// Addon is referenced through the eval expression in testFile
|
||||
const addon = require(`./build/${common.buildType}/test_general`);
|
||||
const path = require('path');
|
||||
|
||||
// This test depends on a number of V8 tests.
|
||||
const v8TestsDir = path.resolve(__dirname, '..', '..', '..', 'deps', 'v8',
|
||||
'test', 'mjsunit');
|
||||
const v8TestsDirExists = fs.existsSync(v8TestsDir);
|
||||
|
||||
// The following assert functions are referenced by v8's unit tests
|
||||
// See for instance deps/v8/test/mjsunit/instanceof.js
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
function assertTrue(assertion) {
|
||||
return assert.strictEqual(assertion, true);
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
function assertFalse(assertion) {
|
||||
assert.strictEqual(assertion, false);
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
function assertEquals(leftHandSide, rightHandSide) {
|
||||
assert.strictEqual(leftHandSide, rightHandSide);
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
function assertThrows(statement) {
|
||||
assert.throws(function() {
|
||||
eval(statement);
|
||||
}, Error);
|
||||
}
|
||||
|
||||
function testFile(fileName) {
|
||||
try {
|
||||
const contents = fs.readFileSync(fileName, { encoding: 'utf8' });
|
||||
eval(contents.replace(/[(]([^\s(]+)\s+instanceof\s+([^)]+)[)]/g,
|
||||
'(addon.doInstanceOf($1, $2))'));
|
||||
} catch (err) {
|
||||
// This test depends on V8 test files, which may not exist in downloaded
|
||||
// archives. Emit a warning if the tests cannot be found instead of failing.
|
||||
if (err.code === 'ENOENT' && !v8TestsDirExists)
|
||||
process.emitWarning(`test file ${fileName} does not exist.`);
|
||||
else
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
testFile(path.join(v8TestsDir, 'instanceof.js'));
|
||||
testFile(path.join(v8TestsDir, 'instanceof-2.js'));
|
||||
|
||||
// We can only perform this test if we have a working Symbol.hasInstance
|
||||
if (typeof Symbol !== 'undefined' && 'hasInstance' in Symbol &&
|
||||
|
||||
102
test/js-native-api/test_general/testV8Instanceof.js
Normal file
102
test/js-native-api/test_general/testV8Instanceof.js
Normal file
@ -0,0 +1,102 @@
|
||||
// This test is adopted from V8's test suite.
|
||||
// See deps/v8/test/mjsunit/instanceof.js in Node.js source repository.
|
||||
//
|
||||
// Copyright 2008 the V8 project authors. All rights reserved.
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following
|
||||
// disclaimer in the documentation and/or other materials provided
|
||||
// with the distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived
|
||||
// from this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
'use strict';
|
||||
|
||||
const common = require('../../common');
|
||||
const addon = require(`./build/${common.buildType}/test_general`);
|
||||
const assert = require('assert');
|
||||
|
||||
assert.ok(addon.doInstanceOf({}, Object));
|
||||
assert.ok(addon.doInstanceOf([], Object));
|
||||
|
||||
assert.ok(!addon.doInstanceOf({}, Array));
|
||||
assert.ok(addon.doInstanceOf([], Array));
|
||||
|
||||
function TestChains() {
|
||||
const A = {};
|
||||
const B = {};
|
||||
const C = {};
|
||||
Object.setPrototypeOf(B, A);
|
||||
Object.setPrototypeOf(C, B);
|
||||
|
||||
function F() { }
|
||||
F.prototype = A;
|
||||
assert.ok(addon.doInstanceOf(C, F));
|
||||
assert.ok(addon.doInstanceOf(B, F));
|
||||
assert.ok(!addon.doInstanceOf(A, F));
|
||||
|
||||
F.prototype = B;
|
||||
assert.ok(addon.doInstanceOf(C, F));
|
||||
assert.ok(!addon.doInstanceOf(B, F));
|
||||
assert.ok(!addon.doInstanceOf(A, F));
|
||||
|
||||
F.prototype = C;
|
||||
assert.ok(!addon.doInstanceOf(C, F));
|
||||
assert.ok(!addon.doInstanceOf(B, F));
|
||||
assert.ok(!addon.doInstanceOf(A, F));
|
||||
}
|
||||
|
||||
TestChains();
|
||||
|
||||
function TestExceptions() {
|
||||
function F() { }
|
||||
const items = [ 1, new Number(42),
|
||||
true,
|
||||
'string', new String('hest'),
|
||||
{}, [],
|
||||
F, new F(),
|
||||
Object, String ];
|
||||
|
||||
let exceptions = 0;
|
||||
let instanceofs = 0;
|
||||
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
for (let j = 0; j < items.length; j++) {
|
||||
try {
|
||||
if (addon.doInstanceOf(items[i], items[j])) instanceofs++;
|
||||
} catch (e) {
|
||||
assert.ok(addon.doInstanceOf(e, TypeError));
|
||||
exceptions++;
|
||||
}
|
||||
}
|
||||
}
|
||||
assert.strictEqual(instanceofs, 10);
|
||||
assert.strictEqual(exceptions, 88);
|
||||
|
||||
// Make sure to throw an exception if the function prototype
|
||||
// isn't a proper JavaScript object.
|
||||
function G() { }
|
||||
G.prototype = undefined;
|
||||
assert.throws(function() {
|
||||
addon.doInstanceOf({}, G);
|
||||
}, Error);
|
||||
}
|
||||
|
||||
TestExceptions();
|
||||
338
test/js-native-api/test_general/testV8Instanceof2.js
Normal file
338
test/js-native-api/test_general/testV8Instanceof2.js
Normal file
@ -0,0 +1,338 @@
|
||||
// This test is adopted from V8's test suite.
|
||||
// See deps/v8/test/mjsunit/instanceof-2.js in Node.js source repository.
|
||||
//
|
||||
// Copyright 2010 the V8 project authors. All rights reserved.
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following
|
||||
// disclaimer in the documentation and/or other materials provided
|
||||
// with the distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived
|
||||
// from this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
'use strict';
|
||||
|
||||
const common = require('../../common');
|
||||
const addon = require(`./build/${common.buildType}/test_general`);
|
||||
const assert = require('assert');
|
||||
|
||||
const except = 'exception';
|
||||
|
||||
let correct_answer_index = 0;
|
||||
const correct_answers = [
|
||||
false, false, true, true, false, false, true, true,
|
||||
true, false, false, true, true, false, false, true,
|
||||
false, true, true, false, false, true, true, false,
|
||||
true, true, false, false, true, true, false, false,
|
||||
except, except, true, true, except, except, true, true,
|
||||
except, except, false, true, except, except, false, true,
|
||||
except, except, true, false, except, except, true, false,
|
||||
except, except, false, false, except, except, false, false,
|
||||
false, false, except, except, false, false, except, except,
|
||||
true, false, except, except, true, false, except, except,
|
||||
false, true, except, except, false, true, except, except,
|
||||
true, true, except, except, true, true, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
false, false, true, true, false, false, true, true,
|
||||
true, false, false, true, false, false, true, true,
|
||||
false, true, true, false, false, true, true, false,
|
||||
true, true, false, false, false, true, true, false,
|
||||
except, except, true, true, except, except, true, true,
|
||||
except, except, false, true, except, except, true, true,
|
||||
except, except, true, false, except, except, true, false,
|
||||
except, except, false, false, except, except, true, false,
|
||||
false, false, except, except, false, false, except, except,
|
||||
true, false, except, except, true, false, except, except,
|
||||
false, true, except, except, false, true, except, except,
|
||||
true, true, except, except, true, true, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
false, false, true, true, false, true, true, false,
|
||||
true, false, false, true, true, true, false, false,
|
||||
false, true, true, false, false, true, true, false,
|
||||
true, true, false, false, true, true, false, false,
|
||||
except, except, true, true, except, except, true, true,
|
||||
except, except, false, true, except, except, false, true,
|
||||
except, except, true, false, except, except, true, false,
|
||||
except, except, false, false, except, except, false, false,
|
||||
false, false, except, except, false, true, except, except,
|
||||
true, false, except, except, true, true, except, except,
|
||||
false, true, except, except, false, true, except, except,
|
||||
true, true, except, except, true, true, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
false, false, true, true, false, true, true, false,
|
||||
true, false, false, true, false, true, true, false,
|
||||
false, true, true, false, false, true, true, false,
|
||||
true, true, false, false, false, true, true, false,
|
||||
except, except, true, true, except, except, true, true,
|
||||
except, except, false, true, except, except, true, true,
|
||||
except, except, true, false, except, except, true, false,
|
||||
except, except, false, false, except, except, true, false,
|
||||
false, false, except, except, false, true, except, except,
|
||||
true, false, except, except, true, true, except, except,
|
||||
false, true, except, except, false, true, except, except,
|
||||
true, true, except, except, true, true, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
false, false, true, true, false, false, true, true,
|
||||
true, false, false, true, false, false, true, true,
|
||||
false, true, true, false, true, true, false, false,
|
||||
true, true, false, false, true, true, false, false,
|
||||
except, except, true, true, except, except, true, true,
|
||||
except, except, false, true, except, except, true, true,
|
||||
except, except, true, false, except, except, false, false,
|
||||
except, except, false, false, except, except, false, false,
|
||||
false, false, except, except, false, false, except, except,
|
||||
true, false, except, except, false, false, except, except,
|
||||
false, true, except, except, true, true, except, except,
|
||||
true, true, except, except, true, true, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
false, false, true, true, false, false, true, true,
|
||||
true, false, false, true, false, false, true, true,
|
||||
false, true, true, false, true, true, false, false,
|
||||
true, true, false, false, true, true, false, false,
|
||||
except, except, true, true, except, except, true, true,
|
||||
except, except, false, true, except, except, true, true,
|
||||
except, except, true, false, except, except, false, false,
|
||||
except, except, false, false, except, except, false, false,
|
||||
false, false, except, except, false, false, except, except,
|
||||
true, false, except, except, false, false, except, except,
|
||||
false, true, except, except, true, true, except, except,
|
||||
true, true, except, except, true, true, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
false, false, true, true, true, true, false, false,
|
||||
true, false, false, true, true, true, false, false,
|
||||
false, true, true, false, true, true, false, false,
|
||||
true, true, false, false, true, true, false, false,
|
||||
except, except, true, true, except, except, true, true,
|
||||
except, except, false, true, except, except, true, true,
|
||||
except, except, true, false, except, except, false, false,
|
||||
except, except, false, false, except, except, false, false,
|
||||
false, false, except, except, true, true, except, except,
|
||||
true, false, except, except, true, true, except, except,
|
||||
false, true, except, except, true, true, except, except,
|
||||
true, true, except, except, true, true, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
false, false, true, true, true, true, false, false,
|
||||
true, false, false, true, true, true, false, false,
|
||||
false, true, true, false, true, true, false, false,
|
||||
true, true, false, false, true, true, false, false,
|
||||
except, except, true, true, except, except, true, true,
|
||||
except, except, false, true, except, except, true, true,
|
||||
except, except, true, false, except, except, false, false,
|
||||
except, except, false, false, except, except, false, false,
|
||||
false, false, except, except, true, true, except, except,
|
||||
true, false, except, except, true, true, except, except,
|
||||
false, true, except, except, true, true, except, except,
|
||||
true, true, except, except, true, true, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
false, false, true, true, false, false, true, true,
|
||||
true, false, false, true, true, true, false, false,
|
||||
false, true, true, false, false, false, true, true,
|
||||
true, true, false, false, true, true, false, false,
|
||||
except, except, true, true, except, except, true, true,
|
||||
except, except, false, true, except, except, false, false,
|
||||
except, except, true, false, except, except, true, true,
|
||||
except, except, false, false, except, except, false, false,
|
||||
false, false, except, except, false, false, except, except,
|
||||
true, false, except, except, true, true, except, except,
|
||||
false, true, except, except, false, false, except, except,
|
||||
true, true, except, except, true, true, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
false, false, true, true, false, false, true, true,
|
||||
true, false, false, true, false, false, true, true,
|
||||
false, true, true, false, false, false, true, true,
|
||||
true, true, false, false, false, false, true, true,
|
||||
except, except, true, true, except, except, true, true,
|
||||
except, except, false, true, except, except, true, true,
|
||||
except, except, true, false, except, except, true, true,
|
||||
except, except, false, false, except, except, true, true,
|
||||
false, false, except, except, false, false, except, except,
|
||||
true, false, except, except, true, true, except, except,
|
||||
false, true, except, except, false, false, except, except,
|
||||
true, true, except, except, true, true, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
false, false, true, true, false, false, true, true,
|
||||
true, false, false, true, true, true, false, false,
|
||||
false, true, true, false, false, false, true, true,
|
||||
true, true, false, false, true, true, false, false,
|
||||
except, except, true, true, except, except, true, true,
|
||||
except, except, false, true, except, except, false, false,
|
||||
except, except, true, false, except, except, true, true,
|
||||
except, except, false, false, except, except, false, false,
|
||||
false, false, except, except, false, false, except, except,
|
||||
true, false, except, except, true, true, except, except,
|
||||
false, true, except, except, false, false, except, except,
|
||||
true, true, except, except, true, true, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
false, false, true, true, false, false, true, true,
|
||||
true, false, false, true, false, false, true, true,
|
||||
false, true, true, false, false, false, true, true,
|
||||
true, true, false, false, false, false, true, true,
|
||||
except, except, true, true, except, except, true, true,
|
||||
except, except, false, true, except, except, true, true,
|
||||
except, except, true, false, except, except, true, true,
|
||||
except, except, false, false, except, except, true, true,
|
||||
false, false, except, except, false, false, except, except,
|
||||
true, false, except, except, true, true, except, except,
|
||||
false, true, except, except, false, false, except, except,
|
||||
true, true, except, except, true, true, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
false, false, true, true, false, false, true, true,
|
||||
true, false, false, true, false, false, true, true,
|
||||
false, true, true, false, true, true, false, false,
|
||||
true, true, false, false, true, true, false, false,
|
||||
except, except, true, true, except, except, true, true,
|
||||
except, except, false, true, except, except, true, true,
|
||||
except, except, true, false, except, except, false, false,
|
||||
except, except, false, false, except, except, false, false,
|
||||
false, false, except, except, false, false, except, except,
|
||||
true, false, except, except, false, false, except, except,
|
||||
false, true, except, except, true, true, except, except,
|
||||
true, true, except, except, true, true, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
false, false, true, true, false, false, true, true,
|
||||
true, false, false, true, false, false, true, true,
|
||||
false, true, true, false, true, true, false, false,
|
||||
true, true, false, false, true, true, false, false,
|
||||
except, except, true, true, except, except, true, true,
|
||||
except, except, false, true, except, except, true, true,
|
||||
except, except, true, false, except, except, false, false,
|
||||
except, except, false, false, except, except, false, false,
|
||||
false, false, except, except, false, false, except, except,
|
||||
true, false, except, except, false, false, except, except,
|
||||
false, true, except, except, true, true, except, except,
|
||||
true, true, except, except, true, true, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
false, false, true, true, true, true, false, false,
|
||||
true, false, false, true, true, true, false, false,
|
||||
false, true, true, false, true, true, false, false,
|
||||
true, true, false, false, true, true, false, false,
|
||||
except, except, true, true, except, except, true, true,
|
||||
except, except, false, true, except, except, true, true,
|
||||
except, except, true, false, except, except, false, false,
|
||||
except, except, false, false, except, except, false, false,
|
||||
false, false, except, except, true, true, except, except,
|
||||
true, false, except, except, true, true, except, except,
|
||||
false, true, except, except, true, true, except, except,
|
||||
true, true, except, except, true, true, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
false, false, true, true, true, true, false, false,
|
||||
true, false, false, true, true, true, false, false,
|
||||
false, true, true, false, true, true, false, false,
|
||||
true, true, false, false, true, true, false, false,
|
||||
except, except, true, true, except, except, true, true,
|
||||
except, except, false, true, except, except, true, true,
|
||||
except, except, true, false, except, except, false, false,
|
||||
except, except, false, false, except, except, false, false,
|
||||
false, false, except, except, true, true, except, except,
|
||||
true, false, except, except, true, true, except, except,
|
||||
false, true, except, except, true, true, except, except,
|
||||
true, true, except, except, true, true, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except,
|
||||
except, except, except, except, except, except, except, except];
|
||||
|
||||
for (let i = 0; i < 256; i++) {
|
||||
Test(i & 1, i & 2, i & 4, i & 8, i & 0x10, i & 0x20, i & 0x40, i & 0x80);
|
||||
}
|
||||
|
||||
|
||||
function InstanceTest(x, func) {
|
||||
try {
|
||||
const answer = addon.doInstanceOf(x, func);
|
||||
assert.strictEqual(correct_answers[correct_answer_index], answer);
|
||||
} catch (e) {
|
||||
assert.ok(/prototype/.test(e));
|
||||
assert.strictEqual(correct_answers[correct_answer_index], except);
|
||||
}
|
||||
correct_answer_index++;
|
||||
}
|
||||
|
||||
|
||||
function Test(a, b, c, d, e, f, g, h) {
|
||||
function Foo() { }
|
||||
|
||||
function Bar() { }
|
||||
|
||||
if (c) Foo.prototype = 12;
|
||||
if (d) Bar.prototype = 13;
|
||||
const x = a ? new Foo() : new Bar();
|
||||
const y = b ? new Foo() : new Bar();
|
||||
InstanceTest(x, Foo);
|
||||
InstanceTest(y, Foo);
|
||||
InstanceTest(x, Bar);
|
||||
InstanceTest(y, Bar);
|
||||
if (e) x.__proto__ = Bar.prototype; // eslint-disable-line no-proto
|
||||
if (f) y.__proto__ = Foo.prototype; // eslint-disable-line no-proto
|
||||
if (g) {
|
||||
Object.setPrototypeOf(x, y);
|
||||
} else if (h) {
|
||||
Object.setPrototypeOf(y, x);
|
||||
}
|
||||
InstanceTest(x, Foo);
|
||||
InstanceTest(y, Foo);
|
||||
InstanceTest(x, Bar);
|
||||
InstanceTest(y, Bar);
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user