<!DOCTYPE html>
<meta charset=utf-8>
<title>WebGL2RenderingContext: IDL bindings</title>
<script src="../../../../resources/testharness.js"></script>
<script src="../../../../resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
let context, error_methods = [];
setup(function() {
  context = document.createElement("canvas").getContext("webgl2");
  if (!context) {
    throw new Error("Could not create webgl2 context");
  }

  for (let i = 1; i <= 4; ++i) {
    error_methods.push([`uniform${i}uiv`, [null, null], `uniform${i}uiv with null data`]);
  }
  for (let dim of ["2x3", "3x2", "2x4", "4x2", "3x4", "4x3"]) {
    error_methods.push([`uniformMatrix${dim}fv`, [null, false, null], `uniformMatrix${dim}fv with null data`]);
  }
  for (let type of ["i", "ui"]) {
    error_methods.push([`vertexAttribI4${type}v`, [0, null], `vertexAttribI4${type}v with null values`]);
  }
  for (let type of ["i", "ui", "f"]) {
    error_methods.push([`clearBuffer${type}v`, [context.COLOR, 0, null], `clearBuffer${type}v with null values`]);
  }
  for (let type of ["i", "f"]) {
    error_methods.push([`samplerParameter${type}`, [null, 0, 0], `samplerParameter${type} with null sampler`]);
  }
  error_methods.push(["framebufferTextureLayer", [0, 0, 0, 0, 0], "framebufferTextureLayer with integer texture"]);
  error_methods.push(["beginQuery", [0, null], "beginQuery with null query"]);
  error_methods.push(["getQueryParameter", [null, 0], "getQueryParameter with null query"]);
  error_methods.push(["getSamplerParameter", [null, 0], "getSamplerParameter with null sampler"]);
  error_methods.push(["clientWaitSync", [null, 0, 0], "clientWaitSync with null sync"]);
  error_methods.push(["waitSync", [null, 0, 0], "waitSync with null sync"]);
  error_methods.push(["getSyncParameter", [null, 0], "getSyncParameter with null sync"]);
  error_methods.push(["transformFeedbackVaryings", [null, [], 0], "transformFeedbackVaryings with null program"]);
  error_methods.push(["getTransformFeedbackVarying", [null, 0], "getTransformFeedbackVarying with null program"]);
  error_methods.push(["getUniformIndices", [null, []], "getUniformIndices with null program"]);
  error_methods.push(["getUniformBlockIndex", [null, ""], "getUniformBlockIndex with null program"]);
  error_methods.push(["getActiveUniformBlockParameter", [null, 0, 0], "getActiveUniformBlockParameter with null program"]);
  error_methods.push(["getActiveUniformBlockName", [null, 0], "getActiveUniformBlockName with null program"]);
  error_methods.push(["uniformBlockBinding", [null, 0, 0], "uniformBlockBinding with null program"]);
  error_methods.push(["getFragDataLocation", [null, ""], "getFragDataLocation with null program"]);
});

for (var [method, args, name] of error_methods) {
  test(function() {
    assert_throws_js(TypeError, () => context[method](...args));
  }, name);
}
</script>
