orca r4091 - in trunk: . test/keystrokes/firefox



Author: joanied
Date: Sat Aug  9 02:38:34 2008
New Revision: 4091
URL: http://svn.gnome.org/viewvc/orca?rev=4091&view=rev

Log:
* test/keystrokes/firefox/sayAll_bugzilla_search.py:
  test/keystrokes/firefox/sayAll_html_test_page.py:
  test/keystrokes/firefox/sayAll_enter_bug.py:
  test/keystrokes/firefox/sayAll_nested_tables.py:
  test/keystrokes/firefox/sayAll_simple_form.py:
  test/keystrokes/firefox/sayAll_imagemap.py:
  test/keystrokes/firefox/sayAll_multi_line_text.py:
  test/keystrokes/firefox/sayAll_entries.py:
  test/keystrokes/firefox/sayAll_heading_section.py:
  test/keystrokes/firefox/sayAll_table_cell_links.py:
  test/keystrokes/firefox/sayAll_empty_anchor.py:
  test/keystrokes/firefox/sayAll_role_links.py:
  test/keystrokes/firefox/sayAll_role_combo_box.py:
  test/keystrokes/firefox/sayAll_bug_512303.py:
  test/keystrokes/firefox/sayAll_wiki.py:
  test/keystrokes/firefox/sayAll_bug_511389.py:
  test/keystrokes/firefox/sayAll_blockquote.py:
  test/keystrokes/firefox/sayAll_role_lists.py:
  New regression tests for sayAll in Firefox. 


Added:
   trunk/test/keystrokes/firefox/sayAll_blockquote.py
   trunk/test/keystrokes/firefox/sayAll_bug_511389.py
   trunk/test/keystrokes/firefox/sayAll_bug_512303.py
   trunk/test/keystrokes/firefox/sayAll_bugzilla_search.py
   trunk/test/keystrokes/firefox/sayAll_empty_anchor.py
   trunk/test/keystrokes/firefox/sayAll_enter_bug.py
   trunk/test/keystrokes/firefox/sayAll_entries.py
   trunk/test/keystrokes/firefox/sayAll_heading_section.py
   trunk/test/keystrokes/firefox/sayAll_html_test_page.py
   trunk/test/keystrokes/firefox/sayAll_imagemap.py
   trunk/test/keystrokes/firefox/sayAll_multi_line_text.py
   trunk/test/keystrokes/firefox/sayAll_nested_tables.py
   trunk/test/keystrokes/firefox/sayAll_role_combo_box.py
   trunk/test/keystrokes/firefox/sayAll_role_links.py
   trunk/test/keystrokes/firefox/sayAll_role_lists.py
   trunk/test/keystrokes/firefox/sayAll_simple_form.py
   trunk/test/keystrokes/firefox/sayAll_table_cell_links.py
   trunk/test/keystrokes/firefox/sayAll_wiki.py
Modified:
   trunk/ChangeLog

Added: trunk/test/keystrokes/firefox/sayAll_blockquote.py
==============================================================================
--- (empty file)
+++ trunk/test/keystrokes/firefox/sayAll_blockquote.py	Sat Aug  9 02:38:34 2008
@@ -0,0 +1,75 @@
+# -*- coding: utf-8 -*-
+#!/usr/bin/python
+
+"""Test of sayAll output with HTML blockquotes in Firefox."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+########################################################################
+# We wait for the focus to be on a blank Firefox window.
+#
+sequence.append(WaitForWindowActivate("Minefield",None))
+
+########################################################################
+# Load the local blockquote test case.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction(utils.htmlURLPrefix + "blockquotes.html"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+sequence.append(WaitForFocus("Blockquote Regression Test",
+                             acc_role=pyatspi.ROLE_DOCUMENT_FRAME))
+
+sequence.append(PauseAction(3000))
+
+########################################################################
+# Press Control+Home to move to the top.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "Top of file", 
+    ["BRAILLE LINE:  'On weaponry:'",
+     "     VISIBLE:  'On weaponry:', cursor=1",
+     "SPEECH OUTPUT: 'On weaponry:'"]))
+
+########################################################################
+# SayAll to the End.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Add"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_Add to do a SayAll",
+    ["SPEECH OUTPUT: 'On weaponry:'",
+     "SPEECH OUTPUT: 'NOBODY expects the Spanish Inquisition! Our chief weapon is surprise. Surprise and fear. Fear and surprise. Our two weapons are fear and surprise. And ruthless efficiency. Our three weapons are fear, surprise, and ruthless efficiency. And an almost fanatical devotion to the Pope. Our four. No. Amongst our weapons. Amongst our weaponry, are such elements as fear, surprise. I'll come in again. NOBODY expects the Spanish Inquisition! Amongst our weaponry are such diverse elements as: fear, surprise, ruthless efficiency, an almost fanatical devotion to the Pope, and nice red uniforms - Oh damn!'",
+     "SPEECH OUTPUT: 'On old ladies:'",
+     "SPEECH OUTPUT: 'Now old lady, you have one last chance. Confess the heinous sin of heresy, reject the works of the ungodly. Two last chances. And you shall be free. Three last chances. You have three last chances, the nature of which I have divulged in my previous utterance.'",
+     "SPEECH OUTPUT: 'On castle decor:'",
+     "SPEECH OUTPUT: 'Hm! She is made of harder stuff! Cardinal Fang! Fetch the COMFY CHAIR!'"]))
+
+########################################################################
+# Move to the location bar by pressing Control+L.  When it has focus
+# type "about:blank" and press Return to restore the browser to the
+# conditions at the test's start.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction("about:blank"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+# Just a little extra wait to let some events get through.
+#
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.AssertionSummaryAction())
+
+sequence.start()

Added: trunk/test/keystrokes/firefox/sayAll_bug_511389.py
==============================================================================
--- (empty file)
+++ trunk/test/keystrokes/firefox/sayAll_bug_511389.py	Sat Aug  9 02:38:34 2008
@@ -0,0 +1,71 @@
+# -*- coding: utf-8 -*-
+#!/usr/bin/python
+
+"""Test of sayAll on the problem document from bug 511389."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+########################################################################
+# We wait for the focus to be on a blank Firefox window.
+#
+sequence.append(WaitForWindowActivate("Minefield",None))
+
+########################################################################
+# Load the local "simple form" test case.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction(utils.htmlURLPrefix + "bug-511389.html"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+########################################################################
+# Press Control+Home to move to the top.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "Top of file",
+    ["BRAILLE LINE:  'Hello world Link , this is a test.'",
+     "     VISIBLE:  'Hello world Link , this is a tes', cursor=1",
+     "SPEECH OUTPUT: 'Hello world link , this is a test.'"]))
+
+########################################################################
+# SayAll to the End.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Add"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_Add to do a SayAll",
+    ["SPEECH OUTPUT: 'Hello world link'",
+     "SPEECH OUTPUT: ', this is a test.'",
+     "SPEECH OUTPUT: 'Foo link'",
+     "SPEECH OUTPUT: '",
+     " Bar link ",
+     "The end.'"]))
+
+########################################################################
+# Move to the location bar by pressing Control+L.  When it has focus
+# type "about:blank" and press Return to restore the browser to the
+# conditions at the test's start.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction("about:blank"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+# Just a little extra wait to let some events get through.
+#
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.AssertionSummaryAction())
+
+sequence.start()

