
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>WebGL instanceof test.</title>
<script src="../../../resources/js-test.js"></script>
<script src="resources/webgl-test.js"> </script>
<script src="resources/webgl-test-utils.js"> </script>
</head>
<body>
<canvas id="canvas" width="2" height="2" style="width: 40px; height: 40px;"></canvas>
<div id="description"></div>
<div id="console"></div>
<script id="vshader" type="x-shader/x-vertex">
attribute vec4 vPosition;
varying vec2 texCoord;
void main()
{
    gl_Position = vPosition;
}
</script>

<script id="fshader" type="x-shader/x-fragment">
precision mediump float;
uniform vec4 color;
void main()
{
    gl_FragColor = color;
}
</script>
<script>
var wtu = WebGLTestUtils;
description(document.title);
debug("Tests that instanceof works on WebGL objects.");
debug("");
var gl = create3DContext(document.getElementById("canvas"));
shouldBeTrue('gl instanceof WebGLRenderingContext');
shouldBeTrue('gl.createBuffer() instanceof WebGLBuffer');
shouldBeTrue('gl.createFramebuffer() instanceof WebGLFramebuffer');
shouldBeTrue('gl.createProgram() instanceof WebGLProgram');
shouldBeTrue('gl.createRenderbuffer() instanceof WebGLRenderbuffer');
shouldBeTrue('gl.createShader(gl.VERTEX_SHADER) instanceof WebGLShader');
shouldBeTrue('gl.createTexture() instanceof WebGLTexture');

var program = wtu.setupProgram(
    gl,
    [wtu.loadShaderFromScript(gl, 'vshader', gl.VERTEX_SHADER),
     wtu.loadShaderFromScript(gl, 'fshader', gl.FRAGMENT_SHADER)],
    ['vPosition'], [0]);

shouldBeTrue('gl.getUniformLocation(program, "color") instanceof WebGLUniformLocation');
shouldBeTrue('gl.getActiveAttrib(program, 0) instanceof WebGLActiveInfo');
shouldBeTrue('gl.getActiveUniform(program, 0) instanceof WebGLActiveInfo');

debug("");
debug("Tests that those WebGL objects can not be constructed through new operator");
debug("");

function shouldThrowWithNew(objectType, objectName)
{
    try {
        new objectType;
        testFailed('new ' + objectName + ' did not throw');
    } catch (e) {
        testPassed('new ' + objectName + ' threw an error');
    }
}

shouldThrowWithNew(window.WebGLRenderingContext, 'WebGLRenderingContext');
shouldThrowWithNew(window.WebGLActiveInfo, 'WebGLActiveInfo');
shouldThrowWithNew(window.WebGLBuffer, 'WebGLBuffer');
shouldThrowWithNew(window.WebGLFramebuffer, 'WebGLFramebuffer');
shouldThrowWithNew(window.WebGLProgram, 'WebGLProgram');
shouldThrowWithNew(window.WebGLRenderbuffer, 'WebGLRenderbuffer');
shouldThrowWithNew(window.WebGLShader, 'WebGLShader');
shouldThrowWithNew(window.WebGLTexture, 'WebGLTexture');
shouldThrowWithNew(window.WebGLUniformLocation, 'WebGLUniformLocation');
shouldThrowWithNew(window.WebGLShaderPrecisionFormat, 'WebGLShaderPrecisionFormat');
</script>
</body>
</html>


