This test makes sure that calling the window moving and resizing methods with less than 2 arguments treats the missing arguments as 0.

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



window.resizeTo Tests


Testing - resizeTo with 0 arguments
PASS window.resizeTo() threw exception TypeError: Failed to execute 'resizeTo' on 'Window': 2 arguments required, but only 0 present..
PASS window.outerWidth is resetWidth
PASS window.outerHeight is resetHeight
Testing - resizeTo with 1 argument
PASS window.resizeTo(width) threw exception TypeError: Failed to execute 'resizeTo' on 'Window': 2 arguments required, but only 1 present..
PASS window.outerWidth is resetWidth
PASS window.outerHeight is resetHeight
Testing - resizeTo with more than 2 arguments
PASS window.outerWidth is width
PASS window.outerHeight is height


window.resizeBy Tests


Testing - resizeBy with 0 arguments
PASS window.resizeBy() threw exception TypeError: Failed to execute 'resizeBy' on 'Window': 2 arguments required, but only 0 present..
PASS window.outerWidth is resetWidth
PASS window.outerHeight is resetHeight
Testing - resizeBy with 1 argument
PASS window.resizeBy(x) threw exception TypeError: Failed to execute 'resizeBy' on 'Window': 2 arguments required, but only 1 present..
PASS window.outerWidth is resetWidth
PASS window.outerHeight is resetHeight
Testing - resizeBy with more than 2 arguments
PASS window.outerWidth is resetWidth + x
PASS window.outerHeight is resetHeight + y


window.moveTo Tests


Testing - moveTo with 0 arguments
PASS window.moveTo() threw exception TypeError: Failed to execute 'moveTo' on 'Window': 2 arguments required, but only 0 present..
PASS window.screenX is resetX
PASS window.screenY is resetY
Testing - moveTo with 1 argument
PASS window.moveTo(x) threw exception TypeError: Failed to execute 'moveTo' on 'Window': 2 arguments required, but only 1 present..
PASS window.screenX is resetX
PASS window.screenY is resetY
Testing - moveTo with more than 2 arguments
PASS window.screenX is Math.max(x, screen.availLeft)
PASS window.screenY is Math.max(y, screen.availTop)


window.moveBy Tests


Testing - moveBy with 0 arguments
PASS window.moveBy() threw exception TypeError: Failed to execute 'moveBy' on 'Window': 2 arguments required, but only 0 present..
PASS window.screenX is resetX
PASS window.screenY is resetY
Testing - moveBy with 1 argument
PASS window.moveBy(x) threw exception TypeError: Failed to execute 'moveBy' on 'Window': 2 arguments required, but only 1 present..
PASS window.screenX is resetX
PASS window.screenY is resetY
Testing - moveBy with more than 2 arguments
PASS window.screenX is resetX + x
PASS window.screenY is resetY + y
PASS successfullyParsed is true

TEST COMPLETE

