Tests calling WebGL APIs without providing the necessary objects

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

PASS Program Compiled
PASS Shader Compiled
PASS context.compileShader(undefined) was expected value: INVALID_VALUE.
PASS context.linkProgram(undefined) was expected value: INVALID_VALUE.
PASS context.attachShader(undefined, undefined) was expected value: INVALID_VALUE.
PASS context.attachShader(program, undefined) was expected value: INVALID_VALUE.
PASS context.attachShader(undefined, shader) was expected value: INVALID_VALUE.
PASS context.detachShader(program, undefined) was expected value: INVALID_VALUE.
PASS context.detachShader(undefined, shader) was expected value: INVALID_VALUE.
PASS context.shaderSource(undefined, undefined) was expected value: INVALID_VALUE.
PASS context.shaderSource(undefined, 'foo') was expected value: INVALID_VALUE.
PASS context.bindAttribLocation(undefined, 0, 'foo') was expected value: INVALID_VALUE.
PASS context.bindBuffer(context.ARRAY_BUFFER, 0) threw exception TypeError: Argument 2 ('buffer') to WebGLRenderingContext.bindBuffer must be an instance of WebGLBuffer.
PASS context.bindFramebuffer(context.FRAMEBUFFER, 0) threw exception TypeError: Argument 2 ('framebuffer') to WebGLRenderingContext.bindFramebuffer must be an instance of WebGLFramebuffer.
PASS context.bindRenderbuffer(context.RENDERBUFFER, 0) threw exception TypeError: Argument 2 ('renderbuffer') to WebGLRenderingContext.bindRenderbuffer must be an instance of WebGLRenderbuffer.
PASS context.bindTexture(context.TEXTURE_2D, 0) threw exception TypeError: Argument 2 ('texture') to WebGLRenderingContext.bindTexture must be an instance of WebGLTexture.
PASS context.bindBuffer(context.ARRAY_BUFFER, null) was expected value: NO_ERROR.
PASS context.bindFramebuffer(context.FRAMEBUFFER, null) was expected value: NO_ERROR.
PASS context.bindRenderbuffer(context.RENDERBUFFER, null) was expected value: NO_ERROR.
PASS context.bindTexture(context.TEXTURE_2D, null) was expected value: NO_ERROR.
PASS context.bindBuffer(context.ARRAY_BUFFER, undefined) was expected value: NO_ERROR.
PASS context.bindFramebuffer(context.FRAMEBUFFER, undefined) was expected value: NO_ERROR.
PASS context.bindRenderbuffer(context.RENDERBUFFER, undefined) was expected value: NO_ERROR.
PASS context.bindTexture(context.TEXTURE_2D, undefined) was expected value: NO_ERROR.
PASS context.framebufferRenderbuffer(context.FRAMEBUFFER, context.DEPTH_ATTACHMENT, context.RENDERBUFFER, null) was expected value: INVALID_OPERATION.
PASS context.framebufferTexture2D(context.FRAMEBUFFER, context.COLOR_ATTACHMENT0, context.TEXTURE_2D, null, 0) was expected value: INVALID_OPERATION.
PASS context.getProgramParameter(undefined, 0) was expected value: INVALID_VALUE.
PASS context.getProgramInfoLog(undefined, 0) was expected value: INVALID_VALUE.
PASS context.getShaderParameter(undefined, 0) was expected value: INVALID_VALUE.
PASS context.getShaderInfoLog(undefined, 0) was expected value: INVALID_VALUE.
PASS context.getShaderSource(undefined) was expected value: INVALID_VALUE.
PASS context.getUniform(undefined, null) was expected value: INVALID_VALUE.
PASS context.getUniformLocation(undefined, 'foo') was expected value: INVALID_VALUE.

check with bindings
PASS context.bufferData(context.ARRAY_BUFFER, 1, context.STATIC_DRAW) was expected value: NO_ERROR.
PASS context.getBufferParameter(context.ARRAY_BUFFER, context.BUFFER_SIZE) was expected value: NO_ERROR.
PASS context.texImage2D(context.TEXTURE_2D, 0, context.RGBA, 1, 1, 0, context.RGBA, context.UNSIGNED_BYTE, new Uint8Array([0,0,0,0])) was expected value: NO_ERROR.
PASS context.texParameteri(context.TEXTURE_2D, context.TEXTURE_MIN_FILTER, context.NEAREST) was expected value: NO_ERROR.
PASS context.getTexParameter(context.TEXTURE_2D, context.TEXTURE_MIN_FILTER) was expected value: NO_ERROR.

check without bindings
PASS context.bufferData(context.ARRAY_BUFFER, 1, context.STATIC_DRAW) was expected value: INVALID_OPERATION.
PASS context.getBufferParameter(context.ARRAY_BUFFER, context.BUFFER_SIZE) was expected value: INVALID_OPERATION.
PASS context.texImage2D(context.TEXTURE_2D, 0, context.RGBA, 1, 1, 0, context.RGBA, context.UNSIGNED_BYTE, new Uint8Array([0,0,0,0])) was expected value: INVALID_OPERATION.
PASS context.texParameteri(context.TEXTURE_2D, context.TEXTURE_MIN_FILTER, context.NEAREST) was expected value: INVALID_OPERATION.
PASS context.getTexParameter(context.TEXTURE_2D, context.TEXTURE_MIN_FILTER) was expected value: INVALID_OPERATION.
PASS successfullyParsed is true

TEST COMPLETE

