<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test-pre.js"></script>
</head>
<body>
<canvas id="c" width="40" height="40"></canvas>
<script>
description("Checks that using WebGL 2 buffer targets don't cause errors");

var canvas = document.getElementById("c");
var context = canvas.getContext("webgl2");
shouldBe("context.getError()", "context.NO_ERROR");
checkBufferSuccess(context, context.ARRAY_BUFFER);
checkBufferSuccess(context, context.COPY_READ_BUFFER);
checkBufferSuccess(context, context.COPY_WRITE_BUFFER);
checkBufferSuccess(context, context.ELEMENT_ARRAY_BUFFER);
checkBufferSuccess(context, context.PIXEL_PACK_BUFFER);
checkBufferSuccess(context, context.PIXEL_UNPACK_BUFFER);
checkBufferSuccess(context, context.TRANSFORM_FEEDBACK_BUFFER);
checkBufferSuccess(context, context.UNIFORM_BUFFER);

canvas = document.createElement("canvas");
canvas.width = 40;
canvas.height = 40;
context = canvas.getContext("webgl");
shouldBe("context.getError()", "context.NO_ERROR");
shouldBe("context.getError()", "context.NO_ERROR");
checkBufferSuccess(context, context.ARRAY_BUFFER);
checkBufferFailure(context, context.COPY_READ_BUFFER);
checkBufferFailure(context, context.COPY_WRITE_BUFFER);
checkBufferSuccess(context, context.ELEMENT_ARRAY_BUFFER);
checkBufferFailure(context, context.PIXEL_PACK_BUFFER);
checkBufferFailure(context, context.PIXEL_UNPACK_BUFFER);
checkBufferFailure(context, context.TRANSFORM_FEEDBACK_BUFFER);
checkBufferFailure(context, context.UNIFORM_BUFFER);

function checkBufferSuccess(context, target) {
	var buffer = context.createBuffer();
	shouldBe("context.getError()", "context.NO_ERROR");
	context.bindBuffer(target, buffer);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.bufferData(target, new Int32Array(16), context.STATIC_DRAW);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.deleteBuffer(buffer);
	shouldBe("context.getError()", "context.NO_ERROR");
}

function checkBufferFailure(context, target) {
	var buffer = context.createBuffer();
	shouldBe("context.getError()", "context.NO_ERROR");
	context.bindBuffer(target, buffer);
	shouldBe("context.getError()", "context.INVALID_ENUM");
	context.bufferData(target, new Int32Array(16), context.STATIC_DRAW);
	shouldBe("context.getError()", "context.INVALID_ENUM");
	context.deleteBuffer(buffer);
	shouldBe("context.getError()", "context.NO_ERROR");
}
</script>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>