diff options
Diffstat (limited to '')
-rw-r--r-- | widget/tests/test_clipboard.xhtml | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/widget/tests/test_clipboard.xhtml b/widget/tests/test_clipboard.xhtml new file mode 100644 index 0000000000..9d1afe2432 --- /dev/null +++ b/widget/tests/test_clipboard.xhtml @@ -0,0 +1,111 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=948065 +--> +<window title="Mozilla Bug 948065" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> + <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/> + <script type="application/javascript" src="clipboard_helper.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[ + + function getLoadContext() { + return window.docShell.QueryInterface(Ci.nsILoadContext); + } + + // Get clipboard data to paste. + function paste(clipboard) { + let trans = Cc['@mozilla.org/widget/transferable;1'] + .createInstance(Ci.nsITransferable); + trans.init(getLoadContext()); + trans.addDataFlavor("text/plain"); + clipboard.getData(trans, Ci.nsIClipboard.kGlobalClipboard); + let str = {}; + try { + trans.getTransferData('text/plain', str); + } catch (e) { + str = ''; + } + if (str) { + str = str.value.QueryInterface(Ci.nsISupportsString); + if (str) { + str = str.data; + } + } + return str; + } + + add_setup(function init() { + cleanupAllClipboard(); + }); + + /* Test for bug 948065 */ + add_task(function test_copy() { + // Test copy. + const data = "random number: " + Math.random(); + let helper = Cc['@mozilla.org/widget/clipboardhelper;1'] + .getService(Ci.nsIClipboardHelper); + helper.copyString(data); + is(paste(Services.clipboard), data, 'Data was successfully copied.'); + + Services.clipboard.emptyClipboard(Ci.nsIClipboard.kGlobalClipboard); + is(paste(Services.clipboard), '', 'Data was successfully cleared.'); + + cleanupAllClipboard(); + }); + + /* Tests for bug 1834073 */ + clipboardTypes.forEach(function(clipboardType) { + if (clipboard.isClipboardTypeSupported(clipboardType)) { + add_task(function test_clipboard_apis() { + info(`Test clipboard apis for type ${clipboardType}`); + + // Set clipboard data + let str; + try { + str = writeRandomStringToClipboard('text/plain', clipboardType) + } catch(e) { + ok(false, `setData should not throw error for clipboard type ${clipboardType}`); + } + + // Test hasDataMatchingFlavors + try { + // We only support the set operation on kSelectionCache type, see + // bug 1835059. + is(clipboard.hasDataMatchingFlavors(['text/plain'], clipboardType), + clipboardType != clipboard.kSelectionCache, + `Test hasDataMatchingFlavors for clipboard type ${clipboardType}`); + } catch(e) { + ok(false, `hasDataMatchingFlavors should not throw error for clipboard type ${clipboardType}`); + } + + // Test getData + let isThrow = false; + try { + is(getClipboardData('text/plain', clipboardType), str, + `Test getData for clipboard type ${clipboardType}`); + } catch(e) { + isThrow = true; + } + // We only support the set operation on kSelectionCache type, see + // bug 1835059. + is(isThrow, clipboardType == clipboard.kSelectionCache, + `Test if getData throw an error for clipboard type ${clipboardType}`); + }); + } + }); + + ]]> + </script> +</window> |