This test ensures various WebGL functions fail when passed non OpenGL ES 2.0 enums.

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


Canvas.getContext
PASS context exists

Checking gl enums.
PASS getError was expected value: NO_ERROR : 
PASS getError was expected value: INVALID_ENUM : gl.bindTexture(desktopGL['TEXTURE_3D'], tex) should return INVALID_ENUM.
PASS getError was expected value: INVALID_ENUM : gl.blendEquation(desktopGL['MIN']) should return INVALID_ENUM.
PASS getError was expected value: INVALID_ENUM : gl.blendEquation(desktopGL['MAX']) should return INVALID_ENUM.
PASS getError was expected value: INVALID_ENUM : gl.blendEquationSeparate(desktopGL['MIN'], gl.FUNC_ADD) should return INVALID_ENUM.
PASS getError was expected value: INVALID_ENUM : gl.blendEquationSeparate(desktopGL['MAX'], gl.FUNC_ADD) should return INVALID_ENUM.
PASS getError was expected value: INVALID_ENUM : gl.blendEquationSeparate(gl.FUNC_ADD, desktopGL['MIN']) should return INVALID_ENUM.
PASS getError was expected value: INVALID_ENUM : gl.blendEquationSeparate(gl.FUNC_ADD, desktopGL['MAX']) should return INVALID_ENUM.
PASS getError was expected value: INVALID_ENUM : gl.bufferData(gl.ARRAY_BUFFER, 3, desktopGL['STATIC_READ']) should return INVALID_ENUM.
PASS getError was expected value: INVALID_ENUM : gl.disable(desktopGL['CLIP_PLANE0']) should return INVALID_ENUM.
PASS getError was expected value: INVALID_ENUM : gl.disable(desktopGL['POINT_SPRITE']) should return INVALID_ENUM.
PASS getError was expected value: INVALID_ENUM : gl.getBufferParameter(gl.ARRAY_BUFFER, desktopGL['PIXEL_PACK_BUFFER']) should return INVALID_ENUM.
PASS getError was expected value: INVALID_ENUM : gl.hint(desktopGL['PERSPECTIVE_CORRECTION_HINT'], gl.FASTEST) should return INVALID_ENUM.
PASS getError was expected value: INVALID_ENUM : gl.isEnabled(desktopGL['CLIP_PLANE0']) should return INVALID_ENUM.
PASS getError was expected value: INVALID_ENUM : gl.isEnabled(desktopGL['POINT_SPRITE']) should return INVALID_ENUM.
PASS getError was expected value: INVALID_ENUM : gl.pixelStorei(desktopGL['PACK_SWAP_BYTES'], 1) should return INVALID_ENUM.
PASS getError was one of: INVALID_ENUM or INVALID_OPERATION : gl.readPixels(0, 0, 1, 1, gl.ALPHA, gl.SHORT, buf) should return INVALID_ENUM or INVALID_OPERATION.
PASS getError was expected value: NO_ERROR : 
PASS getError was expected value: INVALID_ENUM : gl.getTexParameter(gl.TEXTURE_2D, desktopGL['GENERATE_MIPMAP']) should return INVALID_ENUM.
PASS getError was expected value: INVALID_ENUM : gl.texParameteri(desktopGL['TEXTURE_3D'], gl.TEXTURE_MAG_FILTER, gl.NEAREST) should return INVALID_ENUM.
PASS getError was expected value: INVALID_ENUM : gl.texParameteri(gl.TEXTURE_2D, desktopGL['GENERATE_MIPMAP'], 1) should return INVALID_ENUM.

PASS successfullyParsed is true

TEST COMPLETE

