• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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