widget/tests/test_bug466599.xul
author Makoto Kato <m_kato@ga2.so-net.ne.jp>
Mon, 20 Feb 2017 14:22:21 +0900
changeset 343841 b10f3f8d8d7776b38308825738db5f6a4b10fc54
parent 331391 39cce2d50c54e4cc156bdf69604e7d50863cee6e
child 402638 b38d59f71915f78922b46a7c7bc65a48488c45f1
permissions -rw-r--r--
Bug 1225696 - Part 2. Use DateTimeFormat instead of dateFormat.properties. r=mak MozReview-Commit-ID: 9ufUVeppwHk

<?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=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 += {'<':'&lt;', '>':'&gt;', '&':'&amp;', '"':'&quot;'}[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>