/*
 * Copyright (C) 2021 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import app from '@system.app'
import webgl from "@ohos.webglnapi";
import Context from '@ohos.napi_context'

import {
	describe,
	beforeAll,
	beforeEach,
	afterEach,
	afterAll,
	it,
	expect
} from 'deccjsunit/index'

describe('webgl1Test', function() {
	console.info('webgltest start');
	var gl;
	var gl2;

	var indices = new Uint16Array([0, 1, 2, 1, 3, 4]);
	var vertices = new Uint16Array([
		-0.5, 0.5, 0.0,
		0.0, 0.5, 0.0,
		-0.25, 0.25, 0.0,
		0.5, 0.5, 0.0,
		0.25, 0.25, 0.0,
	])

	//顶点着色器程序
	var VSHADER_SOURCE =
		"attribute vec4 a_Position;" +
		"void main() {" +
		//设置坐标
		"gl_Position = a_Position; " +
		//    "gl_PointSize = 10.0;" +
		"} ";

	//片元着色器
	var FSHADER_SOURCE =
		"void main() {" +
		//设置颜色
		"gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);" +
		"}";

	function globalFunction() {
		const vertexShader = gl.createShader(gl.VERTEX_SHADER);
		gl.shaderSource(vertexShader, VSHADER_SOURCE);
		gl.compileShader(vertexShader);
		const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
		gl.shaderSource(fragmentShader, FSHADER_SOURCE);
		gl.compileShader(fragmentShader);
		const programObj = gl.createProgram();
		console.info("testUseProgram has failed for " + programObj)
		const useProgramError1 = gl.getError();
		console.info("useProgramError: " + useProgramError1);
		const renderBufferValue1 = gl.getParameter(gl.CURRENT_PROGRAM);
		console.info("testUseProgram has failed for " + renderBufferValue1)
		gl.attachShader(programObj, vertexShader);
		gl.attachShader(programObj, fragmentShader);
		gl.linkProgram(programObj);
		gl.useProgram(programObj);
		return programObj;
	}


	function createProgram(gl) {
		//顶点着色器程序
		var VSHADER_SOURCE =
			'attribute vec4 a_Position;\n' +
			'void main() {\n' +
			'  gl_Position = a_Position;\n' +
			'}\n';

		// 片元着色器程序
		var FSHADER_SOURCE =
			'precision mediump float;\n' +
			'uniform vec4 u_FragColor;\n' +
			'void main() {\n' +
			'  gl_FragColor = u_FragColor;\n' +
			'}\n';
		var vertexShader = gl.createShader(gl.VERTEX_SHADER);
		gl.shaderSource(vertexShader, VSHADER_SOURCE);
		gl.compileShader(vertexShader);
		var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
		gl.shaderSource(fragmentShader, FSHADER_SOURCE);
		gl.compileShader(fragmentShader);
		const programObj = gl.createProgram();
		console.log("testUseProgram has failed for " + programObj)
		const useProgramError1 = gl.getError();
		console.info("useProgramError: " + useProgramError1);
		const renderBufferValue1 = gl.getParameter(gl.CURRENT_PROGRAM);
		console.log("testUseProgram has failed for " + renderBufferValue1)
		gl.attachShader(programObj, vertexShader);
		gl.attachShader(programObj, fragmentShader);
		gl.linkProgram(programObj);
		gl.useProgram(programObj);
		return programObj;
	}

	function initShaders(gl, vshader, fshader) {
		var program = createProgramExternal(gl, vshader, fshader);
		console.log("======createProgram program: " + JSON.stringify(program));

		if (!program) {
			console.log('Failed to create program');
			return false;
		}

		gl.useProgram(program);
		gl.program = program;

		return true;
	}

	function createProgramExternal(gl, vshader, fshader) {
		// Create shader object
		var vertexShader = loadShader(gl, gl.VERTEX_SHADER, vshader);
		console.log("======vertexShader: " + vertexShader);
		var fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fshader);
		if (!vertexShader || !fragmentShader) {
			return null;
		}

		// Create a program object
		var program = gl.createProgram();
		console.log("======createProgram program: " + JSON.stringify(program));

		if (!program) {
			return null;
		}

		// Attach the shader objects
		gl.attachShader(program, vertexShader);
		gl.attachShader(program, fragmentShader);

		// Link the program object
		gl.linkProgram(program);

		// Check the result of linking
		var linked = gl.getProgramParameter(program, 0x8B82);
		console.log("======getProgramParameter linked: " + linked);

		const getUniformLocationValue = gl.getUniformLocation(program, "a_Position");
		console.log("======getUniformLocation: " + JSON.stringify(getUniformLocationValue));


		if (!linked) {
			var error = gl.getProgramInfoLog(program);
			console.log('Failed to link program: ' + error);
			gl.deleteProgram(program);
			gl.deleteShader(fragmentShader);
			gl.deleteShader(vertexShader);
			return null;
		}

		return program;
	}

	function loadShader(gl, type, source) {
		console.log("======into loadShader====");
		// Create shader object
		var shader = gl.createShader(type);
		if (shader == null) {
			console.log('unable to create shader');
			return null;
		}

		const isShaderValue = gl.isShader(shader);
		console.log('isShader: ' + isShaderValue);

		// Set the shader program
		gl.shaderSource(shader, source);

		// Compile the shader
		gl.compileShader(shader);

		// Check the result of compilation
		var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
		if (!compiled) {
			var error = gl.getShaderInfoLog(shader);
			console.log('Failed to compile shader: ' + error);
			gl.deleteShader(shader);
			return null;
		}

		var vertex = gl.getShaderParameter(shader, gl.VERTEX_SHADER);
		console.log('getShaderParameter VERTEX_SHADER: ' + vertex);


		return shader;
	}

	function initVertexBuffers(gl) {
		var vertices = new Float32Array([
			0.0, -1.0, -0.5, 0, 0.5, 0
		]);

		var n = 3; // 点的个数

		// 创建缓冲区对象
		var vertexBuffer = gl.createBuffer();
		if (!vertexBuffer) {
			console.log('Failed to create the buffer object');
			return -1;
		}

		// 将缓冲区对象绑定到目标
		gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
		// 向缓冲区对象写入数据
		gl.bufferData(gl.ARRAY_BUFFER, vertices.buffer, gl.STATIC_DRAW);

		var aPosition = gl.getAttribLocation(gl.program, 'a_Position');
		console.info("webgl# getAttribLocation getAttribLocation success:" + JSON.stringify(gl.program));
		console.info("webgl# getAttribLocation getAttribLocation success:" + aPosition);
		if (aPosition < 0) {
			console.log('Failed to get the storage location of a_Position');
			return -1;
		}
		// 将缓冲区对象分配给a_Position变量
		gl.vertexAttribPointer(aPosition, 2, gl.FLOAT, false, 0, 0);

		// 连接a_Position变量与分配给它的缓冲区对象
		gl.enableVertexAttribArray(aPosition);

		return n;
	}


	var float1 = new Float32Array([1.1, 1.2, 1.3, 1.4]);
	var int1 = new Int8Array([1, 1, 1, 1]);
	var uint1 = new Uint8Array([1, 1, 1, 1]);
	var float2 = [1.1, 1.2, 1.3, 1.4];
	var int2 = [1, 1, 1, 1];
	var uint2 = [1, 1, 1, 1];

	function initContext() {
		console.info('initContext start');
		// 获取canvas元素
		const el = global.el;
		const el2 = global.el2;
		// 获取webgl上下文
		gl = el.getContext('webgl');
		if (!gl) {
			console.log('webgltest Failed to get the rendering context for WebGL');
		}
		gl2 = el2.getContext('webgl2');
		if (!gl) {
			console.log('webgltest Failed to get the rendering context for WebGL2');
		}
		console.info('webgltest initContext finish');
	}

	function deleteContext() {
		if (gl != null) {
			gl = null;
			console.info("webgltest gl has null");
		}
		if (gl2 != null) {
			console.info("webgltest gl2 has null");
			gl2 = null;
		}
	}

	/**
	 * run before testClass
	 */
	beforeAll(async function(done) {
		console.info('webgltest beforeAll called');
		initContext();
		done();
	});

	/**
	 * run after testClass
	 */
	afterAll(async function(done) {
		console.info('webgltest afterEach called');
		deleteContext();
		done();
	})

	
	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0901
	 * @tc.name testTexImage2D_1_04
	 * @tc.desc Test texImage2D.
	 */
	it('testTexImage2D_1_04', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testTexImage2D_1_04 test start ...66');
		const buffer = new ArrayBuffer(8);
		const z = new Uint8Array(buffer, 1, 4);
		gl.texImage2D(gl.TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, gl.RGB8, 512, 512, 0, gl.RGB8, gl
			.UNSIGNED_BYTE, z);
		const texImage2DError = gl.getError();
		console.info("texImage2DError: " + texImage2DError);
		expect(texImage2DError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0902
	 * @tc.name testTexImage2D_1_05
	 * @tc.desc Test texImage2D.
	 */
	it('testTexImage2D_1_05', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testTexImage2D_1_05 test start ...66');
		const buffer = new ArrayBuffer(8);
		const z = new Uint8Array(buffer, 1, 4);
		gl.texImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_Z, 0, gl.RGB8, 512, 512, 0, gl.RGB8, gl
			.UNSIGNED_BYTE, z);
		const texImage2DError = gl.getError();
		console.info("texImage2DError: " + texImage2DError);
		expect(texImage2DError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0903
	 * @tc.name testTexImage2D_1_06
	 * @tc.desc Test texImage2D.
	 */
	it('testTexImage2D_1_06', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testTexImage2D_1_06 test start ...66');
		const buffer = new ArrayBuffer(8);
		const z = new Uint8Array(buffer, 1, 4);
		gl.texImage2D(gl.TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, gl.RGB8, 512, 512, 0, gl.RGB8, gl
			.UNSIGNED_BYTE, z);
		const texImage2DError = gl.getError();
		console.info("texImage2DError: " + texImage2DError);
		expect(texImage2DError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0904
	 * @tc.name testTexImage2D_1_07
	 * @tc.desc Test texImage2D.
	 */
	it('testTexImage2D_1_07', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testTexImage2D_1_07 test start ...66');
		const buffer = new ArrayBuffer(8);
		const z = new Uint8Array(buffer, 1, 4);
		gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB8, 512, 512, 0, gl.RGB8, gl.UNSIGNED_BYTE, z);
		const texImage2DError = gl.getError();
		console.info("texImage2DError: " + texImage2DError);
		expect(texImage2DError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0911
	 * @tc.name testTexSubImage2D_1_01
	 * @tc.desc Test texSubImage2D.
	 */
	it('testTexSubImage2D_1_01', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testTexSubImage2D_1_01 test start ...66');
		const buf = new ArrayBuffer(8);
		const view = new DataView(buf, 0);
		view[0] = 2;
		gl.texSubImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X, 0, 0, 0, 512, 512, -gl.RED, -gl.FLOAT,
			view);
		const ttexSubImage2DError = gl.getError();
		console.info("ttexSubImage2DError: " + ttexSubImage2DError);
		expect(ttexSubImage2DError).assertEqual(gl.INVALID_OPERATION);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0912
	 * @tc.name testTexSubImage2D_1_02
	 * @tc.desc Test texSubImage2D.
	 */
	it('testTexSubImage2D_1_02', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testTexSubImage2D_1_02 test start ...66');
		const buf = new ArrayBuffer(8);
		const view = new DataView(buf, 0);
		view[0] = 2;
		gl.texSubImage2D(gl.TEXTURE_CUBE_MAP_NEGATIVE_X, 0, 0, 0, 512, 512, -gl.RED, -gl.FLOAT,
			view);
		const ttexSubImage2DError = gl.getError();
		console.info("ttexSubImage2DError: " + ttexSubImage2DError);
		expect(ttexSubImage2DError).assertEqual(gl.INVALID_OPERATION);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0913
	 * @tc.name testTexSubImage2D_1_03
	 * @tc.desc Test texSubImage2D.
	 */
	it('testTexSubImage2D_1_03', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testTexSubImage2D_1_03 test start ...66');
		const buf = new ArrayBuffer(8);
		const view = new DataView(buf, 0);
		view[0] = 2;
		gl.texSubImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_Y, 0, 0, 0, 512, 512, -gl.RED, -gl.FLOAT,
			view);
		const ttexSubImage2DError = gl.getError();
		console.info("ttexSubImage2DError: " + ttexSubImage2DError);
		expect(ttexSubImage2DError).assertEqual(gl.INVALID_OPERATION);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0914
	 * @tc.name testTexSubImage2D_1_04
	 * @tc.desc Test texSubImage2D.
	 */
	it('testTexSubImage2D_1_04', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testTexSubImage2D_1_04 test start ...66');
		const buf = new ArrayBuffer(8);
		const view = new DataView(buf, 0);
		view[0] = 2;
		gl.texSubImage2D(gl.TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, 0, 0, 512, 512, -gl.RED, -gl.FLOAT,
			view);
		const ttexSubImage2DError = gl.getError();
		console.info("ttexSubImage2DError: " + ttexSubImage2DError);
		expect(ttexSubImage2DError).assertEqual(gl.INVALID_OPERATION);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0915
	 * @tc.name testTexSubImage2D_1_05
	 * @tc.desc Test texSubImage2D.
	 */
	it('testTexSubImage2D_1_05', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testTexSubImage2D_1_05 test start ...66');
		const buf = new ArrayBuffer(8);
		const view = new DataView(buf, 0);
		view[0] = 2;
		gl.texSubImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_Z, 0, 0, 0, 512, 512, -gl.RED, -gl.FLOAT,
			view);
		const ttexSubImage2DError = gl.getError();
		console.info("ttexSubImage2DError: " + ttexSubImage2DError);
		expect(ttexSubImage2DError).assertEqual(gl.INVALID_OPERATION);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0916
	 * @tc.name testTexSubImage2D_1_06
	 * @tc.desc Test texSubImage2D.
	 */
	it('testTexSubImage2D_1_06', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testTexSubImage2D_1_06 test start ...66');
		const buf = new ArrayBuffer(8);
		const view = new DataView(buf, 0);
		view[0] = 2;
		gl.texSubImage2D(gl.TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, 0, 0, 512, 512, -gl.RED, -gl.FLOAT,
			view);
		const ttexSubImage2DError = gl.getError();
		console.info("ttexSubImage2DError: " + ttexSubImage2DError);
		expect(ttexSubImage2DError).assertEqual(gl.INVALID_OPERATION);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0924
	 * @tc.name testCopyBufferSubData_1_02
	 * @tc.desc Test copyBufferSubData.
	 */
	it('testCopyBufferSubData_1_02', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testCopyBufferSubData_1_02 test start ...66');
		const srcBuffer = gl.createBuffer();
		const dstBuffer = gl.createBuffer();
		const vertices = [1, 2];
		const data = new Float32Array(vertices);
		const length = vertices.length * 4;
		gl.bindBuffer(gl.ARRAY_BUFFER, srcBuffer);
		gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
		gl.bindBuffer(gl.COPY_READ_BUFFER, srcBuffer);
		gl.bindBuffer(gl.ARRAY_BUFFER, dstBuffer);
		gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(length), gl.STATIC_DRAW);
		gl2.copyBufferSubData(gl.COPY_READ_BUFFER, gl.ARRAY_BUFFER, 0, 0, length);
		const copyBufferSubDataError = gl.getError();
		console.info("copyBufferSubDataError: " + copyBufferSubDataError);
		expect(copyBufferSubDataError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0925
	 * @tc.name testCopyBufferSubData_1_03
	 * @tc.desc Test copyBufferSubData.
	 */
	it('testCopyBufferSubData_1_03', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testCopyBufferSubData_1_03 test start ...66');
		const srcBuffer = gl.createBuffer();
		const dstBuffer = gl.createBuffer();
		const vertices = [1, 2];
		const data = new Float32Array(vertices);
		const length = vertices.length * 4;
		gl.bindBuffer(gl.ARRAY_BUFFER, srcBuffer);
		gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
		gl.bindBuffer(gl.COPY_READ_BUFFER, srcBuffer);
		gl.bindBuffer(gl.ARRAY_BUFFER, dstBuffer);
		gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(length), gl.STATIC_DRAW);
		gl2.copyBufferSubData(gl.COPY_WRITE_BUFFER, gl.ARRAY_BUFFER, 0, 0, length);
		const copyBufferSubDataError = gl.getError();
		console.info("copyBufferSubDataError: " + copyBufferSubDataError);
		expect(copyBufferSubDataError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0926
	 * @tc.name testCopyBufferSubData_1_04
	 * @tc.desc Test copyBufferSubData.
	 */
	it('testCopyBufferSubData_1_04', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testCopyBufferSubData_1_04 test start ...66');
		const srcBuffer = gl.createBuffer();
		const dstBuffer = gl.createBuffer();
		const vertices = [1, 2];
		const data = new Float32Array(vertices);
		const length = vertices.length * 4;
		gl.bindBuffer(gl.ARRAY_BUFFER, srcBuffer);
		gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
		gl.bindBuffer(gl.COPY_READ_BUFFER, srcBuffer);
		gl.bindBuffer(gl.ARRAY_BUFFER, dstBuffer);
		gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(length), gl.STATIC_DRAW);
		gl2.copyBufferSubData(gl.TRANSFORM_FEEDBACK_BUFFER, gl.ARRAY_BUFFER, 0, 0, length);
		const copyBufferSubDataError = gl.getError();
		console.info("copyBufferSubDataError: " + copyBufferSubDataError);
		expect(copyBufferSubDataError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0927
	 * @tc.name testCopyBufferSubData_1_05
	 * @tc.desc Test copyBufferSubData.
	 */
	it('testCopyBufferSubData_1_05', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testCopyBufferSubData_1_05 test start ...66');
		const srcBuffer = gl.createBuffer();
		const dstBuffer = gl.createBuffer();
		const vertices = [1, 2];
		const data = new Float32Array(vertices);
		const length = vertices.length * 4;
		gl.bindBuffer(gl.ARRAY_BUFFER, srcBuffer);
		gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
		gl.bindBuffer(gl.COPY_READ_BUFFER, srcBuffer);
		gl.bindBuffer(gl.ARRAY_BUFFER, dstBuffer);
		gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(length), gl.STATIC_DRAW);
		gl2.copyBufferSubData(gl.UNIFORM_BUFFER, gl.ARRAY_BUFFER, 0, 0, length);
		const copyBufferSubDataError = gl.getError();
		console.info("copyBufferSubDataError: " + copyBufferSubDataError);
		expect(copyBufferSubDataError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0928
	 * @tc.name testCopyBufferSubData_1_06
	 * @tc.desc Test copyBufferSubData.
	 */
	it('testCopyBufferSubData_1_06', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testCopyBufferSubData_1_06 test start ...66');
		const srcBuffer = gl.createBuffer();
		const dstBuffer = gl.createBuffer();
		const vertices = [1, 2];
		const data = new Float32Array(vertices);
		const length = vertices.length * 4;
		gl.bindBuffer(gl.ARRAY_BUFFER, srcBuffer);
		gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
		gl.bindBuffer(gl.COPY_READ_BUFFER, srcBuffer);
		gl.bindBuffer(gl.ARRAY_BUFFER, dstBuffer);
		gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(length), gl.STATIC_DRAW);
		gl2.copyBufferSubData(gl.PIXEL_PACK_BUFFER, gl.ARRAY_BUFFER, 0, 0, length);
		const copyBufferSubDataError = gl.getError();
		console.info("copyBufferSubDataError: " + copyBufferSubDataError);
		expect(copyBufferSubDataError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0929
	 * @tc.name testCopyBufferSubData_1_07
	 * @tc.desc Test copyBufferSubData.
	 */
	it('testCopyBufferSubData_1_07', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testCopyBufferSubData_1_07 test start ...66');
		const srcBuffer = gl.createBuffer();
		const dstBuffer = gl.createBuffer();
		const vertices = [1, 2];
		const data = new Float32Array(vertices);
		const length = vertices.length * 4;
		gl.bindBuffer(gl.ARRAY_BUFFER, srcBuffer);
		gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
		gl.bindBuffer(gl.COPY_READ_BUFFER, srcBuffer);
		gl.bindBuffer(gl.ARRAY_BUFFER, dstBuffer);
		gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(length), gl.STATIC_DRAW);
		gl2.copyBufferSubData(gl.PIXEL_UNPACK_BUFFER, gl.ARRAY_BUFFER, 0, 0, length);
		const copyBufferSubDataError = gl.getError();
		console.info("copyBufferSubDataError: " + copyBufferSubDataError);
		expect(copyBufferSubDataError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0931
	 * @tc.name testGetBufferSubData_1_02
	 * @tc.desc Test getBufferSubData.
	 */
	it('testGetBufferSubData_1_02', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testGetBufferSubData_1_02 test start ...66');
		var buffer = gl.createBuffer();
		gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
		const vertices = [1, 2];
		gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
		var arrBuffer = new ArrayBuffer(vertices.length * Float32Array.BYTES_PER_ELEMENT);
		gl2.getBufferSubData(gl.COPY_READ_BUFFER, 0, new Float32Array(arrBuffer), 0, 0);
		const getBufferSubDataError = gl.getError();
		console.info("getBufferSubDataError: " + getBufferSubDataError);
		expect(getBufferSubDataError).assertEqual(gl.INVALID_ENUM);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0932
	 * @tc.name testGetBufferSubData_1_03
	 * @tc.desc Test getBufferSubData.
	 */
	it('testGetBufferSubData_1_03', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testGetBufferSubData_1_03 test start ...66');
		var buffer = gl.createBuffer();
		gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
		const vertices = [1, 2];
		gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
		var arrBuffer = new ArrayBuffer(vertices.length * Float32Array.BYTES_PER_ELEMENT);
		gl2.getBufferSubData(gl.COPY_WRITE_BUFFER, 0, new Float32Array(arrBuffer), 0, 0);
		const getBufferSubDataError = gl.getError();
		console.info("getBufferSubDataError: " + getBufferSubDataError);
		expect(getBufferSubDataError).assertEqual(gl.INVALID_ENUM);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0933
	 * @tc.name testGetBufferSubData_1_04
	 * @tc.desc Test getBufferSubData.
	 */
	it('testGetBufferSubData_1_04', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testGetBufferSubData_1_04 test start ...66');
		var buffer = gl.createBuffer();
		gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
		const vertices = [1, 2];
		gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
		var arrBuffer = new ArrayBuffer(vertices.length * Float32Array.BYTES_PER_ELEMENT);
		gl2.getBufferSubData(gl.TRANSFORM_FEEDBACK_BUFFER, 0, new Float32Array(arrBuffer), 0, 0);
		const getBufferSubDataError = gl.getError();
		console.info("getBufferSubDataError: " + getBufferSubDataError);
		expect(getBufferSubDataError).assertEqual(gl.INVALID_ENUM);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0934
	 * @tc.name testGetBufferSubData_1_05
	 * @tc.desc Test getBufferSubData.
	 */
	it('testGetBufferSubData_1_05', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testGetBufferSubData_1_05 test start ...66');
		var buffer = gl.createBuffer();
		gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
		const vertices = [1, 2];
		gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
		var arrBuffer = new ArrayBuffer(vertices.length * Float32Array.BYTES_PER_ELEMENT);
		gl2.getBufferSubData(gl.UNIFORM_BUFFER, 0, new Float32Array(arrBuffer), 0, 0);
		const getBufferSubDataError = gl.getError();
		console.info("getBufferSubDataError: " + getBufferSubDataError);
		expect(getBufferSubDataError).assertEqual(gl.INVALID_ENUM);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0935
	 * @tc.name testGetBufferSubData_1_06
	 * @tc.desc Test getBufferSubData.
	 */
	it('testGetBufferSubData_1_06', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testGetBufferSubData_1_06 test start ...66');
		var buffer = gl.createBuffer();
		gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
		const vertices = [1, 2];
		gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
		var arrBuffer = new ArrayBuffer(vertices.length * Float32Array.BYTES_PER_ELEMENT);
		gl2.getBufferSubData(gl.PIXEL_PACK_BUFFER, 0, new Float32Array(arrBuffer), 0, 0);
		const getBufferSubDataError = gl.getError();
		console.info("getBufferSubDataError: " + getBufferSubDataError);
		expect(getBufferSubDataError).assertEqual(gl.INVALID_ENUM);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0936
	 * @tc.name testGetBufferSubData_1_07
	 * @tc.desc Test getBufferSubData.
	 */
	it('testGetBufferSubData_1_07', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testGetBufferSubData_1_07 test start ...66');
		var buffer = gl.createBuffer();
		gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
		const vertices = [1, 2];
		gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
		var arrBuffer = new ArrayBuffer(vertices.length * Float32Array.BYTES_PER_ELEMENT);
		gl2.getBufferSubData(gl.PIXEL_UNPACK_BUFFER, 0, new Float32Array(arrBuffer), 0, 0);
		const getBufferSubDataError = gl.getError();
		console.info("getBufferSubDataError: " + getBufferSubDataError);
		expect(getBufferSubDataError).assertEqual(gl.INVALID_ENUM);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0937
	 * @tc.name testFramebufferTextureLayer_1_01
	 * @tc.desc Test framebufferTextureLayer.
	 */
	it('testFramebufferTextureLayer_1_01', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testFramebufferTextureLayer_1_01 test start ...66');
		const texture = gl.createTexture();
		gl.bindTexture(gl2.TEXTURE_2D_ARRAY, texture);
		gl2.texStorage3D(gl2.TEXTURE_2D_ARRAY, 1, gl2.RGBA8, 256, 256, 8);
		gl.texParameteri(gl2.TEXTURE_CUBE_MAP, gl2.TEXTURE_MAG_FILTER, gl2.NEAREST);
		const framebuffer = gl.createFramebuffer();
		gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
		gl2.framebufferTextureLayer(gl.DRAW_FRAMEBUFFER, gl2.COLOR_ATTACHMENT0, texture, 0, 8)
		const framebufferTextureLayerError = gl.getError();
		console.info("framebufferTextureLayerError: " + framebufferTextureLayerError);
		expect(framebufferTextureLayerError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0938
	 * @tc.name testFramebufferTextureLayer_1_02
	 * @tc.desc Test framebufferTextureLayer.
	 */
	it('testFramebufferTextureLayer_1_02', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testFramebufferTextureLayer_1_02 test start ...66');
		const texture = gl.createTexture();
		gl.bindTexture(gl2.TEXTURE_2D_ARRAY, texture);
		gl2.texStorage3D(gl2.TEXTURE_2D_ARRAY, 1, gl2.RGBA8, 256, 256, 8);
		gl.texParameteri(gl2.TEXTURE_CUBE_MAP, gl2.TEXTURE_MAG_FILTER, gl2.NEAREST);
		const framebuffer = gl.createFramebuffer();
		gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
		gl2.framebufferTextureLayer(gl.READ_FRAMEBUFFER, gl2.COLOR_ATTACHMENT0, texture, 0, 8)
		const framebufferTextureLayerError = gl.getError();
		console.info("framebufferTextureLayerError: " + framebufferTextureLayerError);
		expect(framebufferTextureLayerError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0939
	 * @tc.name testFramebufferTextureLayer_1_03
	 * @tc.desc Test framebufferTextureLayer.
	 */
	it('testFramebufferTextureLayer_1_03', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testFramebufferTextureLayer_1_03 test start ...66');
		const texture = gl.createTexture();
		gl.bindTexture(gl2.TEXTURE_2D_ARRAY, texture);
		gl2.texStorage3D(gl2.TEXTURE_2D_ARRAY, 1, gl2.RGBA8, 256, 256, 8);
		gl.texParameteri(gl2.TEXTURE_CUBE_MAP, gl2.TEXTURE_MAG_FILTER, gl2.NEAREST);
		const framebuffer = gl.createFramebuffer();
		gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
		gl2.framebufferTextureLayer(gl.FRAMEBUFFER, gl2.DEPTH_ATTACHMENT, texture, 0, 8)
		const framebufferTextureLayerError = gl.getError();
		console.info("framebufferTextureLayerError: " + framebufferTextureLayerError);
		expect(framebufferTextureLayerError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0940
	 * @tc.name testFramebufferTextureLayer_1_04
	 * @tc.desc Test framebufferTextureLayer.
	 */
	it('testFramebufferTextureLayer_1_04', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testFramebufferTextureLayer_1_04 test start ...66');
		const texture = gl.createTexture();
		gl.bindTexture(gl2.TEXTURE_2D_ARRAY, texture);
		gl2.texStorage3D(gl2.TEXTURE_2D_ARRAY, 1, gl2.RGBA8, 256, 256, 8);
		gl.texParameteri(gl2.TEXTURE_CUBE_MAP, gl2.TEXTURE_MAG_FILTER, gl2.NEAREST);
		const framebuffer = gl.createFramebuffer();
		gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
		gl2.framebufferTextureLayer(gl.FRAMEBUFFER, gl2.STENCIL_ATTACHMENT, texture, 0, 8)
		const framebufferTextureLayerError = gl.getError();
		console.info("framebufferTextureLayerError: " + framebufferTextureLayerError);
		expect(framebufferTextureLayerError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0941
	 * @tc.name testFramebufferTextureLayer_1_05
	 * @tc.desc Test framebufferTextureLayer.
	 */
	it('testFramebufferTextureLayer_1_05', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testFramebufferTextureLayer_1_05 test start ...66');
		const texture = gl.createTexture();
		gl.bindTexture(gl2.TEXTURE_2D_ARRAY, texture);
		gl2.texStorage3D(gl2.TEXTURE_2D_ARRAY, 1, gl2.RGBA8, 256, 256, 8);
		gl.texParameteri(gl2.TEXTURE_CUBE_MAP, gl2.TEXTURE_MAG_FILTER, gl2.NEAREST);
		const framebuffer = gl.createFramebuffer();
		gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
		gl2.framebufferTextureLayer(gl.FRAMEBUFFER, gl2.DEPTH_STENCIL_ATTACHMENT, texture, 0, 8)
		const framebufferTextureLayerError = gl.getError();
		console.info("framebufferTextureLayerError: " + framebufferTextureLayerError);
		expect(framebufferTextureLayerError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0942
	 * @tc.name testInvalidateFramebuffer_1_01
	 * @tc.desc Test invalidateFramebuffer.
	 */
	it('testInvalidateFramebuffer_1_01', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testInvalidateFramebuffer_1_01 test start ...66');
		gl2.invalidateFramebuffer(gl.DRAW_FRAMEBUFFER,
			[gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1]);
		const invalidateFramebufferError = gl.getError();
		console.info("invalidateFramebufferError: " + invalidateFramebufferError);
		expect(invalidateFramebufferError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0943
	 * @tc.name testInvalidateFramebuffer_1_02
	 * @tc.desc Test invalidateFramebuffer.
	 */
	it('testInvalidateFramebuffer_1_02', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testInvalidateFramebuffer_1_02 test start ...66');
		gl2.invalidateFramebuffer(gl.FRAMEBUFFER,
			[gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1]);
		const invalidateFramebufferError = gl.getError();
		console.info("invalidateFramebufferError: " + invalidateFramebufferError);
		expect(invalidateFramebufferError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0944
	 * @tc.name testInvalidateFramebuffer_1_03
	 * @tc.desc Test invalidateFramebuffer.
	 */
	it('testInvalidateFramebuffer_1_03', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testInvalidateFramebuffer_1_03 test start ...66');
		gl2.invalidateFramebuffer(gl.READ_FRAMEBUFFER,
			[gl.COLOR_ATTACHMENT0, gl.DEPTH_ATTACHMENT]);
		const invalidateFramebufferError = gl.getError();
		console.info("invalidateFramebufferError: " + invalidateFramebufferError);
		expect(invalidateFramebufferError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0945
	 * @tc.name testInvalidateFramebuffer_1_04
	 * @tc.desc Test invalidateFramebuffer.
	 */
	it('testInvalidateFramebuffer_1_04', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testInvalidateFramebuffer_1_04 test start ...66');
		gl2.invalidateFramebuffer(gl.READ_FRAMEBUFFER,
			[gl.STENCIL_ATTACHMENT, gl.COLOR_ATTACHMENT1]);
		const invalidateFramebufferError = gl.getError();
		console.info("invalidateFramebufferError: " + invalidateFramebufferError);
		expect(invalidateFramebufferError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0946
	 * @tc.name testInvalidateFramebuffer_1_05
	 * @tc.desc Test invalidateFramebuffer.
	 */
	it('testInvalidateFramebuffer_1_05', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testInvalidateFramebuffer_1_05 test start ...66');
		gl2.invalidateFramebuffer(gl.READ_FRAMEBUFFER,
			[gl.DEPTH_STENCIL_ATTACHMENT, gl.COLOR_ATTACHMENT1]);
		const invalidateFramebufferError = gl.getError();
		console.info("invalidateFramebufferError: " + invalidateFramebufferError);
		expect(invalidateFramebufferError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0947
	 * @tc.name testInvalidateFramebuffer_1_06
	 * @tc.desc Test invalidateFramebuffer.
	 */
	it('testInvalidateFramebuffer_1_06', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testInvalidateFramebuffer_1_06 test start ...66');
		gl2.invalidateFramebuffer(gl.READ_FRAMEBUFFER,
			[gl.DEPTH_ATTACHMENT, gl.STENCIL_ATTACHMENT]);
		const invalidateFramebufferError = gl.getError();
		console.info("invalidateFramebufferError: " + invalidateFramebufferError);
		expect(invalidateFramebufferError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0948
	 * @tc.name testInvalidateFramebuffer_1_01
	 * @tc.desc Test invalidateFramebuffer.
	 */
	it('testInvalidateFramebuffer_1_01', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testInvalidateFramebuffer_1_01 test start ...66');
		gl2.invalidateFramebuffer(gl.READ_FRAMEBUFFER,
			[gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1]);
		const invalidateFramebufferError = gl.getError();
		console.info("invalidateFramebufferError: " + invalidateFramebufferError);
		expect(invalidateFramebufferError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0949
	 * @tc.name testInvalidateSubFramebuffer_1_01
	 * @tc.desc Test invalidateSubFramebuffer.
	 */
	it('testInvalidateSubFramebuffer_1_01', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testInvalidateSubFramebuffer_1_01 test start ...66');
		gl2.invalidateSubFramebuffer(gl.FRAMEBUFFER,
			[gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1],
			0, 0, 256, 256);
		const invalidateSubFramebufferError = gl.getError();
		console.info("invalidateSubFramebufferError: " + invalidateSubFramebufferError);
		expect(invalidateSubFramebufferError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0950
	 * @tc.name testInvalidateSubFramebuffer_1_02
	 * @tc.desc Test invalidateSubFramebuffer.
	 */
	it('testInvalidateSubFramebuffer_1_02', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testInvalidateSubFramebuffer_1_02 test start ...66');
		gl2.invalidateSubFramebuffer(gl.DRAW_FRAMEBUFFER,
			[gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1],
			0, 0, 256, 256);
		const invalidateSubFramebufferError = gl.getError();
		console.info("invalidateSubFramebufferError: " + invalidateSubFramebufferError);
		expect(invalidateSubFramebufferError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0951
	 * @tc.name testInvalidateSubFramebuffer_1_03
	 * @tc.desc Test invalidateSubFramebuffer.
	 */
	it('testInvalidateSubFramebuffer_1_03', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testInvalidateSubFramebuffer_1_03 test start ...66');
		gl2.invalidateSubFramebuffer(gl.READ_FRAMEBUFFER,
			[gl.DEPTH_ATTACHMENT, gl.COLOR_ATTACHMENT1],
			0, 0, 256, 256);
		const invalidateSubFramebufferError = gl.getError();
		console.info("invalidateSubFramebufferError: " + invalidateSubFramebufferError);
		expect(invalidateSubFramebufferError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0952
	 * @tc.name testInvalidateSubFramebuffer_1_04
	 * @tc.desc Test invalidateSubFramebuffer.
	 */
	it('testInvalidateSubFramebuffer_1_04', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testInvalidateSubFramebuffer_1_04 test start ...66');
		gl2.invalidateSubFramebuffer(gl.READ_FRAMEBUFFER,
			[gl.COLOR_ATTACHMENT0, gl.STENCIL_ATTACHMENT],
			0, 0, 256, 256);
		const invalidateSubFramebufferError = gl.getError();
		console.info("invalidateSubFramebufferError: " + invalidateSubFramebufferError);
		expect(invalidateSubFramebufferError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0953
	 * @tc.name testInvalidateSubFramebuffer_1_05
	 * @tc.desc Test invalidateSubFramebuffer.
	 */
	it('testInvalidateSubFramebuffer_1_05', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testInvalidateSubFramebuffer_1_05 test start ...66');
		gl2.invalidateSubFramebuffer(gl.READ_FRAMEBUFFER,
			[gl.DEPTH_STENCIL_ATTACHMENT, gl.STENCIL_ATTACHMENT],
			0, 0, 256, 256);
		const invalidateSubFramebufferError = gl.getError();
		console.info("invalidateSubFramebufferError: " + invalidateSubFramebufferError);
		expect(invalidateSubFramebufferError).assertEqual(0);
		done();
	})


	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0954
	 * @tc.name testRenderbufferStorageMultisample_1_01
	 * @tc.desc Test renderbufferStorageMultisample.
	 */
	it('testRenderbufferStorageMultisample_1_01', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testRenderbufferStorageMultisample_1_01 test start ...66');
		gl2.renderbufferStorageMultisample(gl.RENDERBUFFER, 4, gl.R8, 256, 256);
		const renderbufferStorageMultisampleError = gl.getError();
		console.info("renderbufferStorageMultisampleError: " + renderbufferStorageMultisampleError);
		expect(renderbufferStorageMultisampleError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0955
	 * @tc.name testRenderbufferStorageMultisample_1_02
	 * @tc.desc Test renderbufferStorageMultisample.
	 */
	it('testRenderbufferStorageMultisample_1_02', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testRenderbufferStorageMultisample_1_02 test start ...66');
		gl2.renderbufferStorageMultisample(gl.RENDERBUFFER, 4, gl.R8UI, 256, 256);
		const renderbufferStorageMultisampleError = gl.getError();
		console.info("renderbufferStorageMultisampleError: " + renderbufferStorageMultisampleError);
		expect(renderbufferStorageMultisampleError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0956
	 * @tc.name testRenderbufferStorageMultisample_1_03
	 * @tc.desc Test renderbufferStorageMultisample.
	 */
	it('testRenderbufferStorageMultisample_1_03', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testRenderbufferStorageMultisample_1_03 test start ...66');
		gl2.renderbufferStorageMultisample(gl.RENDERBUFFER, 4, gl.R8I, 256, 256);
		const renderbufferStorageMultisampleError = gl.getError();
		console.info("renderbufferStorageMultisampleError: " + renderbufferStorageMultisampleError);
		expect(renderbufferStorageMultisampleError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0957
	 * @tc.name testRenderbufferStorageMultisample_1_04
	 * @tc.desc Test renderbufferStorageMultisample.
	 */
	it('testRenderbufferStorageMultisample_1_04', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testRenderbufferStorageMultisample_1_04 test start ...66');
		gl2.renderbufferStorageMultisample(gl.RENDERBUFFER, 4, gl.R16UI, 256, 256);
		const renderbufferStorageMultisampleError = gl.getError();
		console.info("renderbufferStorageMultisampleError: " + renderbufferStorageMultisampleError);
		expect(renderbufferStorageMultisampleError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0958
	 * @tc.name testRenderbufferStorageMultisample_1_05
	 * @tc.desc Test renderbufferStorageMultisample.
	 */
	it('testRenderbufferStorageMultisample_1_05', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testRenderbufferStorageMultisample_1_05 test start ...66');
		gl2.renderbufferStorageMultisample(gl.RENDERBUFFER, 4, gl.R16I, 256, 256);
		const renderbufferStorageMultisampleError = gl.getError();
		console.info("renderbufferStorageMultisampleError: " + renderbufferStorageMultisampleError);
		expect(renderbufferStorageMultisampleError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0959
	 * @tc.name testRenderbufferStorageMultisample_1_06
	 * @tc.desc Test renderbufferStorageMultisample.
	 */
	it('testRenderbufferStorageMultisample_1_06', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testRenderbufferStorageMultisample_1_06 test start ...66');
		gl2.renderbufferStorageMultisample(gl.RENDERBUFFER, 4, gl.R32UI, 256, 256);
		const renderbufferStorageMultisampleError = gl.getError();
		console.info("renderbufferStorageMultisampleError: " + renderbufferStorageMultisampleError);
		expect(renderbufferStorageMultisampleError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0960
	 * @tc.name testRenderbufferStorageMultisample_1_07
	 * @tc.desc Test renderbufferStorageMultisample.
	 */
	it('testRenderbufferStorageMultisample_1_07', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testRenderbufferStorageMultisample_1_07 test start ...66');
		gl2.renderbufferStorageMultisample(gl.RENDERBUFFER, 4, gl.R32I, 256, 256);
		const renderbufferStorageMultisampleError = gl.getError();
		console.info("renderbufferStorageMultisampleError: " + renderbufferStorageMultisampleError);
		expect(renderbufferStorageMultisampleError).assertEqual(0);
		done();
	})


	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0961
	 * @tc.name testRenderbufferStorageMultisample_1_08
	 * @tc.desc Test renderbufferStorageMultisample.
	 */
	it('testRenderbufferStorageMultisample_1_08', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testRenderbufferStorageMultisample_1_08 test start ...66');
		gl2.renderbufferStorageMultisample(gl.RENDERBUFFER, 4, gl.RG8, 256, 256);
		const renderbufferStorageMultisampleError = gl.getError();
		console.info("renderbufferStorageMultisampleError: " + renderbufferStorageMultisampleError);
		expect(renderbufferStorageMultisampleError).assertEqual(0);
		done();
	})


	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0962
	 * @tc.name testTexStorage2D_1_01
	 * @tc.desc Test texStorage2D.
	 */
	it('testTexStorage2D_1_01', 0, async function(done) {
		//initContext();
		console.info('jsWebGL testTexStorage2D_1_01 test start ...66');
		gl2.texStorage2D(gl.TEXTURE_CUBE_MAP, 1, gl.RGB8, 256, 256);
		const texStorage2DError = gl.getError();
		console.info("texStorage2DError: " + texStorage2DError);
		expect(texStorage2DError).assertEqual(0);
		done();
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0963
	 * @tc.name testBindBufferBase_1_01
	 * @tc.desc Test bindBufferBase.
	 */
	it('testBindBufferBase_1_01', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testBindBufferBase_1_01 test start ...66');
			let buffer = gl.createBuffer();
			gl2.bindBufferBase(gl.UNIFORM_BUFFER, 0, buffer);
			const bindBufferBaseError = gl.getError();
			console.info("bindBufferBaseError: " + bindBufferBaseError);
			expect(bindBufferBaseError).assertEqual(0);
			//deleteContext();
			done();
		} catch (e) {
			console.log("bindBufferBaseError has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0964
	 * @tc.name bindBufferRange_1_01
	 * @tc.desc Test bindBufferRange.
	 */
	it('bindBufferRange_1_01', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL bindBufferRange_1_01 test start ...66');
			const buffer = gl.createBuffer();
			gl2.bindBufferRange(gl.UNIFORM_BUFFER, 1, buffer, 0, 4);
			const bindBufferRangeError = gl.getError();
			console.info("bindBufferRangeError: " + bindBufferRangeError);
			expect(bindBufferRangeError).assertEqual(0);
			//deleteContext();
			done();
		} catch (e) {
			console.log("bindBufferRange has failed for " + e)
			expect(null).assertFail()
		}
	})



	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0965
	 * @tc.name testVertexAttrib2f2
	 * @tc.desc Test vertexAttrib2f.
	 */
	it('testVertexAttrib2f2', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testVertexAttrib2f test start ...66');
			gl.vertexAttrib2f(1, 10.0, 10.0);
			const vertexAttrib2fError = gl.getError();
			console.info("vertexAttrib2fError: " + vertexAttrib2fError);
			expect(vertexAttrib2fError).assertEqual(0);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testVertexAttrib2f has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0966
	 * @tc.name testVertexAttrib3f2
	 * @tc.desc Test vertexAttrib3f.
	 */
	it('testVertexAttrib3f2', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testvertexAttrib3f test start ...66');
			console.info('jsWebGL testvertexAttrib3f test start ...' + JSON.stringify(gl));
			gl.vertexAttrib3f(1, 10.0, 10.0, 10.0);
			const vertexAttrib3fError = gl.getError();
			console.info("vertexAttrib3fError: " + vertexAttrib3fError);
			expect(vertexAttrib3fError).assertEqual(0);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testVertexAttrib3f has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0967
	 * @tc.name testVertexAttrib4f2
	 * @tc.desc Test vertexAttrib4f.
	 */
	it('testVertexAttrib4f2', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testVertexAttrib4f test start ...66');
			console.info('jsWebGL testVertexAttrib4f test start ...' + JSON.stringify(gl));
			gl.vertexAttrib4f(1, 10.0, 10.0, 10.0, 10.0);
			const vertexAttrib4fError = gl.getError();
			console.info("vertexAttrib4fError: " + vertexAttrib4fError);
			expect(vertexAttrib4fError).assertEqual(gl.NO_ERROR);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testvertexAttrib4f has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0968
	 * @tc.name testVertexAttrib1f2
	 * @tc.desc Test vertexAttrib1f.
	 */
	it('testVertexAttrib1f2', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testVertexAttrib1f test start ...66');
			console.info('jsWebGL testVertexAttrib1f test start ...' + JSON.stringify(gl));
			gl.vertexAttrib1f(-1, 10.0);
			const vertexAttrib1fError = gl.getError();
			console.info("vertexAttrib1fError: " + vertexAttrib1fError);
			expect(vertexAttrib1fError).assertEqual(gl.INVALID_VALUE);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testVertexAttrib1f has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0969
	 * @tc.name testVertexAttrib2f3
	 * @tc.desc Test vertexAttrib2f.
	 */
	it('testVertexAttrib2f3', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testVertexAttrib2f test start ...66');
			gl.vertexAttrib2f(-1, 10.0, 10.0);
			const vertexAttrib2fError = gl.getError();
			console.info("vertexAttrib2fError: " + vertexAttrib2fError);
			expect(vertexAttrib2fError).assertEqual(gl.INVALID_VALUE);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testVertexAttrib2f has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0970
	 * @tc.name testVertexAttrib3f3
	 * @tc.desc Test vertexAttrib3f.
	 */
	it('testVertexAttrib3f3', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testvertexAttrib3f test start ...66');
			console.info('jsWebGL testvertexAttrib3f test start ...' + JSON.stringify(gl));
			gl.vertexAttrib3f(-1, 10.0, 10.0, 10.0);
			const vertexAttrib3fError = gl.getError();
			console.info("vertexAttrib3fError: " + vertexAttrib3fError);
			expect(vertexAttrib3fError).assertEqual(gl.INVALID_VALUE);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testVertexAttrib3f has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0971
	 * @tc.name testVertexAttrib4f22
	 * @tc.desc Test vertexAttrib4f.
	 */
	it('testVertexAttrib4f22', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testVertexAttrib4f test start ...66');
			console.info('jsWebGL testVertexAttrib4f test start ...' + JSON.stringify(gl));
			gl.vertexAttrib4f(-1, 10.0, 10.0, 10.0, 10.0);
			const vertexAttrib4fError = gl.getError();
			console.info("vertexAttrib4fError: " + vertexAttrib4fError);
			expect(vertexAttrib4fError).assertEqual(gl.INVALID_VALUE);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testvertexAttrib4f has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0972
	 * @tc.name testVertexAttribPointer2
	 * @tc.desc Test vertexAttribPointer.
	 */
	it('testVertexAttribPointer2', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testVertexAttribPointer test start ...66');
			console.info('jsWebGL testVertexAttribPointer test start ...' + JSON.stringify(gl));
			gl.vertexAttribPointer(1, 4, gl.BYTE, true, 20, 12);
			const vertexAttribPointerError = gl.getError();
			console.info("vertexAttribPointerError: " + vertexAttribPointerError);
			expect(vertexAttribPointerError).assertEqual(0);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testVertexAttribPointer has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0973
	 * @tc.name testVertexAttribPointer3
	 * @tc.desc Test vertexAttribPointer.
	 */
	it('testVertexAttribPointer3', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testVertexAttribPointer test start ...66');
			console.info('jsWebGL testVertexAttribPointer test start ...' + JSON.stringify(gl));
			gl.vertexAttribPointer(2, 2, gl.UNSIGNED_SHORT, true, 20, 16);
			const vertexAttribPointerError = gl.getError();
			console.info("vertexAttribPointerError: " + vertexAttribPointerError);
			expect(vertexAttribPointerError).assertEqual(0);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testVertexAttribPointer has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0974
	 * @tc.name testVertexAttribPointer4
	 * @tc.desc Test vertexAttribPointer.
	 */
	it('testVertexAttribPointer4', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testVertexAttribPointer test start ...66');
			console.info('jsWebGL testVertexAttribPointer test start ...' + JSON.stringify(gl));
			console.info("webgltest into enableVertexAttribArray");
			//顶点着色器程序
			var VSHADER_SOURCE =
				'attribute vec4 a_Position;\n' +
				'void main() {\n' +
				'  gl_Position = a_Position;\n' +
				'}\n';

			// 片元着色器程序
			var FSHADER_SOURCE =
				'precision mediump float;\n' +
				'uniform vec4 u_FragColor;\n' +
				'void main() {\n' +
				'  gl_FragColor = u_FragColor;\n' +
				'}\n';
			var vertexShader = gl.createShader(gl.VERTEX_SHADER);
			gl.shaderSource(vertexShader, VSHADER_SOURCE);
			gl.compileShader(vertexShader);
			var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
			gl.shaderSource(fragmentShader, FSHADER_SOURCE);
			gl.compileShader(fragmentShader);
			const programObj = gl.createProgram();
			console.log("testUseProgram has failed for " + programObj)
			const useProgramError1 = gl.getError();
			console.info("useProgramError: " + useProgramError1);
			const renderBufferValue1 = gl.getParameter(gl.CURRENT_PROGRAM);
			console.log("testUseProgram has failed for " + renderBufferValue1)
			gl.attachShader(programObj, vertexShader);
			gl.attachShader(programObj, fragmentShader);
			gl.linkProgram(programObj);
			gl.useProgram(programObj);
			const locPosition = gl.getAttribLocation(programObj, 'position');
			gl.vertexAttribPointer(locPosition, 3, gl.FLOAT, false, 20, 0);
			const vertexAttribPointerError = gl.getError();
			console.info("vertexAttribPointerError: " + vertexAttribPointerError);
			expect(vertexAttribPointerError).assertEqual(gl.INVALID_VALUE);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testVertexAttribPointer has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0975
	 * @tc.name testVertexAttribPointer5
	 * @tc.desc Test vertexAttribPointer.
	 */
	it('testVertexAttribPointer5', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testVertexAttribPointer test start ...66');
			console.info('jsWebGL testVertexAttribPointer test start ...' + JSON.stringify(gl));
			console.info("webgltest into enableVertexAttribArray");
			//顶点着色器程序
			var VSHADER_SOURCE =
				'attribute vec4 a_Position;\n' +
				'void main() {\n' +
				'  gl_Position = a_Position;\n' +
				'}\n';

			// 片元着色器程序
			var FSHADER_SOURCE =
				'precision mediump float;\n' +
				'uniform vec4 u_FragColor;\n' +
				'void main() {\n' +
				'  gl_FragColor = u_FragColor;\n' +
				'}\n';
			var vertexShader = gl.createShader(gl.VERTEX_SHADER);
			gl.shaderSource(vertexShader, VSHADER_SOURCE);
			gl.compileShader(vertexShader);
			var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
			gl.shaderSource(fragmentShader, FSHADER_SOURCE);
			gl.compileShader(fragmentShader);
			const programObj = gl.createProgram();
			console.log("testUseProgram has failed for " + programObj)
			const useProgramError1 = gl.getError();
			console.info("useProgramError: " + useProgramError1);
			const renderBufferValue1 = gl.getParameter(gl.CURRENT_PROGRAM);
			console.log("testUseProgram has failed for " + renderBufferValue1)
			gl.attachShader(programObj, vertexShader);
			gl.attachShader(programObj, fragmentShader);
			gl.linkProgram(programObj);
			gl.useProgram(programObj);
			const locNormal = gl.getAttribLocation(programObj, 'normal');
			gl.vertexAttribPointer(locNormal, 4, gl.BYTE, true, 20, 12);
			const vertexAttribPointerError = gl.getError();
			console.info("vertexAttribPointerError: " + vertexAttribPointerError);
			expect(vertexAttribPointerError).assertEqual(gl.INVALID_VALUE);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testVertexAttribPointer has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0976
	 * @tc.name testVertexAttribPointer6
	 * @tc.desc Test vertexAttribPointer.
	 */
	it('testVertexAttribPointer6', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testVertexAttribPointer test start ...66');
			console.info('jsWebGL testVertexAttribPointer test start ...' + JSON.stringify(gl));
			//顶点着色器程序
			var VSHADER_SOURCE =
				'attribute vec4 a_Position;\n' +
				'void main() {\n' +
				'  gl_Position = a_Position;\n' +
				'}\n';

			// 片元着色器程序
			var FSHADER_SOURCE =
				'precision mediump float;\n' +
				'uniform vec4 u_FragColor;\n' +
				'void main() {\n' +
				'  gl_FragColor = u_FragColor;\n' +
				'}\n';
			var vertexShader = gl.createShader(gl.VERTEX_SHADER);
			gl.shaderSource(vertexShader, VSHADER_SOURCE);
			gl.compileShader(vertexShader);
			var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
			gl.shaderSource(fragmentShader, FSHADER_SOURCE);
			gl.compileShader(fragmentShader);
			const programObj = gl.createProgram();
			console.log("testUseProgram has failed for " + programObj)
			const useProgramError1 = gl.getError();
			console.info("useProgramError: " + useProgramError1);
			const renderBufferValue1 = gl.getParameter(gl.CURRENT_PROGRAM);
			console.log("testUseProgram has failed for " + renderBufferValue1)
			gl.attachShader(programObj, vertexShader);
			gl.attachShader(programObj, fragmentShader);
			gl.linkProgram(programObj);
			gl.useProgram(programObj);
			const locTexUV = gl.getAttribLocation(programObj, 'texUV');
			gl.vertexAttribPointer(locTexUV, 2, gl.UNSIGNED_SHORT, true, 20, 16);
			const vertexAttribPointerError = gl.getError();
			console.info("vertexAttribPointerError: " + vertexAttribPointerError);
			expect(vertexAttribPointerError).assertEqual(gl.INVALID_VALUE);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testVertexAttribPointer has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0977
	 * @tc.name testTexImage3D2
	 * @tc.desc Test texImage3D.
	 */
	it('testTexImage3D2', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testTexImage3D test start ...66');
			console.info('jsWebGL testTexImage3D test start ...' + JSON.stringify(gl));
			gl2.texImage3D(gl2.TEXTURE_3D, 0, gl.R8, 1, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, 0);
			const texImage3DError = gl.getError();
			console.info("texImage3DError: " + texImage3DError);
			expect(texImage3DError).assertEqual(0);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testTexImage3D has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0978
	 * @tc.name testTexImage3D3
	 * @tc.desc Test texImage3D.
	 */
	it('testTexImage3D3', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testTexImage3D test start ...66');
			console.info('jsWebGL testTexImage3D test start ...' + JSON.stringify(gl));
			gl2.texImage3D(gl2.TEXTURE_3D, 0, gl.LUMINANCE, 1, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE,
				0);
			const texImage3DError = gl.getError();
			console.info("texImage3DError: " + texImage3DError);
			expect(texImage3DError).assertEqual(gl.INVALID_OPERATION);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testTexImage3D has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0979
	 * @tc.name testTexImage3D4
	 * @tc.desc Test texImage3D.
	 */
	it('testTexImage3D4', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testTexImage3D test start ...66');
			console.info('jsWebGL testTexImage3D test start ...' + JSON.stringify(gl));
			gl2.texImage3D(gl2.TEXTURE_3D, 0, gl.RGB8UI, 1, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, 0);
			const texImage3DError = gl.getError();
			console.info("texImage3DError: " + texImage3DError);
			expect(texImage3DError).assertEqual(0);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testTexImage3D has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0980
	 * @tc.name testTexSubImage3D
	 * @tc.desc Test texSubImage3D.
	 */
	it('testTexSubImage3D', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testTexSubImage3D test start ...66');
			console.info('jsWebGL testTexSubImage3D test start ...' + JSON.stringify(gl));
			gl2.texSubImage3D(gl.TEXTURE_3D, 0, 0, 0, 0, 200, 200, 1, gl.RGB8UI, gl.UNSIGNED_BYTE,
				1);
			const texSubImage3DError = gl.getError();
			console.info("texSubImage3DError: " + texSubImage3DError);
			expect(texSubImage3DError).assertEqual(0);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testTexSubImage3D has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0981
	 * @tc.name testTexSubImage3D
	 * @tc.desc Test texSubImage3D.
	 */
	it('testTexSubImage3D', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testTexSubImage3D test start ...66');
			console.info('jsWebGL testTexSubImage3D test start ...' + JSON.stringify(gl));
			gl2.texSubImage3D(gl.TEXTURE_3D, 0, 0, 0, 0, 200, 200, 1, gl.R8, gl.UNSIGNED_BYTE, 1);
			const texSubImage3DError = gl.getError();
			console.info("texSubImage3DError: " + texSubImage3DError);
			expect(texSubImage3DError).assertEqual(0);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testTexSubImage3D has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0982
	 * @tc.name testTexSubImage3D
	 * @tc.desc Test texSubImage3D.
	 */
	it('testTexSubImage3D', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testTexSubImage3D test start ...66');
			console.info('jsWebGL testTexSubImage3D test start ...' + JSON.stringify(gl));
			gl2.texSubImage3D(gl.TEXTURE_3D, 0, 0, 0, 0, 200, 200, 1, gl.LUMINANCE, gl
				.UNSIGNED_BYTE, 1);
			const texSubImage3DError = gl.getError();
			console.info("texSubImage3DError: " + texSubImage3DError);
			expect(texSubImage3DError).assertEqual(0);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testTexSubImage3D has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0983
	 * @tc.name testCompressedTexImage3D
	 * @tc.desc Test compressedTexImage3D.
	 */
	it('testCompressedTexImage3D', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testCompressedTexImage3D test start ...66');
			console.info('jsWebGL testCompressedTexImage3D test start ...' + JSON.stringify(gl));
			const buffer = new ArrayBuffer(8);
			gl2.compressedTexImage3D(gl.TEXTURE_3D, 0, 0x83F0, 512, 512, 0, buffer);
			const compressedTexImage3DError = gl.getError();
			console.info("compressedTexImage3DError: " + compressedTexImage3DError);
			expect(compressedTexImage3DError).assertEqual(0);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testCompressedTexImage3D has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0984
	 * @tc.name testCompressedTexImage3D
	 * @tc.desc Test compressedTexImage3D.
	 */
	it('testCompressedTexImage3D', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testCompressedTexImage3D test start ...66');
			console.info('jsWebGL testCompressedTexImage3D test start ...' + JSON.stringify(gl));
			const buffer = new ArrayBuffer(8);
			gl2.compressedTexImage3D(gl.TEXTURE_3D, 0, 0x83F0, 512, 512, 0, buffer, 0, 0);
			const compressedTexImage3DError = gl.getError();
			console.info("compressedTexImage3DError: " + compressedTexImage3DError);
			expect(compressedTexImage3DError).assertEqual(0);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testCompressedTexImage3D has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0985
	 * @tc.name testCompressedTexImage3D
	 * @tc.desc Test compressedTexImage3D.
	 */
	it('testCompressedTexImage3D', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testCompressedTexImage3D test start ...66');
			console.info('jsWebGL testCompressedTexImage3D test start ...' + JSON.stringify(gl));
			gl2.compressedTexImage3D(gl.TEXTURE_3D, 0, 0x83F0, 512, 512, 0, gl2.PIXEL_UNPACK_BUFFER,
				0);
			const compressedTexImage3DError = gl.getError();
			console.info("compressedTexImage3DError: " + compressedTexImage3DError);
			expect(compressedTexImage3DError).assertEqual(0);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testCompressedTexImage3D has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0986
	 * @tc.name testCompressedTexImage3D
	 * @tc.desc Test compressedTexImage3D.
	 */
	it('testCompressedTexImage3D', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testCompressedTexImage3D test start ...66');
			console.info('jsWebGL testCompressedTexImage3D test start ...' + JSON.stringify(gl));
			const buffer = new ArrayBuffer(8);
			gl2.compressedTexImage3D(gl.TEXTURE_3D, false, 0x83F0, 512, 512, 0, buffer);
			const compressedTexImage3DError = gl.getError();
			console.info("compressedTexImage3DError: " + compressedTexImage3DError);
			expect(compressedTexImage3DError).assertEqual(0);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testCompressedTexImage3D has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0987
	 * @tc.name testCompressedTexImage3D
	 * @tc.desc Test compressedTexImage3D.
	 */
	it('testCompressedTexImage3D', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testCompressedTexImage3D test start ...66');
			console.info('jsWebGL testCompressedTexImage3D test start ...' + JSON.stringify(gl));
			const buffer = new ArrayBuffer(8);
			gl2.compressedTexImage3D(gl.TEXTURE_3D, false, 0x83F0, 512, 512, 0, buffer, 0, 0);
			const compressedTexImage3DError = gl.getError();
			console.info("compressedTexImage3DError: " + compressedTexImage3DError);
			expect(compressedTexImage3DError).assertEqual(0);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testCompressedTexImage3D has failed for " + e)
			expect(null).assertFail()
		}
	})

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0988
	 * @tc.name testCompressedTexImage3D
	 * @tc.desc Test compressedTexImage3D.
	 */
	it('testCompressedTexImage3D', 0, async function(done) {
		//initContext();
		try {
			console.info('jsWebGL testCompressedTexImage3D test start ...66');
			console.info('jsWebGL testCompressedTexImage3D test start ...' + JSON.stringify(gl));
			gl2.compressedTexImage3D(gl.TEXTURE_3D, false, 0x83F0, 512, 512, 0, gl2
				.PIXEL_UNPACK_BUFFER, 0);
			const compressedTexImage3DError = gl.getError();
			console.info("compressedTexImage3DError: " + compressedTexImage3DError);
			expect(compressedTexImage3DError).assertEqual(0);
			//deleteContext();
			done();
		} catch (e) {
			console.log("testCompressedTexImage3D has failed for " + e)
			expect(null).assertFail()
		}
	})


	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0989
	 * @tc.name testFrontFace2
	 * @tc.desc Test frontFace.
	 */
	it('testFrontFace2', 0, async function(done) {
		//initContext();
		console.info('jsWebGL frontFace test start ...' + JSON.stringify(gl));
		gl.enable(gl.CULL_FACE);
		gl.cullFace(gl.FRONT_AND_BACK);
		gl.frontFace(gl.CCW);
		const frontFaceParameter = gl.getParameter(gl.CULL_FACE_MODE);
		console.info('frontFace -> frontFaceParameter' + frontFaceParameter);
		gl.disable(gl.CULL_FACE);
		expect(frontFaceParameter).assertEqual(gl.FRONT_AND_BACK);
		done();
	});


	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0990
	 * @tc.name testGenerateMipmap2
	 * @tc.desc Test generateMipmap.
	 */
	it('testGenerateMipmap2', 0, async function(done) {
		//initContext();
		console.info('jsWebGL generateMipmap test start ...' + JSON.stringify(gl));
		gl.generateMipmap(gl2.TEXTURE_CUBE_MAP);
		const error = gl.getError();
		console.info('generateMipmap error ' + error);
		expect(error).assertEqual(0);
		done();
	});

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0993
	 * @tc.name testGetFramebufferAttachmentParameter2
	 * @tc.desc Test getFramebufferAttachmentParameter.
	 */
	it('testGetFramebufferAttachmentParameter2', 0, async function(done) {
		//initContext();
		console.info('jsWebGL getFramebufferAttachmentParameter test start ...' + JSON.stringify(
			gl));
		const renderBuffer = gl.createRenderbuffer();
		gl.bindRenderbuffer(gl.RENDERBUFFER, renderBuffer);
		gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER,
			renderBuffer);
		const framebuffer = gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl
			.STENCIL_ATTACHMENT,
			gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE);
		console.info('Framebuffer' + framebuffer);
		const errorCode = gl.getError();
		console.info("jsWebGL getFramebufferAttachmentParameter errorCode: " + errorCode);
		expect(errorCode).assertEqual(0);
		done();
	});

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0994
	 * @tc.name testGetFramebufferAttachmentParameter3
	 * @tc.desc Test getFramebufferAttachmentParameter.
	 */
	it('testGetFramebufferAttachmentParameter3', 0, async function(done) {
		//initContext();
		console.info('jsWebGL getFramebufferAttachmentParameter test start ...' + JSON.stringify(
			gl));
		const renderBuffer = gl.createRenderbuffer();
		gl.bindRenderbuffer(gl.RENDERBUFFER, renderBuffer);
		gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER,
			renderBuffer);
		const framebuffer = gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl
			.DEPTH_STENCIL_ATTACHMENT,
			gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE);
		console.info('Framebuffer' + framebuffer);
		const errorCode = gl.getError();
		console.info("jsWebGL getFramebufferAttachmentParameter errorCode: " + errorCode);
		expect(errorCode).assertEqual(0);
		done();
	});

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0995
	 * @tc.name testGetShaderPrecisionFormat1
	 * @tc.desc Test getShaderPrecisionFormat.
	 */
	it('testGetShaderPrecisionFormat1', 0, async function(done) {
		//initContext();
		console.info('jsWebGL getShaderPrecisionFormat test start ...' + JSON.stringify(gl));
		const shaderPrecisionFormat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_FLOAT);
		console.info('shaderPrecisionFormat' + JSON.stringify(shaderPrecisionFormat));
		const type = ((typeof shaderPrecisionFormat) === "object")
		expect(type).assertEqual(true);
		done();
	});

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0996
	 * @tc.name testGetShaderPrecisionFormat2
	 * @tc.desc Test getShaderPrecisionFormat.
	 */
	it('testGetShaderPrecisionFormat2', 0, async function(done) {
		//initContext();
		console.info('jsWebGL getShaderPrecisionFormat test start ...' + JSON.stringify(gl));
		const shaderPrecisionFormat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl
			.HIGH_FLOAT);
		console.info('shaderPrecisionFormat' + JSON.stringify(shaderPrecisionFormat));
		const type = ((typeof shaderPrecisionFormat) === "object")
		expect(type).assertEqual(true);
		done();
	});

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0997
	 * @tc.name testGetShaderPrecisionFormat3
	 * @tc.desc Test getShaderPrecisionFormat.
	 */
	it('testGetShaderPrecisionFormat3', 0, async function(done) {
		//initContext();
		console.info('jsWebGL getShaderPrecisionFormat test start ...' + JSON.stringify(gl));
		const shaderPrecisionFormat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_INT);
		console.info('shaderPrecisionFormat' + JSON.stringify(shaderPrecisionFormat));
		const type = ((typeof shaderPrecisionFormat) === "object")
		expect(type).assertEqual(true);
		done();
	});

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0998
	 * @tc.name testGetShaderPrecisionFormat4
	 * @tc.desc Test getShaderPrecisionFormat.
	 */
	it('testGetShaderPrecisionFormat4', 0, async function(done) {
		//initContext();
		console.info('jsWebGL getShaderPrecisionFormat test start ...' + JSON.stringify(gl));
		const shaderPrecisionFormat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl
			.MEDIUM_INT);
		console.info('shaderPrecisionFormat' + JSON.stringify(shaderPrecisionFormat));
		const type = ((typeof shaderPrecisionFormat) === "object")
		expect(type).assertEqual(true);
		done();
	});

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_0999
	 * @tc.name testGetTexParameter3
	 * @tc.desc Test getTexParameter.
	 */
	it('testGetTexParameter3', 0, async function(done) {
		//initContext();
		console.info('jsWebGL getTexParameter test start ...' + JSON.stringify(gl));
		gl.texParameterf(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
		const texParameterValue = gl.getTexParameter(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAG_FILTER);
		console.info('texParameterfValue' + texParameterValue);
		expect(texParameterValue).assertEqual(gl.LINEAR);
		done();
	});

	/**
	 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_TESTWEBGL_1000
	 * @tc.name testGetActiveUniformBlockParameter1
	 * @tc.desc Test getActiveUniformBlockParameter.
	 */
	it('testGetActiveUniformBlockParameter1', 0, async function(done) {
		//initContext();
		console.info('jsWebGL2 getActiveUniformBlockParameter test start ...' + JSON.stringify(
			gl2));
		const program = globalFunction();
		const uniformLocation = gl.getUniformLocation(program, "a_Position");
		const int32Array = new Int32Array([1, 2]);
		gl2.uniform1iv(uniformLocation, int32Array);
		const blockIndex = gl2.getUniformBlockIndex(program, 'a_Position');
		gl2.uniformBlockBinding(program, blockIndex, 1);
		const blockSize = gl2.getActiveUniformBlockParameter(program, blockIndex,
			gl.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER);
		console.info("getActiveUniformBlockParameter blockSize" + blockSize);
		const errorCode = gl.getError();
		console.info("jsWebGL getActiveUniformBlockParameter errorCode: " + errorCode);
		expect(errorCode).assertEqual(gl.INVALID_VALUE);
		done();
	});
})
