UNPKG

dojox

Version:

Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.

191 lines (175 loc) 6.11 kB
var timeoutInterval = 3000; var WIDGET_CLASSNAME1 = "mblPageIndicator"; var WIDGET_CLASSNAME2 = "mblFixedBottomBar"; var WIDGET_DOT_CLASSNAME1 = "mblPageIndicatorDot"; var WIDGET_DOT_CLASSNAME2 = "mblPageIndicatorDotSelected"; var WIDGET_PAGENUM = 5; require([ "dojo/_base/connect", "dojo/sniff", "dojo/dom-construct", // dojo.place "dojo/dom-class", // dojo.hasClass "dojo/ready", // dojo.ready "dijit/registry", // dijit.byId "doh/runner", //doh functions "dojox/mobile/PageIndicator", "dojox/mobile", // This is a mobile app. "dojox/mobile/SwapView", // This mobile app uses mobile view "dojox/mobile/compat", // This mobile app supports running on desktop browsers "dojox/mobile/parser" // This mobile app uses declarative programming with fast mobile parser ], function(connect, has, domConst, domClass, ready, registry, runner, PageIndicator){ function fireOnClick(node){ if(has("ie")<9){ var e = document.createEventObject(); e.layerX = 0; node.fireEvent( "onclick" ); }else{ var e = document.createEvent('Events'); e.initEvent('click', true, true); e.layerX = 0; node.dispatchEvent(e); } } function _createPageIndicatorDeclaratively(widgetId) { return registry.byId(widgetId); }; function _createPageIndicatorProgrammatically(placeHolderId, widgetId){ // Create SwapView var r = new PageIndicator({id:widgetId, fixed:"bottom"}); runner.assertNotEqual(null, r); domConst.place(r.domNode, placeHolderId, "replace"); r.startup(); _initAppBars(); return r; }; function _createPageIndicatorProgrammaticallyWithSourceNodeReference(widgetId){ // Create IconContainer var r = new PageIndicator({}, widgetId); r.startup(); _initAppBars(); return r; }; function _initAppBars(){ var view1 = registry.byId("dojox_mobile_SwapView_0"); view1.findAppBars(); view1.resize(); var view2 = registry.byId("dojox_mobile_SwapView_1"); view2.findAppBars(); view2.resize(); var view3 = registry.byId("dojox_mobile_SwapView_2"); view3.findAppBars(); view3.resize(); var view4 = registry.byId("dojox_mobile_SwapView_3"); view4.findAppBars(); view4.resize(); var view5 = registry.byId("dojox_mobile_SwapView_4"); view5.findAppBars(); view5.resize(); }; function _assertCorrectPageIndicator(widget, col){ runner.assertNotEqual(null, widget, "IconContainer: Did not instantiate."); runner.assertTrue(domClass.contains(widget.domNode, WIDGET_CLASSNAME1), WIDGET_CLASSNAME1); runner.assertTrue(domClass.contains(widget.domNode, WIDGET_CLASSNAME2), WIDGET_CLASSNAME2); var r = widget._tblNode.rows[0]; runner.assertEqual(WIDGET_PAGENUM, widget._tblNode.rows[0].cells.length, "Number of page"); for(i = 0; i < r.cells.length; i++){ dot = r.cells[i].firstChild; runner.assertTrue(domClass.contains(dot, WIDGET_DOT_CLASSNAME1), WIDGET_DOT_CLASSNAME1); if(i+1 === col){ runner.assertTrue(domClass.contains(dot, WIDGET_DOT_CLASSNAME2), WIDGET_DOT_CLASSNAME2); } } }; ready(function(){ if(WIDGET_PROGRAMMATICALLY === 1){ _createPageIndicatorProgrammatically("dojox_mobile_PageIndicator_0Place", "dojox_mobile_PageIndicator_0"); }else if(WIDGET_PROGRAMMATICALLY === 2){ _createPageIndicatorProgrammaticallyWithSourceNodeReference("dojox_mobile_PageIndicator_0"); } runner.register("dojox.mobile.test.doh.PageIndicator", [ { name: "PageIndicator Verification1", timeout: 4000, runTest: function(){ var view1 = registry.byId("dojox_mobile_SwapView_0"); var view2 = registry.byId("dojox_mobile_SwapView_1"); var widget1 = registry.byId("dojox_mobile_PageIndicator_0"); var d = new runner.Deferred(); setTimeout(d.getTestCallback(function(){ _assertCorrectPageIndicator(widget1, 1); view1.goTo(1); }), timeoutInterval); return d; } }, { name: "PageIndicator Verification2", timeout: 4000, runTest: function(){ var view2 = registry.byId("dojox_mobile_SwapView_1"); var d = new runner.Deferred(); setTimeout(d.getTestCallback(function(){ var widget1 = registry.byId("dojox_mobile_PageIndicator_0"); _assertCorrectPageIndicator(widget1, 2); view2.goTo(1); }), timeoutInterval); return d; } }, { name: "PageIndicator Verification3", timeout: 4000, runTest: function(){ var d = new runner.Deferred(); setTimeout(d.getTestCallback(function(){ var widget1 = registry.byId("dojox_mobile_PageIndicator_0"); _assertCorrectPageIndicator(widget1, 3); fireOnClick(widget1.domNode); }), timeoutInterval); return d; } }, { name: "PageIndicator Verification4", timeout: 4000, runTest: function(){ var d = new runner.Deferred(); setTimeout(d.getTestCallback(function(){ var widget1 = registry.byId("dojox_mobile_PageIndicator_0"); _assertCorrectPageIndicator(widget1, 2); }), timeoutInterval); return d; } }, { name: "PageIndicator Verification5", timeout: 3000, runTest: function(){ // Test case for #15064: destroy right after startup() var widget = new PageIndicator(); var d = new runner.Deferred(); var errorCounter = 0; var errorMsg; // Before the fix of #15064, there used to be an error thrown when destroying // right after startup(). To test it, we cannot use a simple try-catch, because // this is about an error thrown by the setTimeout function which used to be set // PageIndicator's startup(). Hence: window.onerror = function(msg, url, lineNumber){ errorCounter++; errorMsg = "After destroy: " + msg + "\nURL: " + url + "\nLine number: " + lineNumber; console.log(errorMsg); }; widget.startup(); widget.destroyRecursive(false/*preserveDom*/); // Check that no error has been thrown setTimeout(d.getTestCallback(function(){ runner.assertEqual(0, errorCounter, errorMsg); }), 2000); // smaller than the total timeout of the test case return d; } } ]); runner.run(); }); })