Tests that out of bounds accesses of SVGList correctly throw exceptions

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


PASS svgList.getItem(index) threw exception IndexSizeError: The index is not in the allowed range..
PASS svgList.insertItemBefore(null, index) threw exception TypeError: Argument 1 ('newItem') to SVGPathSegList.insertItemBefore must be an instance of SVGPathSeg.
PASS svgList.insertItemBefore(seg, index) is seg
PASS svgList.replaceItem(seg, index) threw exception IndexSizeError: The index is not in the allowed range..
PASS svgList.replaceItem(null, index) threw exception TypeError: Argument 1 ('newItem') to SVGPathSegList.replaceItem must be an instance of SVGPathSeg.
PASS svgList.removeItem(index) threw exception IndexSizeError: The index is not in the allowed range..
PASS svgList.getItem(index) threw exception IndexSizeError: The index is not in the allowed range..
PASS svgList.insertItemBefore(null, index) threw exception TypeError: Argument 1 ('newItem') to SVGPathSegList.insertItemBefore must be an instance of SVGPathSeg.
PASS svgList.insertItemBefore(seg, index) is seg
PASS svgList.replaceItem(seg, index) threw exception IndexSizeError: The index is not in the allowed range..
PASS svgList.replaceItem(null, index) threw exception TypeError: Argument 1 ('newItem') to SVGPathSegList.replaceItem must be an instance of SVGPathSeg.
PASS svgList.removeItem(index) threw exception IndexSizeError: The index is not in the allowed range..
PASS svgList.getItem(index) threw exception IndexSizeError: The index is not in the allowed range..
PASS svgList.insertItemBefore(null, index) threw exception TypeError: Argument 1 ('newItem') to SVGPathSegList.insertItemBefore must be an instance of SVGPathSeg.
PASS svgList.insertItemBefore(seg, index) is seg
PASS svgList.replaceItem(seg, index) threw exception IndexSizeError: The index is not in the allowed range..
PASS svgList.replaceItem(null, index) threw exception TypeError: Argument 1 ('newItem') to SVGPathSegList.replaceItem must be an instance of SVGPathSeg.
PASS svgList.removeItem(index) threw exception IndexSizeError: The index is not in the allowed range..
PASS svgList.getItem(index) threw exception IndexSizeError: The index is not in the allowed range..
PASS svgList.insertItemBefore(null, index) threw exception TypeError: Argument 1 ('newItem') to SVGPathSegList.insertItemBefore must be an instance of SVGPathSeg.
PASS svgList.insertItemBefore(seg, index) is seg
PASS svgList.replaceItem(seg, index) threw exception IndexSizeError: The index is not in the allowed range..
PASS svgList.replaceItem(null, index) threw exception TypeError: Argument 1 ('newItem') to SVGPathSegList.replaceItem must be an instance of SVGPathSeg.
PASS svgList.removeItem(index) threw exception IndexSizeError: The index is not in the allowed range..
PASS svgList.getItem(index) threw exception IndexSizeError: The index is not in the allowed range..
PASS svgList.insertItemBefore(null, index) threw exception TypeError: Argument 1 ('newItem') to SVGPathSegList.insertItemBefore must be an instance of SVGPathSeg.
PASS svgList.insertItemBefore(seg, index) is seg
PASS svgList.replaceItem(seg, index) threw exception IndexSizeError: The index is not in the allowed range..
PASS svgList.replaceItem(null, index) threw exception TypeError: Argument 1 ('newItem') to SVGPathSegList.replaceItem must be an instance of SVGPathSeg.
PASS svgList.removeItem(index) threw exception IndexSizeError: The index is not in the allowed range..
PASS svgList.getItem(index) threw exception IndexSizeError: The index is not in the allowed range..
PASS svgList.insertItemBefore(null, index) threw exception TypeError: Argument 1 ('newItem') to SVGPathSegList.insertItemBefore must be an instance of SVGPathSeg.
PASS svgList.insertItemBefore(seg, index) is seg
PASS svgList.replaceItem(seg, index) threw exception IndexSizeError: The index is not in the allowed range..
PASS svgList.replaceItem(null, index) threw exception TypeError: Argument 1 ('newItem') to SVGPathSegList.replaceItem must be an instance of SVGPathSeg.
PASS svgList.removeItem(index) threw exception IndexSizeError: The index is not in the allowed range..
PASS successfullyParsed is true

TEST COMPLETE

