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 expected value: INVALID_ENUM : gl.readPixels(0, 0, 1, 1, gl.ALPHA, gl.SHORT, buf) should return INVALID_ENUM.
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