Added: trunk/test/keystrokes/firefox/sayAll_bug_512303.py
==============================================================================
--- (empty file)
+++ trunk/test/keystrokes/firefox/sayAll_bug_512303.py	Sat Aug  9 02:38:34 2008
@@ -0,0 +1,80 @@
+# -*- coding: utf-8 -*-
+#!/usr/bin/python
+
+"""Test of sayAll on the problem document from bug 512303."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+########################################################################
+# We wait for the focus to be on a blank Firefox window.
+#
+sequence.append(WaitForWindowActivate("Minefield",None))
+
+########################################################################
+# Load the local "simple form" test case.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction(utils.htmlURLPrefix + "table-caption.html"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+########################################################################
+# Press Control+Home to move to the top.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "Top of file",
+    ["BRAILLE LINE:  'Below is a table, with some sample table data'",
+     "     VISIBLE:  'Below is a table, with some samp', cursor=1",
+     "SPEECH OUTPUT: 'Below is a table, with some sample table data'"]))
+
+########################################################################
+# SayAll to the End.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Add"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_Add to do a SayAll",
+    ["SPEECH OUTPUT: 'Below is a table, with some sample table data'",
+     "SPEECH OUTPUT: 'this is a caption for this table caption'",
+     "SPEECH OUTPUT: 'col1'",
+     "SPEECH OUTPUT: 'col2'",
+     "SPEECH OUTPUT: 'col3'",
+     "SPEECH OUTPUT: '1'",
+     "SPEECH OUTPUT: '2'",
+     "SPEECH OUTPUT: '3'",
+     "SPEECH OUTPUT: '4'",
+     "SPEECH OUTPUT: '5'",
+     "SPEECH OUTPUT: '6'",
+     "SPEECH OUTPUT: '7'",
+     "SPEECH OUTPUT: '8'",
+     "SPEECH OUTPUT: '9'",
+     "SPEECH OUTPUT: 'hope the table looks pretty'"]))
+
+########################################################################
+# Move to the location bar by pressing Control+L.  When it has focus
+# type "about:blank" and press Return to restore the browser to the
+# conditions at the test's start.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction("about:blank"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+# Just a little extra wait to let some events get through.
+#
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.AssertionSummaryAction())
+
+sequence.start()

Added: trunk/test/keystrokes/firefox/sayAll_bugzilla_search.py
==============================================================================
--- (empty file)
+++ trunk/test/keystrokes/firefox/sayAll_bugzilla_search.py	Sat Aug  9 02:38:34 2008
@@ -0,0 +1,179 @@
+# -*- coding: utf-8 -*-
+#!/usr/bin/python
+
+"""Test of sayAll output of Firefox on bugzilla's advanced search page."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+########################################################################
+# We wait for the focus to be on a blank Firefox window.
+#
+sequence.append(WaitForWindowActivate("Minefield",None))
+
+########################################################################
+# Load the local "simple form" test case.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction(utils.htmlURLPrefix + "bugzilla-advanced.html"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+sequence.append(WaitForFocus("Search for bugs",
+                             acc_role=pyatspi.ROLE_DOCUMENT_FRAME))
+
+########################################################################
+# Press Orca+Right to get out of the focused entry, then Control+Home
+# to move to the top.
+#
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(KeyComboAction("Right"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "Top of file",
+    ["BRAILLE LINE:  'Home Link Image Bugzilla'",
+     "     VISIBLE:  'Home Link Image Bugzilla', cursor=1",
+     "SPEECH OUTPUT: 'Home link image Bugzilla'"]))
+
+########################################################################
+# SayAll to the End.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Add"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_Add to do a SayAll",
+    ["SPEECH OUTPUT: 'Home link image'",
+     "SPEECH OUTPUT: 'Bugzilla'",
+     "SPEECH OUTPUT: 'New bug link'",
+     "SPEECH OUTPUT: ' Â Browse link  Â Search link  Â Reports link  Â Account link  Â Admin link  Â Help link'",
+     "SPEECH OUTPUT: 'Logged In joanmarie diggs gmail com | Log Out link'",
+     "SPEECH OUTPUT: 'Â'",
+     "SPEECH OUTPUT: 'Short Bug Search Form link'",
+     "SPEECH OUTPUT: 'Complicated Bug Search Form'",
+     "SPEECH OUTPUT: 'Â'",
+     "SPEECH OUTPUT: 'Give me some help link'",
+     "SPEECH OUTPUT: ' (reloads page.)'",
+     "SPEECH OUTPUT: 'Summary:'",
+     "SPEECH OUTPUT: 'contains all of the words/strings combo box'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'Search button'",
+     "SPEECH OUTPUT: 'Classification:'",
+     "SPEECH OUTPUT: 'multi-select List with 8 items'",
+     "SPEECH OUTPUT: 'Product:'",
+     "SPEECH OUTPUT: 'multi-select List with 379 items'",
+     "SPEECH OUTPUT: 'Component link'",
+     "SPEECH OUTPUT: ':'",
+     "SPEECH OUTPUT: 'multi-select List with 1248 items'",
+     "SPEECH OUTPUT: 'Version:'",
+     "SPEECH OUTPUT: 'multi-select List with 857 items'",
+     "SPEECH OUTPUT: 'Target Milestone:'",
+     "SPEECH OUTPUT: 'multi-select List with 555 items'",
+     "SPEECH OUTPUT: 'AÂComment:'",
+     "SPEECH OUTPUT: 'contains the string combo box'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'Whiteboard:'",
+     "SPEECH OUTPUT: 'contains all of the words/strings combo box'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'Keywords link'",
+     "SPEECH OUTPUT: ':'",
+     "SPEECH OUTPUT: 'contains all of the keywords combo box'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'separator'",
+     "SPEECH OUTPUT: 'Status:'",
+     "SPEECH OUTPUT: 'multi-select List with 8 items'",
+     "SPEECH OUTPUT: 'Resolution:'",
+     "SPEECH OUTPUT: 'multi-select List with 12 items'",
+     "SPEECH OUTPUT: 'Severity:'",
+     "SPEECH OUTPUT: 'multi-select List with 7 items'",
+     "SPEECH OUTPUT: 'Priority:'",
+     "SPEECH OUTPUT: 'multi-select List with 5 items'",
+     "SPEECH OUTPUT: 'OS:'",
+     "SPEECH OUTPUT: 'multi-select List with 21 items'",
+     "SPEECH OUTPUT: 'Any one of:'",
+     "SPEECH OUTPUT: 'check box checked'",
+     "SPEECH OUTPUT: ' the bug assignee'",
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: ' the reporter'",
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: ' the QA contact'",
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: ' a CC list member'",
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: ' a commenter'",
+     "SPEECH OUTPUT: 'contains combo box'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'Any one of:'",
+     "SPEECH OUTPUT: 'check box checked'",
+     "SPEECH OUTPUT: ' the bug assignee'",
+     "SPEECH OUTPUT: 'check box checked'",
+     "SPEECH OUTPUT: ' the reporter'",
+     "SPEECH OUTPUT: 'check box checked'",
+     "SPEECH OUTPUT: ' the QA contact'",
+     "SPEECH OUTPUT: 'check box checked'",
+     "SPEECH OUTPUT: ' a CC list member'",
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: ' a commenter'",
+     "SPEECH OUTPUT: 'contains combo box'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'separator'",
+     "SPEECH OUTPUT: 'Only include combo box'",
+     "SPEECH OUTPUT: 'bugs numbered:'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: '(comma-separated list)'",
+     "SPEECH OUTPUT: 'Only bugs changed between:'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: ' and text Now  ",
+     "(YYYY-MM-DD or relative dates)'",
+     "SPEECH OUTPUT: 'where one or more of the following changed:'",
+     "SPEECH OUTPUT: 'multi-select List with 26 items'",
+     "SPEECH OUTPUT: 'and the new value was:'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'GNOME version:'",
+     "SPEECH OUTPUT: 'multi-select List with 14 items'",
+     "SPEECH OUTPUT: 'GNOME target:'",
+     "SPEECH OUTPUT: 'multi-select List with 12 items'",
+     "SPEECH OUTPUT: 'Sort results by: Reuse same sort as last time combo box'",
+     "SPEECH OUTPUT: 'Search button'",
+     "SPEECH OUTPUT: 'ÂÂÂ check box not checked  and remember these as my default search options'",
+     "SPEECH OUTPUT: 'separator'",
+     "SPEECH OUTPUT: 'Advanced Searching Using Boolean Charts:'",
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: ' Not (negate this whole chart)'",
+     "SPEECH OUTPUT: '--- combo box'",
+     "SPEECH OUTPUT: '--- combo box text'",
+     "SPEECH OUTPUT: 'Or button'",
+     "SPEECH OUTPUT: 'And button'",
+     "SPEECH OUTPUT: ' ÂÂÂÂÂ Add another boolean chart button  ÂÂÂÂÂ'",
+     "SPEECH OUTPUT: 'separator'",
+     "SPEECH OUTPUT: 'SavedÂSearches:'",
+     "SPEECH OUTPUT: 'MyÂBugs and Patches link'",
+     "SPEECH OUTPUT: ' | AllÂOrca link  | Firefox link  | openÂorca link  | OpenÂRFEs link'"]))
+
+########################################################################
+# Move to the location bar by pressing Control+L.  When it has focus
+# type "about:blank" and press Return to restore the browser to the
+# conditions at the test's start.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction("about:blank"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+# Just a little extra wait to let some events get through.
+#
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.AssertionSummaryAction())
+
+sequence.start()

