123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- <html><head>
- <title>Test for bug 891247</title>
- <link rel="stylesheet" href="/tests/SimpleTest/test.css">
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
- <script class="testbody" type="application/javascript">
- function ImageTester() {
- var counter = 0;
- var images = [];
- var that = this;
- this.add = function(aFile) {
- images.push(aFile);
- };
- this.test = function() {
- for (var i = 0; i < images.length; i++) {
- testImageSize(images[i]);
- }
- };
- this.returned = function() {
- counter++;
- info("returned=" + counter + " images.length=" + images.length);
- if (counter == images.length) {
- info("test finish");
- SimpleTest.finish();
- }
- };
- function testImageSize(aFile) {
- var source = window.URL.createObjectURL(aFile);
- var image = new Image();
- image.src = source;
- var imageTester = that;
- image.onload = function() {
- is(this.width, 62, "Check generated image width");
- is(this.height, 71, "Check generated image height");
- if (aFile.type == "image/gif") {
- // this test fails for image/jpeg and image/png because the images
- // generated are slightly different
- testImageCanvas(image);
- }
- imageTester.returned();
- }
- document.body.appendChild(image);
- };
- function testImageCanvas(aImage) {
- var canvas = drawToCanvas(aImage);
- var refImage = document.getElementById('image');
- var refCanvas = drawToCanvas(refImage);
- is(canvas.toDataURL(), refCanvas.toDataURL(), "Image should map pixel-by-pixel");
- }
- function drawToCanvas(aImage) {
- var canvas = document.createElement("CANVAS");
- document.body.appendChild(canvas);
- canvas.width = aImage.width;
- canvas.height = aImage.height;
- canvas.getContext('2d').drawImage(aImage, 0, 0);
- return canvas;
- }
- }
- function copyImage(aImageId) {
- // selection of the node
- var node = document.getElementById(aImageId);
- var webnav = SpecialPowers.wrap(window)
- .QueryInterface(SpecialPowers.Ci.nsIInterfaceRequestor)
- .getInterface(SpecialPowers.Ci.nsIWebNavigation)
- var docShell = webnav.QueryInterface(SpecialPowers.Ci.nsIDocShell);
- // let's copy the node
- var documentViewer = docShell.contentViewer
- .QueryInterface(SpecialPowers.Ci.nsIContentViewerEdit);
- documentViewer.setCommandNode(node);
- documentViewer.copyImage(documentViewer.COPY_IMAGE_ALL);
- }
- function doTest() {
- SimpleTest.waitForExplicitFinish();
- copyImage('image');
- //--------- now check the content of the clipboard
- var clipboard = SpecialPowers.Cc["@mozilla.org/widget/clipboard;1"]
- .getService(SpecialPowers.Ci.nsIClipboard);
- // does the clipboard contain text/unicode data ?
- ok(clipboard.hasDataMatchingFlavors(["text/unicode"], 1, clipboard.kGlobalClipboard),
- "clipboard contains unicode text");
- // does the clipboard contain text/html data ?
- ok(clipboard.hasDataMatchingFlavors(["text/html"], 1, clipboard.kGlobalClipboard),
- "clipboard contains html text");
- // does the clipboard contain image data ?
- ok(clipboard.hasDataMatchingFlavors(["image/png"], 1, clipboard.kGlobalClipboard),
- "clipboard contains image");
- window.addEventListener("paste", onPaste);
- var textarea = SpecialPowers.wrap(document.getElementById('textarea'));
- textarea.focus();
- textarea.editor.paste(clipboard.kGlobalClipboard);
- }
- function onPaste(e) {
- var imageTester = new ImageTester;
- testFiles(e, imageTester);
- testItems(e, imageTester);
- imageTester.test();
- }
- function testItems(e, imageTester) {
- var items = e.clipboardData.items;
- is(items, e.clipboardData.items,
- "Getting @items twice should return the same object");
- var haveFiles = false;
- ok(items instanceof DataTransferItemList, "@items implements DataTransferItemList");
- ok(items.length > 0, "@items is not empty");
- for (var i = 0; i < items.length; i++) {
- var item = items[i];
- ok(item instanceof DataTransferItem, "each element of @items must implement DataTransferItem");
- if (item.kind == "file") {
- var file = item.getAsFile();
- ok(file instanceof File, ".getAsFile() returns a File object");
- ok(file.size > 0, "Files shouldn't have size 0");
- imageTester.add(file);
- }
- }
- }
- function testFiles(e, imageTester) {
- var files = e.clipboardData.files;
- is(files, e.clipboardData.files,
- "Getting the files array twice should return the same array");
- ok(files.length > 0, "There should be at least one file in the clipboard");
- for (var i = 0; i < files.length; i++) {
- var file = files[i];
- ok(file instanceof File, ".files should contain only File objects");
- ok(file.size > 0, "This file shouldn't have size 0");
- if (file.name == "image.png") {
- is(file.type, "image/png", "This file should be a image/png");
- } else if (file.name == "image.jpeg") {
- is(file.type, "image/jpeg", "This file should be a image/jpeg");
- } else if (file.name == "image.gif") {
- is(file.type, "image/gif", "This file should be a image/gif");
- } else {
- info("file.name=" + file.name);
- ok(false, "Unexpected file name");
- }
- testSlice(file);
- imageTester.add(file);
- // Adding the same image again so we can test concurrency
- imageTester.add(file);
- }
- }
- function testSlice(aFile) {
- var blob = aFile.slice();
- ok(blob instanceof Blob, ".slice returns a blob");
- is(blob.size, aFile.size, "the blob has the same size");
- blob = aFile.slice(123123);
- is(blob.size, 0, ".slice overflow check");
- blob = aFile.slice(123, 123141);
- is(blob.size, aFile.size - 123, ".slice @size check");
- blob = aFile.slice(123, 12);
- is(blob.size, 0, ".slice @size check 2");
- blob = aFile.slice(124, 134, "image/png");
- is(blob.size, 10, ".slice @size check 3");
- is(blob.type, "image/png", ".slice @type check");
- }
- </script>
- <body onload="doTest();">
- <img id="image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD4AAABHCA
- IAAADQjmMaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3goUAwAgSAORBwAAABl0RVh0Q29
- tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAABPSURBVGje7c4BDQAACAOga//OmuMbJGAurTbq
- 6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6s31B0IqAY2/t
- QVCAAAAAElFTkSuQmCC" />
- <form>
- <textarea id="textarea"></textarea>
- </form>
- </body>
- </html>
|