<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>WebGL gl enums Conformance Tests</title>
<script src="resources/desktop-gl-constants.js" type="text/javascript"></script>
<script src="../../../resources/js-test.js"></script>
<script src="resources/webgl-test.js"></script>
</head>
<body>
<div id="description"></div>
<div id="console"></div>
<canvas id="canvas" width="2" height="2"> </canvas>
<script>
description("This test ensures various WebGL functions fail when passed non OpenGL ES 2.0 enums.");

debug("");
debug("Canvas.getContext");

if (window.internals)
    window.internals.settings.setWebGLErrorsToConsoleEnabled(false);

var gl = create3DContext(document.getElementById("canvas"));
if (!gl) {
  testFailed("context does not exist");
} else {
  testPassed("context exists");

  debug("");
  debug("Checking gl enums.");

  var buffer = new ArrayBuffer(2);
  var buf = new Uint16Array(buffer);
  var tex = gl.createTexture();
  gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer());
  glErrorShouldBe(gl, gl.NO_ERROR);

  var tests = [
    "gl.bindTexture(desktopGL['TEXTURE_3D'], tex)",
    "gl.blendEquation(desktopGL['MIN'])",
    "gl.blendEquation(desktopGL['MAX'])",
    "gl.blendEquationSeparate(desktopGL['MIN'], gl.FUNC_ADD)",
    "gl.blendEquationSeparate(desktopGL['MAX'], gl.FUNC_ADD)",
    "gl.blendEquationSeparate(gl.FUNC_ADD, desktopGL['MIN'])",
    "gl.blendEquationSeparate(gl.FUNC_ADD, desktopGL['MAX'])",
    "gl.bufferData(gl.ARRAY_BUFFER, 3, desktopGL['STATIC_READ'])",
    "gl.disable(desktopGL['CLIP_PLANE0'])",
    "gl.disable(desktopGL['POINT_SPRITE'])",
    "gl.getBufferParameter(gl.ARRAY_BUFFER, desktopGL['PIXEL_PACK_BUFFER'])",
    "gl.hint(desktopGL['PERSPECTIVE_CORRECTION_HINT'], gl.FASTEST)",
    "gl.isEnabled(desktopGL['CLIP_PLANE0'])",
    "gl.isEnabled(desktopGL['POINT_SPRITE'])",
    "gl.pixelStorei(desktopGL['PACK_SWAP_BYTES'], 1)",
    "gl.readPixels(0, 0, 1, 1, gl.ALPHA, gl.SHORT, buf)",
  ];
  for (var ii = 0; ii < tests.length; ++ii) {
    eval(tests[ii]);
    glErrorShouldBe(gl, gl.INVALID_ENUM,
              tests[ii] + " should return INVALID_ENUM.");
  }

  gl.bindTexture(gl.TEXTURE_2D, tex);
  glErrorShouldBe(gl, gl.NO_ERROR);

  tests = [
    "gl.getTexParameter(gl.TEXTURE_2D, desktopGL['GENERATE_MIPMAP'])",
    "gl.texParameteri(desktopGL['TEXTURE_3D'], gl.TEXTURE_MAG_FILTER, gl.NEAREST)",
    "gl.texParameteri(gl.TEXTURE_2D, desktopGL['GENERATE_MIPMAP'], 1)"
  ];
  for (var ii = 0; ii < tests.length; ++ii) {
    eval(tests[ii]);
    glErrorShouldBe(gl, gl.INVALID_ENUM,
              tests[ii] + " should return INVALID_ENUM.");
  }
}

debug("");

</script>
</body>
</html>