Added: trunk/test/keystrokes/firefox/sayAll_empty_anchor.py
==============================================================================
--- (empty file)
+++ trunk/test/keystrokes/firefox/sayAll_empty_anchor.py	Sat Aug  9 02:38:34 2008
@@ -0,0 +1,97 @@
+# -*- coding: utf-8 -*-
+#!/usr/bin/python
+
+"""Test of sayAll output of Firefox on a page with empty anchors."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+########################################################################
+# We wait for the focus to be on a blank Firefox window.
+#
+sequence.append(WaitForWindowActivate("Minefield",None))
+
+########################################################################
+# Load the local "bug-517371" test case.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction(utils.htmlURLPrefix + "bug-517371.html"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+sequence.append(WaitForFocus("Testing",
+                             acc_role=pyatspi.ROLE_DOCUMENT_FRAME))
+
+########################################################################
+# Press Control+Home to move to the top.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "Top of file",
+    ["BRAILLE LINE:  'FAQ h1'",
+     "     VISIBLE:  'FAQ h1', cursor=1",
+     "SPEECH OUTPUT: 'FAQ '",
+     "SPEECH OUTPUT: 'heading  '",
+     "SPEECH OUTPUT: 'level 1'"]))
+
+########################################################################
+# SayAll to the End.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Add"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_Add to do a SayAll",
+    ["SPEECH OUTPUT: 'FAQ '",
+     "SPEECH OUTPUT: 'heading  '",
+     "SPEECH OUTPUT: 'level 1'",
+     "SPEECH OUTPUT: 'Battery heading  '",
+     "SPEECH OUTPUT: 'level 2'",
+     "SPEECH OUTPUT: 'Q. What's a battery? link'",
+     "SPEECH OUTPUT: 'Q. Which way is up? link'",
+     "SPEECH OUTPUT: 'blank'",
+     "SPEECH OUTPUT: 'Q. Why did Orca used to get stuck on this page? link'",
+     "SPEECH OUTPUT: 'blank'",
+     "SPEECH OUTPUT: '",
+     "FOO'",
+     "SPEECH OUTPUT: 'heading  '",
+     "SPEECH OUTPUT: 'level 2'",
+     "SPEECH OUTPUT: 'Q. Why would someone put a line break in a heading? link'",
+     "SPEECH OUTPUT: 'blank'",
+     "SPEECH OUTPUT: 'Q. What is the airspeed velocity of an unladen swallow? link'",
+     "SPEECH OUTPUT: 'blank'",
+     "SPEECH OUTPUT: '",
+     "Battery heading  '",
+     "SPEECH OUTPUT: 'level 2'",
+     "SPEECH OUTPUT: 'Q. What is a battery?",
+     "A. Look it up.'",
+     "SPEECH OUTPUT: 'Q. Which way is up?",
+     "A. That way.'",
+     "SPEECH OUTPUT: 'Q. Why did Orca used to get stuck on this page?",
+     "A. Empty anchors.'"]))
+
+########################################################################
+# Move to the location bar by pressing Control+L.  When it has focus
+# type "about:blank" and press Return to restore the browser to the
+# conditions at the test's start.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction("about:blank"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+# Just a little extra wait to let some events get through.
+#
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.AssertionSummaryAction())
+
+sequence.start()

Added: trunk/test/keystrokes/firefox/sayAll_enter_bug.py
==============================================================================
--- (empty file)
+++ trunk/test/keystrokes/firefox/sayAll_enter_bug.py	Sat Aug  9 02:38:34 2008
@@ -0,0 +1,124 @@
+# -*- coding: utf-8 -*-
+#!/usr/bin/python
+
+"""Test of sayAll output of Firefox on GNOME bugzilla's form
+for entering bugs. 
+"""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+########################################################################
+# We wait for the focus to be on a blank Firefox window.
+#
+sequence.append(WaitForWindowActivate("Minefield",None))
+
+########################################################################
+# Load the local "simple form" test case.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction(utils.htmlURLPrefix + "enter-bug-form.html"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+sequence.append(WaitForFocus("Enter Bug: orca",
+                             acc_role=pyatspi.ROLE_DOCUMENT_FRAME))
+
+########################################################################
+# Press Control+Home to move to the top.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "Top of file",
+    ["BRAILLE LINE:  'Home Link Image Bugzilla'",
+     "     VISIBLE:  'Home Link Image Bugzilla', cursor=1",
+     "SPEECH OUTPUT: 'Home link image Bugzilla'"]))
+
+########################################################################
+# SayAll to the End.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Add"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_Add to do a SayAll",
+    ["SPEECH OUTPUT: 'Home link image'",
+     "SPEECH OUTPUT: 'Bugzilla'",
+     "SPEECH OUTPUT: 'New bug link'",
+     "SPEECH OUTPUT: ' Â Browse link  Â Search link  Â Reports link  Â Account link  Â Admin link  Â Help link'",
+     "SPEECH OUTPUT: 'Logged In joanmarie diggs gmail com | Log Out link'",
+     "SPEECH OUTPUT: 'Enter Bug: orca â This page lets you enter a new bug into Bugzilla. heading  '",
+     "SPEECH OUTPUT: 'level 1'",
+     "SPEECH OUTPUT: 'blank'",
+     "SPEECH OUTPUT: 'Before reporting a bug, please read the bug writing guidelines link , please look at the list of most frequently reported bugs link , and please search link  or browse link  for the bug.'",
+     "SPEECH OUTPUT: 'blank'",
+     "SPEECH OUTPUT: 'Reporter:'",
+     "SPEECH OUTPUT: 'joanmarie diggs gmail com'",
+     "SPEECH OUTPUT: 'Product:'",
+     "SPEECH OUTPUT: 'orca'",
+     "SPEECH OUTPUT: 'Version:'",
+     "SPEECH OUTPUT: 'List with 9 items'",
+     "SPEECH OUTPUT: 'Component link'",
+     "SPEECH OUTPUT: ':'",
+     "SPEECH OUTPUT: 'List with 5 items'",
+     "SPEECH OUTPUT: 'Â'",
+     "SPEECH OUTPUT: 'GNOME version link'",
+     "SPEECH OUTPUT: ':'",
+     "SPEECH OUTPUT: 'Unspecified combo box'",
+     "SPEECH OUTPUT: 'OS link'",
+     "SPEECH OUTPUT: ':'",
+     "SPEECH OUTPUT: 'Linux combo box'",
+     "SPEECH OUTPUT: 'Severity link'",
+     "SPEECH OUTPUT: ':'",
+     "SPEECH OUTPUT: 'normal combo box'",
+     "SPEECH OUTPUT: 'Â'",
+     "SPEECH OUTPUT: 'Summary:'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'Description:'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: ' ",
+     "'",
+     "SPEECH OUTPUT: 'Â'",
+     "SPEECH OUTPUT: 'Optional Fields'",
+     "SPEECH OUTPUT: 'Cc:'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'Keywords link'",
+     "SPEECH OUTPUT: ':'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'Depends on:'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'Blocks:'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'Commit button'",
+     "SPEECH OUTPUT: ' ÂÂÂÂ Remember values as bookmarkable template button'",
+     "SPEECH OUTPUT: '",
+     "We've made a guess at your operating system. Please check it and, if we got it wrong, email bugmaster gnome org '",
+     "SPEECH OUTPUT: 'SavedÂSearches:'",
+     "SPEECH OUTPUT: 'AllÂOrca link'",
+     "SPEECH OUTPUT: ' | Firefox link  | openÂorca link  | OpenÂRFEs link'"]))
+
+########################################################################
+# Move to the location bar by pressing Control+L.  When it has focus
+# type "about:blank" and press Return to restore the browser to the
+# conditions at the test's start.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction("about:blank"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+# Just a little extra wait to let some events get through.
+#
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.AssertionSummaryAction())
+
+sequence.start()

Added: trunk/test/keystrokes/firefox/sayAll_entries.py
==============================================================================
--- (empty file)
+++ trunk/test/keystrokes/firefox/sayAll_entries.py	Sat Aug  9 02:38:34 2008
@@ -0,0 +1,165 @@
+# -*- coding: utf-8 -*-
+#!/usr/bin/python
+
+"""Test of sayAll output in Firefox on a page with a bunch of entries
+contained in a variety of hierarchies."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+########################################################################
+# We wait for the focus to be on a blank Firefox window.
+#
+sequence.append(WaitForWindowActivate("Minefield",None))
+
+########################################################################
+# Load the local "simple form" test case.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction(utils.htmlURLPrefix + "entries.html"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+sequence.append(WaitForFocus("",
+                             acc_role=pyatspi.ROLE_DOCUMENT_FRAME))
+
+########################################################################
+# Press Control+Home to move to the top.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "Top of file",
+    ["BRAILLE LINE:  'Here are some entries h2'",
+     "     VISIBLE:  'Here are some entries h2', cursor=1",
+     "SPEECH OUTPUT: 'Here are some entries heading  '",
+     "SPEECH OUTPUT: 'level 2'"]))
+
+########################################################################
+# SayAll to the End.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Add"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_Add to do a SayAll",
+    ["SPEECH OUTPUT: 'Here are some entries heading  '",
+     "SPEECH OUTPUT: 'level 2'",
+     "SPEECH OUTPUT: 'Type something link  rather amusing link  here: text'",
+     "SPEECH OUTPUT: 'Amusing numbers fall between text  and text .'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'I'm a label'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'Am I a label as well?'",
+     "SPEECH OUTPUT: 'What the heck should we do here? heading  '",
+     "SPEECH OUTPUT: 'level 2'",
+     "SPEECH OUTPUT: 'Looking at what follows visually, I'm not sure what I would type/i.e. what the labels are.'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'Too far away to be a label.'",
+     "SPEECH OUTPUT: 'Distance doesn't count on the left'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'Sometimes labels can be below the fields due to <br /> heading  '",
+     "SPEECH OUTPUT: 'level 2'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: '",
+     "First Name'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: '",
+     "M.I.'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: '",
+     "Last Name'",
+     "SPEECH OUTPUT: 'Other times it's due to layout tables heading  '",
+     "SPEECH OUTPUT: 'level 2'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'First name'",
+     "SPEECH OUTPUT: 'Middle",
+     "initial'",
+     "SPEECH OUTPUT: 'Last name link'",
+     "SPEECH OUTPUT: 'Second verse same as the first (only now the labels are above the fields) heading  '",
+     "SPEECH OUTPUT: 'level 2'",
+     "SPEECH OUTPUT: 'First Name'",
+     "SPEECH OUTPUT: 'Middle",
+     "initial'",
+     "SPEECH OUTPUT: 'Last name link'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'Decisions, decisions.... When in doubt, closest table cell text wins heading  '",
+     "SPEECH OUTPUT: 'level 2'",
+     "SPEECH OUTPUT: 'First name'",
+     "SPEECH OUTPUT: 'Middle",
+     "initial'",
+     "SPEECH OUTPUT: 'Last name'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'Given name'",
+     "SPEECH OUTPUT: 'initial'",
+     "SPEECH OUTPUT: 'Surname'",
+     "SPEECH OUTPUT: 'First name'",
+     "SPEECH OUTPUT: 'Middle",
+     "initial'",
+     "SPEECH OUTPUT: 'Last name'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'Given name'",
+     "SPEECH OUTPUT: 'initial'",
+     "SPEECH OUTPUT: 'Surname'",
+     "SPEECH OUTPUT: 'Decisions, decisions.... We should try to figure out if we're in a grid of fields. heading  '",
+     "SPEECH OUTPUT: 'level 2'",
+     "SPEECH OUTPUT: 'First name'",
+     "SPEECH OUTPUT: 'Middle",
+     "initial'",
+     "SPEECH OUTPUT: 'Last name'",
+     "SPEECH OUTPUT: 'patched image image'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'We mustn't forget images as labels -- even if that practice is lame heading  '",
+     "SPEECH OUTPUT: 'level 2'",
+     "SPEECH OUTPUT: 'bandaid graphic image'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'text'",
+     "SPEECH OUTPUT: 'bandaid graphic redux image'",
+     "SPEECH OUTPUT: 'Magic disappearing text trick: text tab to me and I disappear'",
+     "SPEECH OUTPUT: 'Tell me a secret: password'",
+     "SPEECH OUTPUT: 'Tell me a little more about yourself:",
+     " text and plan to write my memoirs.'"]))
+
+########################################################################
+# Move to the location bar by pressing Control+L.  When it has focus
+# type "about:blank" and press Return to restore the browser to the
+# conditions at the test's start.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction("about:blank"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+# Just a little extra wait to let some events get through.
+#
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.AssertionSummaryAction())
+
+sequence.start()

