blob: f5c3c8494898832d34cb978e9f7a374b77a4a833 [file] [log] [blame]
<!DOCTYPE html> <!-- webkit-test-runner [ experimental:AsyncClipboardAPIEnabled=true ] -->
<html>
<head>
<script src="../../resources/js-test.js"></script>
</head>
<script>
jsTestIsAsync = true;
async function shouldReject(scriptToEvaluate)
{
try {
testFailed(`${scriptToEvaluate} resolved to ${await eval(scriptToEvaluate)}`);
} catch (exception) {
testPassed(`${scriptToEvaluate} rejected with ${exception}`);
}
}
async function runTest()
{
description("Tests the interfaces of the async clipboard API, which include Clipboard, ClipboardItem, and extensions to Navigator.");
debug("\nTesting Clipboard:");
shouldBeTrue("Clipboard instanceof Function");
shouldBeEqualToString("typeof Clipboard", "function");
shouldBeTrue("navigator.clipboard instanceof Clipboard");
shouldBeTrue("Object.getPrototypeOf(navigator.clipboard) === Clipboard.prototype");
shouldBeTrue("Clipboard.prototype.readText instanceof Function");
shouldBeTrue("Clipboard.prototype.writeText instanceof Function");
shouldBeTrue("Clipboard.prototype.read instanceof Function");
shouldBeTrue("Clipboard.prototype.write instanceof Function");
shouldThrow("Clipboard()");
shouldThrow("new Clipboard()");
shouldBeEqualToString("Clipboard.toString()", "function Clipboard() {\n [native code]\n}");
shouldBeEqualToString("navigator.clipboard.toString()", "[object Clipboard]");
shouldBeTrue("navigator.clipboard.writeText('foo') instanceof Promise");
shouldBeTrue("navigator.clipboard.write([ ]) instanceof Promise");
shouldBeTrue("navigator.clipboard.read() instanceof Promise");
shouldBeTrue("navigator.clipboard.readText() instanceof Promise");
await shouldReject("navigator.clipboard.write()");
await shouldReject("navigator.clipboard.writeText()");
await shouldReject("navigator.clipboard.write('foo')");
await shouldReject("navigator.clipboard.write([1, 2, 3])");
await shouldReject("navigator.clipboard.write(new ClipboardItem({ }))");
debug("\nTesting ClipboardItem:");
shouldBeTrue("ClipboardItem instanceof Function");
shouldBeEqualToString("typeof ClipboardItem", "function");
shouldBeTrue("ClipboardItem.prototype.getType instanceof Function");
shouldThrow("ClipboardItem()");
shouldThrow("new ClipboardItem()");
shouldThrow("new ClipboardItem('foo')");
shouldBeTrue("new ClipboardItem({ }) instanceof ClipboardItem");
shouldBeTrue("Object.getPrototypeOf(new ClipboardItem({ })) === ClipboardItem.prototype");
shouldBeTrue("new ClipboardItem({ }).types instanceof Array");
shouldBeEqualToString("ClipboardItem.toString()", "function ClipboardItem() {\n [native code]\n}");
shouldBeEqualToString("new ClipboardItem({ }).toString()", "[object ClipboardItem]");
shouldBeEqualToString("new ClipboardItem({ }, { foo: 'attachment' }).presentationStyle", "unspecified");
shouldThrow("new ClipboardItem({ }, { presentationStyle: 'AttaCHmenT' }).presentationStyle");
shouldBeEqualToString("new ClipboardItem({ }, { presentationStyle: 'unspecified' }).presentationStyle", "unspecified");
shouldBeEqualToString("new ClipboardItem({ }, { presentationStyle: 'attachment' }).presentationStyle", "attachment");
shouldBeEqualToString("new ClipboardItem({ }, { presentationStyle: 'inline' }).presentationStyle", "inline");
shouldThrow("new ClipboardItem({ }, 'inline')");
finishJSTest();
}
</script>
<body onload=runTest()></body>
</html>