Source code

Revision control

Copy as Markdown

Other Tools

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<title>Test the methods that make assertions about exceptions</title>
</head>
<body>
<script>
function makeTest(...bodies) {
const closeScript = '<' + '/script>';
let src = `
<!DOCTYPE HTML>
<html>
<head>
<title>Document title</title>
<script src="/resources/testharness.js?${Math.random()}">${closeScript}
</head>
<body>
<div id="log"></div>`;
bodies.forEach((body) => {
src += '<script>(' + body + ')();' + closeScript;
});
const iframe = document.createElement('iframe');
document.body.appendChild(iframe);
iframe.contentDocument.write(src);
return new Promise((resolve) => {
window.addEventListener('message', function onMessage(e) {
if (e.source !== iframe.contentWindow) {
return;
}
if (!e.data || e.data.type !=='complete') {
return;
}
window.removeEventListener('message', onMessage);
resolve(e.data);
});
iframe.contentDocument.close();
}).then(({ tests, status }) => {
const summary = {
harness: getEnumProp(status, status.status),
tests: {}
};
tests.forEach((test) => {
summary.tests[test.name] = getEnumProp(test, test.status);
});
return summary;
});
}
function getEnumProp(object, value) {
for (let property in object) {
if (!/^[A-Z]+$/.test(property)) {
continue;
}
if (object[property] === value) {
return property;
}
}
}
promise_test(() => {
return makeTest(() => {
test(() => {
assert_throws_js(TypeError, () => { throw new TypeError(); });
});
}).then(({harness, tests}) => {
assert_equals(harness, 'OK');
assert_equals(tests['Document title'], 'PASS');
});
}, 'assert_throws_js on a TypeError');
promise_test(() => {
return makeTest(() => {
test(() => {
assert_throws_js(RangeError, () => { throw new RangeError(); });
});
}).then(({harness, tests}) => {
assert_equals(harness, 'OK');
assert_equals(tests['Document title'], 'PASS');
});
}, 'assert_throws_js on a RangeError');
promise_test(() => {
return makeTest(() => {
test(() => {
assert_throws_js(TypeError, () => { throw new RangeError(); });
});
}).then(({harness, tests}) => {
assert_equals(harness, 'OK');
assert_equals(tests['Document title'], 'FAIL');
});
}, 'assert_throws_js on a TypeError when RangeError is thrown');
promise_test(() => {
return makeTest(() => {
test(() => {
assert_throws_js(Error, () => { throw new TypeError(); });
});
}).then(({harness, tests}) => {
assert_equals(harness, 'OK');
assert_equals(tests['Document title'], 'FAIL');
});
}, 'assert_throws_js on an Error when TypeError is thrown');
promise_test(() => {
return makeTest(() => {
test(() => {
assert_throws_js(Error,
() => { throw new DOMException("hello", "Error"); });
});
}).then(({harness, tests}) => {
assert_equals(harness, 'OK');
assert_equals(tests['Document title'], 'FAIL');
});
}, 'assert_throws_js on an Error when a DOMException is thrown');
promise_test(() => {
return makeTest(() => {
test(() => {
assert_throws_js(SyntaxError,
() => { throw new DOMException("hey", "SyntaxError"); });
});
}).then(({harness, tests}) => {
assert_equals(harness, 'OK');
assert_equals(tests['Document title'], 'FAIL');
});
}, 'assert_throws_js on a SyntaxError when a DOMException is thrown');
promise_test(() => {
return makeTest(() => {
test(() => {
assert_throws_dom("SyntaxError",
() => { throw new DOMException("x", "SyntaxError"); });
});
}).then(({harness, tests}) => {
assert_equals(harness, 'OK');
assert_equals(tests['Document title'], 'PASS');
});
}, 'assert_throws_dom basic sanity');
promise_test(() => {
return makeTest(() => {
test(() => {
assert_throws_dom(12,
() => { throw new DOMException("x", "SyntaxError"); });
});
}).then(({harness, tests}) => {
assert_equals(harness, 'OK');
assert_equals(tests['Document title'], 'PASS');
});
}, 'assert_throws_dom with numeric code');
promise_test(() => {
return makeTest(() => {
test(() => {
assert_throws_dom("SYNTAX_ERR",
() => { throw new DOMException("x", "SyntaxError"); });
});
}).then(({harness, tests}) => {
assert_equals(harness, 'OK');
assert_equals(tests['Document title'], 'PASS');
});
}, 'assert_throws_dom with string name for code');
promise_test(() => {
return makeTest(() => {
test(() => {
assert_throws_dom("DataError",
() => { throw new DOMException("x", "DataError"); });
});
}).then(({harness, tests}) => {
assert_equals(harness, 'OK');
assert_equals(tests['Document title'], 'PASS');
});
}, 'assert_throws_dom for a code-less DOMException type');
promise_test(() => {
return makeTest(() => {
test(() => {
assert_throws_dom("NoSuchError",
() => { throw new DOMException("x", "NoSuchError"); });
});
}).then(({harness, tests}) => {
assert_equals(harness, 'OK');
assert_equals(tests['Document title'], 'FAIL');
});
}, 'assert_throws_dom for a nonexistent DOMException type');
promise_test(() => {
return makeTest(() => {
test(() => {
assert_throws_dom("SyntaxError", () => { throw new SyntaxError(); });
});
}).then(({harness, tests}) => {
assert_equals(harness, 'OK');
assert_equals(tests['Document title'], 'FAIL');
});
}, 'assert_throws_dom when a non-DOM exception is thrown');
promise_test(() => {
return makeTest(() => {
test(() => {
assert_throws_exactly(5, () => { throw 5; });
});
}).then(({harness, tests}) => {
assert_equals(harness, 'OK');
assert_equals(tests['Document title'], 'PASS');
});
}, 'assert_throws_exactly with number');
promise_test(() => {
return makeTest(() => {
test(() => {
assert_throws_exactly("foo", () => { throw "foo"; });
});
}).then(({harness, tests}) => {
assert_equals(harness, 'OK');
assert_equals(tests['Document title'], 'PASS');
});
}, 'assert_throws_exactly with string');
promise_test(() => {
return makeTest(() => {
test(() => {
assert_throws_exactly({}, () => { throw {}; });
});
}).then(({harness, tests}) => {
assert_equals(harness, 'OK');
assert_equals(tests['Document title'], 'FAIL');
});
}, 'assert_throws_exactly with different objects');
promise_test(() => {
return makeTest(() => {
test(() => {
var obj = {};
assert_throws_exactly(obj, () => { throw obj; });
});
}).then(({harness, tests}) => {
assert_equals(harness, 'OK');
assert_equals(tests['Document title'], 'PASS');
});
}, 'assert_throws_exactly with same object');
promise_test(() => {
return makeTest(() => {
test(() => {
assert_throws_exactly(TypeError, () => { throw new TypeError; });
});
}).then(({harness, tests}) => {
assert_equals(harness, 'OK');
assert_equals(tests['Document title'], 'FAIL');
});
}, 'assert_throws_exactly with bogus TypeError bits ');
</script>
</body>
</html>