1 // Copyright 2015 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 (function (global, binding, v8) { 6 'use strict'; 7 binding.testExtraShouldReturnFive = function() { 8 return 5; 9 }; 10 11 binding.testExtraShouldCallToRuntime = function() { 12 return binding.runtime(3); 13 }; 14 15 binding.testFunctionToString = function() { 16 function foo() { return 1; } 17 return foo.toString(); 18 }; 19 20 binding.testStackTrace = function(f) { 21 return f(); 22 } 23 24 // Exercise all of the extras utils: 25 // - v8.createPrivateSymbol 26 // - v8.simpleBind, v8.uncurryThis 27 // - v8.InternalPackedArray 28 // - v8.createPromise, v8.resolvePromise, v8.rejectPromise 29 30 const Object = global.Object; 31 const hasOwn = v8.uncurryThis(Object.prototype.hasOwnProperty); 32 33 const Function = global.Function; 34 const call = v8.uncurryThis(Function.prototype.call); 35 const apply = v8.uncurryThis(Function.prototype.apply); 36 37 const Promise = global.Promise; 38 const Promise_resolve = v8.simpleBind(Promise.resolve, Promise); 39 40 const arrayToTest = new v8.InternalPackedArray(); 41 arrayToTest.push(1); 42 arrayToTest.push(2); 43 arrayToTest.pop(); 44 arrayToTest.unshift("a", "b", "c"); 45 arrayToTest.shift(); 46 arrayToTest.splice(0, 1); 47 const slicedArray = arrayToTest.slice(); 48 const arraysOK = arrayToTest.length === 2 && arrayToTest[0] === "c" && 49 arrayToTest[1] === 1 && slicedArray.length === 2 && 50 slicedArray[0] === "c" && slicedArray[1] === 1; 51 52 binding.testExtraCanUseUtils = function() { 53 const fulfilledPromise = v8.createPromise(); 54 v8.resolvePromise( 55 fulfilledPromise, 56 hasOwn({ test: 'test' }, 'test') ? 1 : -1 57 ); 58 59 const fulfilledPromise2 = Promise_resolve(call(function (arg1, arg2) { 60 return (this.prop === arg1 && arg1 === 'value' && arg2) ? 2 : -1; 61 }, { prop: 'value' }, 'value', arraysOK)); 62 63 const rejectedPromise = v8.createPromise(); 64 v8.rejectPromise(rejectedPromise, apply(function (arg1, arg2) { 65 return (arg1 === arg2 && arg2 === 'x') ? 3 : -1; 66 }, null, new v8.InternalPackedArray('x', 'x'))); 67 68 return { 69 privateSymbol: v8.createPrivateSymbol('sym'), 70 fulfilledPromise, // should be fulfilled with 1 71 fulfilledPromise2, // should be fulfilled with 2 72 rejectedPromise // should be rejected with 3 73 }; 74 }; 75 }) 76