diff options
Diffstat (limited to 'toolkit/content/tests/chrome/test_notificationbox.xul')
-rw-r--r-- | toolkit/content/tests/chrome/test_notificationbox.xul | 522 |
1 files changed, 0 insertions, 522 deletions
diff --git a/toolkit/content/tests/chrome/test_notificationbox.xul b/toolkit/content/tests/chrome/test_notificationbox.xul deleted file mode 100644 index a99d0824e..000000000 --- a/toolkit/content/tests/chrome/test_notificationbox.xul +++ /dev/null @@ -1,522 +0,0 @@ -<?xml version="1.0"?> -<?xml-stylesheet href="chrome://global/skin" type="text/css"?> -<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?> -<!-- - XUL Widget Test for notificationbox - --> -<window title="Notification Box" width="500" height="600" - xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> - <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> - - <notificationbox id="nb"/> - <menupopup id="menupopup" onpopupshown="this.hidePopup()" onpopuphidden="checkPopupClosed()"> - <menuitem label="One"/> - </menupopup> - - <!-- test results are displayed in the html:body --> - <body xmlns="http://www.w3.org/1999/xhtml" style="height: 300px; overflow: auto;"/> - - <!-- test code goes here --> - <script type="application/javascript"><![CDATA[ -SimpleTest.waitForExplicitFinish(); - -var testtag_notificationbox_buttons = [ - { - label: "Button 1", - accesskey: "u", - callback: testtag_notificationbox_buttonpressed, - popup: "menupopup" - } -]; - -var NSXUL = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; - -function testtag_notificationbox_buttonpressed(event) -{ -} - -function testtag_notificationbox(nb) -{ - testtag_notificationbox_State(nb, "initial", null, 0); - - SimpleTest.is(nb.notificationsHidden, false, "initial notificationsHidden"); - SimpleTest.is(nb.removeAllNotifications(false), undefined, "initial removeAllNotifications"); - testtag_notificationbox_State(nb, "initial removeAllNotifications", null, 0); - SimpleTest.is(nb.removeAllNotifications(true), undefined, "initial removeAllNotifications immediate"); - testtag_notificationbox_State(nb, "initial removeAllNotifications immediate", null, 0); - - runTimedTests(tests, -1, nb, null); -} - -var notification_last_events = []; -function notification_eventCallback(event) -{ - notification_last_events.push({ actualEvent: event , item: this }); -} - -/** - * For any notifications that have the notification_eventCallback on - * them, we will have recorded instances of those callbacks firing - * and stored them. This checks to see that the expected event types - * are being fired in order, and targeting the right item. - * - * @param {Array<string>} expectedEvents - * The list of event types, in order, that we expect to have been - * fired on the item. - * @param {<xul:notification>} ntf - * The notification we expect the callback to have been fired from. - * @param {string} testName - * The name of the current test, for logging. - */ -function testtag_notification_eventCallback(expectedEvents, ntf, testName) -{ - for (let i = 0; i < expectedEvents; ++i) { - let expected = expectedEvents[i]; - let { actualEvent, item } = notification_last_events[i]; - SimpleTest.is(actualEvent, expected, testName + ": event name"); - SimpleTest.is(item, ntf, testName + ": event item"); - } - notification_last_events = []; -} - -var tests = -[ - { - test: function(nb, ntf) { - // append a new notification - var ntf = nb.appendNotification("Notification", "note", "happy.png", - nb.PRIORITY_INFO_LOW, testtag_notificationbox_buttons); - SimpleTest.is(ntf && ntf.localName == "notification", true, "append notification"); - return ntf; - }, - result: function(nb, ntf) { - testtag_notificationbox_State(nb, "append", ntf, 1); - testtag_notification_State(nb, ntf, "append", "Notification", "note", - "happy.png", nb.PRIORITY_INFO_LOW); - - // check the getNotificationWithValue method - var ntf_found = nb.getNotificationWithValue("note"); - SimpleTest.is(ntf, ntf_found, "getNotificationWithValue note"); - - var none_found = nb.getNotificationWithValue("notenone"); - SimpleTest.is(none_found, null, "getNotificationWithValue null"); - return ntf; - } - }, - { - test: function(nb, ntf) { - // check that notifications can be removed properly - nb.removeNotification(ntf); - return ntf; - }, - result: function(nb, ntf) { - testtag_notificationbox_State(nb, "removeNotification", null, 0); - - // try removing the notification again to make sure an exception occurs - var exh = false; - try { - nb.removeNotification(ntf); - } catch (ex) { exh = true; } - SimpleTest.is(exh, true, "removeNotification again"); - testtag_notificationbox_State(nb, "removeNotification again", null, 0); - - } - }, - { - test: function(nb, ntf) { - // append a new notification, but now with an event callback - var ntf = nb.appendNotification("Notification", "note", "happy.png", - nb.PRIORITY_INFO_LOW, - testtag_notificationbox_buttons, - notification_eventCallback); - SimpleTest.is(ntf && ntf.localName == "notification", true, "append notification with callback"); - return ntf; - }, - result: function(nb, ntf) { - testtag_notificationbox_State(nb, "append with callback", ntf, 1); - return ntf; - } - }, - { - test: function(nb, ntf) { - nb.removeNotification(ntf); - return ntf; - }, - result: function(nb, ntf) { - testtag_notificationbox_State(nb, "removeNotification with callback", - null, 0); - - testtag_notification_eventCallback(["removed"], ntf, "removeNotification()"); - return ntf; - } - }, - { - test: function(nb, ntf) { - var ntf = nb.appendNotification("Notification", "note", "happy.png", - nb.PRIORITY_INFO_LOW, - testtag_notificationbox_buttons, - notification_eventCallback); - SimpleTest.is(ntf && ntf.localName == "notification", true, "append notification with callback"); - return ntf; - }, - result: function(nb, ntf) { - testtag_notificationbox_State(nb, "append with callback", ntf, 1); - return ntf; - } - }, - { - test: function(rb, ntf) { - // Dismissing the notification instead of removing it should - // fire a dismissed "event" on the callback, followed by - // a removed "event". - ntf.dismiss(); - return ntf; - }, - result: function(nb, ntf) { - testtag_notificationbox_State(nb, "called dismiss()", null, 0); - testtag_notification_eventCallback(["dismissed", "removed"], ntf, - "dismiss()"); - return ntf; - } - }, - { - test: function(nb, ntf) { - // Create a popup to be used by a menu-button. - var doc = nb.ownerDocument; - var menuPopup = doc.createElementNS(NSXUL, "menupopup"); - var menuItem = menuPopup.appendChild(doc.createElementNS(NSXUL, "menuitem")); - menuItem.setAttribute("label", "Menu Item"); - // Append a notification with a button of type 'menu-button'. - ntf = nb.appendNotification( - "Notification", "note", "happy.png", - nb.PRIORITY_WARNING_LOW, - [{ - label: "Button", - type: "menu-button", - popup: menuPopup - }] - ); - - return ntf; - }, - result: function(nb, ntf) { - testtag_notificationbox_State(nb, "append", ntf, 1); - testtag_notification_State(nb, ntf, "append", "Notification", "note", - "happy.png", nb.PRIORITY_WARNING_LOW); - var button = ntf.querySelector(".notification-button"); - SimpleTest.is(button.type, "menu-button", "Button type should be set"); - var menuPopup = button.getElementsByTagNameNS(NSXUL, "menupopup"); - SimpleTest.is(menuPopup.length, 1, "There should be a menu attached"); - var menuItem = menuPopup[0].firstChild; - SimpleTest.is(menuItem.localName, "menuitem", "There should be a menu item"); - SimpleTest.is(menuItem.getAttribute("label"), "Menu Item", "Label should match"); - // Clean up. - nb.removeNotification(ntf); - - return [1, null]; - } - }, - { - repeat: true, - test: function(nb, arr) { - var idx = arr[0]; - var ntf = arr[1]; - switch (idx) { - case 1: - // append a new notification - ntf = nb.appendNotification("Notification", "note", "happy.png", - nb.PRIORITY_INFO_LOW, testtag_notificationbox_buttons); - SimpleTest.is(ntf && ntf.localName == "notification", true, "append notification"); - - // Test persistence - ntf.persistence++; - - return [idx, ntf]; - case 2: - case 3: - nb.removeTransientNotifications(); - - return [idx, ntf]; - } - }, - result: function(nb, arr) { - var idx = arr[0]; - var ntf = arr[1]; - switch (idx) { - case 1: - testtag_notificationbox_State(nb, "notification added", ntf, 1); - testtag_notification_State(nb, ntf, "append", "Notification", "note", - "happy.png", nb.PRIORITY_INFO_LOW); - SimpleTest.is(ntf.persistence, 1, "persistence is 1"); - - return [++idx, ntf]; - case 2: - testtag_notificationbox_State(nb, "first removeTransientNotifications", ntf, 1); - testtag_notification_State(nb, ntf, "append", "Notification", "note", - "happy.png", nb.PRIORITY_INFO_LOW); - SimpleTest.is(ntf.persistence, 0, "persistence is now 0"); - - return [++idx, ntf]; - case 3: - testtag_notificationbox_State(nb, "second removeTransientNotifications", null, 0); - - this.repeat = false; - } - } - }, - { - test: function(nb, ntf) { - // append another notification - var ntf = nb.appendNotification("Notification", "note", "happy.png", - nb.PRIORITY_INFO_MEDIUM, testtag_notificationbox_buttons); - SimpleTest.is(ntf && ntf.localName == "notification", true, "append notification again"); - return ntf; - }, - result: function(nb, ntf) { - // check that appending a second notification after removing the first one works - testtag_notificationbox_State(nb, "append again", ntf, 1); - testtag_notification_State(nb, ntf, "append again", "Notification", "note", - "happy.png", nb.PRIORITY_INFO_MEDIUM); - return ntf; - } - }, - { - test: function(nb, ntf) { - // check the removeCurrentNotification method - nb.removeCurrentNotification(); - return ntf; - }, - result: function(nb, ntf) { - testtag_notificationbox_State(nb, "removeCurrentNotification", null, 0); - } - }, - { - test: function(nb, ntf) { - var ntf = nb.appendNotification("Notification", "note", "happy.png", - nb.PRIORITY_INFO_HIGH, testtag_notificationbox_buttons); - return ntf; - }, - result: function(nb, ntf) { - // test the removeAllNotifications method - testtag_notificationbox_State(nb, "append info_high", ntf, 1); - SimpleTest.is(ntf.priority, nb.PRIORITY_INFO_HIGH, - "notification.priority " + nb.PRIORITY_INFO_HIGH); - SimpleTest.is(nb.removeAllNotifications(false), undefined, "removeAllNotifications"); - } - }, - { - test: function(nb, unused) { - // add a number of notifications and check that they are added in order - nb.appendNotification("Four", "4", null, nb.PRIORITY_INFO_HIGH, testtag_notificationbox_buttons); - nb.appendNotification("Seven", "7", null, nb.PRIORITY_WARNING_HIGH, testtag_notificationbox_buttons); - nb.appendNotification("Two", "2", null, nb.PRIORITY_INFO_LOW, null); - nb.appendNotification("Eight", "8", null, nb.PRIORITY_CRITICAL_LOW, null); - nb.appendNotification("Five", "5", null, nb.PRIORITY_WARNING_LOW, null); - nb.appendNotification("Six", "6", null, nb.PRIORITY_WARNING_HIGH, null); - nb.appendNotification("One", "1", null, nb.PRIORITY_INFO_LOW, null); - nb.appendNotification("Nine", "9", null, nb.PRIORITY_CRITICAL_MEDIUM, null); - var ntf = nb.appendNotification("Ten", "10", null, nb.PRIORITY_CRITICAL_HIGH, null); - nb.appendNotification("Three", "3", null, nb.PRIORITY_INFO_MEDIUM, null); - return ntf; - }, - result: function(nb, ntf) { - SimpleTest.is(nb.currentNotification == ntf ? - nb.currentNotification.value : null, "10", "appendNotification order"); - return 1; - } - }, - { - // test closing notifications to make sure that the current notification is still set properly - repeat: true, - test: function(nb, testidx) { - switch (testidx) { - case 1: - nb.getNotificationWithValue("10").close(); - return [1, 9]; - case 2: - nb.removeNotification(nb.getNotificationWithValue("9")); - return [2, 8]; - case 3: - nb.removeCurrentNotification(); - return [3, 7]; - case 4: - nb.getNotificationWithValue("6").close(); - return [4, 7]; - case 5: - nb.removeNotification(nb.getNotificationWithValue("5")); - return [5, 7]; - case 6: - nb.removeCurrentNotification(); - return [6, 4]; - } - }, - result: function(nb, arr) { - // arr is [testindex, expectedvalue] - SimpleTest.is(nb.currentNotification.value, "" + arr[1], "close order " + arr[0]); - SimpleTest.is(nb.allNotifications.length, 10 - arr[0], "close order " + arr[0] + " count"); - if (arr[0] == 6) - this.repeat = false; - return ++arr[0]; - } - }, - { - test: function(nb, ntf) { - var exh = false; - try { - nb.appendNotification("no", "no", "no", 0, null); - } catch (ex) { exh = true; } - SimpleTest.is(exh, true, "appendNotification priority too low"); - - exh = false; - try { - nb.appendNotification("no", "no", "no", 11, null); - } catch (ex) { exh = true; } - SimpleTest.is(exh, true, "appendNotification priority too high"); - - // check that the other priority types work properly - runTimedTests(appendPriorityTests, -1, nb, nb.PRIORITY_WARNING_LOW); - } - } -]; - -var appendPriorityTests = [ - { - test: function(nb, priority) { - var ntf = nb.appendNotification("Notification", "note", "happy.png", - priority, testtag_notificationbox_buttons); - SimpleTest.is(ntf && ntf.localName == "notification", true, "append notification " + priority); - return [ntf, priority]; - }, - result: function(nb, obj) { - SimpleTest.is(obj[0].priority, obj[1], "notification.priority " + obj[1]); - return obj[1]; - } - }, - { - test: function(nb, priority) { - nb.removeCurrentNotification(); - return priority; - }, - result: function(nb, priority) { - if (priority == nb.PRIORITY_CRITICAL_BLOCK) { - let ntf = nb.appendNotification("Notification", "note", "happy.png", - nb.PRIORITY_INFO_LOW, testtag_notificationbox_buttons); - setTimeout(checkPopupTest, 50, nb, ntf); - } - else { - runTimedTests(appendPriorityTests, -1, nb, ++priority); - } - } - } -]; - -function testtag_notificationbox_State(nb, testid, expecteditem, expectedcount) -{ - SimpleTest.is(nb.currentNotification, expecteditem, testid + " currentNotification"); - SimpleTest.is(nb.allNotifications ? nb.allNotifications.length : "no value", - expectedcount, testid + " allNotifications"); -} - -function testtag_notification_State(nb, ntf, testid, label, value, image, priority) -{ - SimpleTest.is(ntf.control, nb, testid + " notification.control"); - SimpleTest.is(ntf.label, label, testid + " notification.label"); - SimpleTest.is(ntf.value, value, testid + " notification.value"); - SimpleTest.is(ntf.image, image, testid + " notification.image"); - SimpleTest.is(ntf.priority, priority, testid + " notification.priority"); - - var type; - switch (priority) { - case nb.PRIORITY_INFO_LOW: - case nb.PRIORITY_INFO_MEDIUM: - case nb.PRIORITY_INFO_HIGH: - type = "info"; - break; - case nb.PRIORITY_WARNING_LOW: - case nb.PRIORITY_WARNING_MEDIUM: - case nb.PRIORITY_WARNING_HIGH: - type = "warning"; - break; - case nb.PRIORITY_CRITICAL_LOW: - case nb.PRIORITY_CRITICAL_MEDIUM: - case nb.PRIORITY_CRITICAL_HIGH: - case nb.PRIORITY_CRITICAL_BLOCK: - type = "critical"; - break; - } - - SimpleTest.is(ntf.type, type, testid + " notification.type"); -} - -function checkPopupTest(nb, ntf) -{ - if (nb._animating) - setTimeout(checkPopupTest, ntf); - else { - var evt = new Event(""); - ntf.dispatchEvent(evt); - evt.target.buttonInfo = testtag_notificationbox_buttons[0]; - ntf._doButtonCommand(evt); - } -} - -function checkPopupClosed() -{ - is(document.popupNode, null, "popupNode null after popup is closed"); - SimpleTest.finish(); -} - -/** - * run one or more tests which perform a test operation, wait for a delay, - * then perform a result operation. - * - * tests - array of objects where each object is : - * { - * test: test function, - * result: result function - * repeat: true to repeat the test - * } - * idx - starting index in tests - * element - element to run tests on - * arg - argument to pass between test functions - * - * If, after executing the result part, the repeat property of the test is - * true, then the test is repeated. If the repeat property is not true, - * continue on to the next test. - * - * The test and result functions take two arguments, the element and the arg. - * The test function may return a value which will passed to the result - * function as its arg. The result function may also return a value which - * will be passed to the next repetition or the next test in the array. - */ -function runTimedTests(tests, idx, element, arg) -{ - if (idx >= 0 && "result" in tests[idx]) - arg = tests[idx].result(element, arg); - - // if not repeating, move on to the next test - if (idx == -1 || !tests[idx].repeat) - idx++; - - if (idx < tests.length) { - var result = tests[idx].test(element, arg); - setTimeout(runTimedTestsWait, 50, tests, idx, element, result); - } -} - -function runTimedTestsWait(tests, idx, element, arg) -{ - // use this secret property to check if the animation is still running. If it - // is, then the notification hasn't fully opened or closed yet - if (element._animating) - setTimeout(runTimedTestsWait, 50, tests, idx, element, arg); - else - runTimedTests(tests, idx, element, arg); -} - -setTimeout(testtag_notificationbox, 0, document.getElementById('nb')); -]]> -</script> - -</window> - |