<!DOCTYPE html>
<html>
<head>
  <title>nsIAccessibleText getText related function tests for rich text</title>
  <link rel="stylesheet" type="text/css"
        href="chrome://mochikit/content/tests/SimpleTest/test.css" />

  <style>
    #listitemnone {
      list-style-type: none;
    }
    h6.gencontent:before {
      content: "aga"
    }
  </style>

  <script type="application/javascript"
          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
  <script type="application/javascript"
          src="../common.js"></script>
  <script type="application/javascript"
          src="../text.js"></script>

  <script type="application/javascript">
    function doTest()
    {
      //////////////////////////////////////////////////////////////////////////
      // null getText
      //////////////////////////////////////////////////////////////////////////

      var emptyTextAcc = getAccessible("nulltext", [nsIAccessibleText]);
      is(emptyTextAcc.getText(0, -1), "", "getText() END_OF_TEXT with null string");
      is(emptyTextAcc.getText(0, 0), "", "getText() Len==0 with null string");

      //////////////////////////////////////////////////////////////////////////
      // hypertext
      //////////////////////////////////////////////////////////////////////////

      // ! - embedded object char
      // __h__e__l__l__o__ __!__ __s__e__e__ __!__
      //  0  1  2  3  4  5  6  7  8  9 10 11 12 13

      var IDs = [ "hypertext", "hypertext2" ];

      ////////////////////////////////////////////////////////////////////////
      // characterCount

      testCharacterCount(IDs, 13);

      ////////////////////////////////////////////////////////////////////////
      // getText

      testText(IDs, 0, 1, "h");
      testText(IDs, 5, 7, " " + kEmbedChar);
      testText(IDs, 10, 13, "e " + kEmbedChar);
      testText(IDs, 0, 13, "hello " + kEmbedChar + " see " + kEmbedChar);

      ////////////////////////////////////////////////////////////////////////
      // getTextAtOffset line boundary

      testTextAtOffset(0, BOUNDARY_LINE_START, "line ", 0, 5,
                       "hypertext3", kOk, kOk, kOk);

      // XXX: see bug 634202.
      testTextAtOffset(0, BOUNDARY_LINE_START, "line ", 0, 5,
                       "hypertext4", kTodo, kOk, kTodo);

      //////////////////////////////////////////////////////////////////////////
      // list
      //////////////////////////////////////////////////////////////////////////

      IDs = [ "list" ];
      testCharacterCount(IDs, 2);
      testText(IDs, 0, 2, kEmbedChar + kEmbedChar);

      IDs = [ "listitem" ];
      testCharacterCount(IDs, 6);
      testText(IDs, 0, 6, "1. foo");

      IDs = [ "listitemnone" ];
      testCharacterCount(IDs, 3);
      testText(IDs, 0, 3, "bar");

      testText(["testbr"], 0, 3, "foo");

      testTextAtOffset(2, nsIAccessibleText.BOUNDARY_CHAR, "o", 2, 3, "testbr",
                       kOk, kOk, kOk);
      testTextAtOffset(2, nsIAccessibleText.BOUNDARY_WORD_START, "foo\n", 0, 4,
                       "testbr", kTodo, kOk, kTodo);
      testTextBeforeOffset(2, nsIAccessibleText.BOUNDARY_LINE_START, "foo\n",
                           0, 4, "testbr", kTodo, kOk, kTodo);

      SimpleTest.finish();
    }

    SimpleTest.waitForExplicitFinish();
    addA11yLoadEvent(doTest);
  </script>
</head>
<body>

  <a target="_blank"
     title="Fix getText"
     href="https://bugzilla.mozilla.org/show_bug.cgi?id=630001">
    Bug 630001, part3
  </a>
  <a target="_blank"
     title="getTextAtOffset line boundary may return more than one line"
     href="https://bugzilla.mozilla.org/show_bug.cgi?id=638326">
    Bug 638326
  </a>
  <a target="_blank"
     title="getText(0, -1) fails with empty text"
     href="https://bugzilla.mozilla.org/show_bug.cgi?id=749810">
    Bug 749810
  </a>

  <p id="display"></p>
  <div id="content" style="display: none"></div>
  <pre id="test">
  </pre>

  <div id="nulltext"></div>

  <div id="hypertext">hello <a>friend</a> see <img src="about:blank"></div>
  <div id="hypertext2">hello <a>friend</a> see <input></div>
  <ol id="list">
    <li id="listitem">foo</li>
    <li id="listitemnone">bar</li>
  </ol>

  <div id="hypertext3">line
<!-- haha -->
<!-- hahaha -->
<h6>heading</h6>
  </div>

  <div id="hypertext4">line
<!-- haha -->
<!-- hahaha -->
<h6 role="presentation" class="gencontent">heading</h6>
  </div>

  <div id="testbr">foo<br/></div>

</body>
</html>