diff options
Diffstat (limited to 'testing/web-platform/tests/html/editing/dnd/cross-document')
5 files changed, 228 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/editing/dnd/cross-document/001-1.html b/testing/web-platform/tests/html/editing/dnd/cross-document/001-1.html new file mode 100644 index 000000000..8eb79d17f --- /dev/null +++ b/testing/web-platform/tests/html/editing/dnd/cross-document/001-1.html @@ -0,0 +1,47 @@ +<!DOCTYPE html> +<title>drag & drop - cross-document data drop</title> +<style> + body > div { + height: 200px; + width: 200px; + background-color: blue; + } +</style> + +<script> +window.onload = function() { + var blue = document.getElementsByTagName('div')[0], fails = []; + blue.ondragover = blue.ondragenter = function(e) { + e.preventDefault(); + e.dataTransfer.dropEffect = 'copy'; + if( e.dataTransfer.getData('text') ) { + fails[fails.length] = '"' + e.dataTransfer.getData('text') + '" exposed during event ' + e.type; + } + }; + blue.ondrop = function(e) { + e.preventDefault(); + if( !e.dataTransfer.types.length ) { + fails[fails.length] = 'no types found during event drop'; + } + var foundtext = false; + for( var i = 0; i < e.dataTransfer.types.length; i++ ) { + if( e.dataTransfer.types[i] == 'text/plain' ) { + foundtext = true; + break; + } + } + if( !foundtext ) { + fails[fails.length] = 'text/plain type not found during event drop'; + } + if( e.dataTransfer.getData('text') != 'dummy text' ) { + fails[fails.length] = 'getData returned ' + e.dataTransfer.getData('text') + ' instead of "dummy text"'; + } + document.getElementsByTagName('p')[0].innerHTML = fails.length ? ( 'FAIL:<br>' + fails.join('<br>') ) : 'PASS'; + }; +}; +</script> + +<p>Drag the orange square onto the blue square. Fail if this text does not change.</p> +<div></div> + +<noscript><p>Enable JavaScript and reload</p></noscript> diff --git a/testing/web-platform/tests/html/editing/dnd/cross-document/001.html b/testing/web-platform/tests/html/editing/dnd/cross-document/001.html new file mode 100644 index 000000000..02012e86b --- /dev/null +++ b/testing/web-platform/tests/html/editing/dnd/cross-document/001.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<title>drag & drop - simple cross-document data drop</title> +<style> + body > div { + height: 200px; + width: 200px; + background-color: orange; + } +</style> + +<script> +window.onload = function() { + var orange = document.getElementsByTagName('div')[0]; + orange.ondragstart = function(e) { + e.dataTransfer.effectAllowed = 'copy'; + e.dataTransfer.setData('text', 'dummy text'); + }; +}; +</script> + +<div draggable="true"></div> +<p><iframe src="001-1.html" height="300" width="500"></iframe></p> +<noscript><p>Enable JavaScript and reload</p></noscript> diff --git a/testing/web-platform/tests/html/editing/dnd/cross-document/002.html b/testing/web-platform/tests/html/editing/dnd/cross-document/002.html new file mode 100644 index 000000000..7b48d3e16 --- /dev/null +++ b/testing/web-platform/tests/html/editing/dnd/cross-document/002.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<title>drag & drop - cross-domain cross-document data drop</title> +<script src="../resources/crossorigin.js"></script> +<style> + body > div { + height: 200px; + width: 200px; + background-color: orange; + } +</style> + +<script> +window.onload = function() { + var orange = document.getElementsByTagName('div')[0]; + orange.ondragstart = function(e) { + e.dataTransfer.effectAllowed = 'copy'; + e.dataTransfer.setData('text', 'dummy text'); + }; +}; +</script> + +<div draggable="true"></div> +<p><iframe height="300" width="500"></iframe></p> +<script>document.getElementsByTagName("iframe")[0].src = crossOriginUrl("www", "001-1.html"); +<noscript><p>Enable JavaScript and reload</p></noscript> diff --git a/testing/web-platform/tests/html/editing/dnd/cross-document/003-1.html b/testing/web-platform/tests/html/editing/dnd/cross-document/003-1.html new file mode 100644 index 000000000..b1357c10a --- /dev/null +++ b/testing/web-platform/tests/html/editing/dnd/cross-document/003-1.html @@ -0,0 +1,104 @@ +<!DOCTYPE html> +<title>drag & drop - cross-document data drop</title> +<style> + body > div { + height: 200px; + width: 200px; + background-color: blue; + } +</style> + +<script> +window.onload = function() { + var blue = document.getElementsByTagName('div')[0], fails = []; + blue.ondragover = blue.ondragenter = function(e) { + e.preventDefault(); + e.dataTransfer.dropEffect = 'copy'; + if( !parent.evs[e.type] ) { parent.evs[e.type] = {}; } + parent.evs[e.type].dataTransfer = e.dataTransfer; + parent.evs[e.type].items = e.dataTransfer.items; + parent.evs[e.type].types = e.dataTransfer.types; + parent.evs[e.type].files = e.dataTransfer.files; + if( parent.evs[e.type].dataTransfer != e.dataTransfer ) { + fails[fails.length] = '.dataTransfer is not returning the same object during '+e.type; + } + if( !e.dataTransfer.items ) { + fails[fails.length] = '.items is not returning anything during '+e.type; + } else if( parent.evs[e.type].items !== e.dataTransfer.items ) { + fails[fails.length] = '.items is not returning the same object during '+e.type; + } + if( !e.dataTransfer.types ) { + fails[fails.length] = '.types is not returning anything during '+e.type; + } else if( parent.evs[e.type].types !== e.dataTransfer.types ) { + fails[fails.length] = '.types is not returning the same object during '+e.type; + } + if( !e.dataTransfer.files ) { + fails[fails.length] = '.files is not returning anything during '+e.type; + } else if( parent.evs[e.type].files !== e.dataTransfer.files ) { + fails[fails.length] = '.files is not returning the same object during '+e.type; + } + //http://dev.w3.org/html5/spec/dnd.html#datatransfer + //"The * attribute must return a * object associated with the DataTransfer object." + //Note that it is associated with the DataTransfer object, *not* the data store + //http://dev.w3.org/html5/spec/dnd.html#dragevent + //"when a user agent is required to fire a DND event named e at an element, using a particular drag data store... + //Let dataTransfer be a newly created DataTransfer object associated with the given drag data store." + //A new DataTransfer object therefore means a new set of properties, not the same ones as last event + if( parent.evs.dragstart.dataTransfer === e.dataTransfer ) { + fails[fails.length] = '.dataTransfer is returning the same object during '+e.type+' as it did during dragstart'; + } + if( e.dataTransfer.items && parent.evs.dragstart.items === e.dataTransfer.items ) { + fails[fails.length] = '.items is returning the same object during '+e.type+' as it did during dragstart'; + } + if( e.dataTransfer.types && parent.evs.dragstart.types === e.dataTransfer.types ) { + fails[fails.length] = '.types is returning the same object during '+e.type+' as it did during dragstart'; + } + if( e.dataTransfer.files && parent.evs.dragstart.files === e.dataTransfer.files ) { + fails[fails.length] = '.files is returning the same object during '+e.type+' as it did during dragstart'; + } + }; + blue.ondrop = function(e) { + parent.evs[e.type] = {}; + parent.evs[e.type].dataTransfer = e.dataTransfer; + parent.evs[e.type].items = e.dataTransfer.items; + parent.evs[e.type].types = e.dataTransfer.types; + parent.evs[e.type].files = e.dataTransfer.files; + if( parent.evs[e.type].dataTransfer !== e.dataTransfer ) { + fails[fails.length] = '.dataTransfer is not returning the same object during '+e.type; + } + if( !e.dataTransfer.items ) { + fails[fails.length] = '.items is not returning anything during '+e.type; + } else if( parent.evs[e.type].items !== e.dataTransfer.items ) { + fails[fails.length] = '.items is not returning the same object during '+e.type; + } + if( !e.dataTransfer.types ) { + fails[fails.length] = '.types is not returning anything during '+e.type; + } else if( parent.evs[e.type].types !== e.dataTransfer.types ) { + fails[fails.length] = '.types is not returning the same object during '+e.type; + } + if( !e.dataTransfer.files ) { + fails[fails.length] = '.files is not returning anything during '+e.type; + } else if( parent.evs[e.type].files !== e.dataTransfer.files ) { + fails[fails.length] = '.files is not returning the same object during '+e.type; + } + if( parent.evs.dragstart.dataTransfer === e.dataTransfer ) { + fails[fails.length] = '.dataTransfer is returning the same object during '+e.type+' as it did during dragstart'; + } + if( e.dataTransfer.items && parent.evs.dragstart.items === e.dataTransfer.items ) { + fails[fails.length] = '.items is returning the same object during '+e.type+' as it did during dragstart'; + } + if( e.dataTransfer.types && parent.evs.dragstart.types === e.dataTransfer.types ) { + fails[fails.length] = '.types is returning the same object during '+e.type+' as it did during dragstart'; + } + if( e.dataTransfer.files && parent.evs.dragstart.files === e.dataTransfer.files ) { + fails[fails.length] = '.files is returning the same object during '+e.type+' as it did during dragstart'; + } + document.getElementsByTagName('p')[0].innerHTML = fails.length ? ( 'FAIL:<br>' + fails.join('<br>') ) : 'PASS'; + }; +}; +</script> + +<p>Drag the orange square onto the blue square. Fail if this text does not change.</p> +<div></div> + +<noscript><p>Enable JavaScript and reload</p></noscript> diff --git a/testing/web-platform/tests/html/editing/dnd/cross-document/003.html b/testing/web-platform/tests/html/editing/dnd/cross-document/003.html new file mode 100644 index 000000000..6b7c4d074 --- /dev/null +++ b/testing/web-platform/tests/html/editing/dnd/cross-document/003.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<title>drag & drop - cross-document variable retention within event handlers</title> +<style> + body > div { + height: 200px; + width: 200px; + background-color: orange; + } +</style> + +<script> +var evs = {}; +window.onload = function() { + var orange = document.getElementsByTagName('div')[0]; + orange.ondragstart = function(e) { + e.dataTransfer.effectAllowed = 'copy'; + e.dataTransfer.setData('text', 'dummy text'); + evs[e.type] = {}; + evs[e.type].dataTransfer = e.dataTransfer; + evs[e.type].items = e.dataTransfer.items; + evs[e.type].types = e.dataTransfer.types; + evs[e.type].files = e.dataTransfer.files; + }; +}; +</script> + +<div draggable="true"></div> +<p><iframe src="003-1.html" height="300" width="500"></iframe></p> +<noscript><p>Enable JavaScript and reload</p></noscript> |