87 lines
2.6 KiB
HTML
87 lines
2.6 KiB
HTML
<!doctype html>
|
|
<meta charset="utf-8">
|
|
<title>Clipboard: DataTransfer File manual test</title>
|
|
<link rel="help" href="https://w3c.github.io/clipboard-apis/#to-fire-a-clipboard-event">
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<style>
|
|
#pastewrapper {
|
|
display: block;
|
|
width: 400px;
|
|
height: 200px;
|
|
position: relative;
|
|
padding: 50px 0 0 100px;
|
|
}
|
|
#pastezone {
|
|
display: block;
|
|
border: 1px solid black;
|
|
width: 200px;
|
|
height: 100px;
|
|
}
|
|
</style>
|
|
<p>
|
|
Please download <a download href="resources/copied-file.txt">this file</a>,
|
|
and copy and paste it into the box below.
|
|
</p>
|
|
|
|
<div id="pastewrapper">
|
|
<div id="pastezone">
|
|
Paste Here
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
'use strict';
|
|
|
|
const pasteWrapper = document.querySelector('#pastewrapper');
|
|
const pasteZone = document.querySelector('#pastezone');
|
|
|
|
const pastePromise = new Promise((resolve, reject) => {
|
|
pasteZone.onpaste = event => {
|
|
event.preventDefault();
|
|
|
|
// Copy the information out of the DataTransfer instance before it is
|
|
// neutered when the event handler exits.
|
|
const dataTransfer = event.clipboardData;
|
|
const items = Array.from(dataTransfer.items).map(item => {
|
|
return {kind: item.kind, type: item.type, file: item.getAsFile() };
|
|
});
|
|
resolve({ types: dataTransfer.types, files: dataTransfer.files, items });
|
|
};
|
|
});
|
|
|
|
promise_test(async () => {
|
|
const dataTransfer = await pastePromise;
|
|
assert_true(dataTransfer.types.includes('Files'));
|
|
}, 'DataTransfer.types in paste file');
|
|
|
|
promise_test(async () => {
|
|
const dataTransfer = await pastePromise;
|
|
assert_equals(
|
|
dataTransfer.files.length, 1,
|
|
'DataTransfer.files should have one element');
|
|
const file = dataTransfer.files[0];
|
|
assert_true(
|
|
file instanceof File,
|
|
'DataTransfer.files[0] should be a File instance');
|
|
assert_equals(file.name, 'copied-file.txt');
|
|
assert_equals(file.type, 'text/plain');
|
|
assert_equals(file.size, 21);
|
|
assert_equals(await file.text(), 'copied-file-contents\n');
|
|
}, 'DataTransfer.files in paste');
|
|
|
|
promise_test(async () => {
|
|
const dataTransfer = await pastePromise;
|
|
const items = dataTransfer.items.filter(i => i.kind === 'file');
|
|
assert_equals(items.length, 1,
|
|
'DataTransfer.items[kind="file"] should have 1 element');
|
|
const item = items[0];
|
|
assert_true(
|
|
item.file instanceof File,
|
|
'DataTransfer.items[0] should be a File instance');
|
|
assert_equals(item.file.name, 'copied-file.txt');
|
|
assert_equals(item.file.type, 'text/plain');
|
|
assert_equals(item.file.size, 21);
|
|
assert_equals(await item.file.text(), 'copied-file-contents\n');
|
|
}, 'DataTransfer.items in paste');
|
|
</script>
|