| "use strict"; |
| |
| // Properties to be ignored because they were added in versions of the |
| // spec that are backward-compatible with this version |
| const IGNORED_METHODS = [ |
| // There is no official spec for the commit API yet, the proposal link is: |
| // https://wiki.whatwg.org/wiki/OffscreenCanvas |
| "commit", |
| |
| // For WebXR integration: |
| "makeXRCompatible", |
| ]; |
| |
| function assertFunction(v, f) { |
| try { |
| if (typeof v[f] != "function") { |
| testFailed(`Property either does not exist or is not a function: ${f}`); |
| return false; |
| } else { |
| return true; |
| } |
| } catch(e) { |
| testFailed(`Trying to access the property '${f}' threw an error: ${e.toString()}`); |
| } |
| } |
| |
| function testContextMethods(gl, requiredContextMethods) { |
| const acceptableMethods = [].concat(requiredContextMethods, IGNORED_METHODS); |
| |
| let passed = true; |
| requiredContextMethods.forEach(method => { |
| const r = assertFunction(gl, method); |
| passed = passed && r; |
| }); |
| if (passed) { |
| testPassed("All WebGL methods found."); |
| } |
| let extended = false; |
| for (let propertyName of Object.getOwnPropertyNames(gl)) { |
| if (typeof gl[propertyName] == "function" && !acceptableMethods.includes(propertyName)) { |
| if (!extended) { |
| extended = true; |
| testFailed("Also found the following extra methods:"); |
| } |
| testFailed(propertyName); |
| } |
| } |
| |
| if (!extended) { |
| testPassed("No extra methods found on WebGL context."); |
| } |
| } |