diff options
Diffstat (limited to 'toolkit/content/tests/chrome/xul_selectcontrol.js')
-rw-r--r-- | toolkit/content/tests/chrome/xul_selectcontrol.js | 390 |
1 files changed, 0 insertions, 390 deletions
diff --git a/toolkit/content/tests/chrome/xul_selectcontrol.js b/toolkit/content/tests/chrome/xul_selectcontrol.js deleted file mode 100644 index d6518c150..000000000 --- a/toolkit/content/tests/chrome/xul_selectcontrol.js +++ /dev/null @@ -1,390 +0,0 @@ -// This script is used to test elements that implement -// nsIDOMXULSelectControlElement. This currently is the following elements: -// listbox, menulist, radiogroup, richlistbox, tabs -// -// flag behaviours that differ for certain elements -// allow-other-value - alternate values for the value property may be used -// besides those in the list -// other-value-clears-selection - alternative values for the value property -// clears the selected item -// selection-required - an item must be selected in the list, unless there -// aren't any to select -// activate-disabled-menuitem - disabled menuitems can be highlighted -// select-keynav-wraps - key navigation over a selectable list wraps -// select-extended-keynav - home, end, page up and page down keys work to -// navigate over a selectable list -// keynav-leftright - key navigation is left/right rather than up/down -// The win:, mac: and gtk: or other prefixes may be used for platform specific behaviour -var behaviours = { - menu: "win:activate-disabled-menuitem activate-disabled-menuitem-mousemove select-keynav-wraps select-extended-keynav", - menulist: "allow-other-value other-value-clears-selection", - listbox: "select-extended-keynav", - richlistbox: "select-extended-keynav", - radiogroup: "select-keynav-wraps dont-select-disabled allow-other-value", - tabs: "select-extended-keynav mac:select-keynav-wraps allow-other-value selection-required keynav-leftright" -}; - -function behaviourContains(tag, behaviour) -{ - var platform = "none:"; - if (navigator.platform.indexOf("Mac") >= 0) - platform = "mac:"; - else if (navigator.platform.indexOf("Win") >= 0) - platform = "win:"; - else if (navigator.platform.indexOf("X") >= 0) - platform = "gtk:"; - - var re = new RegExp("\\s" + platform + behaviour + "\\s|\\s" + behaviour + "\\s"); - return re.test(" " + behaviours[tag] + " "); -} - -function test_nsIDOMXULSelectControlElement(element, childtag, testprefix) -{ - var testid = (testprefix) ? testprefix + " " : ""; - testid += element.localName + " nsIDOMXULSelectControlElement "; - - // editable menulists use the label as the value instead - var firstvalue = "first", secondvalue = "second", fourthvalue = "fourth"; - if (element.localName == "menulist" && element.editable) { - firstvalue = "First Item"; - secondvalue = "Second Item" - fourthvalue = "Fourth Item"; - } - - // 'initial' - check if the initial state of the element is correct - test_nsIDOMXULSelectControlElement_States(element, testid + "initial", 0, null, -1, ""); - - test_nsIDOMXULSelectControlElement_init(element, testid); - - // 'appendItem' - check if appendItem works to add a new item - var firstitem = element.appendItem("First Item", "first"); - is(firstitem.localName, childtag, - testid + "appendItem - first item is " + childtag); - test_nsIDOMXULSelectControlElement_States(element, testid + "appendItem", 1, null, -1, ""); - - is(firstitem.control, element, testid + "control"); - - // 'selectedIndex' - check if an item may be selected - element.selectedIndex = 0; - test_nsIDOMXULSelectControlElement_States(element, testid + "selectedIndex", 1, firstitem, 0, firstvalue); - - // 'appendItem 2' - check if a second item may be added - var seconditem = element.appendItem("Second Item", "second"); - test_nsIDOMXULSelectControlElement_States(element, testid + "appendItem 2", 2, firstitem, 0, firstvalue); - - // 'selectedItem' - check if the second item may be selected - element.selectedItem = seconditem; - test_nsIDOMXULSelectControlElement_States(element, testid + "selectedItem", 2, seconditem, 1, secondvalue); - - // 'selectedIndex 2' - check if selectedIndex may be set to -1 to deselect items - var selectionRequired = behaviourContains(element.localName, "selection-required"); - element.selectedIndex = -1; - test_nsIDOMXULSelectControlElement_States(element, testid + "selectedIndex 2", 2, - selectionRequired ? seconditem : null, selectionRequired ? 1 : -1, - selectionRequired ? secondvalue : ""); - - // 'selectedItem 2' - check if the selectedItem property may be set to null - element.selectedIndex = 1; - element.selectedItem = null; - test_nsIDOMXULSelectControlElement_States(element, testid + "selectedItem 2", 2, - selectionRequired ? seconditem : null, selectionRequired ? 1 : -1, - selectionRequired ? secondvalue : ""); - - // 'getIndexOfItem' - check if getIndexOfItem returns the right index - is(element.getIndexOfItem(firstitem), 0, testid + "getIndexOfItem - first item at index 0"); - is(element.getIndexOfItem(seconditem), 1, testid + "getIndexOfItem - second item at index 1"); - - var otheritem = element.ownerDocument.createElement(childtag); - is(element.getIndexOfItem(otheritem), -1, testid + "getIndexOfItem - other item not found"); - - // 'getItemAtIndex' - check if getItemAtIndex returns the right item - is(element.getItemAtIndex(0), firstitem, testid + "getItemAtIndex - index 0 is first item"); - is(element.getItemAtIndex(1), seconditem, testid + "getItemAtIndex - index 0 is second item"); - is(element.getItemAtIndex(-1), null, testid + "getItemAtIndex - index -1 is null"); - is(element.getItemAtIndex(2), null, testid + "getItemAtIndex - index 2 is null"); - - // check if setting the value changes the selection - element.value = firstvalue; - test_nsIDOMXULSelectControlElement_States(element, testid + "set value 1", 2, firstitem, 0, firstvalue); - element.value = secondvalue; - test_nsIDOMXULSelectControlElement_States(element, testid + "set value 2", 2, seconditem, 1, secondvalue); - // setting the value attribute to one not in the list doesn't change the selection. - // The value is only changed for elements which support having a value other than the - // selection. - element.value = "other"; - var allowOtherValue = behaviourContains(element.localName, "allow-other-value"); - var otherValueClearsSelection = behaviourContains(element.localName, "other-value-clears-selection"); - test_nsIDOMXULSelectControlElement_States(element, testid + "set value other", 2, - otherValueClearsSelection ? null : seconditem, - otherValueClearsSelection ? -1 : 1, - allowOtherValue ? "other" : secondvalue); - if (allowOtherValue) - element.value = ""; - - // 'removeItemAt' - check if removeItemAt removes the right item - if (selectionRequired) - element.value = secondvalue; - else - element.selectedIndex = -1; - - var removeditem = element.removeItemAt(0); - is(removeditem, firstitem, testid + "removeItemAt return value"); - test_nsIDOMXULSelectControlElement_States(element, testid + "removeItemAt", 1, - selectionRequired ? seconditem : null, selectionRequired ? 0 : -1, - selectionRequired ? secondvalue : ""); - - is(removeditem.control, undefined, testid + "control not set"); - - var thirditem = element.appendItem("Third Item", "third"); - var fourthitem = element.appendItem("Fourth Item", fourthvalue); - var fifthitem = element.appendItem("Fifth Item", "fifth"); - - // 'removeItemAt 2' - check if removeItemAt removes the selected item and - // adjusts the selection to the next item - element.selectedItem = thirditem; - is(element.removeItemAt(1), thirditem, testid + "removeItemAt 2 return value"); - - // radio buttons don't handle removing quite right due to XBL issues, - // so disable testing some of these remove tests for now - bug 367400 - var isnotradio = (element.localName != "radiogroup"); - // XXXndeakin disable these tests for all widgets for now. They require bug 331513. - isnotradio = false; - if (isnotradio) - test_nsIDOMXULSelectControlElement_States(element, testid + "removeItemAt 2", 3, fourthitem, 1, fourthvalue); - - // 'removeItemAt 3' - check if removeItemAt adjusts the selection - // if an earlier item is removed - element.selectedItem = fourthitem; - element.removeItemAt(0); - test_nsIDOMXULSelectControlElement_States(element, testid + "removeItemAt 3", 2, fourthitem, 0, fourthvalue); - - // 'removeItemAt 4' - check if removeItemAt adjusts the selection if the - // last item is selected and removed - element.selectedItem = fifthitem; - element.removeItemAt(1); - if (isnotradio) - test_nsIDOMXULSelectControlElement_States(element, testid + "removeItemAt 4", 1, fourthitem, 0, fourthvalue); - - // 'removeItemAt 5' - check that removeItemAt doesn't fail when removing invalid items - is(element.removeItemAt(-1), null, testid + "removeItemAt 5 return value"); - if (isnotradio) - test_nsIDOMXULSelectControlElement_States(element, testid + "removeItemAt 5", 1, fourthitem, 0, fourthvalue); - - // 'removeItemAt 6' - check that removeItemAt doesn't fail when removing invalid items - is(element.removeItemAt(1), null, testid + "removeItemAt 6 return value"); - is("item removed", "item removed", testid + "removeItemAt 6"); - if (isnotradio) - test_nsIDOMXULSelectControlElement_States(element, testid + "removeItemAt 6", 1, fourthitem, 0, fourthvalue); - - // 'insertItemAt' - check if insertItemAt inserts items at the right locations - element.selectedIndex = 0; - test_nsIDOMXULSelectControlElement_insertItemAt(element, 0, 0, testid, 5); - test_nsIDOMXULSelectControlElement_insertItemAt(element, 2, 2, testid, 6); - test_nsIDOMXULSelectControlElement_insertItemAt(element, -1, 3, testid, 7); - test_nsIDOMXULSelectControlElement_insertItemAt(element, 6, 4, testid, 8); - - element.selectedIndex = 0; - fourthitem.disabled = true; - element.selectedIndex = 1; - test_nsIDOMXULSelectControlElement_States(element, testid + "selectedIndex disabled", 5, fourthitem, 1, fourthvalue); - - element.selectedIndex = 0; - element.selectedItem = fourthitem; - test_nsIDOMXULSelectControlElement_States(element, testid + "selectedIndex disabled", 5, fourthitem, 1, fourthvalue); - - // 'removeall' - check if all items are removed - while (element.itemCount) - element.removeItemAt(0); - if (isnotradio) - test_nsIDOMXULSelectControlElement_States(element, testid + "remove all", 0, null, -1, - allowOtherValue ? "number8" : ""); -} - -function test_nsIDOMXULSelectControlElement_init(element, testprefix) -{ - // editable menulists use the label as the value - var isEditable = (element.localName == "menulist" && element.editable); - - var id = element.id; - element = document.getElementById(id + "-initwithvalue"); - if (element) { - var seconditem = element.getItemAtIndex(1); - test_nsIDOMXULSelectControlElement_States(element, testprefix + " value initialization", - 3, seconditem, 1, - isEditable ? seconditem.label : seconditem.value); - } - - element = document.getElementById(id + "-initwithselected"); - if (element) { - var thirditem = element.getItemAtIndex(2); - test_nsIDOMXULSelectControlElement_States(element, testprefix + " selected initialization", - 3, thirditem, 2, - isEditable ? thirditem.label : thirditem.value); - } -} - -function test_nsIDOMXULSelectControlElement_States(element, testid, - expectedcount, expecteditem, - expectedindex, expectedvalue) -{ - // need an itemCount property here - var count = element.itemCount; - is(count, expectedcount, testid + " item count"); - is(element.selectedItem, expecteditem, testid + " selectedItem"); - is(element.selectedIndex, expectedindex, testid + " selectedIndex"); - is(element.value, expectedvalue, testid + " value"); - if (element.selectedItem) { - is(element.selectedItem.selected, true, - testid + " selectedItem marked as selected"); - } -} - -function test_nsIDOMXULSelectControlElement_insertItemAt(element, index, expectedindex, testid, number) -{ - var expectedCount = element.itemCount; - var expectedSelItem = element.selectedItem; - var expectedSelIndex = element.selectedIndex; - var expectedSelValue = element.value; - - var newitem = element.insertItemAt(index, "Item " + number, "number" + number); - is(element.getIndexOfItem(newitem), expectedindex, - testid + "insertItemAt " + expectedindex + " - get inserted item"); - expectedCount++; - if (expectedSelIndex >= expectedindex) - expectedSelIndex++; - - test_nsIDOMXULSelectControlElement_States(element, testid + "insertItemAt " + index, - expectedCount, expectedSelItem, - expectedSelIndex, expectedSelValue); - return newitem; -} - -/** test_nsIDOMXULSelectControlElement_UI - * - * Test the UI aspects of an element which implements nsIDOMXULSelectControlElement - * - * Parameters: - * element - element to test - */ -function test_nsIDOMXULSelectControlElement_UI(element, testprefix) -{ - var testid = (testprefix) ? testprefix + " " : ""; - testid += element.localName + " nsIDOMXULSelectControlElement UI "; - - while (element.itemCount) - element.removeItemAt(0); - - var firstitem = element.appendItem("First Item", "first"); - var seconditem = element.appendItem("Second Item", "second"); - - // 'mouse select' - check if clicking an item selects it - synthesizeMouseExpectEvent(firstitem, 2, 2, {}, element, "select", testid + "mouse select"); - test_nsIDOMXULSelectControlElement_States(element, testid + "mouse select", 2, firstitem, 0, "first"); - - synthesizeMouseExpectEvent(seconditem, 2, 2, {}, element, "select", testid + "mouse select 2"); - test_nsIDOMXULSelectControlElement_States(element, testid + "mouse select 2", 2, seconditem, 1, "second"); - - // make sure the element is focused so keyboard navigation will apply - element.selectedIndex = 1; - element.focus(); - - var navLeftRight = behaviourContains(element.localName, "keynav-leftright"); - var backKey = navLeftRight ? "VK_LEFT" : "VK_UP"; - var forwardKey = navLeftRight ? "VK_RIGHT" : "VK_DOWN"; - - // 'key select' - check if keypresses move between items - synthesizeKeyExpectEvent(backKey, {}, element, "select", testid + "key up"); - test_nsIDOMXULSelectControlElement_States(element, testid + "key up", 2, firstitem, 0, "first"); - - var keyWrap = behaviourContains(element.localName, "select-keynav-wraps"); - - var expectedItem = keyWrap ? seconditem : firstitem; - var expectedIndex = keyWrap ? 1 : 0; - var expectedValue = keyWrap ? "second" : "first"; - synthesizeKeyExpectEvent(backKey, {}, keyWrap ? element : null, "select", testid + "key up 2"); - test_nsIDOMXULSelectControlElement_States(element, testid + "key up 2", 2, - expectedItem, expectedIndex, expectedValue); - - element.selectedIndex = 0; - synthesizeKeyExpectEvent(forwardKey, {}, element, "select", testid + "key down"); - test_nsIDOMXULSelectControlElement_States(element, testid + "key down", 2, seconditem, 1, "second"); - - expectedItem = keyWrap ? firstitem : seconditem; - expectedIndex = keyWrap ? 0 : 1; - expectedValue = keyWrap ? "first" : "second"; - synthesizeKeyExpectEvent(forwardKey, {}, keyWrap ? element : null, "select", testid + "key down 2"); - test_nsIDOMXULSelectControlElement_States(element, testid + "key down 2", 2, - expectedItem, expectedIndex, expectedValue); - - var thirditem = element.appendItem("Third Item", "third"); - var fourthitem = element.appendItem("Fourth Item", "fourth"); - if (behaviourContains(element.localName, "select-extended-keynav")) { - var fifthitem = element.appendItem("Fifth Item", "fifth"); - var sixthitem = element.appendItem("Sixth Item", "sixth"); - - synthesizeKeyExpectEvent("VK_END", {}, element, "select", testid + "key end"); - test_nsIDOMXULSelectControlElement_States(element, testid + "key end", 6, sixthitem, 5, "sixth"); - - synthesizeKeyExpectEvent("VK_HOME", {}, element, "select", testid + "key home"); - test_nsIDOMXULSelectControlElement_States(element, testid + "key home", 6, firstitem, 0, "first"); - - synthesizeKeyExpectEvent("VK_PAGE_DOWN", {}, element, "select", testid + "key page down"); - test_nsIDOMXULSelectControlElement_States(element, testid + "key page down", 6, fourthitem, 3, "fourth"); - synthesizeKeyExpectEvent("VK_PAGE_DOWN", {}, element, "select", testid + "key page down to end"); - test_nsIDOMXULSelectControlElement_States(element, testid + "key page down to end", 6, sixthitem, 5, "sixth"); - - synthesizeKeyExpectEvent("VK_PAGE_UP", {}, element, "select", testid + "key page up"); - test_nsIDOMXULSelectControlElement_States(element, testid + "key page up", 6, thirditem, 2, "third"); - synthesizeKeyExpectEvent("VK_PAGE_UP", {}, element, "select", testid + "key page up to start"); - test_nsIDOMXULSelectControlElement_States(element, testid + "key page up to start", 6, firstitem, 0, "first"); - - element.removeItemAt(5); - element.removeItemAt(4); - } - - // now test whether a disabled item works. - element.selectedIndex = 0; - seconditem.disabled = true; - - var dontSelectDisabled = (behaviourContains(element.localName, "dont-select-disabled")); - - // 'mouse select' - check if clicking an item selects it - synthesizeMouseExpectEvent(seconditem, 2, 2, {}, element, - dontSelectDisabled ? "!select" : "select", - testid + "mouse select disabled"); - test_nsIDOMXULSelectControlElement_States(element, testid + "mouse select disabled", 4, - dontSelectDisabled ? firstitem: seconditem, dontSelectDisabled ? 0 : 1, - dontSelectDisabled ? "first" : "second"); - - if (dontSelectDisabled) { - // test whether disabling an item won't allow it to be selected - synthesizeKeyExpectEvent(forwardKey, {}, element, "select", testid + "key down disabled"); - test_nsIDOMXULSelectControlElement_States(element, testid + "key down disabled", 4, thirditem, 2, "third"); - - synthesizeKeyExpectEvent(backKey, {}, element, "select", testid + "key up disabled"); - test_nsIDOMXULSelectControlElement_States(element, testid + "key up disabled", 4, firstitem, 0, "first"); - - element.selectedIndex = 2; - firstitem.disabled = true; - - synthesizeKeyExpectEvent(backKey, {}, keyWrap ? element : null, "select", testid + "key up disabled 2"); - expectedItem = keyWrap ? fourthitem : thirditem; - expectedIndex = keyWrap ? 3 : 2; - expectedValue = keyWrap ? "fourth" : "third"; - test_nsIDOMXULSelectControlElement_States(element, testid + "key up disabled 2", 4, - expectedItem, expectedIndex, expectedValue); - } - else { - // in this case, disabled items should behave the same as non-disabled items. - element.selectedIndex = 0; - synthesizeKeyExpectEvent(forwardKey, {}, element, "select", testid + "key down disabled"); - test_nsIDOMXULSelectControlElement_States(element, testid + "key down disabled", 4, seconditem, 1, "second"); - synthesizeKeyExpectEvent(forwardKey, {}, element, "select", testid + "key down disabled again"); - test_nsIDOMXULSelectControlElement_States(element, testid + "key down disabled again", 4, thirditem, 2, "third"); - - synthesizeKeyExpectEvent(backKey, {}, element, "select", testid + "key up disabled"); - test_nsIDOMXULSelectControlElement_States(element, testid + "key up disabled", 4, seconditem, 1, "second"); - synthesizeKeyExpectEvent(backKey, {}, element, "select", testid + "key up disabled again"); - test_nsIDOMXULSelectControlElement_States(element, testid + "key up disabled again", 4, firstitem, 0, "first"); - } -} |