/*------------------------------------------------------------------------- * drawElements Quality Program OpenGL ES Utilities * ------------------------------------------------ * * Copyright 2014 The Android Open Source Project * * 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. * */ 'use strict'; goog.provide('functional.gles3.es3fApiCase'); goog.require('framework.common.tcuTestCase'); goog.require('framework.opengl.gluStrUtil'); goog.scope(function() { var es3fApiCase = functional.gles3.es3fApiCase; var gluStrUtil = framework.opengl.gluStrUtil; var tcuTestCase = framework.common.tcuTestCase; // format numbers as they appear in gl.h var getHexStr = function(num) { var numstr = num.toString(16); var prefix = '0x'; for ( var padding = (num < 0x10000 ? 4 : 8) - numstr.length; padding-- > 0; ) prefix += '0'; return prefix + numstr; }; /** * Base class for all the API tests. * @constructor * @extends {tcuTestCase.DeqpTest} * @param {string} name * @param {string} desc */ es3fApiCase.ApiCase = function(name, desc, gl) { gl = gl || window.gl; if (this.test === undefined) { throw new Error('Unimplemented virtual function: es3fApiCase.ApiCase.test'); } tcuTestCase.DeqpTest.call(this, name, desc); this.m_gl = gl; this.m_pass = true; this.m_comment = ''; }; es3fApiCase.ApiCase.prototype = Object.create(tcuTestCase.DeqpTest.prototype); es3fApiCase.ApiCase.prototype.constructor = es3fApiCase.ApiCase; /** * @param {boolean} condition * @param {string=} message */ es3fApiCase.ApiCase.prototype.check = function(condition, message) { if (this.m_pass && !condition) { bufferedLogToConsole('Condition is false. Test failed.'); if (message) this.m_comment += ' ' + message; this.m_pass = condition; } return condition; }; es3fApiCase.ApiCase.prototype.iterate = function() { this.test(); if (this.m_pass) testPassed(this.m_comment); else testFailedOptions(this.m_comment, true); return tcuTestCase.IterateResult.STOP; }; /** * @param {Array|number} expected * @return {boolean} returns true if gl.getError returns an expected error code and false otherwise. */ es3fApiCase.ApiCase.prototype.expectError = function(expected) { if (expected.constructor === Number) expected = [expected]; var err = this.m_gl.getError(); var conformant = expected.indexOf(err) >= 0; if (!conformant) { var l = expected.length; var msg = 'Expected '; if (l > 1) msg += (l == 2 ? 'either ' : 'one of '); for (var i = 0; i < l; ++i) msg += ( (gluStrUtil.getErrorName(expected[i]) || getHexStr(expected[i])) + (l - i == 2 ? ' or ' : ', ') ); msg += 'but got ' + (gluStrUtil.getErrorName(err) || getHexStr(err)) + '.'; this.testFailed(msg); } return conformant; }; es3fApiCase.ApiCase.prototype.testFailed = function(comment) { bufferedLogToConsole(comment); if (this.m_pass) { this.m_comment = comment; this.m_pass = false; } }; es3fApiCase.ApiCase.prototype.expectThrowNoError = function(f) { try { f(); this.testFailed("should have thrown exception"); } catch (e) { this.expectError(this.m_gl.NO_ERROR); } } /** * Base class for all the API tests. * @constructor * @extends {es3fApiCase.ApiCase} * @param {string} name * @param {string} desc * @param {function(this:es3fApiCase.ApiCaseCallback)} callback */ es3fApiCase.ApiCaseCallback = function(name, desc, gl, callback) { this.test = callback; es3fApiCase.ApiCase.call(this, name, desc, gl); }; es3fApiCase.ApiCaseCallback.prototype = Object.create(es3fApiCase.ApiCase.prototype); es3fApiCase.ApiCaseCallback.prototype.constructor = es3fApiCase.ApiCaseCallback; /* es3fApiCase.ApiCase.prototype.expectError // (error) or (error0, error1) es3fApiCase.ApiCase.prototype.getSupportedExtensions // (number numSupportedValues, number extension, [number] values ) es3fApiCase.ApiCase.prototype.checkBooleans // (char value, char expected); //*/ });