UNPKG

koffi

Version:

Fast and simple C FFI (foreign function interface) for Node.js

67 lines (51 loc) 2.6 kB
'use strict'; const assert = require('assert'); module.exports = require('./common').runTest(test); function test (binding) { const majorNodeVersion = process.versions.node.split('.')[0]; const wellKnownSymbolFunctions = ['asyncIterator', 'hasInstance', 'isConcatSpreadable', 'iterator', 'match', 'replace', 'search', 'split', 'species', 'toPrimitive', 'toStringTag', 'unscopables']; if (majorNodeVersion >= 12) { wellKnownSymbolFunctions.push('matchAll'); } function assertCanCreateSymbol (symbol) { assert(binding.symbol.createNewSymbolWithCppStr(symbol) !== null); assert(binding.symbol.createNewSymbolWithCStr(symbol) !== null); assert(binding.symbol.createNewSymbolWithNapi(symbol) !== null); } function assertSymbolAreUnique (symbol) { const symbolOne = binding.symbol.createNewSymbolWithCppStr(symbol); const symbolTwo = binding.symbol.createNewSymbolWithCppStr(symbol); assert(symbolOne !== symbolTwo); } function assertSymbolIsWellknown (symbol) { const symbOne = binding.symbol.getWellKnownSymbol(symbol); const symbTwo = binding.symbol.getWellKnownSymbol(symbol); assert(symbOne && symbTwo); assert(symbOne === symbTwo); } function assertSymbolIsNotWellknown (symbol) { const symbolTest = binding.symbol.getWellKnownSymbol(symbol); assert(symbolTest === undefined); } function assertCanCreateOrFetchGlobalSymbols (symbol, fetchFunction) { const symbOne = fetchFunction(symbol); const symbTwo = fetchFunction(symbol); assert(symbOne && symbTwo); assert(symbOne === symbTwo); } assertCanCreateSymbol('testing'); assertSymbolAreUnique('symbol'); assertSymbolIsNotWellknown('testing'); for (const wellknownProperty of wellKnownSymbolFunctions) { assertSymbolIsWellknown(wellknownProperty); } assertCanCreateOrFetchGlobalSymbols('data', binding.symbol.getSymbolFromGlobalRegistry); assertCanCreateOrFetchGlobalSymbols('CppKey', binding.symbol.getSymbolFromGlobalRegistryWithCppKey); assertCanCreateOrFetchGlobalSymbols('CKey', binding.symbol.getSymbolFromGlobalRegistryWithCKey); assert(binding.symbol.createNewSymbolWithNoArgs() === undefined); // eslint-disable-next-line no-self-compare assert(binding.symbol.testNullSymbolCanBeCreated() === binding.symbol.testNullSymbolCanBeCreated()); // eslint-disable-next-line no-self-compare assert(binding.symbol.testUndefinedSymbolCanBeCreated() === binding.symbol.testUndefinedSymbolCanBeCreated()); assert(binding.symbol.testUndefinedSymbolCanBeCreated() !== binding.symbol.testNullSymbolCanBeCreated()); }