Checks the behavior of passing undefined for optional parameters that have default values

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


* HTMLInputElement.stepUp(optional long n = 1)
PASS testNumber.value is "0"
testNumber.stepUp()
PASS testNumber.value is "1"
testNumber.stepUp(undefined)
PASS testNumber.value is "2"

* HTMLInputElement.stepDown(optional long n = 1)
testNumber.stepDown()
PASS testNumber.value is "1"
testNumber.stepDown(undefined)
PASS testNumber.value is "0"

* HTMLTableElement.insertRow(optional long index = -1)
newRow1 = testTable.insertRow()
PASS testTable.rows[testTable.rows.length - 1] is newRow1
newRow2 = testTable.insertRow(undefined)
PASS testTable.rows[testTable.rows.length - 1] is newRow2

* HTMLTableRowElement.insertCell(optional long index = -1)
newCell1 = testRow.insertCell()
PASS testRow.cells[testRow.cells.length - 1] is newCell1
newCell2 = testRow.insertCell(undefined)
PASS testRow.cells[testRow.cells.length - 1] is newCell2

* HTMLTableSectionElement.insertRow(optional long index = -1)
newRow3 = testTableSection.insertRow()
PASS testTable.rows[testTableSection.rows.length - 1] is newRow3
newRow4 = testTableSection.insertRow(undefined)
PASS testTable.rows[testTableSection.rows.length - 1] is newRow4

* CanvasRenderingContext2D.fill(optional CanvasWindingRule winding = 'nonzero')
PASS ctx.fill(undefined) did not throw exception.

* CanvasRenderingContext2D.fill(Path2D path, optional CanvasWindingRule winding = 'nonzero')
PASS ctx.fill(path, undefined) did not throw exception.

* CanvasRenderingContext2D.clip(optional CanvasWindingRule winding = 'nonzero')
PASS ctx.clip(undefined) did not throw exception.

* CanvasRenderingContext2D.clip(Path2D path, optional CanvasWindingRule winding = 'nonzero')
PASS ctx.clip(path, undefined) did not throw exception.

PASS successfullyParsed is true

TEST COMPLETE


