diff --git a/test/basic.js b/test/basic.js index bd8b731f..6b1468ca 100644 --- a/test/basic.js +++ b/test/basic.js @@ -1,144 +1,207 @@ /* global module, asyncTest, $, ok, equal, notEqual, start, test, Util */ (function() { + var viewer; - module('Basic'); + module('Basic', { + setup: function () { + var example = $('
').appendTo("#qunit-fixture"); - // TODO: Test drag - - var viewer = null; - - // ---------- - asyncTest('Open', function() { - $(document).ready(function() { viewer = OpenSeadragon({ id: 'example', prefixUrl: '/build/openseadragon/images/', - tileSources: '/test/data/testpattern.dzi', springStiffness: 100 // Faster animation = faster tests }); + }, + teardown: function () { + if (!!viewer && viewer.close) { + viewer.close(); + } - ok(viewer, 'Viewer exists'); + viewer = null; + } + }); - var openHandler = function(eventSender, eventData) { - viewer.removeHandler('open', openHandler); - ok(true, 'Open event was sent'); - equal(eventSender, viewer, 'Sender of open event was viewer'); - ok(eventData, 'Handler also received event data'); - ok(viewer.viewport, 'Viewport exists'); - ok(viewer.source, 'source exists'); - ok(viewer._updateRequestId, 'timer is on'); - start(); - }; + // ---------- + asyncTest('Open', function() { + ok(viewer, 'Viewer exists'); - viewer.addHandler('open', openHandler); + var openHandler = function(eventSender, eventData) { + viewer.removeHandler('open', openHandler); + ok(true, 'Open event was sent'); + equal(eventSender, viewer, 'Sender of open event was viewer'); + ok(eventData, 'Handler also received event data'); + ok(viewer.viewport, 'Viewport exists'); + ok(viewer.source, 'source exists'); + ok(viewer._updateRequestId, 'timer is on'); + start(); + }; + + viewer.addHandler('open', openHandler); + viewer.open('/test/data/testpattern.dzi'); + }); + + asyncTest('Open Error Handling', function() { + ok(viewer, 'Viewer exists'); + + viewer.addHandler('open', function(eventSender, eventData) { + ok(false, "The open event should not fire for failed opens"); + start(); }); + + viewer.addHandler('open-failed', function(eventSender, eventData) { + ok(true, "The open-failed event should be fired when the source 404s"); + + equal($(".openseadragon-message").length, 1, "Open failures should display a message"); + + start(); + }); + + viewer.open('/test/data/not-a-real-file'); }); // ---------- asyncTest('Zoom', function() { - var viewport = viewer.viewport; - equal(viewport.getZoom(), 1, 'We start out unzoomed'); + viewer.addHandler("open", function () { + var viewport = viewer.viewport; - var zoomHandler = function() { - viewer.removeHandler('animationfinish', zoomHandler); - equal(viewport.getZoom(), 2, 'Zoomed correctly'); - start(); - }; + equal(viewport.getZoom(), 1, 'We start out unzoomed'); - viewer.addHandler('animationfinish', zoomHandler); - viewport.zoomTo(2); + var zoomHandler = function() { + viewer.removeHandler('animationfinish', zoomHandler); + equal(viewport.getZoom(), 2, 'Zoomed correctly'); + start(); + }; + + viewer.addHandler('animationfinish', zoomHandler); + viewport.zoomTo(2); + }); + viewer.open('/test/data/testpattern.dzi'); }); // ---------- asyncTest('Pan', function() { - var viewport = viewer.viewport; - var center = viewport.getCenter(); - ok(center.x === 0.5 && center.y === 0.5, 'We start out unpanned'); + viewer.addHandler("open", function () { + var viewport = viewer.viewport, + center = viewport.getCenter(); - var panHandler = function() { - viewer.removeHandler('animationfinish', panHandler); - center = viewport.getCenter(); - ok(center.x === 0.1 && center.y === 0.1, 'Panned correctly'); - start(); - }; + ok(center.x === 0.5 && center.y === 0.5, 'We start out unpanned'); - viewer.addHandler('animationfinish', panHandler); - viewport.panTo(new OpenSeadragon.Point(0.1, 0.1)); + var panHandler = function() { + viewer.removeHandler('animationfinish', panHandler); + center = viewport.getCenter(); + ok(center.x === 0.1 && center.y === 0.1, 'Panned correctly'); + start(); + }; + + viewer.addHandler('animationfinish', panHandler); + viewport.panTo(new OpenSeadragon.Point(0.1, 0.1)); + }); + + viewer.open('/test/data/testpattern.dzi'); }); // ---------- asyncTest('Home', function() { - var viewport = viewer.viewport; - var center = viewport.getCenter(); - ok(center.x !== 0.5 && center.y !== 0.5, 'We start out panned'); - notEqual(viewport.getZoom(), 1, 'We start out zoomed'); + // Test setup: + function opener() { + var viewport = viewer.viewport; + viewport.panTo(new OpenSeadragon.Point(0.1, 0.1)); + viewport.zoomTo(2); + } - var homeHandler = function() { - viewer.removeHandler('animationfinish', homeHandler); - center = viewport.getCenter(); - ok(center.x === 0.5 && center.y === 0.5, 'We end up unpanned'); - equal(viewport.getZoom(), 1, 'We end up unzoomed'); - start(); - }; + function stage1() { + var viewport = viewer.viewport, + center = viewport.getCenter(); - viewer.addHandler('animationfinish', homeHandler); - viewport.goHome(true); + viewer.removeHandler('animationfinish', stage1); + + ok(center.x !== 0.5 && center.y !== 0.5, 'We start out panned'); + notEqual(viewport.getZoom(), 1, 'We start out zoomed'); + + var homeHandler = function() { + viewer.removeHandler('animationfinish', homeHandler); + center = viewport.getCenter(); + ok(center.x === 0.5 && center.y === 0.5, 'We end up unpanned'); + equal(viewport.getZoom(), 1, 'We end up unzoomed'); + start(); + }; + + viewer.addHandler('animationfinish', homeHandler); + viewport.goHome(true); + } + + viewer.addHandler("open", opener); + viewer.addHandler("animationfinish", stage1); + + viewer.open('/test/data/testpattern.dzi'); }); // ---------- asyncTest('Click', function() { - var viewport = viewer.viewport, + viewer.addHandler("open", function () { + var viewport = viewer.viewport, center = viewport.getCenter(); - ok(center.x === 0.5 && center.y === 0.5, 'We start out unpanned'); - equal(viewport.getZoom(), 1, 'We start out unzoomed'); + ok(center.x === 0.5 && center.y === 0.5, 'We start out unpanned'); + equal(viewport.getZoom(), 1, 'We start out unzoomed'); - var clickHandler = function() { - viewer.removeHandler('animationfinish', clickHandler); - center = viewport.getCenter(); - ok(center.x > 0.37 && center.x < 0.38 && center.y > 0.37 && center.y < 0.38, 'Panned correctly'); - equal(viewport.getZoom(), 2, 'Zoomed correctly'); - start(); - }; + var clickHandler = function() { + viewer.removeHandler('animationfinish', clickHandler); + center = viewport.getCenter(); + ok(center.x > 0.37 && center.x < 0.38 && center.y > 0.37 && center.y < 0.38, 'Panned correctly'); + equal(viewport.getZoom(), 2, 'Zoomed correctly'); + start(); + }; - viewer.addHandler('animationfinish', clickHandler); - Util.simulateViewerClick(viewer, 0.25, 0.25); + viewer.addHandler('animationfinish', clickHandler); + Util.simulateViewerClick(viewer, 0.25, 0.25); + }); + + viewer.open('/test/data/testpattern.dzi'); }); // ---------- - test('Fullscreen', function() { - ok(!viewer.isFullPage(), 'Started out not fullpage'); - ok(!$(viewer.element).hasClass('fullpage'), - 'No fullpage class on div'); + asyncTest('Fullscreen', function() { + viewer.addHandler("open", function () { + ok(!viewer.isFullPage(), 'Started out not fullpage'); + ok(!$(viewer.element).hasClass('fullpage'), + 'No fullpage class on div'); - viewer.setFullPage(true); - ok(viewer.isFullPage(), 'Enabled fullpage'); - ok($(viewer.element).hasClass('fullpage'), - 'Fullpage class added to div'); + viewer.setFullPage(true); + ok(viewer.isFullPage(), 'Enabled fullpage'); + ok($(viewer.element).hasClass('fullpage'), + 'Fullpage class added to div'); - viewer.setFullPage(false); - ok(!viewer.isFullPage(), 'Disabled fullpage'); - ok(!$(viewer.element).hasClass('fullpage'), - 'Fullpage class removed from div'); + viewer.setFullPage(false); + ok(!viewer.isFullPage(), 'Disabled fullpage'); + ok(!$(viewer.element).hasClass('fullpage'), + 'Fullpage class removed from div'); + start(); + }); + + viewer.open('/test/data/testpattern.dzi'); }); // ---------- asyncTest('Close', function() { - var closeHandler = function() { - viewer.removeHandler('close', closeHandler); - ok(!viewer.source, 'no source'); - $('#example').empty(); - ok(true, 'Close event was sent'); - ok(!viewer._updateRequestId, 'timer is off'); - setTimeout(function() { - ok(!viewer._updateRequestId, 'timer is still off'); - start(); - }, 100); - }; + viewer.addHandler("open", function () { + var closeHandler = function() { + viewer.removeHandler('close', closeHandler); + ok(!viewer.source, 'no source'); + $('#example').empty(); + ok(true, 'Close event was sent'); + ok(!viewer._updateRequestId, 'timer is off'); + setTimeout(function() { + ok(!viewer._updateRequestId, 'timer is still off'); + start(); + }, 100); + }; - viewer.addHandler('close', closeHandler); - viewer.close(); + viewer.addHandler('close', closeHandler); + viewer.close(); + }); + viewer.open('/test/data/testpattern.dzi'); }); })(); diff --git a/test/formats.js b/test/formats.js index aeaae6c9..0c673bcf 100644 --- a/test/formats.js +++ b/test/formats.js @@ -3,7 +3,13 @@ // This module tests whether our various file formats can be opened. // TODO: Add more file formats (with corresponding test data). - module('Formats'); + module('Formats', { + setup: function () { + var example = document.createElement("div"); + example.id = "example"; + document.getElementById("qunit-fixture").appendChild(example); + } + }); var viewer = null; diff --git a/test/navigator.js b/test/navigator.js index 547e39a3..62899328 100644 --- a/test/navigator.js +++ b/test/navigator.js @@ -1,3 +1,5 @@ +/* global QUnit, module, Util, $, console, test, asyncTest, start, ok, equal */ + QUnit.config.autostart = false; (function () { @@ -14,14 +16,18 @@ QUnit.config.autostart = false; topNavigatorClickAdjustment; module("navigator", { - setup:function () { - Util.resetDom(); + setup: function () { + Util.initializeTestDOM(); resetTestVariables(); $(document).scrollTop(0); $(document).scrollLeft(0); }, - teardown:function () { - Util.resetDom(); + teardown: function () { + // jQuery UI creates its controls outside the normal DOM hierarchy which QUnit cleans up: + if ($('#exampleNavigator').is(':ui-dialog')) { + $('#exampleNavigator').dialog('destroy'); + } + resetTestVariables(); } }); @@ -31,7 +37,7 @@ QUnit.config.autostart = false; }); var resetTestVariables = function () { - if (viewer != null) { + if (viewer) { viewer.close(); } displayRegion = null; @@ -125,11 +131,11 @@ QUnit.config.autostart = false; viewerAndNavigatorDisplayReady = viewer.drawer !== null && !viewer.drawer.needsUpdate() && currentDisplayWidth > 0 && - Util.equalsWithVariance(lastDisplayRegionLeft, currentDisplayRegionLeft, .0001) && - Util.equalsWithVariance(lastDisplayWidth, currentDisplayWidth, .0001) && - Util.equalsWithVariance(viewer.viewport.getBounds(true).x, viewer.viewport.getBounds().x, .0001) && - Util.equalsWithVariance(viewer.viewport.getBounds(true).y, viewer.viewport.getBounds().y, .0001) && - Util.equalsWithVariance(viewer.viewport.getBounds(true).width, viewer.viewport.getBounds().width, .0001); + Util.equalsWithVariance(lastDisplayRegionLeft, currentDisplayRegionLeft, 0.0001) && + Util.equalsWithVariance(lastDisplayWidth, currentDisplayWidth, 0.0001) && + Util.equalsWithVariance(viewer.viewport.getBounds(true).x, viewer.viewport.getBounds().x, 0.0001) && + Util.equalsWithVariance(viewer.viewport.getBounds(true).y, viewer.viewport.getBounds().y, 0.0001) && + Util.equalsWithVariance(viewer.viewport.getBounds(true).width, viewer.viewport.getBounds().width, 0.0001); } catch (err) { //Ignore. Subsequent code will try again shortly @@ -138,7 +144,7 @@ QUnit.config.autostart = false; count++; setTimeout(function () { waitForViewer(handler, count, currentDisplayRegionLeft, currentDisplayWidth); - }, 100) + }, 100); } else { if (count === 40) { @@ -201,21 +207,21 @@ QUnit.config.autostart = false; expecteYCoordinate = 1 / viewer.source.aspectRatio - viewer.viewport.getBounds().height; } if (viewer.viewport.getBounds().width < 1) { - Util.assessNumericValue(expectedXCoordinate, viewer.viewport.getBounds().x, .04, ' Viewer at ' + theContentCorner + ', x coord'); + Util.assessNumericValue(expectedXCoordinate, viewer.viewport.getBounds().x, 0.04, ' Viewer at ' + theContentCorner + ', x coord'); } if (viewer.viewport.getBounds().height < 1 / viewer.source.aspectRatio) { - Util.assessNumericValue(expecteYCoordinate, viewer.viewport.getBounds().y, .04, ' Viewer at ' + theContentCorner + ', y coord'); + Util.assessNumericValue(expecteYCoordinate, viewer.viewport.getBounds().y, 0.04, ' Viewer at ' + theContentCorner + ', y coord'); } - } + }; }; var assessViewerInCenter = function () { - var yPositionVariance = .04; + var yPositionVariance = 0.04; if (viewer.source.aspectRatio < 1) { yPositionVariance = yPositionVariance / viewer.source.aspectRatio; } Util.assessNumericValue(1 / viewer.source.aspectRatio / 2, viewer.viewport.getCenter().y, yPositionVariance, ' Viewer at center, y coord'); - Util.assessNumericValue(.5, viewer.viewport.getCenter().x, .4, ' Viewer at center, x coord'); + Util.assessNumericValue(0.5, viewer.viewport.getCenter().x, 0.4, ' Viewer at center, x coord'); }; var clickOnNavigator = function (theContentCorner) { @@ -239,7 +245,7 @@ QUnit.config.autostart = false; yPos = contentStartFromTop + displayRegionHeight; } simulateNavigatorClick(viewer.navigator, xPos, yPos); - } + }; }; var dragNavigatorBackToCenter = function () { @@ -354,11 +360,12 @@ QUnit.config.autostart = false; clientX:1, clientY:1 }; - mainViewerElement.simulate('blur', event); + + $("#" + seadragonProperties.id).simulate('blur', event); + if (testProperties.expectedAutoFade) { setTimeout(assessAutoFadeTriggered,autoFadeWaitTime); - } - else { + } else { setTimeout(assessAutoFadeDisabled,autoFadeWaitTime); } } diff --git a/test/test.html b/test/test.html index 76d9cc2e..c41abe84 100644 --- a/test/test.html +++ b/test/test.html @@ -10,12 +10,6 @@
-
-
-
-
-
-
diff --git a/test/test.js b/test/test.js index 0e763fef..ddded768 100644 --- a/test/test.js +++ b/test/test.js @@ -1,3 +1,5 @@ +/* global module, asyncTest, $, ok, equal, notEqual, start, test, Util */ + (function() { // ---------- @@ -30,16 +32,11 @@ .simulate('mouseup', event); }, - resetDom: function () { - if ($('#exampleNavigator').is(':ui-dialog')) { - $('#exampleNavigator').dialog('destroy'); - } - $("#exampleNavigator").remove(); - $(".navigator").remove(); - $("#example").empty(); - $("#tallexample").empty(); - $("#wideexample").empty(); - $("#example").parent().append('
'); + initializeTestDOM: function () { + $("#qunit-fixture") + .append('
') + .append('
') + .append('
'); }, equalsWithVariance: function (value1, value2, variance) {