<?xml version="1.0"?>
<!-- Descrpt: Test nsIAccessible Interface attributes and methods
     for XUL Listbox's LISTITEM Node
     Author: dsirnapalli@netscape.com
     Created:05.28.02
     Last Updated:06.14.02.

   - ***** BEGIN LICENSE BLOCK *****
   - Version: MPL 1.1/GPL 2.0/LGPL 2.1
   -
   - The contents of this file are subject to the Mozilla Public License Version
   - 1.1 (the "License"); you may not use this file except in compliance with
   - the License. You may obtain a copy of the License at
   - http://www.mozilla.org/MPL/
   -
   - Software distributed under the License is distributed on an "AS IS" basis,
   - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
   - for the specific language governing rights and limitations under the
   - License.
   -
   - The Original Code is Mozilla Communicator Test Cases.
   -
   - The Initial Developer of the Original Code is
   - Netscape Communications Corp.
   - Portions created by the Initial Developer are Copyright (C) 1999
   - the Initial Developer. All Rights Reserved.
   -
   - Contributor(s):
   -
   - Alternatively, the contents of this file may be used under the terms of
   - either the GNU General Public License Version 2 or later (the "GPL"), or
   - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
   - in which case the provisions of the GPL or the LGPL are applicable instead
   - of those above. If you wish to allow use of your version of this file only
   - under the terms of either the GPL or the LGPL, and not to allow others to
   - use your version of this file under the terms of the MPL, indicate your
   - decision by deleting the provisions above and replace them with the notice
   - and other provisions required by the GPL or the LGPL. If you do not delete
   - the provisions above, a recipient may use your version of this file under
   - the terms of any one of the MPL, the GPL or the LGPL.
   -
   - ***** END LICENSE BLOCK ***** -->

<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window
  id="listitem-window"
  title="XUL Listitem"
  xmlns:html="http://www.w3.org/1999/xhtml"
  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

  <html:script src="http://www.mozilla.org/quality/embed/jstests/accessibility/jslib/accesslib.js"> </html:script>
  <html:script src="http://www.mozilla.org/quality/embed/jstests/accessibility/jslib/bridge.js"> </html:script>

  <html:script>
  <![CDATA[

  function getDomNodeListItem()
  {
    try{
      netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
      netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
  
      var node = document.getElementsByTagName("listitem").item(0);
      return node;
    }
    catch(e){
      alert("Exception: " + e);
    }
  }  
  
  function executeTestCase()
  {
    var domNode = getDomNodeListItem();
    domNode.addEventListener('focus',nodeFocused,true);

    accNode = getAccessibleNode(domNode);
    tempaccNode = accNode;
    try{
      netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
      netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

      accNode.accTakeFocus();
      var action = doAction();
    }
    catch(e){
      alert("Exception**: " + e);
    }
    setTimeout("constructResults();", 2000);
  }

  function nodeSelected()
  {
    nodeClick = "List Item Selected";
  }
 
  function constructResults()
  {
    try{
    netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

    if(tempaccNode.accGetDOMNode() == accNode.accFocused.accGetDOMNode())
    {
      varaccFocused = "Focused";
    }
    else
    {
      varaccFocused = "Not Focused";
    }

    var name = getName();
    var role = getRole();
    var state = getState();
    var value = getValue();
    var newvalue = value.toString();
    var numActions = getNumActions();
    var actionName = getActionName();
    var keyboardShortcut = getAccKeyboardShortcut();

    var expectedName          = "First Item";
    var expectedRole          = "34";
    var expectedState         = "3145734";
    var expectedValue         = "NS_ERROR_NOT_IMPLEMENTED";
    var expectednodeFocus     = "Focused";
    var expectedaccFocused    = "Focused";
    var expectednumActions    = "1";
    var expectedactionName    = "Select";
    var expectednodeClick     = "List Item Selected";
    var expectedkeyboardShortcut = "I";

    var row0 = new Array("Property/Method", "Expected Values", "Actual Values", "Result");
    var row1 = new Array("Name->", expectedName, name);
    var row2 = new Array("Role->", expectedRole, role);
    var row3 = new Array("State->", expectedState, state);
    var row4 = new Array("Value->", expectedValue, value);
    var row5 = new Array("accTakeFocus()->", expectednodeFocus, nodeFocus);
    var row6 = new Array("accFocused->", expectedaccFocused, varaccFocused);
    var row7 = new Array("accNumActions->", expectednumActions, numActions);
    var row8 = new Array("getAccActionName()->", expectedactionName, actionName);
    var row9 = new Array("accDoAction()->", expectednodeClick, nodeClick);
    var row10 = new Array("accKeyboardShortcut->", expectedkeyboardShortcut, keyboardShortcut);

    row = new Array(row0, row1, row2, row3, row4, row5, row6, row7, row8, row9, row10);

    if (name == expectedName)                 row1[3] = "PASS"; else row1[3] = "FAIL";
    if (role == expectedRole)                 row2[3] = "PASS"; else row2[3] = "FAIL";
    if (state == expectedState)               row3[3] = "PASS"; else row3[3] = "FAIL";
    if (newvalue.match(expectedValue))        row4[3] = "PASS"; else row4[3] = "FAIL";
    if (nodeFocus == expectednodeFocus)       row5[3] = "PASS"; else row5[3] = "FAIL";
    if (varaccFocused == expectedaccFocused)  row6[3] = "PASS"; else row6[3] = "FAIL";
    if (numActions == expectednumActions)     row7[3] = "PASS"; else row7[3] = "FAIL";
    if (actionName == expectedactionName)     row8[3] = "PASS"; else row8[3] = "FAIL";
    if (nodeClick == expectednodeClick)       row9[3] = "PASS"; else row9[3] = "FAIL";
    if (keyboardShortcut == expectedkeyboardShortcut)
                                              row10[3] = "PASS"; else row10[3] = "FAIL";

    appendTableRes();
    WriteResults(res);    
   }
   catch(e){
    alert("Exception**: " + e);
   }
  }
  
  ]]>
  </html:script>

  <box orient="vertical">
    <description>
      <html:b> Testing XUL Listbox's ListItem for Accessibility.. </html:b>
    </description>
    <label value="Select a List Item:" control="get-item"/>
    <box orient="horizontal">
      <!-- listbox element is used to create multi-row list boxes -->
      <listbox id="get-item">
        <listitem label="First Item" value="firstitem" oncommand="nodeSelected();" accesskey="I"/>
        <listitem label="Second Item" value="seconditem" selected ="true"/>
        <listitem label="Third Item" value="thirditem"/>
        <listitem label="Fourth Item" value="fourthitem"/>
      </listbox>  
      <spacer flex="1"/>
    </box>
  </box>

  <html:script>
  <![CDATA[
    res = "<b><u> Results for XUL Listbox's Listitem Node:</u></b><br><br>";
    nodeFocus = "Not Focused";
    nodeClick = "List Item Not Selected";    

    setTimeout("executeTestCase();", 2000);
  ]]>
  </html:script>  
</window>