Added: trunk/test/keystrokes/firefox/sayAll_heading_section.py
==============================================================================
--- (empty file)
+++ trunk/test/keystrokes/firefox/sayAll_heading_section.py	Sat Aug  9 02:38:34 2008
@@ -0,0 +1,81 @@
+# -*- coding: utf-8 -*-
+#!/usr/bin/python
+
+"""Test of sayAll output of Firefox on a page with headings in sections."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+########################################################################
+# We wait for the focus to be on a blank Firefox window.
+#
+sequence.append(WaitForWindowActivate("Minefield",None))
+
+########################################################################
+# Load the local "simple form" test case.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction(utils.htmlURLPrefix + "heading-section.html"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+sequence.append(WaitForFocus("HTML test page",
+                             acc_role=pyatspi.ROLE_DOCUMENT_FRAME))
+
+########################################################################
+# Press Control+Home to move to the top.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "Top of file",
+    ["BRAILLE LINE:  'Heading 1. h1'",
+     "     VISIBLE:  'Heading 1. h1', cursor=1",
+     "SPEECH OUTPUT: 'Heading 1. heading  '",
+     "SPEECH OUTPUT: 'level 1'"]))
+
+########################################################################
+# SayAll to the End.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Add"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_Add to do a SayAll",
+    ["SPEECH OUTPUT: 'Heading 1. heading  '",
+     "SPEECH OUTPUT: 'level 1'",
+     "SPEECH OUTPUT: 'Heading 2. heading  '",
+     "SPEECH OUTPUT: 'level 1'",
+     "SPEECH OUTPUT: 'sect 1 Heading 3. heading  '",
+     "SPEECH OUTPUT: 'level 1'",
+     "SPEECH OUTPUT: 'sect 2 Heading 4. heading  '",
+     "SPEECH OUTPUT: 'level 1'",
+     "SPEECH OUTPUT: 'sect 3 Heading 5. heading  '",
+     "SPEECH OUTPUT: 'level 1'",
+     "SPEECH OUTPUT: 'Heading 6. heading  '",
+     "SPEECH OUTPUT: 'level 1'"]))
+
+########################################################################
+# Move to the location bar by pressing Control+L.  When it has focus
+# type "about:blank" and press Return to restore the browser to the
+# conditions at the test's start.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction("about:blank"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+# Just a little extra wait to let some events get through.
+#
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.AssertionSummaryAction())
+
+sequence.start()

Added: trunk/test/keystrokes/firefox/sayAll_html_test_page.py
==============================================================================
--- (empty file)
+++ trunk/test/keystrokes/firefox/sayAll_html_test_page.py	Sat Aug  9 02:38:34 2008
@@ -0,0 +1,448 @@
+# -*- coding: utf-8 -*-
+#!/usr/bin/python
+
+"""Test of sayAll output on a page with various object types in Firefox."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+########################################################################
+# Load the local "simple form" test case.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction(utils.htmlURLPrefix + "htmlpage.html"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+########################################################################
+# Press Control+Home to move to the top.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "Top of file",
+    ["BRAILLE LINE:  'Test Formats Link'",
+     "     VISIBLE:  'Test Formats Link', cursor=1",
+     "SPEECH OUTPUT: 'Test Formats link ",
+     "'"]))
+
+########################################################################
+# SayAll to the End.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Add"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_Add to do a SayAll",
+    [     "SPEECH OUTPUT: 'Test Formats link'",
+     "SPEECH OUTPUT: '",
+     " Alignment Text link ",
+     " Indent Text link ",
+     " HTML Forms and Widgets link ",
+     " List link ",
+     " Tag link ",
+     " Table link ",
+     "",
+     " Test Cases (from bugs) link ",
+     "",
+     " separator link Text Formats",
+     "",
+     "This sentence is bold. This sentence is italicized. This sentence is underlined. This sentence uses strikethrough. This sentence has the words sentence in superscript. This sentence has the word sentence in subscript. This is a Heading 1. heading  '",
+     "SPEECH OUTPUT: 'level 1'",
+     "SPEECH OUTPUT: 'This is a Heading 2. heading  '",
+     "SPEECH OUTPUT: 'level 2'",
+     "SPEECH OUTPUT: 'This is a Heading 3. heading  '",
+     "SPEECH OUTPUT: 'level 3'",
+     "SPEECH OUTPUT: 'This is a Heading 4. heading  '",
+     "SPEECH OUTPUT: 'level 4'",
+     "SPEECH OUTPUT: 'This is a Heading 5. heading  '",
+     "SPEECH OUTPUT: 'level 5'",
+     "SPEECH OUTPUT: 'This is a Heading 6. heading  '",
+     "SPEECH OUTPUT: 'level 6'",
+     "SPEECH OUTPUT: 'This sentence is in Arial font. 1This sentence is in Comic Sans MSl font. ",
+     "2This sentence is in Courier New Font. ",
+     "3This sentence is in Garamondl font. ",
+     "4This sentence is in Impact font. ",
+     "5This sentence is in Lucida Console font. ",
+     "6This sentence is in Sydnie font. ",
+     "7This sentence is in Tahoma font. ",
+     "8This sentence is in Times New Roman font. 9This sentence is in font size 18 on a PC or font size +2. ",
+     "aThis sentence is in font size 10 on a PC. bThis sentence is green. cThis sentence is in address format. dThis sentence is blinking. eThis sentence contains preformatted plain text.",
+     "",
+     " separator link Alignment",
+     " From Shakespeare's Hamlet heading  '",
+     "SPEECH OUTPUT: 'level 3'",
+     "SPEECH OUTPUT: 'I have of late but",
+     "wherefore I know not lost all my mirth,",
+     "forgone all custom of exercises;",
+     "and indeed, it goes so heavily with",
+     "my disposition that this goodly frame,",
+     "the earth, seems to me a sterile promontory;",
+     "this most excellent canopy, the air, look you,",
+     "this brave o'erhanging firmament,",
+     "this majestical roof fretted with golden fire",
+     "why, it appeareth no other thing to me than a foul",
+     "and pestilent congregation of vapours.",
+     "What a piece of work is a man!",
+     "how noble in reason! how infinite in faculties!",
+     "in form and moving how express and admirable!",
+     "in action how like an angel!",
+     "in apprehension how like a god!",
+     "the beauty of the world, the paragon of animals! I have of late but",
+     "wherefore I know not lost all my mirth,",
+     "forgone all custom of exercises;",
+     "and indeed, it goes so heavily with",
+     "my disposition that this goodly frame,",
+     "the earth, seems to me a sterile promontory;",
+     "this most excellent canopy, the air, look you,",
+     "this brave o'erhanging firmament,",
+     "this majestical roof fretted with golden fire",
+     "why, it appeareth no other thing to me than a foul",
+     "and pestilent congregation of vapours.",
+     "What a piece of work is a man!",
+     "how noble in reason! how infinite in faculties!",
+     "in form and moving how express and admirable!",
+     "in action how like an angel!",
+     "in apprehension how like a god!",
+     "the beauty of the world, the paragon of animals! I have of late but",
+     "wherefore I know not lost all my mirth,",
+     "forgone all custom of exercises;",
+     "and indeed, it goes so heavily with",
+     "my disposition that this goodly frame,",
+     "the earth, seems to me a sterile promontory;",
+     "this most excellent canopy, the air, look you,",
+     "this brave o'erhanging firmament,",
+     "this majestical roof fretted with golden fire",
+     "why, it appeareth no other thing to me than a foul",
+     "and pestilent congregation of vapours.",
+     "What a piece of work is a man!",
+     "how noble in reason! how infinite in faculties!",
+     "in form and moving how express and admirable!",
+     "in action how like an angel!",
+     "in apprehension how like a god!",
+     "the beauty of the world, the paragon of animals!",
+     " separator link Indent",
+     "ÂÂÂ by Wislawa Szymborska - 1972 I am a tranquilizer. ",
+     "I am effective at home, ",
+     "I work well at the office, ",
+     "I take exams, ",
+     "I appear in court, ",
+     "I carefully mend broken crockery - ",
+     "all you need do is take me, ",
+     "dissolve me under the tongue, ",
+     "all you need do is swallow me, ",
+     "just wash me down with water. I know how to cope with misfortune, ",
+     "how to endure bad news, ",
+     "take the edge of injustice, ",
+     "make up for the absence of God, ",
+     "help pick out your widow's weeds. ",
+     "What are you waiting for - ",
+     "have faith in chemistry's compassion. You're still a young man/woman, ",
+     "you really should settle down somehow. ",
+     "Who said ",
+     "life must be lived courageously? Hand your abyss over to me - ",
+     "I will line it up with soft sleep, ",
+     "you'll be grateful for ",
+     "the four-footed landing. Sell me your soul. ",
+     "There's no other buyer likely to turn up. There's no other devil left.",
+     " separator link HTML Form and Widgets",
+     "",
+     "Textfield : Enter your Name:Â text text field using default type=text 1. Enter your Address:Â text text field using SIZE and MAXLENGTH 2. Enter your City:Â text 3. Enter your State:Â text 4. Enter your Country:Â text US text field using value 5. Enter your Zip:Â text 6. What happens when a fixed-width font(the default) is used for a one-byte text input area, let's try it.. Enter one character:Â text  ",
+     " separator ÂCheckBox: What are your favorite pets? heading  '",
+     "SPEECH OUTPUT: 'level 2'",
+     "SPEECH OUTPUT: 'check box not checked bird ",
+     " check box not checked fish ",
+     " check box not checked wild animal ",
+     " separator ",
+     "Radio Buttons: Would type of wine do you like? heading  '",
+     "SPEECH OUTPUT: 'level 2'",
+     "SPEECH OUTPUT: 'selected radio button cabernet sauvignon ",
+     " not selected radio button merlot ",
+     " not selected radio button nebbiolo ",
+     " not selected radio button pinot noir ",
+     " not selected radio button don't drink wine ",
+     " separator ÂPassword Field: Who are you? heading  '",
+     "SPEECH OUTPUT: 'level 2'",
+     "SPEECH OUTPUT: 'Enter your Password: password separator Submit Buttons: heading  '",
+     "SPEECH OUTPUT: 'level 2'",
+     "SPEECH OUTPUT: 'Submit Query button submit button using default \"VALUE\" Click Here button submit button using assigned \"VALUE\", no \"NAME\" Send Out button submit button using assigned \"NAME\" & \"VALUE\" separator Form Multiline Text Areas: heading  '",
+     "SPEECH OUTPUT: 'level 2'",
+     "SPEECH OUTPUT: 'Enter any Comments you have about this Web page following: text multiline text area with default WRAP=NO WRAP text multiline text area with WRAP=SOFT text multiline text area with WRAP=HARD separator Pulldown menus: heading  '",
+     "SPEECH OUTPUT: 'level 2'",
+     "SPEECH OUTPUT: 'Regular Pizza order? Three Cheeses combo box  selection without \"multiple\" act as a pull-down menu Gourmet Pizza order? multi-select List with 7 items  selection with \"multiple\" act as a scrolling list ",
+     "and has a pre-selected \"option\" Extra Pizza Add-On order? List with 6 items  selection with size=3 with/without \"multiple\" act as a scrolling list ",
+     "and has a pre-selected \"option\" Drink order? diet coke combo box separator ",
+     " separator link List",
+     "",
+     "Welcome to a list of lists ",
+     "Lists are not only fun to make, they are fun to use. They help us: 1. remember what the heck we are doing each day 2. arrange long and arbitrary lines of text into ordered lists that are pleasing to the eye and suggest some sense of priority, even if it is artificial 3. look really cool when we carry them around on yellow Post-Its tm. 4. and that other thing I keep forgetting. Your ordered lists can start at a strange number, like VI. And use roman numerals, g. You might try using letters as well, H. Maybe you prefer Big Letters, ix. or small roman numerals â But discs belong to unordered lists 50. Though you can set the value in a list item! Unordered list :  list â listing item  list â first sublevel  list â look for the bullet on  list â each sublevel â they should all be different, except here. â second sublevel â or you can specify a square â if your TYPE is circle â or even a disc â Franz Liszt â was a composer who was not square • would have liked the Who â feeling listless. TYPE=CIRCLE â blah, blah, blah (square) â whine, whine, whine(disc) ",
+     " separator link Tag",
+     "Bold Tag with other Physical Character Style Tags. Bold Tag with : â Big : This line has both Bold tag and the Big tag. (outside the Bold tag) â Blink : This line has both the Bold tag and the Blink tag. (outside the Bold tag) â Font : This line has the Bold tag and the Font face tag set to \"Courier\" ,color=darkgreen and size =-1.(outside the Bold tag) â Italics : Text that is both Bold and Italic. (outside the Bold tag) â Small : This line has both Bold tag and the Small tag; hence I should be smaller !! (outside the Bold tag) â Strikethrough : I should be Bold and Strikethroughed. (outside the Bold tag) â Subscript : I'm bold and I have asubscript â Superscript : I'm bold too and I have a superscript â Typewriter : This line has the Bold tag and the Typewriter tag. (outside the Bold tag) â Underline : I'm bold and I should be underlined. (outside the Bold tag) separator ÂBold Tag with Content Character Style Tags Bold Tag with : â Cite : The 
 part after the exclamation is in Cite Tags !!!! (Chitra, 1996) (outside the Bold tag) â Code : #include \"main.h\"(outside the Bold tag) â Definition : The wordÂ&ltCharacter Styles> are surrounded by the definition tag. â Emphasis : I am using the Bold and the Emphasis tag. (outside the Bold tag) â Keyboard : Inside bold and keyboard tags. (outside the Bold tag) â Sample : Well !! I'm using the bold and the sample Tag. (outside the Bold tag) â Strong : I have the Bold and the Strong tags around me !!(outside the Bold tag) â Variable : you_tell_me. Yup !! the Bold and Variable tag. (outside the Bold tag) separator Superscript Tag with other Physical Character Style Tags: Superscript Tag with : â Bold : This line has both Bold tag and the Superscript tag. (outside the Superscript tag) â Big : This line has both Big tag andI'm the Superscript. (outside the Superscript tag) â Blink : This line has both the Blink tag and Superscriptt tag. (outside the Supersc
 ript tag) â Font : This line has the Superscript tag and the Font face tag set to \"Courier\" ,color=darkgreen and size =-1.(outside the Superscript tag) â Italics : Text that is Italic and has a Superscript.(outside the Superscript tag) â Small : This line has both Superscript tag and the Small tag; hence I should be smaller !!(outside the Superscript tag) â Strikethrough : I should have a Superscript and be Strikethroughed.(outside the Superscript tag) â Subscript : I have a subscript and it has a Superscript â Superscript : I have a superscript and it again has a SUPERSCRIPT â Typewriter : This line has the Superscript tag and the Typewriter tag. (outside the Superscript tag) â Underline : I'm Superscript and I should be underlined. (outside the Superscript tag) separator Superscript Tag with Content Character Style Tags Superscript Tag with : â Cite : The part after the exclamation is in Cite Tags and is a Sup !!!! (Chitra, 1996) (outside the Superscrip
 t tag) â Code : I have a Superscript #include \"main.h\"(outside the Superscript tag) â Definition : The wordÂ&ltCharacter Styles> are surrounded by the definition tag and is a Sup. â Emphasis : I am using the Superscript and the Emphasis tag. (outside the Superscript tag) â Keyboard : I have the Superscript and keyboard tags. (outside the Superscript tag) â Sample : Well !! I'm using the Superscript and the sample Tag. (outside the Superscript tag) â Strong : I have the Superscript and the Strong tags !!(outside the Superscript tag) â Variable : you_tell_me. Yup !! the Superscript and Variable tag. (outside the Superscript tag) separator link Table",
