<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> <html> <head> <link rel="help" href="http://www.w3.org/TR/2013/WD-2dcontext2-20130528/#dom-context-2d-setlinedash"> <script src="../../resources/js-test.js"></script> </head> <body> <script> description("Test that setLineDash converts input argument into a Web IDL sequence"); var canvas = document.createElement('canvas'); document.body.appendChild(canvas); canvas.setAttribute('width', '700'); canvas.setAttribute('height', '700'); var ctx = canvas.getContext('2d'); var arrayValues = [5, 15, 25]; function createTestArray(arrayType) { var array; if (arrayType == Object) { // Test a "sequence" (Object with length property). array = {length: arrayValues.length}; } else { array = new arrayType(arrayValues.length); } for (var i = 0; i < arrayValues.length; ++i) array[i] = arrayValues[i] return array; } var lineDash; var inputArray; function checkLineDash(testArray, shouldFail) { inputArray = testArray; // Reset line dash. ctx.setLineDash([]); // Set line dash. if (shouldFail) { shouldThrow("ctx.setLineDash(inputArray)", "'TypeError: Failed to execute \\'setLineDash\\' on \\'CanvasRenderingContext2D\\': The 1st argument is neither an array, nor does it have indexed properties.'"); } else { ctx.setLineDash(inputArray); lineDash = ctx.getLineDash(); for (var i = 0; i < arrayValues.length; ++i) shouldBe("lineDash[" + i + "]", "" + arrayValues[i]); } } var arrayTypes = [Array, Int8Array, Int16Array, Int32Array, Uint8Array, Uint16Array, Uint32Array, Float32Array, Float64Array, Uint8ClampedArray, Object]; // Success cases. for (var i = 0; i < arrayTypes.length; ++i) { debug("* Test passing a " + arrayTypes[i].name + " as input."); checkLineDash(createTestArray(arrayTypes[i]), false); } // Failure cases. debug("* Test passing a Date as input."); checkLineDash(new Date(), true); debug("* Test passing a RegExp as input."); checkLineDash(new RegExp(), true); debug("* Test passing an Object without length as input."); checkLineDash({test: 1}, true); debug("* Test passing a Number as input."); checkLineDash(3, true); debug("* Test passing a String as input."); checkLineDash("Test", true); debug("* Test passing a Boolean as input."); checkLineDash(true, true); debug("* Test passing null as input."); checkLineDash(null, true); debug("* Test passing undefined as input."); checkLineDash(undefined, true); </script> </body> </html>