From 932628981ff555aec490a2c287ccbf96c0af4758 Mon Sep 17 00:00:00 2001 From: Artur Adib Date: Thu, 24 May 2012 12:22:46 -0400 Subject: [PATCH 1/3] updating tests --- test/mozcentral/Makefile.in | 1 + test/mozcentral/browser_pdfjs_main.js | 23 +--------- test/mozcentral/browser_pdfjs_zoom.js | 63 +++++++++++++++++++++++++++ test/mozcentral/head.js | 11 ++--- 4 files changed, 72 insertions(+), 26 deletions(-) create mode 100644 test/mozcentral/browser_pdfjs_zoom.js diff --git a/test/mozcentral/Makefile.in b/test/mozcentral/Makefile.in index 8c9face17..fd40574ef 100644 --- a/test/mozcentral/Makefile.in +++ b/test/mozcentral/Makefile.in @@ -14,6 +14,7 @@ include $(topsrcdir)/config/rules.mk _BROWSER_TEST_FILES = \ head.js \ browser_pdfjs_main.js \ + browser_pdfjs_zoom.js \ file_pdfjs_test.pdf \ $(NULL) diff --git a/test/mozcentral/browser_pdfjs_main.js b/test/mozcentral/browser_pdfjs_main.js index d3f5dd646..5f07e6512 100644 --- a/test/mozcentral/browser_pdfjs_main.js +++ b/test/mozcentral/browser_pdfjs_main.js @@ -32,7 +32,7 @@ function test() { ok(outerContainer.classList.contains('sidebarOpen'), 'sidebar opens on click'); // Thumbnails are created asynchronously - wait for them - waitForElement(document, 'canvas#thumbnail2', function(error) { + waitForElement(document, 'canvas#thumbnail2', function(error, thumbnail) { if (error) finish(); @@ -42,7 +42,6 @@ function test() { var pageNumber = document.querySelector('input#pageNumber'); is(parseInt(pageNumber.value), 1, 'initial page is 1'); - var thumbnail = document.querySelector('canvas#thumbnail2'); ok(thumbnail, 'thumbnail2 is available'); if (thumbnail) { thumbnail.click(); @@ -73,25 +72,7 @@ function test() { var viewBookmark = document.querySelector('a#viewBookmark'); viewBookmark.click(); ok(viewBookmark.href.length > 0, 'viewBookmark button has href'); - - // - // Zoom in/out - // - var zoomOut = document.querySelector('button.zoomOut'), - zoomIn = document.querySelector('button.zoomIn'); - - // Zoom in - var oldWidth = document.querySelector('canvas#page1').width; - zoomIn.click(); - var newWidth = document.querySelector('canvas#page1').width; - ok(oldWidth < newWidth, 'zooming in increases page width (old: '+oldWidth+', new: '+newWidth+')'); - - // Zoom out - var oldWidth = document.querySelector('canvas#page1').width; - zoomOut.click(); - var newWidth = document.querySelector('canvas#page1').width; - ok(oldWidth > newWidth, 'zooming out decreases page width (old: '+oldWidth+', new: '+newWidth+')'); - + finish(); }); }, true, true); diff --git a/test/mozcentral/browser_pdfjs_zoom.js b/test/mozcentral/browser_pdfjs_zoom.js new file mode 100644 index 000000000..a6445da2a --- /dev/null +++ b/test/mozcentral/browser_pdfjs_zoom.js @@ -0,0 +1,63 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +const RELATIVE_DIR = "browser/extensions/pdfjs/test/"; +const TESTROOT = "http://example.com/browser/" + RELATIVE_DIR; + +function test() { + waitForExplicitFinish(); + + var tab = gBrowser.addTab(TESTROOT + "file_pdfjs_test.pdf"); + var newTabBrowser = gBrowser.getBrowserForTab(tab); + newTabBrowser.addEventListener("pagechange", function onPageChange() { + newTabBrowser.removeEventListener("pagechange", onPageChange, true); + + var document = newTabBrowser.contentDocument, + window = newTabBrowser.contentWindow; + + // + // Zoom in/out + // + var zoomOut = document.querySelector('button.zoomOut'), + zoomIn = document.querySelector('button.zoomIn'); + + var newWidth, oldWidth; + + // We need to query the DOM every time since zoom in/out operations destroy the canvas element + waitForElement(document, 'canvas#page1', function(error, page1) { + if (error) + finish(); + + oldWidth = page1.width; + zoomIn.click(); + + waitForElement(document, 'canvas#page1', function(error, page1) { + if (error) + finish(); + + newWidth = page1.width; + ok(oldWidth < newWidth, 'zooming in increases page width (old: '+oldWidth+', new: '+newWidth+')'); + + // Zoom out + oldWidth = newWidth; + zoomOut.click(); + + waitForElement(document, 'canvas#page1', function(error, page1) { + if (error) + finish(); + + newWidth = page1.width; + ok(oldWidth > newWidth, 'zooming out decreases page width (old: '+oldWidth+', new: '+newWidth+')'); + + finish(); + }); + }); + }); + + }, true, true); + + registerCleanupFunction(function() { + gBrowser.removeTab(tab); + }); +} diff --git a/test/mozcentral/head.js b/test/mozcentral/head.js index 6ee421b2f..0636ba4e9 100644 --- a/test/mozcentral/head.js +++ b/test/mozcentral/head.js @@ -1,19 +1,20 @@ -// Waits for element 'el' to exist in the DOM of 'doc' before executing 'callback' +// Waits for element 'sel' to exist in the DOM of 'doc' before executing 'callback' // Useful when elements are created asynchronously, e.g. after a Web Worker task -function waitForElement(doc, el, callback) { +function waitForElement(doc, sel, callback) { var time = 0, interval = 10, timeout = 5000; var checkEl = setInterval(function() { - if (doc.querySelector(el)) { + var el = doc.querySelector(sel); + if (el) { clearInterval(checkEl); - if (callback) callback(); + if (callback) callback(null, el); } time += interval; if (time > timeout) { - ok(false, 'waitForElement timed out on element: '+el); + ok(false, 'waitForElement timed out on element: '+sel); clearInterval(checkEl); if (callback) callback(true); } From 9201c7caa714073211e3692a758601d153c6a137 Mon Sep 17 00:00:00 2001 From: Artur Adib Date: Thu, 24 May 2012 16:11:32 -0400 Subject: [PATCH 2/3] mc tests- fixing intermittent crashes --- test/mozcentral/Makefile.in | 1 - test/mozcentral/browser_pdfjs_main.js | 137 ++++++++++++++------------ test/mozcentral/browser_pdfjs_zoom.js | 63 ------------ 3 files changed, 72 insertions(+), 129 deletions(-) delete mode 100644 test/mozcentral/browser_pdfjs_zoom.js diff --git a/test/mozcentral/Makefile.in b/test/mozcentral/Makefile.in index fd40574ef..8c9face17 100644 --- a/test/mozcentral/Makefile.in +++ b/test/mozcentral/Makefile.in @@ -14,7 +14,6 @@ include $(topsrcdir)/config/rules.mk _BROWSER_TEST_FILES = \ head.js \ browser_pdfjs_main.js \ - browser_pdfjs_zoom.js \ file_pdfjs_test.pdf \ $(NULL) diff --git a/test/mozcentral/browser_pdfjs_main.js b/test/mozcentral/browser_pdfjs_main.js index 5f07e6512..9aab295c5 100644 --- a/test/mozcentral/browser_pdfjs_main.js +++ b/test/mozcentral/browser_pdfjs_main.js @@ -6,78 +6,85 @@ const RELATIVE_DIR = "browser/extensions/pdfjs/test/"; const TESTROOT = "http://example.com/browser/" + RELATIVE_DIR; function test() { - waitForExplicitFinish(); + var tab; - var tab = gBrowser.addTab(TESTROOT + "file_pdfjs_test.pdf"); + waitForExplicitFinish(); + registerCleanupFunction(function() { + gBrowser.removeTab(tab); + }); + + tab = gBrowser.addTab(TESTROOT + "file_pdfjs_test.pdf"); var newTabBrowser = gBrowser.getBrowserForTab(tab); - newTabBrowser.addEventListener("pagechange", function onPageChange() { - newTabBrowser.removeEventListener("pagechange", onPageChange, true); + newTabBrowser.addEventListener("load", function eventHandler() { + newTabBrowser.removeEventListener("load", eventHandler, true); var document = newTabBrowser.contentDocument, window = newTabBrowser.contentWindow; - // - // Overall sanity tests - // - ok(document.querySelector('div#viewer'), "document content has viewer UI"); - ok('PDFJS' in window.wrappedJSObject, "window content has PDFJS object"); - - // - // Sidebar: open - // - var sidebar = document.querySelector('button#sidebarToggle'), - outerContainer = document.querySelector('div#outerContainer'); - - sidebar.click(); - ok(outerContainer.classList.contains('sidebarOpen'), 'sidebar opens on click'); - - // Thumbnails are created asynchronously - wait for them - waitForElement(document, 'canvas#thumbnail2', function(error, thumbnail) { - if (error) - finish(); - - // - // Page change from thumbnail click - // - var pageNumber = document.querySelector('input#pageNumber'); - is(parseInt(pageNumber.value), 1, 'initial page is 1'); - - ok(thumbnail, 'thumbnail2 is available'); - if (thumbnail) { - thumbnail.click(); - is(parseInt(pageNumber.value), 2, 'clicking on thumbnail changes page'); - } - - // - // Sidebar: close - // - sidebar.click(); - ok(!outerContainer.classList.contains('sidebarOpen'), 'sidebar closes on click'); - - // - // Page change from prev/next buttons - // - var prevPage = document.querySelector('button#previous'), - nextPage = document.querySelector('button#next'); - - nextPage.click(); - is(parseInt(pageNumber.value), 2, 'page increases after clicking on next'); - - prevPage.click(); - is(parseInt(pageNumber.value), 1, 'page decreases after clicking on previous'); - - // - // Bookmark button - // - var viewBookmark = document.querySelector('a#viewBookmark'); - viewBookmark.click(); - ok(viewBookmark.href.length > 0, 'viewBookmark button has href'); - - finish(); + waitForElement(document, 'canvas#page1', function(err, page1) { + runTests(document, window); }); - }, true, true); + }, true); +} - registerCleanupFunction(function() { - gBrowser.removeTab(tab); +function runTests(document, window) { + // + // Overall sanity tests + // + ok(document.querySelector('div#viewer'), "document content has viewer UI"); + ok('PDFJS' in window.wrappedJSObject, "window content has PDFJS object"); + + // + // Sidebar: open + // + var sidebar = document.querySelector('button#sidebarToggle'), + outerContainer = document.querySelector('div#outerContainer'); + + sidebar.click(); + ok(outerContainer.classList.contains('sidebarOpen'), 'sidebar opens on click'); + + // Thumbnails are created asynchronously - wait for them + waitForElement(document, 'canvas#thumbnail2', function(error, thumbnail) { + if (error) + finish(); + + // + // Page change from thumbnail click + // + var pageNumber = document.querySelector('input#pageNumber'); + is(parseInt(pageNumber.value), 1, 'initial page is 1'); + + ok(thumbnail, 'thumbnail2 is available'); + if (thumbnail) { + thumbnail.click(); + is(parseInt(pageNumber.value), 2, 'clicking on thumbnail changes page'); + } + + // + // Sidebar: close + // + sidebar.click(); + ok(!outerContainer.classList.contains('sidebarOpen'), 'sidebar closes on click'); + + // + // Page change from prev/next buttons + // + var prevPage = document.querySelector('button#previous'), + nextPage = document.querySelector('button#next'); + + nextPage.click(); + is(parseInt(pageNumber.value), 2, 'page increases after clicking on next'); + + prevPage.click(); + is(parseInt(pageNumber.value), 1, 'page decreases after clicking on previous'); + + // + // Bookmark button + // + var viewBookmark = document.querySelector('a#viewBookmark'); + viewBookmark.click(); + ok(viewBookmark.href.length > 0, 'viewBookmark button has href'); + + finish(); }); } diff --git a/test/mozcentral/browser_pdfjs_zoom.js b/test/mozcentral/browser_pdfjs_zoom.js deleted file mode 100644 index a6445da2a..000000000 --- a/test/mozcentral/browser_pdfjs_zoom.js +++ /dev/null @@ -1,63 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -const RELATIVE_DIR = "browser/extensions/pdfjs/test/"; -const TESTROOT = "http://example.com/browser/" + RELATIVE_DIR; - -function test() { - waitForExplicitFinish(); - - var tab = gBrowser.addTab(TESTROOT + "file_pdfjs_test.pdf"); - var newTabBrowser = gBrowser.getBrowserForTab(tab); - newTabBrowser.addEventListener("pagechange", function onPageChange() { - newTabBrowser.removeEventListener("pagechange", onPageChange, true); - - var document = newTabBrowser.contentDocument, - window = newTabBrowser.contentWindow; - - // - // Zoom in/out - // - var zoomOut = document.querySelector('button.zoomOut'), - zoomIn = document.querySelector('button.zoomIn'); - - var newWidth, oldWidth; - - // We need to query the DOM every time since zoom in/out operations destroy the canvas element - waitForElement(document, 'canvas#page1', function(error, page1) { - if (error) - finish(); - - oldWidth = page1.width; - zoomIn.click(); - - waitForElement(document, 'canvas#page1', function(error, page1) { - if (error) - finish(); - - newWidth = page1.width; - ok(oldWidth < newWidth, 'zooming in increases page width (old: '+oldWidth+', new: '+newWidth+')'); - - // Zoom out - oldWidth = newWidth; - zoomOut.click(); - - waitForElement(document, 'canvas#page1', function(error, page1) { - if (error) - finish(); - - newWidth = page1.width; - ok(oldWidth > newWidth, 'zooming out decreases page width (old: '+oldWidth+', new: '+newWidth+')'); - - finish(); - }); - }); - }); - - }, true, true); - - registerCleanupFunction(function() { - gBrowser.removeTab(tab); - }); -} From 417eeb640dc59014be0e3b4844cb572a81da5853 Mon Sep 17 00:00:00 2001 From: Artur Adib Date: Fri, 25 May 2012 13:06:55 -0400 Subject: [PATCH 3/3] removing all async tests --- test/mozcentral/Makefile.in | 1 - test/mozcentral/browser_pdfjs_main.js | 65 ++++++++++----------------- test/mozcentral/head.js | 22 --------- 3 files changed, 23 insertions(+), 65 deletions(-) delete mode 100644 test/mozcentral/head.js diff --git a/test/mozcentral/Makefile.in b/test/mozcentral/Makefile.in index 8c9face17..77b7a838d 100644 --- a/test/mozcentral/Makefile.in +++ b/test/mozcentral/Makefile.in @@ -12,7 +12,6 @@ include $(DEPTH)/config/autoconf.mk include $(topsrcdir)/config/rules.mk _BROWSER_TEST_FILES = \ - head.js \ browser_pdfjs_main.js \ file_pdfjs_test.pdf \ $(NULL) diff --git a/test/mozcentral/browser_pdfjs_main.js b/test/mozcentral/browser_pdfjs_main.js index 9aab295c5..884650892 100644 --- a/test/mozcentral/browser_pdfjs_main.js +++ b/test/mozcentral/browser_pdfjs_main.js @@ -21,12 +21,14 @@ function test() { var document = newTabBrowser.contentDocument, window = newTabBrowser.contentWindow; - waitForElement(document, 'canvas#page1', function(err, page1) { + // Runs tests after all 'load' event handlers have fired off + setTimeout(function() { runTests(document, window); - }); + }, 0); }, true); } + function runTests(document, window) { // // Overall sanity tests @@ -43,48 +45,27 @@ function runTests(document, window) { sidebar.click(); ok(outerContainer.classList.contains('sidebarOpen'), 'sidebar opens on click'); - // Thumbnails are created asynchronously - wait for them - waitForElement(document, 'canvas#thumbnail2', function(error, thumbnail) { - if (error) - finish(); + // + // Sidebar: close + // + sidebar.click(); + ok(!outerContainer.classList.contains('sidebarOpen'), 'sidebar closes on click'); - // - // Page change from thumbnail click - // - var pageNumber = document.querySelector('input#pageNumber'); - is(parseInt(pageNumber.value), 1, 'initial page is 1'); + // + // Page change from prev/next buttons + // + var prevPage = document.querySelector('button#previous'), + nextPage = document.querySelector('button#next'); - ok(thumbnail, 'thumbnail2 is available'); - if (thumbnail) { - thumbnail.click(); - is(parseInt(pageNumber.value), 2, 'clicking on thumbnail changes page'); - } + var pageNumber = document.querySelector('input#pageNumber'); + is(parseInt(pageNumber.value), 1, 'initial page is 1'); - // - // Sidebar: close - // - sidebar.click(); - ok(!outerContainer.classList.contains('sidebarOpen'), 'sidebar closes on click'); + // + // Bookmark button + // + var viewBookmark = document.querySelector('a#viewBookmark'); + viewBookmark.click(); + ok(viewBookmark.href.length > 0, 'viewBookmark button has href'); - // - // Page change from prev/next buttons - // - var prevPage = document.querySelector('button#previous'), - nextPage = document.querySelector('button#next'); - - nextPage.click(); - is(parseInt(pageNumber.value), 2, 'page increases after clicking on next'); - - prevPage.click(); - is(parseInt(pageNumber.value), 1, 'page decreases after clicking on previous'); - - // - // Bookmark button - // - var viewBookmark = document.querySelector('a#viewBookmark'); - viewBookmark.click(); - ok(viewBookmark.href.length > 0, 'viewBookmark button has href'); - - finish(); - }); + finish(); } diff --git a/test/mozcentral/head.js b/test/mozcentral/head.js deleted file mode 100644 index 0636ba4e9..000000000 --- a/test/mozcentral/head.js +++ /dev/null @@ -1,22 +0,0 @@ -// Waits for element 'sel' to exist in the DOM of 'doc' before executing 'callback' -// Useful when elements are created asynchronously, e.g. after a Web Worker task -function waitForElement(doc, sel, callback) { - var time = 0, - interval = 10, - timeout = 5000; - - var checkEl = setInterval(function() { - var el = doc.querySelector(sel); - if (el) { - clearInterval(checkEl); - if (callback) callback(null, el); - } - - time += interval; - if (time > timeout) { - ok(false, 'waitForElement timed out on element: '+sel); - clearInterval(checkEl); - if (callback) callback(true); - } - }, interval); -}