<html>
<head>
<script src="../../../resources/js-test.js"></script>
<script src="resources/webgl-test.js"></script>
</head>
<body>
<div id="description"></div>
<div id="console"></div>

<script>
description("Test bufferData/bufferSubData with ArrayBuffer input");

debug('Regression test for <a href="https://bugs.webkit.org/show_bug.cgi?id=41884">https://bugs.webkit.org/show_bug.cgi?id=41884</a> : <code>Implement bufferData and bufferSubData with ArrayBuffer as input</code>');

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

var gl = create3DContext();
shouldBeNonNull("gl");

var array = new ArrayBuffer(128);
shouldBeNonNull("array");

var buf = gl.createBuffer();
shouldBeNonNull(buf);

gl.bufferData(gl.ARRAY_BUFFER, array, gl.STATIC_DRAW);
glErrorShouldBe(gl, gl.INVALID_OPERATION);

gl.bindBuffer(gl.ARRAY_BUFFER, buf);
glErrorShouldBe(gl, gl.NO_ERROR);

gl.bufferData(gl.ARRAY_BUFFER, -10, gl.STATIC_DRAW);
glErrorShouldBe(gl, gl.INVALID_VALUE);

// This should not crash, but the selection of the overload is ambiguous per Web IDL.
gl.bufferData(gl.ARRAY_BUFFER, null, gl.STATIC_DRAW);
gl.getError();

gl.bufferData(gl.ARRAY_BUFFER, array, gl.STATIC_DRAW);
glErrorShouldBe(gl, gl.NO_ERROR);

array = new ArrayBuffer(64);

gl.bufferSubData(gl.ARRAY_BUFFER, -10, array);
glErrorShouldBe(gl, gl.INVALID_VALUE);

gl.bufferSubData(gl.ARRAY_BUFFER, -10, new Float32Array(8));
glErrorShouldBe(gl, gl.INVALID_VALUE);

gl.bufferSubData(gl.ARRAY_BUFFER, 10, array);
glErrorShouldBe(gl, gl.NO_ERROR);

shouldThrow("gl.bufferSubData(gl.ARRAY_BUFFER, 10, null)");
glErrorShouldBe(gl, gl.NO_ERROR);
</script>
</body>
</html>
