mirror of
https://github.com/servo/servo
synced 2026-04-29 19:07:38 +02:00
339 lines
12 KiB
HTML
339 lines
12 KiB
HTML
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<title>Synthetic events with real data store must inherit protection status from real events</title>
|
|
<style type="text/css">
|
|
blockquote { height: 100px; width: 100px; background: orange; margin: 0; padding: 0; float: left; }
|
|
blockquote + blockquote { background: blue; }
|
|
blockquote + blockquote + blockquote { background: fuchsia; }
|
|
blockquote + div { clear: left; }
|
|
</style>
|
|
<script type="text/javascript" src="/resources/testharness.js"></script>
|
|
<script type="text/javascript">
|
|
setup(function () {},{explicit_done:true,explicit_timeout:true});
|
|
window.onload = function () {
|
|
|
|
var orange = document.getElementsByTagName('blockquote')[0],
|
|
blue = document.getElementsByTagName('blockquote')[1],
|
|
fuchsia = document.getElementsByTagName('blockquote')[2],
|
|
evtdone = {};
|
|
|
|
orange.ondragstart = function (e) {
|
|
evtdone[e.type] = true;
|
|
e.dataTransfer.effectAllowed = 'copy';
|
|
|
|
var t = async_test(e.type+' should share its data with the synthetic event');
|
|
blue.ondragstart = function (e) {
|
|
t.step(function() {
|
|
assert_equals( e.dataTransfer.getData('text'), 'dragstart real data', 'step 1' );
|
|
e.dataTransfer.setData('text','dragstart-dragstart synthetic data');
|
|
assert_equals( e.dataTransfer.getData('text'), 'dragstart-dragstart synthetic data', 'step 2' );
|
|
});
|
|
};
|
|
t.step(function() {
|
|
var evt = new DragEvent('dragstart', {dataTransfer:e.dataTransfer});
|
|
e.dataTransfer.setData('text','dragstart real data'); //changing in between steps, just to make sure it uses the underlying data store, not a temporary clone
|
|
blue.dispatchEvent(evt);
|
|
});
|
|
t.done();
|
|
|
|
test(function() {
|
|
assert_equals( e.dataTransfer.getData('text'), 'dragstart-dragstart synthetic data' );
|
|
}, e.type+' should see the data from the synthetic event' );
|
|
|
|
var t2 = async_test(e.type+' should share its protection status with the synthetic event');
|
|
blue.ondrag = function (e) {
|
|
t2.step(function() {
|
|
e.dataTransfer.setData('text','dragstart-drag synthetic data');
|
|
assert_equals( e.dataTransfer.getData('text'), 'dragstart-drag synthetic data' );
|
|
});
|
|
};
|
|
t2.step(function() {
|
|
var evt = new DragEvent('drag', {dataTransfer:e.dataTransfer});
|
|
blue.dispatchEvent(evt);
|
|
});
|
|
t2.done();
|
|
|
|
var t3 = async_test(e.type+' should share its protection status with the nested synthetic event');
|
|
blue.ondrag = function (e) {
|
|
blue.ondragend = function (e) {
|
|
t3.step(function() {
|
|
assert_equals( e.dataTransfer.getData('text'), 'dragstart-drag synthetic data', 'step1' );
|
|
e.dataTransfer.setData('text','dragstart-drag-dragend synthetic data');
|
|
assert_equals( e.dataTransfer.getData('text'), 'dragstart-drag-dragend synthetic data', 'step2' );
|
|
});
|
|
};
|
|
t3.step(function() {
|
|
var evt = new DragEvent('dragend', {dataTransfer:e.dataTransfer});
|
|
blue.dispatchEvent(evt);
|
|
});
|
|
};
|
|
t3.step(function() {
|
|
var evt = new DragEvent('drag', {dataTransfer:e.dataTransfer});
|
|
blue.dispatchEvent(evt);
|
|
});
|
|
t3.done();
|
|
|
|
test(function() {
|
|
assert_equals( e.dataTransfer.getData('text'), 'dragstart-drag-dragend synthetic data' );
|
|
}, e.type+' should see the data from the nested synthetic event' );
|
|
};
|
|
|
|
blue.ondragenter = blue.ondragover = function (e) {
|
|
e.preventDefault();
|
|
};
|
|
orange.ondrag = blue.ondragleave = function (e) {
|
|
if( evtdone[e.type] ) { return; }
|
|
evtdone[e.type] = true;
|
|
var evtype = e.type;
|
|
|
|
var t = async_test(e.type+' should share its data with the synthetic event');
|
|
blue.ondragstart = function (e) {
|
|
t.step(function() {
|
|
assert_true( e.dataTransfer.items.length > 0, 'items.length' );
|
|
});
|
|
};
|
|
t.step(function() {
|
|
var evt = new DragEvent('dragstart', {dataTransfer:e.dataTransfer});
|
|
blue.dispatchEvent(evt);
|
|
});
|
|
t.done();
|
|
|
|
var t2 = async_test(e.type+' should share its protection status with the synthetic event');
|
|
blue.ondragstart = function (e) {
|
|
t2.step(function() {
|
|
assert_equals( e.dataTransfer.getData('text'), '', 'step 1' );
|
|
e.dataTransfer.setData('text',evtype+'-dragstart synthetic data');
|
|
assert_equals( e.dataTransfer.getData('text'), '', 'step 2' );
|
|
});
|
|
};
|
|
t2.step(function() {
|
|
var evt = new DragEvent('dragstart', {dataTransfer:e.dataTransfer});
|
|
blue.dispatchEvent(evt);
|
|
});
|
|
t2.done();
|
|
|
|
test(function() {
|
|
assert_equals( e.dataTransfer.getData('text'), '' );
|
|
}, e.type+' protection status should not be modified by the synthetic event' );
|
|
|
|
var t3 = async_test(e.type+' should share its protection status with the nested synthetic event');
|
|
blue.ondragstart = function (e) {
|
|
var div = document.createElement('div');
|
|
div.ondragstart = function (e) {
|
|
t3.step(function() {
|
|
assert_equals( e.dataTransfer.getData('text'), '', 'step1' );
|
|
e.dataTransfer.setData('text',evtype+'dragstart-dragstart synthetic data');
|
|
assert_equals( e.dataTransfer.getData('text'), '', 'step2' );
|
|
});
|
|
};
|
|
t3.step(function() {
|
|
var evt = new DragEvent('dragend', {dataTransfer:e.dataTransfer});
|
|
div.dispatchEvent(evt);
|
|
});
|
|
};
|
|
t3.step(function() {
|
|
var evt = new DragEvent('drag', {dataTransfer:e.dataTransfer});
|
|
blue.dispatchEvent(evt);
|
|
});
|
|
t3.done();
|
|
};
|
|
|
|
fuchsia.ondragenter = fuchsia.ondragover = function (e) {
|
|
e.preventDefault();
|
|
if( evtdone[e.type] ) { return; }
|
|
evtdone[e.type] = true;
|
|
var evtype = e.type;
|
|
|
|
var t = async_test(e.type+' should share its data with the synthetic event');
|
|
blue.ondragstart = function (e) {
|
|
t.step(function() {
|
|
assert_true( e.dataTransfer.items.length > 0, 'items.length' );
|
|
});
|
|
};
|
|
t.step(function() {
|
|
var evt = new DragEvent('dragstart', {dataTransfer:e.dataTransfer});
|
|
blue.dispatchEvent(evt);
|
|
});
|
|
t.done();
|
|
|
|
var t2 = async_test(e.type+' should share its protection status with the synthetic event');
|
|
blue.ondragstart = function (e) {
|
|
t2.step(function() {
|
|
assert_equals( e.dataTransfer.getData('text'), '', 'step 1' );
|
|
e.dataTransfer.setData('text',evtype+'-dragstart synthetic data');
|
|
assert_equals( e.dataTransfer.getData('text'), '', 'step 2' );
|
|
});
|
|
};
|
|
t2.step(function() {
|
|
var evt = new DragEvent('dragstart', {dataTransfer:e.dataTransfer});
|
|
blue.dispatchEvent(evt);
|
|
});
|
|
t2.done();
|
|
|
|
test(function() {
|
|
assert_equals( e.dataTransfer.getData('text'), '' );
|
|
}, e.type+' protection status should not be modified by the synthetic event' );
|
|
|
|
var t3 = async_test(e.type+' should share its protection status with the nested synthetic event');
|
|
blue.ondragstart = function (e) {
|
|
var div = document.createElement('div');
|
|
div.ondragstart = function (e) {
|
|
t3.step(function() {
|
|
assert_equals( e.dataTransfer.getData('text'), '', 'step1' );
|
|
e.dataTransfer.setData('text',evtype+'dragstart-dragstart synthetic data');
|
|
assert_equals( e.dataTransfer.getData('text'), '', 'step2' );
|
|
});
|
|
};
|
|
t3.step(function() {
|
|
var evt = new DragEvent('dragend', {dataTransfer:e.dataTransfer});
|
|
div.dispatchEvent(evt);
|
|
});
|
|
};
|
|
t3.step(function() {
|
|
var evt = new DragEvent('drag', {dataTransfer:e.dataTransfer});
|
|
blue.dispatchEvent(evt);
|
|
});
|
|
t3.done();
|
|
};
|
|
|
|
fuchsia.ondrop = function (e) {
|
|
e.preventDefault();
|
|
if( evtdone[e.type] ) { return; }
|
|
evtdone[e.type] = true;
|
|
var evtype = e.type;
|
|
|
|
var t = async_test(e.type+' should share its data with the synthetic event');
|
|
blue.ondragstart = function (e) {
|
|
t.step(function() {
|
|
assert_equals( e.dataTransfer.getData('text'), 'dragstart-drag-dragend synthetic data' );
|
|
});
|
|
};
|
|
t.step(function() {
|
|
var evt = new DragEvent('dragstart', {dataTransfer:e.dataTransfer});
|
|
blue.dispatchEvent(evt);
|
|
});
|
|
t.done();
|
|
|
|
var t2 = async_test(e.type+' should share its protection status with the synthetic event');
|
|
blue.ondragstart = function (e) {
|
|
t2.step(function() {
|
|
assert_equals( e.dataTransfer.getData('text'), 'dragstart-drag-dragend synthetic data', 'step 1' );
|
|
e.dataTransfer.setData('text',evtype+'-dragstart synthetic data');
|
|
assert_equals( e.dataTransfer.getData('text'), 'dragstart-drag-dragend synthetic data', 'step 2' );
|
|
});
|
|
};
|
|
t2.step(function() {
|
|
var evt = new DragEvent('dragstart', {dataTransfer:e.dataTransfer});
|
|
blue.dispatchEvent(evt);
|
|
});
|
|
t2.done();
|
|
|
|
test(function() {
|
|
e.dataTransfer.setData('text','drop synthetic data');
|
|
assert_equals( e.dataTransfer.getData('text'), 'dragstart-drag-dragend synthetic data' );
|
|
}, e.type+' protection status should not be modified by the synthetic event' );
|
|
|
|
var t3 = async_test(e.type+' should share its protection status with the nested synthetic event');
|
|
blue.ondragstart = function (e) {
|
|
var div = document.createElement('div');
|
|
div.ondragstart = function (e) {
|
|
t3.step(function() {
|
|
assert_equals( e.dataTransfer.getData('text'), 'dragstart-drag-dragend synthetic data', 'step 1' );
|
|
e.dataTransfer.setData('text',evtype+'dragstart-dragstart synthetic data');
|
|
assert_equals( e.dataTransfer.getData('text'), 'dragstart-drag-dragend synthetic data', 'step 2' );
|
|
});
|
|
};
|
|
t3.step(function() {
|
|
var evt = new DragEvent('dragend', {dataTransfer:e.dataTransfer});
|
|
div.dispatchEvent(evt);
|
|
});
|
|
};
|
|
t3.step(function() {
|
|
var evt = new DragEvent('drag', {dataTransfer:e.dataTransfer});
|
|
blue.dispatchEvent(evt);
|
|
});
|
|
t3.done();
|
|
};
|
|
|
|
orange.ondragend = function (e) {
|
|
if( evtdone[e.type] ) { return; }
|
|
evtdone[e.type] = true;
|
|
var evtype = e.type;
|
|
|
|
var t = async_test(e.type+' should share its data with the synthetic event');
|
|
blue.ondragstart = function (e) {
|
|
t.step(function() {
|
|
assert_true( e.dataTransfer.items.length > 0, 'items.length' );
|
|
});
|
|
};
|
|
t.step(function() {
|
|
var evt = new DragEvent('dragstart', {dataTransfer:e.dataTransfer});
|
|
blue.dispatchEvent(evt);
|
|
});
|
|
t.done();
|
|
|
|
var t2 = async_test(e.type+' should share its protection status with the synthetic event');
|
|
blue.ondragstart = function (e) {
|
|
t2.step(function() {
|
|
assert_equals( e.dataTransfer.getData('text'), '', 'step 1' );
|
|
e.dataTransfer.setData('text',evtype+'-dragstart synthetic data');
|
|
assert_equals( e.dataTransfer.getData('text'), '', 'step 2' );
|
|
});
|
|
};
|
|
t2.step(function() {
|
|
var evt = new DragEvent('dragstart', {dataTransfer:e.dataTransfer});
|
|
blue.dispatchEvent(evt);
|
|
});
|
|
t2.done();
|
|
|
|
test(function() {
|
|
assert_equals( e.dataTransfer.getData('text'), '' );
|
|
}, e.type+' protection status should not be modified by the synthetic event' );
|
|
|
|
var t3 = async_test(e.type+' should share its protection status with the nested synthetic event');
|
|
blue.ondragstart = function (e) {
|
|
var div = document.createElement('div');
|
|
div.ondragstart = function (e) {
|
|
t3.step(function() {
|
|
assert_equals( e.dataTransfer.getData('text'), '', 'step1' );
|
|
e.dataTransfer.setData('text',evtype+'dragstart-dragstart synthetic data');
|
|
assert_equals( e.dataTransfer.getData('text'), '', 'step2' );
|
|
});
|
|
};
|
|
t3.step(function() {
|
|
var evt = new DragEvent('dragend', {dataTransfer:e.dataTransfer});
|
|
div.dispatchEvent(evt);
|
|
});
|
|
};
|
|
t3.step(function() {
|
|
var evt = new DragEvent('drag', {dataTransfer:e.dataTransfer});
|
|
blue.dispatchEvent(evt);
|
|
});
|
|
t3.done();
|
|
|
|
test(function() {
|
|
var failtxt = '- Reload and try again';
|
|
assert_true( evtdone.dragstart, 'dragstart event was not tested'+failtxt );
|
|
assert_true( evtdone.drag, 'drag event was not tested'+failtxt );
|
|
assert_true( evtdone.dragenter, 'dragenter event was not tested'+failtxt );
|
|
assert_true( evtdone.dragleave, 'dragleave event was not tested'+failtxt );
|
|
assert_true( evtdone.dragover, 'dragover event was not tested'+failtxt );
|
|
assert_true( evtdone.drop, 'drop event was not tested'+failtxt );
|
|
assert_true( evtdone.dragend, 'dragend event was not tested'+failtxt );
|
|
}, 'all event types must now have been tested' );
|
|
done();
|
|
};
|
|
|
|
};
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<p>Drag the orange square over the blue square then the fuchsia square, then release it.</p>
|
|
<blockquote draggable="true"></blockquote>
|
|
<blockquote></blockquote>
|
|
<blockquote></blockquote>
|
|
<div id="log"></div>
|
|
<noscript><p>Enable JavaScript and reload</p></noscript>
|
|
</body>
|
|
</html> |