diff options
Diffstat (limited to 'widget/tests/test_bug466599.xul')
-rw-r--r-- | widget/tests/test_bug466599.xul | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/widget/tests/test_bug466599.xul b/widget/tests/test_bug466599.xul new file mode 100644 index 000000000..a70f47add --- /dev/null +++ b/widget/tests/test_bug466599.xul @@ -0,0 +1,109 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<?xml-stylesheet type="text/css" href="/tests/SimpleTest/test.css"?> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=466599 +--> +<window title="Mozilla Bug 466599" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + onload="initAndRunTests()"> + <script type="application/javascript" + src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/> + + <!-- test results are displayed in the html:body --> + <body xmlns="http://www.w3.org/1999/xhtml"> + <p id="display"></p> + <div id="content" style="display: none"></div> + <pre id="test"></pre> + </body> + + <!-- test code goes here --> + <script class="testbody" type="application/javascript"> + <![CDATA[ + + /** Test for Bug 466599 **/ + +function getLoadContext() { + const Ci = Components.interfaces; + return window.QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIWebNavigation) + .QueryInterface(Ci.nsILoadContext); +} + +function copyToClipboard(txt) +{ + var clipid = Components.interfaces.nsIClipboard; + var clip = + Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(clipid); + if (!clip) + return false; + var trans = + Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable); + if (!trans) + return false; + trans.init(getLoadContext()); + trans.addDataFlavor('text/html'); + var str = + Components.classes['@mozilla.org/supports-string;1'].createInstance(Components.interfaces.nsISupportsString); + var copytext = txt; + str.data = copytext; + trans.setTransferData("text/html",str,copytext.length*2); + if (!clip) + return false; + clip.setData(trans,null,clipid.kGlobalClipboard); + return true; +} + +function readFromClipboard() +{ + var clipid = Components.interfaces.nsIClipboard; + var clip = + Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(clipid); + if (!clip) + return; + var trans = + Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable); + if (!trans) + return; + trans.init(getLoadContext()); + trans.addDataFlavor('text/html'); + clip.getData(trans,clipid.kGlobalClipboard); + var str = new Object(); + var strLength = new Object(); + trans.getTransferData("text/html",str,strLength); + if (str) + str = str.value.QueryInterface(Components.interfaces.nsISupportsString); + if (str) + pastetext = str.data.substring(0,strLength.value / 2); + return pastetext; +} + +function encodeHtmlEntities(s) +{ + var result = ''; + for (var i = 0; i < s.length; i++) { + var c = s.charAt(i); + result += {'<':'<', '>':'>', '&':'&', '"':'"'}[c] || c; + } + return result; +} + +function initAndRunTests() +{ + var source = '<p>Lorem ipsum</p>'; + var expect = new RegExp('<html>.*charset=utf-8.*' + source + '.*</html>', 'im'); + + var result = copyToClipboard(source); + ok(result, "copied HTML data to system pasteboard"); + + result = readFromClipboard(); + ok(expect.test(result), "data on system pasteboard is wrapped with charset metadata"); + + $("display").innerHTML = + '<em>source:</em> <pre>' + encodeHtmlEntities(source) + '</pre><br/>' + + '<em>result:</em> <pre>' + encodeHtmlEntities(result) + '</pre>'; +} + + ]]> + </script> +</window> |