Tests that program compiling/linking/using works correctly.

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



Canvas.getContext
PASS context exists
PASS good vertex shader should compile
PASS good vertex shader #2 should compile
PASS bad vertex shader should fail to compile
PASS good fragment shader should compile
PASS good fragment shader #2 should compile
PASS bad fragment shader should fail to compile
PASS getError was expected value: NO_ERROR : should be no errors at this point
PASS getError was expected value: NO_ERROR : attaching a vertex shader should succeed
PASS getError was expected value: INVALID_OPERATION : attaching an already attached vertex shader should generate INVALID_OPERATION
PASS getError was expected value: NO_ERROR : attaching a fragment shader should succeed
PASS getError was expected value: INVALID_OPERATION : attaching an already attached fragment shader should generate INVALID_OPERATION
PASS getError was expected value: INVALID_OPERATION : attaching shaders of the same type to a program should generate INVALID_OPERATION
PASS getError was expected value: INVALID_OPERATION : attaching shaders of the same type to a program should generate INVALID_OPERATION
PASS getError was expected value: NO_ERROR : detaching a vertex shader should succeed
PASS getError was expected value: INVALID_OPERATION : detaching a not already attached vertex shader should generate INVALID_OPERATION
PASS getError was expected value: NO_ERROR : detaching a fragment shader should succeed
PASS getError was expected value: INVALID_OPERATION : detaching a not already attached fragment shader should generate INVALID_OPERATION
PASS getAttachedShaders should return an empty list by default
PASS attaching a single shader should give the expected list
PASS attaching some shaders should give the expected list
PASS attaching a shader and detaching it shoud leave an empty list
PASS attaching some shaders and detaching them in same order shoud leave an empty list
PASS attaching some shaders and detaching them in random order shoud leave an empty list
PASS attaching and detaching some shaders should leave the difference list
PASS attaching and detaching some shaders should leave the difference list
PASS attaching a shader that failed to compile should still show it in the list
PASS attaching shaders, including one that failed to compile, should still show the it in the list
PASS valid program should link
PASS getError was expected value: NO_ERROR : using a valid program should succeed
PASS valid program #2 should link
PASS getError was expected value: NO_ERROR : using a valid program should succeed
PASS program with no fragment shader should fail to link
PASS getError was expected value: INVALID_OPERATION : using an invalid program should generate INVALID_OPERATION
PASS program with no vertex shader should fail to link
PASS getError was expected value: INVALID_OPERATION : using an invalid program should generate INVALID_OPERATION
PASS program with bad vertex shader should fail to link
PASS getError was expected value: INVALID_OPERATION : using an invalid program should generate INVALID_OPERATION
PASS program with bad fragment shader should fail to link
PASS getError was expected value: INVALID_OPERATION : using an invalid program should generate INVALID_OPERATION
PASS program with bad shaders should fail to link
PASS getError was expected value: INVALID_OPERATION : using an invalid program should generate INVALID_OPERATION
PASS getError was expected value: NO_ERROR : using a valid program shouldn't generate a GL error
PASS getError was expected value: NO_ERROR : should be no errors at this point #2
PASS getError was expected value: NO_ERROR : drawing with a valid program shouldn't generate a GL error
PASS getError was expected value: INVALID_OPERATION : using an invalid program should generate INVALID_OPERATION
PASS getError was expected value: NO_ERROR : Try to use an invalid program should not change the current rendering state
PASS getError was expected value: NO_ERROR : drawing with a valid program shouldn't generate a GL error
PASS linking should fail with in-use formerly good program, with new bad shader attached
PASS getError was expected value: NO_ERROR : drawing with a valid when last used program shouldn't generate a GL error
PASS delete shaders after attaching them and before linking program should not affect linkProgram
PASS getError was expected value: NO_ERROR : using a valid program should succeed
PASS getError was expected value: NO_ERROR : drawing with a valid when last used program shouldn't generate a GL error
PASS getError was expected value: NO_ERROR : delete the current program shouldn't change the current rendering state
PASS getError was expected value: NO_ERROR : The current program shouldn't be deleted
PASS good fragment shader should compile
PASS getError was expected value: INVALID_VALUE : an unattached shader should be deleted immediately
PASS good fragment shader should compile
PASS an attached shader shouldn't be deleted
PASS getError was expected value: INVALID_VALUE : a delete-marked program should be deleted once it's no longer the current program
PASS getError was expected value: INVALID_VALUE : a delete-marked shader should be deleted once all its attachments are removed
PASS successfullyParsed is true

TEST COMPLETE