+     "",
+     " 1Â 2Â 3Â 4Â 5Â 6Â 7Â 8Â 9Â 10Â 11Â 12Â 13Â 14Â 15Â 16Â 17Â 18Â 19Â 20Â 21Â 22Â 23Â 24Â 25Â 26Â 27Â 28Â 29Â 30Â 31Â 32Â 33Â 34Â 35Â 36Â 37Â 38Â'",
+     "SPEECH OUTPUT: 'A'",
+     "SPEECH OUTPUT: 'a a b b c c d d hello there'",
+     "SPEECH OUTPUT: 'D G H I A'",
+     "SPEECH OUTPUT: 'a b c d'",
+     "SPEECH OUTPUT: 'C D A'",
+     "SPEECH OUTPUT: 'a b c d'",
+     "SPEECH OUTPUT: 'C D'",
+     "SPEECH OUTPUT: 'separator Table showing text flow: heading  '",
+     "SPEECH OUTPUT: 'level 4'",
+     "SPEECH OUTPUT: 'separator This is text placed above the table and Table Title caption table head table head table head cell 1 cell 2 cell 3 continuing below the table!!! ",
+     " separator Table Border Tests separator Table showing the default table BORDER=1 : Â caption table head table head table head cell 1 cell 2 cell 3 separator ",
+     "Tables showing different border values: ",
+     "Â Table with BORDER=1 caption table head table head table head cell 1 cell 2 cell 3 Table with BORDER=2 caption table head table head table head cell 1 cell 2 cell 3 Table with BORDER=3 caption table head table head table head cell 1 cell 2 cell 3 Table with BORDER=4 caption table head table head table head cell 1 cell 2 cell 3 Table with BORDER=5 caption table head table head table head cell 1 cell 2 cell 3 Table with BORDER=6 caption table head table head table head cell 1 cell 2 cell 3 ",
+     "Â Table with BORDER=30 caption table head table head table head cell 1 cell 2 cell 3 separator ",
+     "Table showing BORDER=0 : Â caption table head table head table head cell 1 cell 2 cell 3 separator ",
+     " ÂTable Cellpadding Test separator Table with default cellpadding: ",
+     "Â caption table head table head table head cell 1 cell 2 cell 3 separator Tables with different cellpaddings: ",
+     "Â Table with CELLPADDING=1 caption table head table head table head cell 1 cell 2 cell 3 Table with CELLPADDING=2 caption table head table head table head cell 1 cell 2 cell 3 Table with CELLPADDING=3 caption table head table head table head cell 1 cell 2 cell 3 Table with CELLPADDING=4 caption table head table head table head cell 1 cell 2 cell 3 Table with CELLPADDING=5 caption table head table head table head cell 1 cell 2 cell 3 Table with CELLPADDING=10 caption table head table head table head cell 1 cell 2 cell 3 ",
+     "Â Table with CELLPADDING=30 caption table head table head table head cell 1 cell 2 cell 3 separator ",
+     "Table with cellpadding =0 : Â caption table head table head table head cell 1 cell 2 cell 3 separator Table Cellspacing Test separator Table with default cellspacing: Â caption table head table head table head cell 1 cell 2 cell 3 separator ",
+     "Table with CELLSPACING=0 & a border: Â caption table head table head table head table head table head cell 1 cell 2 cell 3 cell 4 cell 5 separator ",
+     "Tables showing different cellspacing values: ",
+     "Â Table with CELLSPACING=3 caption table head table head table head cell 1 cell 2 cell 3 Table with CELLSPACING=4 caption table head table head table head cell 1 cell 2 cell 3 Table with CELLSPACING=5 caption table head table head table head cell 1 cell 2 cell 3 Table with CELLSPACING=8 caption table head table head table head cell 1 cell 2 cell 3 Table with CELLSPACING=10 caption table head table head table head cell 1 cell 2 cell 3 ",
+     " Table with CELLSPACING=30 caption table head table head table head cell 1 cell 2 cell 3 separator ÂTables Columnspan Test separator Table Header Cells spanning multiple columns:  list  caption Header 1 ",
+     "span=2 cols Header 2 ",
+     "span=5 cols Header 3 ",
+     "span=10 cols row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 separator ",
+     "Table with data cells spanning multiple columns:  list  caption Head 1 Head 1 Head 1 Head 1 Head 1 Head 1 Head 1 Head 1 Head 1 Head 1 Head 1 Head 1 Head 1 Head 1 Head 1 Head 1 Head 1 Data Cell 1 ",
+     "span=2 cols Data Cell 2 ",
+     "span=5 cols Data Cell 3 ",
+     "span=10 cols row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 separator Table with nested header & data cells spanning multiple columns:  list  caption Header 1 ",
+     "span=8 cols Header 2 ",
+     "span=10 cols Data Cell 1 ",
+     "span=3 cols Data Cell 2 ",
+     "span=5 cols Data Cell 3 ",
+     "span=7 cols Data Cell 4 ",
+     "span=3 cols row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 1 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 2 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 row 3 separator ",
+     " ÂTables Rowspan Test separator Table Header Cells spanning multiple rows: list  caption Header 1 ",
+     "span=2 rows col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 Header 2 ",
+     "span=5 rows col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 Header 3 ",
+     "span=3 rows col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 separator Table Data Cells spanning multiple rows: list  caption Head Data 1 ",
+     "span=2 rows col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 Head col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 Head Data 2 ",
+     "span=5 rows col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 Head col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 Head col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 Head col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 Head col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 Head Data 3 ",
+     "span=3 rows col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 Head col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 Head col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 separator ",
+     "Nested Table Header Cells & Data Cells spanning multiple rows:  list  caption Header 1 ",
+     "span=7 rows Data 1 ",
+     "span=2 rows col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 Data 2 ",
+     "span=5 rows col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 Header 2 ",
+     "span=3 rows Data 3 ",
+     "span=3 rows col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 separator Tables Caption Test",
+     " separator Caption align to top of a table.",
+     "",
+     " This is the Table1's Caption caption ",
+     " Column1 button Column2 Column3 Row1 button Row1 Column1",
+     " Row1 Column2",
+     " Row1 Column3",
+     " text text Row2 ",
+     " join (R2 C1) and (R2 C2)",
+     " Row2 Column3",
+     " Row3",
+     " Row3 Column1",
+     " join (R3 C2) and (R4 C2)",
+     " Row3 Column3",
+     " Row4 check box not checked Row4 Column1",
+     " Row4 Column3",
+     " ",
+     " separator Caption align to bottom of table",
+     "",
+     "",
+     " Table's caption on the bottom caption gif link image link Checkbox1 check box checked Row1 Column3",
+     " Embedded table caption 1Checkbox1 check box checked ",
+     " 2 Button button ",
+     " 3",
+     " 4",
+     " 5 Â6",
+     " ",
+     " Row3 Column2",
+     " Row3 Column3",
+     " Row5 Column1",
+     " options: option1 combo box  ",
+     " ",
+     " ",
+     "Table Caption in the table",
+     "",
+     " Table's Caption on the bottom button ",
+     " caption ",
+     " link Checkbox1 check box checked Row1 Column3",
+     " ",
+     " Row2 Column2",
+     " Radiobuttons in Group A",
+     " RadioButton1 not selected radio button ",
+     " RadioButton2 selected radio button ",
+     " RadioButton3 not selected radio button Embedded table Caption",
+     " caption 1Checkbox1 check box checked ",
+     " 2 Button button ",
+     " 3",
+     " 4",
+     " 5 Â6",
+     " ",
+     " Row3 Column2",
+     " Row3 Column3",
+     " Row5 Column1",
+     " options: option1 combo box  ",
+     " ",
+     " ",
+     "",
+     " separator Caption align to left of table",
+     "",
+     " Table's Caption on the left caption Row1 Column1 Row1 Column2 Row1 Column3 Row2 Column1 Row2 Column2 Row2 Column3 ",
+     " separator Caption align to right of table",
+     "",
+     " Table's Caption on the right caption Row1 Column1 Row1 Column2 Row1 Column3 Row2 Column1 Row2 Column2 Row2 Column3 ",
+     " separator Tables Nowrap Test separator ",
+     "Table Header & Data Cell with Word Wrapping:  caption The NOWRAP attribute stops normal word wrapping that browsers automatically do to fill the allotted table cell space. With the NOWRAP attribute, the browser assembles the contents of the cell onto a single line. The NOWRAP attribute stops normal word wrapping that browsers automatically do to fill the allotted table cell space. With the NOWRAP attribute, the browser assembles the contents of the cell onto a single line. separator ",
+     "Table Header & Data Cell with NOWRAP:  caption The NOWRAP attribute stops normal word wrapping that browsers automatically do to fill the allotted table cell space. With the NOWRAP attribute, the browser assembles the contents of the cell onto a single line. The NOWRAP attribute stops normal word wrapping that browsers automatically do to fill the allotted table cell space. With the NOWRAP attribute, the browser assembles the contents of the cell onto a single line. ",
+     " separator Multiple <TBODY> in <TABLE>",
+     "",
+     " body1,row1,col1 body1,row1,col2 body1,row2,col1 body1,row2,col2 body1,row3,col1 body1,row3,col2 body2,row1,col1 body2,row2,col1 body3,row1,col1 body3,row1,col2 body3,row1,col3 body3,row2,col1 body3,row2,col2 body3,row2,col3 body3,row3,col1 body3,row3,col2 body3,row3,col3 body3,row4,col1 body3,row4,col2 body3,row4,col3 body3,row5,col1 body3,row5,col2 body3,row5,col3 ",
+     " separator Headers are not in the same column and row as the data cell",
+     "",
+     " Travel Expense Report caption ",
+     " Meals Hotels Transport subtotals San Jose ",
+     " ",
+     " ",
+     " ",
+     " 25-Aug-97 37.74 112.00 45.00 ",
+     " 26-Aug-97 27.28 112.00 45.00 ",
+     " subtotals 65.02 224.00 90.00 379.02 Seattle ",
+     " ",
+     " ",
+     " ",
+     " 27-Aug-97 96.25 109.00 36.00 ",
+     " 28-Aug-97 35.00 109.00 36.00 ",
+     " subtotals 131.25 218.00 72.00 421.25 Totals 196.27 442.00 162.00 800.27 ",
+     "",
+     " separator link Test Cases",
+     "",
+     "Case 1: word wrap without BR (Bug)",
+     " 39 star characters",
+     "",
+     "Description: ",
+     "Press ctrl+right in following paragraph.",
+     "Actual Result: When caret stops at end of last word in line, press ctrl+right, caret doesn't move; press ctrl+right again, caret goes to beginning of first word in next line.",
+     "Expected Result: When caret stops at end of last word in line, press ctrl+right, caret goes to end of first word in next line.",
+     "",
+     "Is there some bug that really bothers you? As well as reporting it, feel free to fix it. Fixing bugs in Mozilla is far easier than in many other applications, because you can fix bugs (such as those in our cross-platform front end, written in XUL, our XML-based User-interface Language, CSS and Javascript) using only the build you are running right now. ",
+     "",
+     "",
+     "Case 2: word wrap with BR (Bug)",
+     " 34 star characters",
+     "",
+     "Description: ",
+     "Press ctrl+right in following lines.",
+     "Actual Result: Caret doesn't stop at end of the last word in line, but stops at beginning of next line.",
+     "Expected Result: Caret should stop at end of the last word in line and should not stop at beginning of next line.",
+     "",
+     "line one",
+     "line two",
+     "line three",
+     "",
+     "",
+     "Case 3: word with different styles (It's OK)",
+     " 44 star characters",
+     "",
+     "Description: ",
+     "If there's no space, it should be considered as one word. (\"cd\" in \"abcdef\" is italic and bold)",
+     "",
+     "abcdef abcdef abcdef",
+     "",
+     "",
+     "Case 4: next word with different styles (Bug)",
+     " 46 star characters",
+     "",
+     "Description: ",
+     "Press ctrl+right in following line.",
+     "Actual Result: Caret doesn't stop at end of \"def\".",
+     "",
+     "abc def ghi",
+     "",
+     "",
+     "Case 5: several white spaces between words (Bug)",
+     " 51 star characters",
+     "",
+     "Description: ",
+     "Press ctrl+right in following line.",
+     "Actual Result: Caret stops serveral times between \"abc\" and \"def\".",
+     "Expected Result: There should be no stop at white space.",
+     "",
+     "abcÂÂÂÂÂ def",
+     "",
+     "",
+     "Case 6:empty block \"<b></b>\" in word (Bug)",
+     " 47 star characters",
+     "",
+     "6.1. Description: ",
+     "Check the html source, there's <b></b> between \"c\" and \"d\".",
+     "Caret should not stops after \"c\".",
+     "",
+     "abcdef",
+     "",
+     "",
+     "6.2. Description: 5087972 link .",
+     "Check the html source, there's <b><i></i></b> between \"c\" and \"d\".",
+     "Caret should not stops after \"c\".",
+     "",
+     "abcdef ",
+     "",
+     "",
+     "Case 7: layout.word_select.stop_at_punctuation (Bug)",
+     " 53 star characters",
+     "",
+     "Description: ",
+     "set layout.word_select.stop_at_punctuation to true",
+     "Press ctrl+right in following line.",
+     "Actual Result: Caret doesn't stops between \"-\" and \"p\". (Press ctrl+left, you'll see the difference)",
+     "",
+     "cross-platform cross-platform cross-platform ",
+     "",
+     "",
+     "Case 8: text navigation after <HR>",
+     " 36 star characters",
+     "8.1Description:",
+     "Use righ arrow go through the following text.",
+     "Expected Result: all the text should be navigated.",
+     "Actural Result: one line is skipped, caret goes to ^Line4.",
+     "",
+     "Line1",
+     "Line2",
+     " separator Line3",
+     "Line4",
+     "",
+     "8.2Description:",
+     "Use righ arrow go through the following text.",
+     "Expected Result: all the text should be navigated.",
+     "Actural Result: one line and a character are skipped, caret goes to L^ine4.",
+     "",
+     "Line1",
+     "Line2",
+     " separator ",
+     "Line4(Line3 is empty BR)",
+     "",
+     "",
+     "",
+     "",
+     "'"]))
+
+########################################################################
+# Close the demo
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus(acc_name="Location", acc_role=pyatspi.ROLE_ENTRY))
+sequence.append(TypeAction("about:blank"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(WaitForDocLoad())
+
+# Just a little extra wait to let some events get through.
+#
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.AssertionSummaryAction())
+
+sequence.start()

Added: trunk/test/keystrokes/firefox/sayAll_imagemap.py
==============================================================================
--- (empty file)
+++ trunk/test/keystrokes/firefox/sayAll_imagemap.py	Sat Aug  9 02:38:34 2008
@@ -0,0 +1,96 @@
+#!/usr/bin/python
+
+"""Test of sayAll output of Firefox on a page with an imagemap."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+########################################################################
+# We wait for the focus to be on a blank Firefox window.
+#
+sequence.append(WaitForWindowActivate("Minefield",None))
+
+########################################################################
+# Load the local "backwards" test case.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction(utils.htmlURLPrefix + "backwards.html"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+sequence.append(WaitForFocus("Backwards Stuff",
+                             acc_role=pyatspi.ROLE_DOCUMENT_FRAME))
+
+########################################################################
+# Press Control+Home to move to the top.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "Top of file",
+    ["BRAILLE LINE:  'This looks like A to Z, but it's really Z to A.'",
+     "     VISIBLE:  'This looks like A to Z, but it's', cursor=1",
+     "SPEECH OUTPUT: 'This looks like A to Z, but it's really Z to A.'"]))
+
+########################################################################
+# SayAll to the End.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Add"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_Add to do a SayAll",
+    ["SPEECH OUTPUT: 'This looks like A to Z, but it's really Z to A.'",
+     "SPEECH OUTPUT: 'Test:'",
+     "SPEECH OUTPUT: 'z link'",
+     "SPEECH OUTPUT: 'y link'",
+     "SPEECH OUTPUT: 'x link'",
+     "SPEECH OUTPUT: 'w link'",
+     "SPEECH OUTPUT: 'v link'",
+     "SPEECH OUTPUT: 'u link'",
+     "SPEECH OUTPUT: 't link'",
+     "SPEECH OUTPUT: 's link'",
+     "SPEECH OUTPUT: 'r link'",
+     "SPEECH OUTPUT: 'q link'",
+     "SPEECH OUTPUT: 'p link'",
+     "SPEECH OUTPUT: 'o link'",
+     "SPEECH OUTPUT: 'n link'",
+     "SPEECH OUTPUT: 'm link'",
+     "SPEECH OUTPUT: 'l link'",
+     "SPEECH OUTPUT: 'k link'",
+     "SPEECH OUTPUT: 'j link'",
+     "SPEECH OUTPUT: 'i link'",
+     "SPEECH OUTPUT: 'h link'",
+     "SPEECH OUTPUT: 'g link'",
+     "SPEECH OUTPUT: 'f link'",
+     "SPEECH OUTPUT: 'e link'",
+     "SPEECH OUTPUT: 'd link'",
+     "SPEECH OUTPUT: 'c link'",
+     "SPEECH OUTPUT: 'b link'",
+     "SPEECH OUTPUT: 'a link'",
+     "SPEECH OUTPUT: 'Here is some text.'"]))
+
+########################################################################
+# Move to the location bar by pressing Control+L.  When it has focus
+# type "about:blank" and press Return to restore the browser to the
+# conditions at the test's start.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction("about:blank"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+# Just a little extra wait to let some events get through.
+#
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.AssertionSummaryAction())
+
+sequence.start()

Added: trunk/test/keystrokes/firefox/sayAll_multi_line_text.py
==============================================================================
--- (empty file)
+++ trunk/test/keystrokes/firefox/sayAll_multi_line_text.py	Sat Aug  9 02:38:34 2008
@@ -0,0 +1,77 @@
+# -*- coding: utf-8 -*-
+#!/usr/bin/python
+
+"""Test of sayAll output of Firefox on a page with multi-line table
+cells and sections.
+"""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+########################################################################
+# We wait for the focus to be on a blank Firefox window.
+#
+sequence.append(WaitForWindowActivate("Minefield",None))
+
+########################################################################
+# Load the local "simple form" test case.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction(utils.htmlURLPrefix + "multi-line.html"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+sequence.append(WaitForFocus("Mutli-Line Test",
+                             acc_role=pyatspi.ROLE_DOCUMENT_FRAME))
+
+########################################################################
+# Press Control+Home to move to the top.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "Top of file",
+    ["BRAILLE LINE:  'Table test'",
+     "     VISIBLE:  'Table test', cursor=1",
+     "SPEECH OUTPUT: 'Table test'"]))
+
+########################################################################
+# SayAll to the End.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Add"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_Add to do a SayAll",
+    ["SPEECH OUTPUT: 'Table test foo bar foo",
+     "foo bar",
+     "bar Hello heading  '",
+     "SPEECH OUTPUT: 'level 3'",
+     "SPEECH OUTPUT: 'â This is a test link  that is not very interesting. â But it looks like link  a real-world example. â And that's link  why this silly test is here. So it's far more interesting link  than it looks. World heading  '",
+     "SPEECH OUTPUT: 'level 3'",
+     "SPEECH OUTPUT: 'â The thing is link  we can't copy content. â So we must link  create silly tests. â Oh link  well. At least it's over link .'"]))
+
+########################################################################
+# Move to the location bar by pressing Control+L.  When it has focus
+# type "about:blank" and press Return to restore the browser to the
+# conditions at the test's start.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction("about:blank"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+# Just a little extra wait to let some events get through.
+#
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.AssertionSummaryAction())
+
+sequence.start()

Added: trunk/test/keystrokes/firefox/sayAll_nested_tables.py
==============================================================================
--- (empty file)
+++ trunk/test/keystrokes/firefox/sayAll_nested_tables.py	Sat Aug  9 02:38:34 2008
@@ -0,0 +1,78 @@
+# -*- coding: utf-8 -*-
+#!/usr/bin/python
+
+"""Test of sayAll output of Firefox on a page with nested layout tables."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+########################################################################
+# We wait for the focus to be on a blank Firefox window.
+#
+sequence.append(WaitForWindowActivate("Minefield",None))
+
+########################################################################
+# Load the local "simple form" test case.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction(utils.htmlURLPrefix + "nested-tables.html"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+sequence.append(WaitForFocus("Nested Tables",
+                             acc_role=pyatspi.ROLE_DOCUMENT_FRAME))
+
+########################################################################
+# SayAll to the End.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Add"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_Add to do a SayAll",
+    ["SPEECH OUTPUT: 'nested-tables link image'",
+     "SPEECH OUTPUT: 'Campus link'",
+     "SPEECH OUTPUT: 'ÂÂ.ÂÂ'",
+     "SPEECH OUTPUT: 'Classroom link'",
+     "SPEECH OUTPUT: 'ÂÂ.ÂÂ'",
+     "SPEECH OUTPUT: 'Communicate link'",
+     "SPEECH OUTPUT: 'ÂÂ.ÂÂ'",
+     "SPEECH OUTPUT: 'Reports link'",
+     "SPEECH OUTPUT: 'Â'",
+     "SPEECH OUTPUT: 'Your Learning Plan'",
+     "SPEECH OUTPUT: 'Below is a list of the courses that make up your learning plan. Â'",
+     "SPEECH OUTPUT: 'UNIX 2007'",
+     "SPEECH OUTPUT: 'Â'",
+     "SPEECH OUTPUT: 'Take Course link'",
+     "SPEECH OUTPUT: 'You have completed 87 of the 87 modules in this course.'",
+     "SPEECH OUTPUT: 'separator'",
+     "SPEECH OUTPUT: 'SQL Plus'",
+     "SPEECH OUTPUT: 'Â'",
+     "SPEECH OUTPUT: 'Take Course link'",
+     "SPEECH OUTPUT: 'You have completed 59 of the 184 modules in this course.'",
+     "SPEECH OUTPUT: 'separator'"]))
+
+########################################################################
+# Move to the location bar by pressing Control+L.  When it has focus
+# type "about:blank" and press Return to restore the browser to the
+# conditions at the test's start.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction("about:blank"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+# Just a little extra wait to let some events get through.
+#
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.AssertionSummaryAction())
+
+sequence.start()

