52 lines
1.4 KiB
JavaScript
52 lines
1.4 KiB
JavaScript
"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.");
|
|
}
|
|
}
|