Tests the interfaces of the async clipboard API, which include Clipboard, ClipboardItem, and extensions to Navigator.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".



Testing Clipboard:
PASS Clipboard instanceof Function is true
PASS typeof Clipboard is "function"
PASS navigator.clipboard instanceof Clipboard is true
PASS Object.getPrototypeOf(navigator.clipboard) === Clipboard.prototype is true
PASS Clipboard.prototype.readText instanceof Function is true
PASS Clipboard.prototype.writeText instanceof Function is true
PASS Clipboard.prototype.read instanceof Function is true
PASS Clipboard.prototype.write instanceof Function is true
PASS Clipboard() threw exception TypeError: Illegal constructor.
PASS new Clipboard() threw exception TypeError: Illegal constructor.
PASS Clipboard.toString() is "function Clipboard() {\n    [native code]\n}"
PASS navigator.clipboard.toString() is "[object Clipboard]"
PASS navigator.clipboard.writeText('foo') instanceof Promise is true
PASS navigator.clipboard.write([ ]) instanceof Promise is true
PASS navigator.clipboard.read() instanceof Promise is true
PASS navigator.clipboard.readText() instanceof Promise is true
PASS navigator.clipboard.write() rejected with TypeError: Not enough arguments
PASS navigator.clipboard.writeText() rejected with TypeError: Not enough arguments
PASS navigator.clipboard.write('foo') rejected with TypeError: Value is not a sequence
PASS navigator.clipboard.write([1, 2, 3]) rejected with TypeError: Type error
PASS navigator.clipboard.write(new ClipboardItem({ })) rejected with TypeError: Type error

Testing ClipboardItem:
PASS ClipboardItem instanceof Function is true
PASS typeof ClipboardItem is "function"
PASS ClipboardItem.prototype.getType instanceof Function is true
PASS ClipboardItem() threw exception TypeError: Constructor requires 'new' operator.
PASS new ClipboardItem() threw exception TypeError: Not enough arguments.
PASS new ClipboardItem('foo') threw exception TypeError: Type error.
PASS new ClipboardItem({ }) instanceof ClipboardItem is true
PASS Object.getPrototypeOf(new ClipboardItem({ })) === ClipboardItem.prototype is true
PASS new ClipboardItem({ }).types instanceof Array is true
PASS ClipboardItem.toString() is "function ClipboardItem() {\n    [native code]\n}"
PASS new ClipboardItem({ }).toString() is "[object ClipboardItem]"
PASS new ClipboardItem({ }, { foo: 'attachment' }).presentationStyle is "unspecified"
PASS new ClipboardItem({ }, { presentationStyle: 'AttaCHmenT' }).presentationStyle threw exception TypeError: Type error.
PASS new ClipboardItem({ }, { presentationStyle: 'unspecified' }).presentationStyle is "unspecified"
PASS new ClipboardItem({ }, { presentationStyle: 'attachment' }).presentationStyle is "attachment"
PASS new ClipboardItem({ }, { presentationStyle: 'inline' }).presentationStyle is "inline"
PASS new ClipboardItem({ }, 'inline') threw exception TypeError: Type error.
PASS successfullyParsed is true

TEST COMPLETE

