1/* 2 * Copyright (C) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16import hilog from '@ohos.hilog'; 17import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect, TestType, Level, Size } from '@ohos/hypium'; 18 19import {checkError, createProgram, getColorUint8Array,clear,WEBGL2_FRAGMENT_SHADER_DEMO} from './WebGL2'; 20 21 22export default function webgl2_query() { 23 24 describe('webgl2_query', function () { 25 let gl = global.gl2; 26 // Defines a test suite. Two parameters are supported: test suite name and test suite function. 27 beforeAll(function () { 28 hilog.info(0x0000, 'testTag', '%{public}s', 'webgl1_test_01 start'); 29 // Presets an action, which is performed only once before all test cases of the test suite start. 30 // This API supports only one parameter: preset action function. 31 }); 32 beforeEach(function () { 33 // Presets an action, which is performed before each unit test case starts. 34 // The number of execution times is the same as the number of test cases defined by **it**. 35 // This API supports only one parameter: preset action function. 36 checkError(gl); 37 }); 38 afterEach(function () { 39 // Presets a clear action, which is performed after each unit test case ends. 40 // The number of execution times is the same as the number of test cases defined by **it**. 41 // This API supports only one parameter: clear action function. 42 checkError(gl); 43 }); 44 afterAll(function () { 45 // Presets a clear action, which is performed after all test cases of the test suite end. 46 // This API supports only one parameter: clear action function. 47 hilog.info(0x0000, 'testTag', '%{public}s', 'webgl1_test_01 end'); 48 }); 49 /** 50 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_QUERY_0001 51 * @tc.name webgl2_test_createQuery 52 * @tc.desc Test createQuery. 53 */ 54 it('webgl2_test_createQuery', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 55 console.info("webgl2test [webgl2_test_createQuery] createQuery"); 56 let query = gl.createQuery(); 57 console.log("webgltest Query:", query); 58 expect(query != null).assertTrue(); 59 gl.beginQuery(gl.ANY_SAMPLES_PASSED, query); 60 console.log("webgltest isQuery:", gl.isQuery(query)); 61 expect(gl.isQuery(query)).assertEqual(true); 62 console.log("webgltest delete Query"); 63 gl.deleteQuery(query); 64 console.log("webgltest isQuery:", gl.isQuery(query)); 65 expect(gl.isQuery(query)).assertEqual(false); 66 done(); 67 }); 68 // Method deletes the given Web GL Query object. This method is invalid if the program has been deleted. 69 function deleteQuery(callback, finish) { 70 let query = gl.createQuery(); 71 expect(query != null).assertTrue(); 72 expect(gl.isQuery(query)).assertFalse(); 73 callback(query); 74 finish(gl.isQuery(query)); 75 } 76 /** 77 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_QUERY_0002 78 * @tc.name webgl2_test_deleteQuery 79 * @tc.desc Test deleteQuery. 80 */ 81 it('webgl2_test_deleteQuery', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 82 console.info("webgl2test [webgl2_test_deleteQuery] deleteQuery"); 83 let query = gl.createQuery(); 84 console.log("webgltest Query:", query); 85 expect(query != null).assertTrue(); 86 gl.beginQuery(gl.ANY_SAMPLES_PASSED, query); 87 console.log("webgltest isQuery:", gl.isQuery(query)); 88 expect(gl.isQuery(query)).assertEqual(true); 89 console.log("webgltest delete Query"); 90 gl.deleteQuery(query); 91 console.log("webgltest isQuery:", gl.isQuery(query)); 92 expect(gl.isQuery(query)).assertEqual(false); 93 done(); 94 }); 95 /** 96 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_QUERY_0003 97 * @tc.name webgl_test_deleteQuery_1 98 * @tc.desc Test deleteQuery. 99 */ 100 it('webgl_test_deleteQuery_1', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 101 console.info("webgltest [webgl_test_deleteQuery_1] deleteQuery"); 102 deleteQuery((query) => { 103 gl.deleteQuery(null); 104 checkError(gl); 105 }, (isQuery) => { 106 expect(isQuery).assertEqual(false); 107 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 108 }); 109 done(); 110 }); 111 /** 112 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_QUERY_0004 113 * @tc.name webgl_test_deleteQuery_2 114 * @tc.desc Test deleteQuery. 115 */ 116 it('webgl_test_deleteQuery_2', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 117 console.info("webgltest [webgl_test_deleteQuery_2] deleteQuery"); 118 deleteQuery((query) => { 119 gl.deleteQuery(undefined); 120 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 121 }, (isQuery) => { 122 expect(isQuery).assertEqual(false); 123 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 124 }); 125 done(); 126 }); 127 /** 128 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_QUERY_0005 129 * @tc.name webgl_test_deleteQuery_3 130 * @tc.desc Test deleteQuery. 131 */ 132 it('webgl_test_deleteQuery_2', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 133 console.info("webgltest [webgl_test_deleteQuery_2] deleteQuery"); 134 deleteQuery((query) => { 135 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 136 }, (isQuery) => { 137 expect(isQuery).assertEqual(false); 138 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 139 }); 140 done(); 141 }); 142 // Return true if the passed Web GL Query is valid, false otherwise. 143 function isQuery(callback, finish) { 144 let query = gl.createQuery(); 145 expect(query != null).assertTrue(); 146 gl.beginQuery(gl.ANY_SAMPLES_PASSED, query); 147 callback(query); 148 finish(gl.isQuery(query)); 149 gl.deleteQuery(query); 150 } 151 /** 152 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_QUERY_0006 153 * @tc.name webgl2_test_isQuery 154 * @tc.desc Test isQuery. 155 */ 156 it('webgl2_test_isQuery', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 157 console.info("webgl2test [webgl2_test_isQuery] isQuery"); 158 let query = gl.createQuery(); 159 console.log("webgltest Query:", query); 160 expect(query != null).assertTrue(); 161 gl.beginQuery(gl.ANY_SAMPLES_PASSED, query); 162 console.log("webgltest isQuery:", gl.isQuery(query)); 163 expect(gl.isQuery(query)).assertEqual(true); 164 console.log("webgltest delete Query"); 165 gl.deleteQuery(query); 166 console.log("webgltest isQuery:", gl.isQuery(query)); 167 expect(gl.isQuery(query)).assertEqual(false); 168 done(); 169 }); 170 /** 171 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_QUERY_0007 172 * @tc.name webgl2_test_isQuery_1 173 * @tc.desc Test isQuery. 174 */ 175 it('webgl2_test_isQuery_1', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 176 console.info("webgltest [webgl_test_isQuery_1] isQuery"); 177 isQuery((query) => { 178 gl.isQuery(null); 179 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 180 }, () => { 181 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 182 }); 183 done(); 184 }); 185 /** 186 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_QUERY_0008 187 * @tc.name webgl2_test_isQuery_2 188 * @tc.desc Test isQuery. 189 */ 190 it('webgl2_test_isQuery_2', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 191 console.info("webgltest [webgl_test_isQuery_2] isQuery"); 192 isQuery((query) => { 193 gl.isQuery(undefined); 194 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 195 }, () => { 196 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 197 }); 198 done(); 199 }); 200 // enable asynchronous queries for web gl query 201 function beginQuery(callback, finish) { 202 let query = gl.createQuery(); 203 expect(query != null).assertTrue(); 204 callback(query); 205 finish(gl.isQuery(query)); 206 gl.deleteQuery(query); 207 } 208 /** 209 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_QUERY_0009 210 * @tc.name webgl2_test_beginQuery 211 * @tc.desc Test beginQuery. 212 */ 213 it('webgl2_test_beginQuery', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 214 console.info("webgl2test [webgl2_test_beginQuery] beginQuery"); 215 let query = gl.createQuery(); 216 console.log("webgltest Query:", query); 217 expect(query != null).assertTrue(); 218 console.log("webgltest isQuery:", gl.isQuery(query)); 219 expect(gl.isQuery(query)).assertEqual(false); 220 gl.beginQuery(gl.ANY_SAMPLES_PASSED, query); 221 console.log("webgltest beginQuery()"); 222 console.log("webgltest isQuery:", gl.isQuery(query)); 223 expect(gl.isQuery(query)).assertEqual(true); 224 gl.deleteQuery(query); 225 console.log("webgltest delete Query"); 226 console.log("webgltest isQuery:", gl.isQuery(query)); 227 expect(gl.isQuery(query)).assertEqual(false); 228 done(); 229 }); 230 /** 231 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_QUERY_0010 232 * @tc.name webgl2_test_beginQuery_1 233 * @tc.desc Test beginQuery. 234 */ 235 it('webgl2_test_beginQuery_1', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 236 console.info("webgl2test [webgl2_test_beginQuery] beginQuery"); 237 beginQuery((query) => { 238 gl.beginQuery(gl.ANY_SAMPLES_PASSED_CONSERVATIVE, query); 239 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 240 }, () => { 241 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 242 }); 243 done(); 244 }); 245 /** 246 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_QUERY_0011 247 * @tc.name webgl2_test_beginQuery_2 248 * @tc.desc Test beginQuery. 249 */ 250 it('webgl2_test_beginQuery_2', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 251 console.info("webgl2test [webgl2_test_beginQuery] beginQuery"); 252 beginQuery((query) => { 253 gl.beginQuery(gl.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN, query); 254 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 255 }, () => { 256 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 257 }); 258 done(); 259 }); 260 /** 261 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_QUERY_0012 262 * @tc.name webgl2_test_beginQuery_3 263 * @tc.desc Test beginQuery. 264 */ 265 it('webgl2_test_beginQuery_3', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 266 console.info("webgl2test [webgl2_test_beginQuery] beginQuery"); 267 beginQuery((query) => { 268 gl.beginQuery(gl.ANY_SAMPLES_PASSED, query); 269 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 270 }, () => { 271 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 272 }); 273 done(); 274 }); 275 function endQuery(callback, finish) { 276 let query = gl.createQuery(); 277 let query2 = gl.createQuery(); 278 expect(query != null).assertTrue(); 279 gl.beginQuery(gl.ANY_SAMPLES_PASSED_CONSERVATIVE, query); 280 gl.beginQuery(gl.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN, query2); 281 callback(query, query2); 282 finish(gl.isQuery(query)); 283 gl.deleteQuery(query); 284 gl.deleteQuery(query2); 285 } 286 /** 287 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_QUERY_0013 288 * @tc.name webgl2_test_endQuery 289 * @tc.desc Test endQuery. 290 */ 291 it('webgl2_test_endQuery', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 292 console.info("webgl2test [webgl2_test_endQuery] endQuery"); 293 let query = gl.createQuery(); 294 let currentQuery = gl.getQuery(gl.ANY_SAMPLES_PASSED, gl.CURRENT_QUERY); 295 console.log("webgltest Query:", query); 296 expect(query != null).assertTrue(); 297 gl.beginQuery(gl.ANY_SAMPLES_PASSED, query); 298 console.log("webgltest isQuery:", gl.isQuery(query)); 299 expect(gl.isQuery(query)).assertEqual(true); 300 gl.endQuery(gl.ANY_SAMPLES_PASSED); 301 console.log("webgltest endQuery():", currentQuery); 302 gl.deleteQuery(query); 303 console.log("webgltest delete Query"); 304 console.log("webgltest isQuery:", gl.isQuery(query)); 305 expect(gl.isQuery(query)).assertEqual(false); 306 done(); 307 }); 308 /** 309 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_QUERY_0014 310 * @tc.name webgl2_test_endQuery_1 311 * @tc.desc Test endQuery. 312 */ 313 it('webgl2_test_endQuery_1', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 314 console.info("webgl2test [webgl2_test_endQuery] endQuery"); 315 endQuery((query) => { 316 gl.endQuery(gl.ANY_SAMPLES_PASSED_CONSERVATIVE); 317 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 318 }, () => { 319 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 320 }); 321 done(); 322 }); 323 /** 324 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_QUERY_0015 325 * @tc.name webgl2_test_endQuery_2 326 * @tc.desc Test endQuery. 327 */ 328 it('webgl2_test_endQuery_2', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 329 console.info("webgl2test [webgl2_test_endQuery] endQuery"); 330 endQuery((query) => { 331 gl.endQuery(gl.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN); 332 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 333 }, () => { 334 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 335 }); 336 done(); 337 }); 338 function getQuery(callback, finish) { 339 let query = gl.createQuery(); 340 let query2 = gl.createQuery(); 341 expect(query != null).assertTrue(); 342 gl.beginQuery(gl.ANY_SAMPLES_PASSED_CONSERVATIVE, query); 343 gl.beginQuery(gl.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN, query2); 344 callback(query, query2); 345 finish(gl.isQuery(query)); 346 gl.deleteQuery(query); 347 gl.deleteQuery(query2); 348 } 349 /** 350 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_QUERY_0016 351 * @tc.name webgl2_test_getQuery 352 * @tc.desc Test getQuery. 353 */ 354 it('webgl2_test_getQuery', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 355 console.info("webgl2test [webgl2_test_getQuery] getQuery"); 356 let query = gl.createQuery(); 357 let currentQuery = gl.getQuery(gl.ANY_SAMPLES_PASSED, gl.CURRENT_QUERY); 358 console.log("webgltest Query:", query); 359 expect(query != null).assertTrue(); 360 gl.beginQuery(gl.ANY_SAMPLES_PASSED, query); 361 console.log("webgltest isQuery:", gl.isQuery(query)); 362 expect(gl.isQuery(query)).assertEqual(true); 363 console.log("webgltest gl.getQuery(gl.ANY_SAMPLES_PASSED, gl.CURRENT_QUERY):", currentQuery); 364 gl.endQuery(gl.ANY_SAMPLES_PASSED); 365 console.log("webgltest isQuery:", gl.isQuery(query)); 366 expect(gl.isQuery(query)).assertEqual(true); 367 gl.deleteQuery(query); 368 console.log("webgltest delete Query"); 369 console.log("webgltest isQuery:", gl.isQuery(query)); 370 expect(gl.isQuery(query)).assertEqual(false); 371 done(); 372 }); 373 /** 374 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_QUERY_0017 375 * @tc.name webgl2_test_getQuery_1 376 * @tc.desc Test getQuery. 377 */ 378 it('webgl2_test_getQuery_1', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 379 console.info("webgl2test [webgl2_test_getQuery] getQuery"); 380 getQuery((query) => { 381 gl.getQuery(gl.ANY_SAMPLES_PASSED_CONSERVATIVE, gl.CURRENT_QUERY); 382 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 383 }, () => { 384 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 385 }); 386 done(); 387 }); 388 /** 389 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_QUERY_0018 390 * @tc.name webgl2_test_getQuery_2 391 * @tc.desc Test getQuery. 392 */ 393 it('webgl2_test_getQuery_2', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 394 console.info("webgl2test [webgl2_test_getQuery] getQuery"); 395 getQuery((query) => { 396 gl.getQuery(gl.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN, gl.CURRENT_QUERY); 397 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 398 }, () => { 399 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 400 }); 401 done(); 402 }); 403 /** 404 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_QUERY_0019 405 * @tc.name webgl2_test_getQuery_3 406 * @tc.desc Test getQuery. 407 */ 408 it('webgl2_test_getQuery_3', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 409 console.info("webgl2test [webgl2_test_getQuery] getQuery"); 410 getQuery((query) => { 411 gl.getQuery(gl.ANY_SAMPLES_PASSED, gl.CURRENT_QUERY); 412 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 413 }, () => { 414 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 415 }); 416 done(); 417 }); 418 function getQueryParameter(callback, finish) { 419 let query = gl.createQuery(); 420 expect(query != null).assertTrue(); 421 gl.beginQuery(gl.ANY_SAMPLES_PASSED, query); 422 gl.endQuery(gl.ANY_SAMPLES_PASSED); 423 callback(query); 424 finish(gl.isQuery(query)); 425 gl.deleteQuery(query); 426 } 427 /** 428 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_QUERY_0020 429 * @tc.name webgl2_test_getQueryParameter 430 * @tc.desc Test getQueryParameter. 431 */ 432 it('webgl2_test_getQueryParameter', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 433 console.info("webgl2test [webgl2_test_getQueryParameter] getQueryParameter"); 434 let query = gl.createQuery(); 435 console.log("webgltest Query:", query); 436 expect(query != null).assertTrue(); 437 gl.beginQuery(gl.ANY_SAMPLES_PASSED, query); 438 console.log("webgltest isQuery:", gl.isQuery(query)); 439 expect(gl.isQuery(query)).assertEqual(true); 440 gl.endQuery(gl.ANY_SAMPLES_PASSED); 441 console.log("webgltest gl.getQueryParameter(query!, gl.QUERY_RESULT):", gl.getQueryParameter(query, gl.QUERY_RESULT)); 442 console.log("webgltest isQuery:", gl.isQuery(query)); 443 expect(gl.isQuery(query)).assertEqual(true); 444 gl.deleteQuery(query); 445 console.log("webgltest delete Query"); 446 console.log("webgltest isQuery:", gl.isQuery(query)); 447 expect(gl.isQuery(query)).assertEqual(false); 448 done(); 449 }); 450 /** 451 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_QUERY_0021 452 * @tc.name webgl2_test_getQueryParameter_1 453 * @tc.desc Test getQueryParameter. 454 */ 455 it('webgl2_test_getQueryParameter_1', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, 456 async function (done) { 457 console.info("webgl2test [webgl2_test_getQueryParameter] getQueryParameter"); 458 getQueryParameter((query) => { 459 gl.getQueryParameter(query, gl.QUERY_RESULT_AVAILABLE); 460 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 461 }, () => { 462 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 463 }); 464 done(); 465 }); 466 /** 467 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_QUERY_0022 468 * @tc.name webgl2_test_getQueryParameter_2 469 * @tc.desc Test getQueryParameter. 470 */ 471 it('webgl2_test_getQueryParameter_2', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, 472 async function (done) { 473 console.info("webgl2test [webgl2_test_getQueryParameter] getQueryParameter"); 474 getQueryParameter((query) => { 475 gl.getQueryParameter(query, gl.QUERY_RESULT); 476 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 477 }, () => { 478 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 479 }); 480 done(); 481 }); 482 }) 483} 484