<canvas></canvas>
<div></div>
<script>
if (window.testRunner)
    testRunner.dumpAsText();

let gl = document.querySelector("canvas").getContext("webgl");

let shader1 = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(shader1, "attribute vec2 pos; void main() { gl_Position = vec4(pos, 0, 1); }");
gl.compileShader(shader1);

let shader2 = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(shader2, "precision mediump float; void main() { gl_FragColor = vec4(0,0.8,0,1); }");
gl.compileShader(shader2);

let program = gl.createProgram();
gl.attachShader(program, shader1);
gl.attachShader(program, shader2);
gl.linkProgram(program);
gl.useProgram(program);

let buffer = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new ArrayBuffer(1), gl.STREAM_DRAW);
gl.enableVertexAttribArray(0);
gl.drawElements(gl.LINE_STRIP, 1, gl.UNSIGNED_BYTE, 0);
if (gl.getError() == gl.INVALID_OPERATION)
    document.querySelector("div").textContent = "PASS: Unable to draw with invalid vertexAttribArray0";
else
    document.querySelector("div").textContent = "FAIL: Was able to draw with invalid vertexAttribArray0";
</script>
