<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<title> nsIAccessible Interface Test Case </title>
<!-- Descrpt: Test nsIAccessible Interface methods for HTML Anchor Node
     Author: dsirnapalli@netscape.com
     Revs: 12.13.01 - Created
     Last Run On:01.30.02.

   - 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 Netscape Communications Corp. are
   - Copyright (C) 1999 Netscape Communications Corp.  All
   - Rights Reserved.
   -
   - Contributor(s):
  -->
<head>

<!-- script below is ngdriverspecific  -->
<script type="text/javascript" src="http://bubblegum/ngdriver/suites/testlib.js">
</script>

<script type="text/javascript" src="accessibility.js"></script>

<script type="text/javascript">

function getDomNodeAnchor()
{
 try{
  netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
  netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

  var node = document.getElementsByTagName("a").item(0);
  return node;
 }
 catch(e){
  alert("Exception: " + e);
 }
}

function executeTestCase()
{
  var domNode = getDomNodeAnchor();

  if(domNode == null)
  {
    res = res + "Could not get the DOM Node";
    submitToCookie();
  }
  else
  { //else1
    accNode = getAccessibleNode(domNode);
    tempaccNode = accNode;

    if(accNode == "Exception")
    {
      res = res + "The Node you selected is not an Accessible Node";
      submitToCookie();
    }
    else
    { //else2
     try{
	   netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
	   netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

	   accNode.accTakeFocus();
	   setTimeout("constructResults();", 2000);
     }
     catch(e){
      alert("Exception**: " + e);
     }
    }//else2
  } //else1
}

function constructResults()
{
 try{
   netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
   netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

   // here we are comparing two node using accGetDOMNode() function because,
   // you cant use == to compare two nodes. may be we could override == operator,
   // we dont keep entire tree in memory, because that would cause bloat. when we
   // need to give someone nsIAccessible we create a new one each time, but we dont
   // keep trace of it, so there may be several nsIAccessible's at the same time
   // in memory all representing the same part of the doc. however you can compare
   // the two objs by checking their dom nodes. For users of IAccessible who dont
   // have accGetDOMNode(), they can compare the unique ID value, which is
   // essentially the numerical value of the dom node ptr.
   if(tempaccNode.accGetDOMNode() == accNode.accFocused.accGetDOMNode())
   {
     varaccFocused = true;
   }
   else
   {
     varaccFocused = false;
   }

   var name = getName(accNode);
   var role = getRole(accNode);
   var state = getState(accNode);
   var value = getValue(accNode);

   if (focused == true) focus = "Focused"; else focus = "Not Focused";
   if (varaccFocused == true) tookfocus = "Focused"; else tookfocus = "Not Focused";

   var expectedName      = "External Link";
   var expectedRole      = "30";
   var expectedState     = "7340100";
   var expectedValue     = "http://home.netscape.com";
   var expectedFocus     = "Focused";
   var expectedTookfocus = "Focused";

   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->", expectedFocus, focus);
   var row6 = new Array("accFocused->", expectedTookfocus, tookfocus);

   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 (value == expectedValue)         row4[3] = "PASS"; else row4[3] = "FAIL";
   if (focus == expectedFocus)         row5[3] = "PASS"; else row5[3] = "FAIL";
   if (tookfocus == expectedTookfocus) row6[3] = "PASS"; else row6[3] = "FAIL";

   res += "<table border cols=4 width='70%'>";
   res += "<tr>";
   for(col=0; col<4; col++)
     res += "<td><b>" + row0[col] + "</b></td>";
   res += "</tr>";
   res += "<tr>";
   for(col=0; col<4; col++)
   {
    if(row1[col] == "FAIL")
     res += "<td bgcolor='#FF0000'>" + row1[col] + "</td>";
    else
     res += "<td>" + row1[col] + "</td>";
   }
   res += "</tr>";
   res += "<tr>";
   for(col=0; col<4; col++)
   {
    if(row2[col] == "FAIL")
     res += "<td bgcolor='#FF0000'>" + row2[col] + "</td>";
    else
     res += "<td>" + row2[col] + "</td>";
   }
   res += "</tr>";
   res += "<tr>";
   for(col=0; col<4; col++)
   {
    if(row3[col] == "FAIL")
     res += "<td bgcolor='#FF0000'>" + row3[col] + "</td>";
    else
     res += "<td>" + row3[col] + "</td>";
   }
   res += "</tr>";
   res += "<tr>";
   for(col=0; col<4; col++)
   {
    if(row4[col] == "FAIL")
     res += "<td bgcolor='#FF0000'>" + row4[col] + "</td>";
    else
     res += "<td>" + row4[col] + "</td>";
   }
   res += "</tr>";
   res += "<tr>";
   for(col=0; col<4; col++)
   {
    if(row5[col] == "FAIL")
     res += "<td bgcolor='#FF0000'>" + row5[col] + "</td>";
    else
     res += "<td>" + row5[col] + "</td>";
   }
   res += "</tr>";
   res += "<tr>";
   for(col=0; col<4; col++)
   {
    if(row6[col] == "FAIL")
     res += "<td bgcolor='#FF0000'>" + row6[col] + "</td>";
    else
     res += "<td>" + row6[col] + "</td>";
   }
   res += "</tr>";
   res += "</table>";

   submitToCookie();
 }
 catch(e){
  alert("Exception**: " + e);
 }
}

function submitToCookie()
{
  createCookie("nsIAccessibleTestAnchorNode", res, 14);
  setTimeout("window.location.reload();", 2000);
}

</script>
</head>
<body>

<!-- form below is ngdriverspecific  -->
<form name="results" action="/ngdriver/cgi-bin/writeresults.cgi" method="post">
<script type="text/javascript">
document.write('<input name="resultsfile" type="hidden" value="' + window.opener.document.resultsform.resultsfile.value + '">');
</script>
<input type="hidden" name="textarea">
</form>

<script type="text/javascript">

focused = false;
var res = "<b><u> Results for HTML Anchor Node:</u></b><br><br>";
if(readCookie("nsIAccessibleTestAnchorNode") == null)
{
  <!-- Test Anchor -->
  <!-- Anchor linking to external file -->
  document.write('Testing Link' + '<br>');
  document.write('<a href="http://home.netscape.com" onFocus="focused=true">External Link</a>');

  setTimeout("executeTestCase();", 2000);
}
else
{
  var cookieValue = readCookie("nsIAccessibleTestAnchorNode");
  eraseCookie("nsIAccessibleTestAnchorNode");
  displayResults(cookieValue);
}

</script>
</body>
</html>

