/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ /** * Tests if functions calls are recorded and stored for a canvas context, * and that their stack is successfully retrieved. */ function* ifTestingSupported() { let { target, front } = yield initCallWatcherBackend(SIMPLE_CANVAS_URL); let navigated = once(target, "navigate"); yield front.setup({ tracedGlobals: ["CanvasRenderingContext2D", "WebGLRenderingContext"], startRecording: true, performReload: true, storeCalls: true }); ok(true, "The front was setup up successfully."); yield navigated; ok(true, "Target automatically navigated when the front was set up."); // Allow the content to execute some functions. yield waitForTick(); let functionCalls = yield front.pauseRecording(); ok(functionCalls, "An array of function call actors was sent after reloading."); ok(functionCalls.length > 0, "There's at least one function call actor available."); is(functionCalls[0].type, CallWatcherFront.METHOD_FUNCTION, "The called function is correctly identified as a method."); is(functionCalls[0].name, "clearRect", "The called function's name is correct."); is(functionCalls[0].file, SIMPLE_CANVAS_URL, "The called function's file is correct."); is(functionCalls[0].line, 25, "The called function's line is correct."); is(functionCalls[0].callerPreview, "Object", "The called function's caller preview is correct."); is(functionCalls[0].argsPreview, "0, 0, 128, 128", "The called function's args preview is correct."); let details = yield functionCalls[1].getDetails(); ok(details, "The first called function has some details available."); is(details.stack.length, 3, "The called function's stack depth is correct."); is(details.stack[0].name, "fillStyle", "The called function's stack is correct (1.1)."); is(details.stack[0].file, SIMPLE_CANVAS_URL, "The called function's stack is correct (1.2)."); is(details.stack[0].line, 20, "The called function's stack is correct (1.3)."); is(details.stack[1].name, "drawRect", "The called function's stack is correct (2.1)."); is(details.stack[1].file, SIMPLE_CANVAS_URL, "The called function's stack is correct (2.2)."); is(details.stack[1].line, 26, "The called function's stack is correct (2.3)."); is(details.stack[2].name, "drawScene", "The called function's stack is correct (3.1)."); is(details.stack[2].file, SIMPLE_CANVAS_URL, "The called function's stack is correct (3.2)."); is(details.stack[2].line, 33, "The called function's stack is correct (3.3)."); yield removeTab(target.tab); finish(); }