Added: trunk/test/keystrokes/firefox/sayAll_role_combo_box.py
==============================================================================
--- (empty file)
+++ trunk/test/keystrokes/firefox/sayAll_role_combo_box.py	Sat Aug  9 02:38:34 2008
@@ -0,0 +1,76 @@
+#!/usr/bin/python
+
+"""Test of sayAll output on a page with HTML combo boxes in Firefox."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+########################################################################
+# We wait for the focus to be on a blank Firefox window.
+#
+sequence.append(WaitForWindowActivate("Minefield",None))
+
+########################################################################
+# Load the local combo box test case.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction(utils.htmlURLPrefix + "combobox.html"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+sequence.append(WaitForFocus("Combo Box Regression Test",
+                             acc_role=pyatspi.ROLE_DOCUMENT_FRAME))
+
+########################################################################
+# Press Control+Home to move to the top.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "Top of file", 
+    ["BRAILLE LINE:  'Severity Link : Severity normal Combo'",
+     "     VISIBLE:  'Severity Link : Severity normal ', cursor=1",
+     "SPEECH OUTPUT: 'Severity link : Severity normal combo box'"]))
+
+########################################################################
+# SayAll to the End.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Add"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_Add to do a SayAll",
+    ["SPEECH OUTPUT: 'Severity link'",
+     "SPEECH OUTPUT: ': Severity normal combo box'",
+     "SPEECH OUTPUT: 'Priority link'",
+     "SPEECH OUTPUT: ': Normal combo box'",
+     "SPEECH OUTPUT: 'Resolution: ", 
+     " FIXED combo box'",
+     "SPEECH OUTPUT: 'Version'",
+     "SPEECH OUTPUT: '2.16 combo box'",
+     "SPEECH OUTPUT: 'Component'",
+     "SPEECH OUTPUT: 'Speech combo box'"]))
+
+########################################################################
+# Move to the location bar by pressing Control+L.  When it has focus
+# type "about:blank" and press Return to restore the browser to the
+# conditions at the test's start.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction("about:blank"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+# Just a little extra wait to let some events get through.
+#
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.AssertionSummaryAction())
+
+sequence.start()

Added: trunk/test/keystrokes/firefox/sayAll_role_links.py
==============================================================================
--- (empty file)
+++ trunk/test/keystrokes/firefox/sayAll_role_links.py	Sat Aug  9 02:38:34 2008
@@ -0,0 +1,84 @@
+# -*- coding: utf-8 -*-
+#!/usr/bin/python
+
+"""Test of sayAll output of a page consisting of mostly HTML links."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+########################################################################
+# We wait for the focus to be on a blank Firefox window.
+#
+sequence.append(WaitForWindowActivate("Minefield",None))
+
+########################################################################
+# Load the local anchors test case.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction(utils.htmlURLPrefix + "anchors2.html"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+sequence.append(WaitForFocus("Links to test files",
+                             acc_role=pyatspi.ROLE_DOCUMENT_FRAME))
+
+########################################################################
+# Press Control+Home to move to the top.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "Top of file", 
+    ["BRAILLE LINE:  'Here are some of our local test files:'",
+     "     VISIBLE:  'Here are some of our local test ', cursor=1",
+     "SPEECH OUTPUT: 'Here are some of our local test files:'"]))
+
+########################################################################
+# SayAll to the End.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Add"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_Add to do a SayAll",
+    ["SPEECH OUTPUT: 'Here are some of our local test files:'",
+     "SPEECH OUTPUT: 'â anchors.html link'",
+     "SPEECH OUTPUT: 'â blockquotes.html link'",
+     "SPEECH OUTPUT: 'â bugzilla_top.html link'",
+     "SPEECH OUTPUT: 'â combobox.html link'",
+     "SPEECH OUTPUT: 'â fieldset.html link'",
+     "SPEECH OUTPUT: 'â htmlpage.html link'",
+     "SPEECH OUTPUT: 'â image-test.html link'",
+     "SPEECH OUTPUT: 'â linebreak-test.html link'",
+     "SPEECH OUTPUT: 'â lists.html link'",
+     "SPEECH OUTPUT: 'â samesizearea.html link'",
+     "SPEECH OUTPUT: 'â simpleform.html link'",
+     "SPEECH OUTPUT: 'â simpleheader.html link'",
+     "SPEECH OUTPUT: 'â slash-test.html link'",
+     "SPEECH OUTPUT: 'â status-bar.html link'",
+     "SPEECH OUTPUT: 'â tables.html link'",
+     "SPEECH OUTPUT: 'â textattributes.html link'"]))
+
+########################################################################
+# Move to the location bar by pressing Control+L.  When it has focus
+# type "about:blank" and press Return to restore the browser to the
+# conditions at the test's start.
+#
+sequence.append(KeyComboAction("<Control>l", 1000))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction("about:blank"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+# Just a little extra wait to let some events get through.
+#
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.AssertionSummaryAction())
+
+sequence.start()

Added: trunk/test/keystrokes/firefox/sayAll_role_lists.py
==============================================================================
--- (empty file)
+++ trunk/test/keystrokes/firefox/sayAll_role_lists.py	Sat Aug  9 02:38:34 2008
@@ -0,0 +1,71 @@
+# -*- coding: utf-8 -*-
+#!/usr/bin/python
+
+"""Test of sayAll output with HTML lists in Firefox"""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+########################################################################
+# We wait for the focus to be on a blank Firefox window.
+#
+sequence.append(WaitForWindowActivate("Minefield",None))
+
+########################################################################
+# Load the local lists test case.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction(utils.htmlURLPrefix + "lists.html"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+sequence.append(WaitForFocus("Lists Test Page",
+                             acc_role=pyatspi.ROLE_DOCUMENT_FRAME))
+
+########################################################################
+# Press Control+Home to move to the top.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "Top of file", 
+    ["BRAILLE LINE:  'Welcome to a List of Lists h1'",
+     "     VISIBLE:  'Welcome to a List of Lists h1', cursor=1",
+     "SPEECH OUTPUT: 'Welcome to a List of Lists heading  '",
+     "SPEECH OUTPUT: 'level 1'"]))
+
+########################################################################
+# SayAll to the End.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Add"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_Add to do a SayAll",
+    ["SPEECH OUTPUT: 'Welcome to a List of Lists heading  '",
+     "SPEECH OUTPUT: 'level 1'",
+     "SPEECH OUTPUT: 'Lists are not only fun to make, they are fun to use. They help us: 1. remember what the heck we are doing each day 2. arrange long and arbitrary lines of text into ordered lists that are pleasing to the eye and suggest some sense of priority, even if it is artificial 3. look really cool when we carry them around on yellow Post-Itstm. 4. and that other thing I keep forgetting. Your ordered lists can start at a strange number, like: VI. And use roman numerals, g. You might try using letters as well, H. Maybe you prefer Big Letters, ix. or small roman numerals â But discs belong to unordered lists 50. Though you can set the value in a list item! Unordered list: â listing item â first sublevel â look for the bullet on â each sublevel â they should all be different, except here. â second sublevel â or you can specify a square â if your TYPE is circle â or even a disc â Franz Liszt â was a composer who was not square â would have lik
 ed the Who â feeling listless â blah, blah, blah â whine, whine, whine'"]))
+
+########################################################################
+# Move to the location bar by pressing Control+L.  When it has focus
+# type "about:blank" and press Return to restore the browser to the
+# conditions at the test's start.
+#
+sequence.append(KeyComboAction("<Control>l", 1000))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction("about:blank"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+# Just a little extra wait to let some events get through.
+#
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.AssertionSummaryAction())
+
+sequence.start()

Added: trunk/test/keystrokes/firefox/sayAll_simple_form.py
==============================================================================
--- (empty file)
+++ trunk/test/keystrokes/firefox/sayAll_simple_form.py	Sat Aug  9 02:38:34 2008
@@ -0,0 +1,79 @@
+#!/usr/bin/python
+
+"""Test of sayAll output of Firefox on a page with a simple form."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+########################################################################
+# We wait for the focus to be on a blank Firefox window.
+#
+sequence.append(WaitForWindowActivate("Minefield",None))
+
+########################################################################
+# Load the local "simple form" test case.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction(utils.htmlURLPrefix + "simpleform.html"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+sequence.append(WaitForFocus(utils.htmlURLPrefix + "simpleform.html",
+                             acc_role=pyatspi.ROLE_DOCUMENT_FRAME))
+
+########################################################################
+# Press Control+Home to move to the top.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "Top of file",
+    ["BRAILLE LINE:  'Type something here:  $l'",
+     "     VISIBLE:  'Type something here:  $l', cursor=1",
+     "SPEECH OUTPUT: 'Type something here: text'"]))
+
+########################################################################
+# SayAll to the End.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Add"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_Add to do a SayAll",
+    ["SPEECH OUTPUT: 'Type something here: text'",
+     "SPEECH OUTPUT: 'Magic disappearing text trick: text tab to me and I disappear'",
+     "SPEECH OUTPUT: 'Tell me a secret: password'",
+     "SPEECH OUTPUT: 'Tell me a little more about yourself:",
+     " text'",
+     "SPEECH OUTPUT: 'Check one or more: Red check box not checked Blue check box not checked Green check box not checked'",
+     "SPEECH OUTPUT: 'Make a selection: Water combo box'",
+     "SPEECH OUTPUT: 'Which sports do you like?",
+     " multi-select List with 4 items'",
+     "SPEECH OUTPUT: 'Dashing picture of Willie Walker image'",
+     "SPEECH OUTPUT: '",
+     "Ain't he handsome (please say yes)? not selected radio button Yes not selected radio button No'"]))
+
+########################################################################
+# Move to the location bar by pressing Control+L.  When it has focus
+# type "about:blank" and press Return to restore the browser to the
+# conditions at the test's start.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction("about:blank"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+# Just a little extra wait to let some events get through.
+#
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.AssertionSummaryAction())
+
+sequence.start()

Added: trunk/test/keystrokes/firefox/sayAll_table_cell_links.py
==============================================================================
--- (empty file)
+++ trunk/test/keystrokes/firefox/sayAll_table_cell_links.py	Sat Aug  9 02:38:34 2008
@@ -0,0 +1,79 @@
+# -*- coding: utf-8 -*-
+#!/usr/bin/python
+
+"""Test of sayAll output of Firefox on a page with links in a table cell
+with line breaks.
+"""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+########################################################################
+# We wait for the focus to be on a blank Firefox window.
+#
+sequence.append(WaitForWindowActivate("Minefield",None))
+
+########################################################################
+# Load the local "simple form" test case.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction(utils.htmlURLPrefix + "table-cell-links.html"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+sequence.append(WaitForFocus("Table Cell Links",
+                             acc_role=pyatspi.ROLE_DOCUMENT_FRAME))
+
+########################################################################
+# Press Control+Home to move to the top.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "Top of file",
+    ["BRAILLE LINE:  'Here are some links'",
+     "     VISIBLE:  'Here are some links', cursor=1",
+     "SPEECH OUTPUT: 'Here are some links'"]))
+
+########################################################################
+# SayAll to the End.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Add"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_Add to do a SayAll",
+    ["SPEECH OUTPUT: 'Here are some links'",
+     "SPEECH OUTPUT: 'HTML Tags",
+     "",
+     " <!--> link ",
+     " <!DOCTYPE> link ",
+     " <a> link ",
+     " <abbr> link ",
+     " <acronym> link ",
+     "'"]))
+
+########################################################################
+# Move to the location bar by pressing Control+L.  When it has focus
+# type "about:blank" and press Return to restore the browser to the
+# conditions at the test's start.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction("about:blank"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+# Just a little extra wait to let some events get through.
+#
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.AssertionSummaryAction())
+
+sequence.start()

Added: trunk/test/keystrokes/firefox/sayAll_wiki.py
==============================================================================
--- (empty file)
+++ trunk/test/keystrokes/firefox/sayAll_wiki.py	Sat Aug  9 02:38:34 2008
@@ -0,0 +1,159 @@
+# -*- coding: utf-8 -*-
+#!/usr/bin/python
+
+"""Test of sayAll output of Firefox on the Orca wiki.
+"""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+########################################################################
+# We wait for the focus to be on a blank Firefox window.
+#
+sequence.append(WaitForWindowActivate("Minefield",None))
+
+########################################################################
+# Load the local "wiki" test case.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction(utils.htmlURLPrefix + "orca-wiki.html"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+sequence.append(WaitForFocus("Orca - GNOME Live!",
+                             acc_role=pyatspi.ROLE_DOCUMENT_FRAME))
+
+########################################################################
+# Press Control+Home to move to the top.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "Top of file", 
+    ["BRAILLE LINE:  'Home Link News Link Projects Link Art Link Support Link Development Link Community Link'",
+     "     VISIBLE:  'Home Link News Link Projects Lin', cursor=1",
+     "SPEECH OUTPUT: 'Home link News link Projects link Art link Support link Development link Community link'"]))
+
+########################################################################
+# SayAll to the End.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Add"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_Add to do a SayAll",
+    ["SPEECH OUTPUT: 'Home link'",
+     "SPEECH OUTPUT: 'News link'",
+     "SPEECH OUTPUT: 'Projects link'",
+     "SPEECH OUTPUT: 'Art link'",
+     "SPEECH OUTPUT: 'Support link'",
+     "SPEECH OUTPUT: 'Development link'",
+     "SPEECH OUTPUT: 'Community link'",
+     "SPEECH OUTPUT: 'live.gnome.org heading  '",
+     "SPEECH OUTPUT: 'level 1'",
+     "SPEECH OUTPUT: 'text Search'",
+     "SPEECH OUTPUT: 'Titles button grayed Text button grayed'",
+     "SPEECH OUTPUT: 'Home link'",
+     "SPEECH OUTPUT: 'RecentChanges link'",
+     "SPEECH OUTPUT: 'FindPage link'",
+     "SPEECH OUTPUT: 'HelpContents link'",
+     "SPEECH OUTPUT: 'Orca link'",
+     "SPEECH OUTPUT: 'en EspaÃol link'",
+     "SPEECH OUTPUT: 'Home link'",
+     "SPEECH OUTPUT: ' | Download/Installation link  | Configuration/Use link  | Accessible Applications link  | Mailing List link  ( Archives link ) | FAQ link  | DocIndex link'",
+     "SPEECH OUTPUT: 'Welcome to Orca! heading  '",
+     "SPEECH OUTPUT: 'level 1'",
+     "SPEECH OUTPUT: 'Orca Logo link image'",
+     "SPEECH OUTPUT: 'HOT HOT HOT: Notes on access to Firefox 3.0 link'",
+     "SPEECH OUTPUT: 'Contents'",
+     "SPEECH OUTPUT: '1. Welcome to Orca! link'",
+     "SPEECH OUTPUT: '2. About link'",
+     "SPEECH OUTPUT: '3. Audio Guides link'",
+     "SPEECH OUTPUT: '4. Download/Installation link'",
+     "SPEECH OUTPUT: '5. Configuration/Use link'",
+     "SPEECH OUTPUT: '6. Accessible Applications link'",
+     "SPEECH OUTPUT: '7. How Can I Help? link'",
+     "SPEECH OUTPUT: '8. More Information link'",
+     "SPEECH OUTPUT: 'About heading  '",
+     "SPEECH OUTPUT: 'level 1'",
+     "SPEECH OUTPUT: 'Orca is a free, open source, flexible, extensible, and powerful assistive technology for people with visual impairments. Using various combinations of speech synthesis, braille, and magnification, Orca helps provide access to applications and toolkits that support the AT-SPI (e.g., the GNOME desktop). The development of Orca has been led by the Accessibility Program Office of Sun Microsystems, Inc. link  with contributions from many community members link .'",
+     "SPEECH OUTPUT: 'The complete list of work to do, including bugs and feature requests, along with known problems in other components, is maintained in Bugzilla link  (please see our notes on how we use Bugzilla link ).'",
+     "SPEECH OUTPUT: 'Please join and participate on the Orca mailing list link  ( archives link ): it's a helpful, kind, and productive environment composed of users and developers.'",
+     "SPEECH OUTPUT: 'Audio Guides heading  '",
+     "SPEECH OUTPUT: 'level 1'",
+     "SPEECH OUTPUT: 'Darragh à HÃiligh link'",
+     "SPEECH OUTPUT: ' has created several audio guides for Orca. This is a fantastic contribution (THANKS!)!!! The audio guides can be found at http://www.digitaldarragh.com/linuxat.asp link  and include the following:'",
+     "SPEECH OUTPUT: 'â Walk through of the installation of Ubuntu 7.4. Very helpful tutorial link'",
+     "SPEECH OUTPUT: 'â Review of Fedora 7 and the Orca screen reader for the Gnome graphical desktop link'",
+     "SPEECH OUTPUT: 'â Guide to installing the latest versions of Firefox and Orca link'",
+     "SPEECH OUTPUT: 'Download/Installation heading  '",
+     "SPEECH OUTPUT: 'level 1'",
+     "SPEECH OUTPUT: 'As of GNOME 2.16, Orca is a part of the GNOME platform. As a result, Orca is already provided by default on a number of operating system distributions, including Open Solaris link  and Ubuntu link .'",
+     "SPEECH OUTPUT: 'Please also refer to the Download/Installation page link  for detailed information on various distributions as well as installing Orca directly from source.'",
+     "SPEECH OUTPUT: 'Configuration/Use heading  '",
+     "SPEECH OUTPUT: 'level 1'",
+     "SPEECH OUTPUT: 'The command to run orca is orca. You can enter this command by pressing Alt+F2 when logged in, waiting for a second or so, then typing orca and pressing return. Orca is designed to present information as you navigate the desktop using the built-in navigation mechanisms of GNOME link . These navigation mechanisms are consistent across most desktop applications.'",
+     "SPEECH OUTPUT: 'You may sometimes wish to control Orca itself, such as bringing up the Orca Configuration GUI link  (accessed by pressing Insert+Space when Orca is running) and for using flat review mode to examine a window. Refer to Orca Keyboard Commands link (Laptop Layout) link  for more information on Orca-specific keyboard commands. The Orca Configuration GUI link  also includes a \"Key Bindings\" tab that allows you to get a complete list of Orca key bindings.'",
+     "SPEECH OUTPUT: 'Please also refer to the Configuration/Use page link  for detailed information.'",
+     "SPEECH OUTPUT: 'Accessible Applications heading  '",
+     "SPEECH OUTPUT: 'level 1'",
+     "SPEECH OUTPUT: 'Orca is designed to work with applications and toolkits that support the assistive technology service provider interface (AT-SPI). This includes the GNOME desktop and its applications, OpenOffice link , Firefox, and the Java platform. Some applications work better than others, however, and the Orca community continually works to provide compelling access to more and more applications.'",
+     "SPEECH OUTPUT: 'On the Accessible Applications page link , you will find a growing list of information regarding various applications that can be accessed with Orca as well as tips and tricks for using them. The list is not to be a conclusive list of all applications. Rather, the goal is to provide a repository within which users can share experiences regarding applications they have tested.'",
+     "SPEECH OUTPUT: 'See also the Application Specific Settings link  page for how to configure settings specific to an application.'",
+     "SPEECH OUTPUT: 'Please also refer to the Accessible Applications page link  for detailed information.'",
+     "SPEECH OUTPUT: 'How Can I Help? heading  '",
+     "SPEECH OUTPUT: 'level 1'",
+     "SPEECH OUTPUT: 'There's a bunch you can do! Please refer to the How Can I Help page link  for detailed information.'",
+     "SPEECH OUTPUT: 'More Information heading  '",
+     "SPEECH OUTPUT: 'level 1'",
+     "SPEECH OUTPUT: 'â Frequently Asked Questions: FAQ link'",
+     "SPEECH OUTPUT: 'â Mailing list: orca-list gnome org link  ( Archives link )'",
+     "SPEECH OUTPUT: 'â Bug database: GNOME Bug Tracking System (Bugzilla) link  ( current bug list link )'",
+     "SPEECH OUTPUT: 'â Design documents: Orca Documentation Series link'",
+     "SPEECH OUTPUT: 'â Dive Into Python, Mark Pilgrim link'",
+     "SPEECH OUTPUT: 'â Python in a Nutshell, Alex Martelli link'",
+     "SPEECH OUTPUT: 'â Python Pocket Reference, Mark Lutz link'",
+     "SPEECH OUTPUT: 'separator'",
+     "SPEECH OUTPUT: 'The information on this page and the other Orca-related pages on this site are distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.'",
+     "SPEECH OUTPUT: 'separator'",
+     "SPEECH OUTPUT: 'CategoryAccessibility link'",
+     "SPEECH OUTPUT: 'Orca (last edited 2007-12-07 22:09:22 by WillieWalker link )'",
+     "SPEECH OUTPUT: 'User heading  '",
+     "SPEECH OUTPUT: 'level 3'",
+     "SPEECH OUTPUT: 'Login link'",
+     "SPEECH OUTPUT: 'Page heading  '",
+     "SPEECH OUTPUT: 'level 3'",
+     "SPEECH OUTPUT: 'Immutable Page'",
+     "SPEECH OUTPUT: 'Info link'",
+     "SPEECH OUTPUT: 'Attachments link'",
+     "SPEECH OUTPUT: '.*combo box'",
+     "SPEECH OUTPUT: 'GNOME World Wide heading  '",
+     "SPEECH OUTPUT: 'level 3'",
+     "SPEECH OUTPUT: 'GnomeWorldWide link image'",
+     "SPEECH OUTPUT: 'Copyright  2005, 2006, 2007 The GNOME Project link .",
+     "Hosted by Red Hat link .'"]))
+
+########################################################################
+# Move to the location bar by pressing Control+L.  When it has focus
+# type "about:blank" and press Return to restore the browser to the
+# conditions at the test's start.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction("about:blank"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+# Just a little extra wait to let some events get through.
+#
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.AssertionSummaryAction())
+
+sequence.start()



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]