[orca] New and updated regression tests



commit f01b483023d761d693952b270f088e62fd789637
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Fri Feb 20 17:04:37 2015 -0500

    New and updated regression tests

 test/keystrokes/gtk-demo/role_accel_label.py       |    9 +-
 test/keystrokes/gtk-demo/role_check_box.py         |    6 +-
 test/keystrokes/gtk-demo/role_combo_box.py         |   64 +++--
 test/keystrokes/gtk-demo/role_combo_box2.py        |   21 +-
 test/keystrokes/gtk-demo/role_dialog.py            |    3 +-
 test/keystrokes/gtk-demo/role_icon.py              |    6 +-
 test/keystrokes/gtk-demo/role_label.py             |   16 +-
 test/keystrokes/gtk-demo/role_menu.py              |   12 +-
 test/keystrokes/gtk-demo/role_page_tab.py          |    4 +-
 test/keystrokes/gtk-demo/role_push_button.py       |    3 +-
 test/keystrokes/gtk-demo/role_radio_button.py      |    6 +-
 test/keystrokes/gtk-demo/role_spin_button.py       |    5 +-
 test/keystrokes/gtk-demo/role_text_multiline.py    |   16 +-
 .../gtk-demo/role_text_multiline_flatreview.py     |    3 +-
 test/keystrokes/gtk-demo/role_toggle_button.py     |    6 +-
 test/keystrokes/gtk-demo/role_toolbar.py           |   10 +-
 test/keystrokes/gtk-demo/role_tooltip.py           |   11 +-
 test/keystrokes/gtk3-demo/role_accel_label.py      |    9 +-
 test/keystrokes/gtk3-demo/role_check_box.py        |    6 +-
 test/keystrokes/gtk3-demo/role_column_header.py    |    3 +-
 test/keystrokes/gtk3-demo/role_combo_box.py        |   59 +++-
 test/keystrokes/gtk3-demo/role_combo_box2.py       |   24 +-
 test/keystrokes/gtk3-demo/role_dialog.py           |    3 +-
 test/keystrokes/gtk3-demo/role_icon.py             |    6 +-
 test/keystrokes/gtk3-demo/role_label.py            |   16 +-
 test/keystrokes/gtk3-demo/role_menu.py             |   21 +-
 test/keystrokes/gtk3-demo/role_page_tab.py         |    4 +-
 test/keystrokes/gtk3-demo/role_push_button.py      |    3 +-
 test/keystrokes/gtk3-demo/role_radio_button.py     |    6 +-
 test/keystrokes/gtk3-demo/role_spin_button.py      |    5 +-
 test/keystrokes/gtk3-demo/role_split_pane.py       |   24 +-
 test/keystrokes/gtk3-demo/role_text_multiline.py   |   16 +-
 .../gtk3-demo/role_text_multiline_flatreview.py    |   17 +-
 test/keystrokes/gtk3-demo/role_toggle_button.py    |    6 +-
 test/keystrokes/gtk3-demo/role_toolbar.py          |    4 +-
 test/keystrokes/helpcontent/line_nav_intro.py      |  347 ++++++++++++++++++
 .../keystrokes/helpcontent/line_nav_intro.settings |  140 ++++++++
 test/keystrokes/helpcontent/line_nav_main_page.py  |  375 ++++++++++++++++++++
 .../helpcontent/line_nav_main_page.settings        |  140 ++++++++
 test/keystrokes/helpcontent/load_no_sayall.py      |   34 ++
 .../keystrokes/helpcontent/load_no_sayall.settings |  140 ++++++++
 test/keystrokes/helpcontent/load_sayall.py         |  129 +++++++
 test/keystrokes/helpcontent/load_sayall.settings   |  140 ++++++++
 test/keystrokes/helpcontent/struct_nav_heading.py  |  165 +++++++++
 test/keystrokes/helpcontent/struct_nav_list.py     |  115 ++++++
 .../helpcontent/struct_nav_list.settings           |  140 ++++++++
 .../keystrokes/helpcontent/struct_nav_paragraph.py |  144 ++++++++
 .../helpcontent/struct_nav_paragraph.settings      |  140 ++++++++
 48 files changed, 2345 insertions(+), 237 deletions(-)
---
diff --git a/test/keystrokes/gtk-demo/role_accel_label.py b/test/keystrokes/gtk-demo/role_accel_label.py
index 41c4a52..fd0f09f 100644
--- a/test/keystrokes/gtk-demo/role_accel_label.py
+++ b/test/keystrokes/gtk-demo/role_accel_label.py
@@ -29,12 +29,9 @@ sequence.append(utils.AssertPresentationAction(
     "2. Where Am I",
     ["BRAILLE LINE:  'gtk-demo application Application Window frame Color menu'",
      "     VISIBLE:  'Color menu', cursor=1",
-     "SPEECH OUTPUT: 'Application Window'",
-     "SPEECH OUTPUT: 'frame'",
-     "SPEECH OUTPUT: 'Preferences'",
-     "SPEECH OUTPUT: 'menu'",
-     "SPEECH OUTPUT: 'Color'",
-     "SPEECH OUTPUT: 'menu 1 of 3.'",
+     "SPEECH OUTPUT: 'Application Window frame'",
+     "SPEECH OUTPUT: 'Preferences menu'",
+     "SPEECH OUTPUT: 'Color menu 1 of 3.'",
      "SPEECH OUTPUT: 'C'"]))
 
 sequence.append(KeyComboAction("Escape"))
diff --git a/test/keystrokes/gtk-demo/role_check_box.py b/test/keystrokes/gtk-demo/role_check_box.py
index cac2b46..0ac6462 100644
--- a/test/keystrokes/gtk-demo/role_check_box.py
+++ b/test/keystrokes/gtk-demo/role_check_box.py
@@ -29,8 +29,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. Where Am I",
     ["BRAILLE LINE:  'gtk-demo application Panes frame Horizontal panel < > Resize check box'",
      "     VISIBLE:  '< > Resize check box', cursor=1",
-     "SPEECH OUTPUT: 'Horizontal Resize'",
-     "SPEECH OUTPUT: 'check box not checked.'",
+     "SPEECH OUTPUT: 'Horizontal Resize check box not checked.'",
      "SPEECH OUTPUT: 'Alt+R'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -47,8 +46,7 @@ sequence.append(utils.AssertPresentationAction(
     "4. Where Am I",
     ["BRAILLE LINE:  'gtk-demo application Panes frame Horizontal panel <x> Resize check box'",
      "     VISIBLE:  '<x> Resize check box', cursor=1",
-     "SPEECH OUTPUT: 'Horizontal Resize'",
-     "SPEECH OUTPUT: 'check box checked.'",
+     "SPEECH OUTPUT: 'Horizontal Resize check box checked.'",
      "SPEECH OUTPUT: 'Alt+R'"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/gtk-demo/role_combo_box.py b/test/keystrokes/gtk-demo/role_combo_box.py
index d4b2331..121d979 100644
--- a/test/keystrokes/gtk-demo/role_combo_box.py
+++ b/test/keystrokes/gtk-demo/role_combo_box.py
@@ -28,14 +28,9 @@ sequence.append(utils.AssertPresentationAction(
     "2. Warning combo box item Where Am I",
     ["BRAILLE LINE:  'gtk-demo application Combo boxes frame Some stock icons panel  combo boxWarning 
Warning'",
      "     VISIBLE:  'Warning', cursor=1",
-     "SPEECH OUTPUT: 'Combo boxes'",
-     "SPEECH OUTPUT: 'frame'",
-     "SPEECH OUTPUT: 'Some stock icons'",
-     "SPEECH OUTPUT: 'panel'",
-     "SPEECH OUTPUT: 'Warning'",
-     "SPEECH OUTPUT: 'combo box'",
-     "SPEECH OUTPUT: 'Warning'",
-     "SPEECH OUTPUT: '1 of 5'"]))
+     "SPEECH OUTPUT: 'Combo boxes frame'",
+     "SPEECH OUTPUT: 'Some stock icons panel'",
+     "SPEECH OUTPUT: 'Warning 1 of 5'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -52,14 +47,9 @@ sequence.append(utils.AssertPresentationAction(
     ["KNOWN ISSUE: We're a bit chatty here and have some spacing issues",
      "BRAILLE LINE:  'gtk-demo application Combo boxes frame Some stock icons panel  combo boxWarning New'",
      "     VISIBLE:  'New', cursor=1",
-     "SPEECH OUTPUT: 'Combo boxes'",
-     "SPEECH OUTPUT: 'frame'",
-     "SPEECH OUTPUT: 'Some stock icons'",
-     "SPEECH OUTPUT: 'panel'",
-     "SPEECH OUTPUT: 'Warning'",
-     "SPEECH OUTPUT: 'combo box'",
-     "SPEECH OUTPUT: 'New'",
-     "SPEECH OUTPUT: '3 of 5'"]))
+     "SPEECH OUTPUT: 'Combo boxes frame'",
+     "SPEECH OUTPUT: 'Some stock icons panel'",
+     "SPEECH OUTPUT: 'New 3 of 5'"]))
 
 sequence.append(KeyComboAction("Escape"))
 sequence.append(KeyComboAction("Tab"))
@@ -89,8 +79,7 @@ sequence.append(utils.AssertPresentationAction(
     "7. Editable text combo box Where Am I",
     ["BRAILLE LINE:  'gtk-demo application Combo boxes frame Editable panel Four $l'",
      "     VISIBLE:  'Four $l', cursor=5",
-     "SPEECH OUTPUT: 'text'",
-     "SPEECH OUTPUT: 'Four'"]))
+     "SPEECH OUTPUT: 'text Four'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -116,11 +105,42 @@ sequence.append(utils.AssertPresentationAction(
     "10. Editable text combo box with selected text Where Am I",
     ["BRAILLE LINE:  'gtk-demo application Combo boxes frame Editable panel Four $l'",
      "     VISIBLE:  'Four $l', cursor=5",
-     "SPEECH OUTPUT: 'text'",
-     "SPEECH OUTPUT: 'Four'",
-     "SPEECH OUTPUT: 'selected'"]))
+     "SPEECH OUTPUT: 'text Four selected'"]))
 
-sequence.append(KeyComboAction("<Alt>F4"))
+sequence.append(KeyComboAction("Escape"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Tab"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Combo box with multiple levels",
+    ["KNOWN ISSUE: This is broken",
+     "BRAILLE LINE:  'gtk-demo application Combo boxes frame Where are we ? panel A - B combo box'",
+     "     VISIBLE:  'A - B combo box', cursor=1",
+     "SPEECH OUTPUT: 'Where are we ? panel'",
+     "SPEECH OUTPUT: 'A - B combo box'"]))
 
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "12. Down arrow",
+    ["KNOWN ISSUE: This is broken",
+     "BRAILLE LINE:  'gtk-demo application Combo boxes frame Where are we ? panel  combo boxC - D C - D 
menu'",
+     "     VISIBLE:  'C - D menu', cursor=1",
+     "SPEECH OUTPUT: 'C - D menu'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "12. Where Am I",
+    ["KNOWN ISSUE: This is broken",
+     "BRAILLE LINE:  'gtk-demo application Combo boxes frame Where are we ? panel  combo boxC - D C - D 
menu'",
+     "     VISIBLE:  'C - D menu', cursor=1",
+     "SPEECH OUTPUT: 'Combo boxes frame'",
+     "SPEECH OUTPUT: 'Where are we ? panel'",
+     "SPEECH OUTPUT: 'C - D menu 2 of 5'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_combo_box2.py b/test/keystrokes/gtk-demo/role_combo_box2.py
index 6e49b1e..1766e89 100644
--- a/test/keystrokes/gtk-demo/role_combo_box2.py
+++ b/test/keystrokes/gtk-demo/role_combo_box2.py
@@ -12,10 +12,10 @@ sequence.append(TypeAction("Printing"))
 sequence.append(KeyComboAction("Return"))
 
 sequence.append(KeyComboAction("Right"))
-sequence.append(KeyComboAction("Tab"))
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("<Alt>o"))
 sequence.append(utils.AssertPresentationAction(
     "1. Combo box",
     ["BRAILLE LINE:  'gtk-demo application Print dialog Page Setup page tab Only print: All sheets combo 
box'",
@@ -28,10 +28,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. Where Am I",
     ["BRAILLE LINE:  'gtk-demo application Print dialog Page Setup page tab Only print: All sheets combo 
box'",
      "     VISIBLE:  'Only print: All sheets combo box', cursor=13",
-     "SPEECH OUTPUT: 'Only print:'",
-     "SPEECH OUTPUT: 'combo box'",
-     "SPEECH OUTPUT: 'All sheets'",
-     "SPEECH OUTPUT: '1 of 3.'",
+     "SPEECH OUTPUT: 'Only print: combo box All sheets 1 of 3.'",
      "SPEECH OUTPUT: 'Alt+O'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -46,16 +43,12 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
     "4. Where Am I",
-    ["KNOWN ISSUE: We're a bit chatty here and the space is off with the combo box",
+    ["KNOWN ISSUE: The combo box role is missing and spacing is wrong in braille",
      "BRAILLE LINE:  'gtk-demo application Print dialog Page Setup page tab  combo boxOnly print: Even 
sheets Even sheets'",
      "     VISIBLE:  'Even sheets', cursor=1",
-     "SPEECH OUTPUT: 'Print Layout Paper %'",
-     "SPEECH OUTPUT: 'Page Setup'",
-     "SPEECH OUTPUT: 'page tab'",
-     "SPEECH OUTPUT: 'Even sheets'",
-     "SPEECH OUTPUT: 'combo box'",
-     "SPEECH OUTPUT: 'Even sheets'",
-     "SPEECH OUTPUT: '2 of 3'"]))
+     "SPEECH OUTPUT: 'Print'",
+     "SPEECH OUTPUT: 'Page Setup page tab'",
+     "SPEECH OUTPUT: 'Even sheets 2 of 3'"]))
 
 sequence.append(KeyComboAction("<Alt>F4"))
 
diff --git a/test/keystrokes/gtk-demo/role_dialog.py b/test/keystrokes/gtk-demo/role_dialog.py
index 036c9b0..0a7f7e8 100644
--- a/test/keystrokes/gtk-demo/role_dialog.py
+++ b/test/keystrokes/gtk-demo/role_dialog.py
@@ -33,8 +33,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. Dialog Where Am I",
     ["BRAILLE LINE:  'gtk-demo application GtkExpander dialog & y Details collapsed toggle button'",
      "     VISIBLE:  '& y Details collapsed toggle but', cursor=1",
-     "SPEECH OUTPUT: 'Details'",
-     "SPEECH OUTPUT: 'toggle button collapsed'"]))
+     "SPEECH OUTPUT: 'Details toggle button collapsed'"]))
 
 sequence.append(KeyComboAction("<Alt>F4"))
 
diff --git a/test/keystrokes/gtk-demo/role_icon.py b/test/keystrokes/gtk-demo/role_icon.py
index b9f36c6..2d88d3f 100644
--- a/test/keystrokes/gtk-demo/role_icon.py
+++ b/test/keystrokes/gtk-demo/role_icon.py
@@ -30,8 +30,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'gtk-demo application GtkIconView demo frame bin icon'",
      "     VISIBLE:  'bin icon', cursor=1",
      "SPEECH OUTPUT: 'Icon panel'",
-     "SPEECH OUTPUT: 'bin'",
-     "SPEECH OUTPUT: '1 of 20 items selected on 1 of 20'"]))
+     "SPEECH OUTPUT: 'bin 1 of 20 items selected on 1 of 20'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
@@ -56,8 +55,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'gtk-demo application GtkIconView demo frame bin icon'",
      "     VISIBLE:  'bin icon', cursor=1",
      "SPEECH OUTPUT: 'Icon panel'",
-     "SPEECH OUTPUT: 'bin'",
-     "SPEECH OUTPUT: '2 of 20 items selected on 1 of 20'"]))
+     "SPEECH OUTPUT: 'bin 2 of 20 items selected on 1 of 20'"]))
 
 sequence.append(KeyComboAction("<Alt>F4"))
 
diff --git a/test/keystrokes/gtk-demo/role_label.py b/test/keystrokes/gtk-demo/role_label.py
index 1a7fb0e..16dbd7d 100644
--- a/test/keystrokes/gtk-demo/role_label.py
+++ b/test/keystrokes/gtk-demo/role_label.py
@@ -30,8 +30,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'number of times:'",
      "     VISIBLE:  'number of times:', cursor=17",
      "SPEECH OUTPUT: 'This message box has been popped up the following",
-     "number of times:'",
-     "SPEECH OUTPUT: 'selected label'"]))
+     "number of times: selected label'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
@@ -43,8 +42,9 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'number of times:'",
      "     VISIBLE:  'number of times:', cursor=17",
      "SPEECH OUTPUT: 'This message box has been popped up the following",
-     "number of times:'",
-     "SPEECH OUTPUT: 'selected label'"]))
+     "number of times: selected label'",
+     "SPEECH OUTPUT: 'This message box has been popped up the following",
+     "number of times: selected label'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Home"))
@@ -83,8 +83,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following'",
      "     VISIBLE:  'This message box has been popped', cursor=5",
      "SPEECH OUTPUT: 'This message box has been popped up the following",
-     "number of times:'",
-     "SPEECH OUTPUT: 'selected label'"]))
+     "number of times: selected label'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
@@ -96,8 +95,9 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following'",
      "     VISIBLE:  'This message box has been popped', cursor=5",
      "SPEECH OUTPUT: 'This message box has been popped up the following",
-     "number of times:'",
-     "SPEECH OUTPUT: 'selected label'"]))
+     "number of times: selected label'",
+     "SPEECH OUTPUT: 'This message box has been popped up the following",
+     "number of times: selected label'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
diff --git a/test/keystrokes/gtk-demo/role_menu.py b/test/keystrokes/gtk-demo/role_menu.py
index fde47fa..e98a2fe 100644
--- a/test/keystrokes/gtk-demo/role_menu.py
+++ b/test/keystrokes/gtk-demo/role_menu.py
@@ -37,14 +37,10 @@ sequence.append(utils.AssertPresentationAction(
     "3. Where Am I",
     ["BRAILLE LINE:  'gtk-demo application Application Window frame Preferences menu <x> Red check menu 
item(Ctrl+R)'",
      "     VISIBLE:  '<x> Red check menu item(Ctrl+R)', cursor=1",
-     "SPEECH OUTPUT: 'Application Window'",
-     "SPEECH OUTPUT: 'frame'",
-     "SPEECH OUTPUT: 'Preferences'",
-     "SPEECH OUTPUT: 'menu'",
-     "SPEECH OUTPUT: 'Color'",
-     "SPEECH OUTPUT: 'menu'",
-     "SPEECH OUTPUT: 'Red'",
-     "SPEECH OUTPUT: 'check menu item checked Ctrl+R 1 of 3.'",
+     "SPEECH OUTPUT: 'Application Window frame'",
+     "SPEECH OUTPUT: 'Preferences menu'",
+     "SPEECH OUTPUT: 'Color menu'",
+     "SPEECH OUTPUT: 'Red check menu item checked Ctrl+R 1 of 3.'",
      "SPEECH OUTPUT: 'R'"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/gtk-demo/role_page_tab.py b/test/keystrokes/gtk-demo/role_page_tab.py
index 5f3bf74..f1bb840 100644
--- a/test/keystrokes/gtk-demo/role_page_tab.py
+++ b/test/keystrokes/gtk-demo/role_page_tab.py
@@ -25,9 +25,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. Page Setup page tab Where Am I",
     ["BRAILLE LINE:  'gtk-demo application Print dialog Page Setup page tab'",
      "     VISIBLE:  'Page Setup page tab', cursor=1",
-     "SPEECH OUTPUT: 'page tab list'",
-     "SPEECH OUTPUT: 'Page Setup'",
-     "SPEECH OUTPUT: 'page tab 2 of [0-9]'"]))
+     "SPEECH OUTPUT: 'page tab list Page Setup page tab 2 of [0-9]'"]))
 
 sequence.append(KeyComboAction("<Alt>F4"))
 
diff --git a/test/keystrokes/gtk-demo/role_push_button.py b/test/keystrokes/gtk-demo/role_push_button.py
index 0ca04b5..1c671c0 100644
--- a/test/keystrokes/gtk-demo/role_push_button.py
+++ b/test/keystrokes/gtk-demo/role_push_button.py
@@ -17,8 +17,7 @@ sequence.append(utils.AssertPresentationAction(
     "1. OK push button Where Am I",
     ["BRAILLE LINE:  'gtk-demo application Button Boxes frame Horizontal Button Boxes panel Spread panel OK 
push button'",
      "     VISIBLE:  'OK push button', cursor=1",
-     "SPEECH OUTPUT: 'OK'",
-     "SPEECH OUTPUT: 'push button.'",
+     "SPEECH OUTPUT: 'OK push button.'",
      "SPEECH OUTPUT: 'Alt+O'"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/gtk-demo/role_radio_button.py b/test/keystrokes/gtk-demo/role_radio_button.py
index a062a8d..a82903a 100644
--- a/test/keystrokes/gtk-demo/role_radio_button.py
+++ b/test/keystrokes/gtk-demo/role_radio_button.py
@@ -27,8 +27,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. All Pages radio button Where Am I",
     ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab &=y All Pages radio button'",
      "     VISIBLE:  '&=y All Pages radio button', cursor=1",
-     "SPEECH OUTPUT: 'All Pages'",
-     "SPEECH OUTPUT: 'radio button selected 1 of 3.'",
+     "SPEECH OUTPUT: 'All Pages radio button selected 1 of 3.'",
      "SPEECH OUTPUT: 'Alt+A'"]))
 
 sequence.append(KeyComboAction("Down"))
@@ -46,8 +45,7 @@ sequence.append(utils.AssertPresentationAction(
     "4. Range radio button Where Am I",
     ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab &=y Pages: radio button'",
      "     VISIBLE:  '&=y Pages: radio button', cursor=1",
-     "SPEECH OUTPUT: 'Pages:'",
-     "SPEECH OUTPUT: 'radio button selected 3 of 3.'",
+     "SPEECH OUTPUT: 'Pages: radio button selected 3 of 3.'",
      "SPEECH OUTPUT: 'Alt+E'",
      "SPEECH OUTPUT: 'Specify one or more page ranges,",
      " e.g. 1-3,7,11'"]))
diff --git a/test/keystrokes/gtk-demo/role_spin_button.py b/test/keystrokes/gtk-demo/role_spin_button.py
index 7402b44..6c69ad6 100644
--- a/test/keystrokes/gtk-demo/role_spin_button.py
+++ b/test/keystrokes/gtk-demo/role_spin_button.py
@@ -28,10 +28,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. Where Am I",
     ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies: 1 $l'",
      "     VISIBLE:  'Copies: 1 $l', cursor=10",
-     "SPEECH OUTPUT: 'Copies:'",
-     "SPEECH OUTPUT: 'spin button'",
-     "SPEECH OUTPUT: '1'",
-     "SPEECH OUTPUT: 'selected.'",
+     "SPEECH OUTPUT: 'Copies: spin button 1 selected.'",
      "SPEECH OUTPUT: 'Alt+S'"]))
 
 sequence.append(TypeAction("15"))
diff --git a/test/keystrokes/gtk-demo/role_text_multiline.py b/test/keystrokes/gtk-demo/role_text_multiline.py
index 814381e..f193b02 100644
--- a/test/keystrokes/gtk-demo/role_text_multiline.py
+++ b/test/keystrokes/gtk-demo/role_text_multiline.py
@@ -146,9 +146,7 @@ sequence.append(utils.AssertPresentationAction(
     "6. Where Am I",
     ["BRAILLE LINE:  'gtk-demo application Application Window frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=11",
-     "SPEECH OUTPUT: 'text'",
-     "SPEECH OUTPUT: ' is a '",
-     "SPEECH OUTPUT: 'selected'"]))
+     "SPEECH OUTPUT: 'text  is a  selected'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>Down"))
@@ -175,10 +173,8 @@ sequence.append(utils.AssertPresentationAction(
     "9. Basic Where Am I multiline selection",
     ["BRAILLE LINE:  'Here is another test. $l'",
      "     VISIBLE:  'Here is another test. $l', cursor=22",
-     "SPEECH OUTPUT: 'text'",
-     "SPEECH OUTPUT: ' is a test.",
-     "Here is another test.'",
-     "SPEECH OUTPUT: 'selected'"]))
+     "SPEECH OUTPUT: 'text  is a test.",
+     "Here is another test. selected'"]))
 
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.StartRecordingAction())
@@ -187,10 +183,8 @@ sequence.append(utils.AssertPresentationAction(
     "10. Detailed Where Am I multiline selection",
     ["BRAILLE LINE:  'Here is another test. $l'",
      "     VISIBLE:  'Here is another test. $l', cursor=22",
-     "SPEECH OUTPUT: 'text'",
-     "SPEECH OUTPUT: ' is a test.",
-     "Here is another test.'",
-     "SPEECH OUTPUT: 'selected'"]))
+     "SPEECH OUTPUT: 'text  is a test.",
+     "Here is another test. selected'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Home"))
diff --git a/test/keystrokes/gtk-demo/role_text_multiline_flatreview.py 
b/test/keystrokes/gtk-demo/role_text_multiline_flatreview.py
index 5959af0..9034ed5 100644
--- a/test/keystrokes/gtk-demo/role_text_multiline_flatreview.py
+++ b/test/keystrokes/gtk-demo/role_text_multiline_flatreview.py
@@ -284,8 +284,7 @@ sequence.append(KeyComboAction("KP_5"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
     "19. Insert+KP_5 to flat review 'Help' accessible",
-    ["SPEECH OUTPUT: 'Help'",
-     "SPEECH OUTPUT: 'menu'"]))
+    ["SPEECH OUTPUT: 'Help menu'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
diff --git a/test/keystrokes/gtk-demo/role_toggle_button.py b/test/keystrokes/gtk-demo/role_toggle_button.py
index 957f26d..1259237 100644
--- a/test/keystrokes/gtk-demo/role_toggle_button.py
+++ b/test/keystrokes/gtk-demo/role_toggle_button.py
@@ -17,8 +17,7 @@ sequence.append(utils.AssertPresentationAction(
     "1. Toggle button Where Am I",
     ["BRAILLE LINE:  'gtk-demo application GtkExpander dialog & y Details collapsed toggle button'",
      "     VISIBLE:  '& y Details collapsed toggle but', cursor=1",
-     "SPEECH OUTPUT: 'Details'",
-     "SPEECH OUTPUT: 'toggle button collapsed'"]))
+     "SPEECH OUTPUT: 'Details toggle button collapsed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Return"))
@@ -34,8 +33,7 @@ sequence.append(utils.AssertPresentationAction(
     "3. Toggle button pressed Where Am I",
     ["BRAILLE LINE:  'gtk-demo application GtkExpander dialog &=y Details expanded toggle button'",
      "     VISIBLE:  '&=y Details expanded toggle butt', cursor=1",
-     "SPEECH OUTPUT: 'Details'",
-     "SPEECH OUTPUT: 'toggle button expanded'"]))
+     "SPEECH OUTPUT: 'Details toggle button expanded'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Return"))
diff --git a/test/keystrokes/gtk-demo/role_toolbar.py b/test/keystrokes/gtk-demo/role_toolbar.py
index d38415e..580f4a6 100644
--- a/test/keystrokes/gtk-demo/role_toolbar.py
+++ b/test/keystrokes/gtk-demo/role_toolbar.py
@@ -17,9 +17,7 @@ sequence.append(utils.AssertPresentationAction(
     "1. Where Am I",
     ["BRAILLE LINE:  'gtk-demo application Application Window frame Open push button'",
      "     VISIBLE:  'Open push button', cursor=1",
-     "SPEECH OUTPUT: 'tool bar'",
-     "SPEECH OUTPUT: 'Open'",
-     "SPEECH OUTPUT: 'push button'"]))
+     "SPEECH OUTPUT: 'tool bar Open push button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
@@ -48,12 +46,10 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "6. Where Am I",
+    "5. Where Am I",
     ["BRAILLE LINE:  'gtk-demo application Application Window frame Quit push button'",
      "     VISIBLE:  'Quit push button', cursor=1",
-     "SPEECH OUTPUT: 'tool bar'",
-     "SPEECH OUTPUT: 'Quit'",
-     "SPEECH OUTPUT: 'push button'"]))
+     "SPEECH OUTPUT: 'tool bar Quit push button'"]))
 
 sequence.append(KeyComboAction("<Alt>F4"))
 
diff --git a/test/keystrokes/gtk-demo/role_tooltip.py b/test/keystrokes/gtk-demo/role_tooltip.py
index 94d1880..b6c01ad 100644
--- a/test/keystrokes/gtk-demo/role_tooltip.py
+++ b/test/keystrokes/gtk-demo/role_tooltip.py
@@ -28,14 +28,11 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>F1"))
 sequence.append(utils.AssertPresentationAction(
     "2. Hide tooltip",
-    ["KNOWN ISSUE: Too much context",
-     "BRAILLE LINE:  'gtk-demo application Print dialog General page tab &=y Pages: radio button'",
+    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab &=y Pages: radio button'",
      "     VISIBLE:  '&=y Pages: radio button', cursor=1",
-     "SPEECH OUTPUT: 'Print Range Copies'",
-     "SPEECH OUTPUT: 'General'",
-     "SPEECH OUTPUT: 'page tab'",
-     "SPEECH OUTPUT: 'Pages:'",
-     "SPEECH OUTPUT: 'selected radio button'"]))
+     "SPEECH OUTPUT: 'Print'",
+     "SPEECH OUTPUT: 'General page tab'",
+     "SPEECH OUTPUT: 'Pages: selected radio button'"]))
 
 sequence.append(KeyComboAction("<Alt>F4"))
 
diff --git a/test/keystrokes/gtk3-demo/role_accel_label.py b/test/keystrokes/gtk3-demo/role_accel_label.py
index 9fa39bd..98a2e74 100644
--- a/test/keystrokes/gtk3-demo/role_accel_label.py
+++ b/test/keystrokes/gtk3-demo/role_accel_label.py
@@ -46,12 +46,9 @@ sequence.append(utils.AssertPresentationAction(
     "4. Where Am I",
     ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Color menu'",
      "     VISIBLE:  'Color menu', cursor=1",
-     "SPEECH OUTPUT: 'Application Class'",
-     "SPEECH OUTPUT: 'frame'",
-     "SPEECH OUTPUT: 'Preferences'",
-     "SPEECH OUTPUT: 'menu'",
-     "SPEECH OUTPUT: 'Color'",
-     "SPEECH OUTPUT: 'menu 3 of 5.'",
+     "SPEECH OUTPUT: 'Application Class frame'",
+     "SPEECH OUTPUT: 'Preferences menu'",
+     "SPEECH OUTPUT: 'Color menu 3 of 5.'",
      "SPEECH OUTPUT: 'C'"]))
 
 sequence.append(KeyComboAction("Escape"))
diff --git a/test/keystrokes/gtk3-demo/role_check_box.py b/test/keystrokes/gtk3-demo/role_check_box.py
index 8cc9bfc..b19375e 100644
--- a/test/keystrokes/gtk3-demo/role_check_box.py
+++ b/test/keystrokes/gtk3-demo/role_check_box.py
@@ -28,8 +28,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. Where Am I",
     ["BRAILLE LINE:  'gtk3-demo application Panes frame Horizontal panel < > Resize check box'",
      "     VISIBLE:  '< > Resize check box', cursor=1",
-     "SPEECH OUTPUT: 'Horizontal Resize'",
-     "SPEECH OUTPUT: 'check box not checked.'",
+     "SPEECH OUTPUT: 'Horizontal Resize check box not checked.'",
      "SPEECH OUTPUT: 'Alt+R'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -46,8 +45,7 @@ sequence.append(utils.AssertPresentationAction(
     "4. Where Am I",
     ["BRAILLE LINE:  'gtk3-demo application Panes frame Horizontal panel <x> Resize check box'",
      "     VISIBLE:  '<x> Resize check box', cursor=1",
-     "SPEECH OUTPUT: 'Horizontal Resize'",
-     "SPEECH OUTPUT: 'check box checked.'",
+     "SPEECH OUTPUT: 'Horizontal Resize check box checked.'",
      "SPEECH OUTPUT: 'Alt+R'"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/gtk3-demo/role_column_header.py b/test/keystrokes/gtk3-demo/role_column_header.py
index b96a2e8..b5554b3 100644
--- a/test/keystrokes/gtk3-demo/role_column_header.py
+++ b/test/keystrokes/gtk3-demo/role_column_header.py
@@ -75,8 +75,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'gtk3-demo application GtkListStore demo frame table Severity column header < > Fixed? 
60482 Normal scrollable notebooks and hidden tabs  '",
      "     VISIBLE:  'Normal scrollable notebooks and ', cursor=1",
      "SPEECH OUTPUT: 'table Severity table cell Normal column 3 of 6 row 1 of 14'",
-     "SPEECH OUTPUT: 'table Severity table cell Normal column 3 of 6 row 1 of 14 Fixed? check box not 
checked 60482 Normal'",
-     "SPEECH OUTPUT: 'scrollable notebooks and hidden tabs'"]))
+     "SPEECH OUTPUT: 'table Severity table cell Normal column 3 of 6 row 1 of 14 Fixed? check box not 
checked 60482 Normal scrollable notebooks and hidden tabs'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
diff --git a/test/keystrokes/gtk3-demo/role_combo_box.py b/test/keystrokes/gtk3-demo/role_combo_box.py
index 6eec1d7..427c977 100644
--- a/test/keystrokes/gtk3-demo/role_combo_box.py
+++ b/test/keystrokes/gtk3-demo/role_combo_box.py
@@ -30,9 +30,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. Warning combo box item Where Am I",
     ["BRAILLE LINE:  'gtk3-demo application Combo boxes frame Items with icons panel Warning combo box'",
      "     VISIBLE:  'Warning combo box', cursor=1",
-     "SPEECH OUTPUT: 'combo box'",
-     "SPEECH OUTPUT: 'Warning'",
-     "SPEECH OUTPUT: '1 of 5'"]))
+     "SPEECH OUTPUT: 'combo box Warning 1 of 5'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -46,17 +44,12 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
     "4. New combo box item Where Am I",
-    ["KNOWN ISSUE: We're a bit chatty here and have some spacing issues",
+    ["KNOWN ISSUE: The combo box role is missing and spacing is wrong in braille",
      "BRAILLE LINE:  'gtk3-demo application Combo boxes frame Items with icons panel  combo boxNew New'",
      "     VISIBLE:  'New', cursor=1",
-     "SPEECH OUTPUT: 'Combo boxes'",
-     "SPEECH OUTPUT: 'frame'",
-     "SPEECH OUTPUT: 'Items with icons'",
-     "SPEECH OUTPUT: 'panel'",
-     "SPEECH OUTPUT: 'New'",
-     "SPEECH OUTPUT: 'combo box'",
-     "SPEECH OUTPUT: 'New'",
-     "SPEECH OUTPUT: '3 of 5'"]))
+     "SPEECH OUTPUT: 'Combo boxes frame'",
+     "SPEECH OUTPUT: 'Items with icons panel'",
+     "SPEECH OUTPUT: 'New 3 of 5'"]))
 
 sequence.append(KeyComboAction("Tab"))
 
@@ -85,8 +78,7 @@ sequence.append(utils.AssertPresentationAction(
     "7. Editable text combo box Where Am I",
     ["BRAILLE LINE:  'gtk3-demo application Combo boxes frame Editable panel Four $l'",
      "     VISIBLE:  'Four $l', cursor=5",
-     "SPEECH OUTPUT: 'text'",
-     "SPEECH OUTPUT: 'Four'"]))
+     "SPEECH OUTPUT: 'text Four'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -112,9 +104,42 @@ sequence.append(utils.AssertPresentationAction(
     "10. Editable text combo box with selected text Where Am I",
     ["BRAILLE LINE:  'gtk3-demo application Combo boxes frame Editable panel Four $l'",
      "     VISIBLE:  'Four $l', cursor=5",
-     "SPEECH OUTPUT: 'text'",
-     "SPEECH OUTPUT: 'Four'",
-     "SPEECH OUTPUT: 'selected'"]))
+     "SPEECH OUTPUT: 'text Four selected'"]))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Tab"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Combo box with multiple levels",
+    ["KNOWN ISSUE: This is broken",
+     "BRAILLE LINE:  'gtk3-demo application Combo boxes frame Where are we ? panel A - B combo box'",
+     "     VISIBLE:  'A - B combo box', cursor=1",
+     "SPEECH OUTPUT: 'Where are we ? panel'",
+     "SPEECH OUTPUT: 'A - B combo box'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "12. Down arrow",
+    ["KNOWN ISSUE: This is broken",
+     "BRAILLE LINE:  'gtk3-demo application Combo boxes frame Where are we ? panel  combo boxC - D C - D 
menu'",
+     "     VISIBLE:  'C - D menu', cursor=1",
+     "SPEECH OUTPUT: 'C - D menu'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "12. Where Am I",
+    ["KNOWN ISSUE: This is broken",
+     "BRAILLE LINE:  'gtk3-demo application Combo boxes frame Where are we ? panel  combo boxC - D C - D 
menu'",
+     "     VISIBLE:  'C - D menu', cursor=1",
+     "SPEECH OUTPUT: 'Combo boxes frame'",
+     "SPEECH OUTPUT: 'Where are we ? panel'",
+     "SPEECH OUTPUT: 'C - D menu 2 of 5'"]))
 
 sequence.append(KeyComboAction("<Alt>F4"))
 
diff --git a/test/keystrokes/gtk3-demo/role_combo_box2.py b/test/keystrokes/gtk3-demo/role_combo_box2.py
index 08a2ab8..6102624 100644
--- a/test/keystrokes/gtk3-demo/role_combo_box2.py
+++ b/test/keystrokes/gtk3-demo/role_combo_box2.py
@@ -12,15 +12,15 @@ sequence.append(TypeAction("Printing"))
 sequence.append(KeyComboAction("Return"))
 
 sequence.append(KeyComboAction("Right"))
-sequence.append(KeyComboAction("Tab"))
 sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("<Alt>o"))
 sequence.append(utils.AssertPresentationAction(
     "1. Combo box",
     ["BRAILLE LINE:  'gtk3-demo application Print dialog Page Setup page tab Layout panel Only print: All 
sheets combo box'",
      "     VISIBLE:  'Only print: All sheets combo box', cursor=13",
+     "SPEECH OUTPUT: 'Layout panel'",
      "SPEECH OUTPUT: 'Only print: All sheets combo box'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -29,10 +29,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. Where Am I",
     ["BRAILLE LINE:  'gtk3-demo application Print dialog Page Setup page tab Layout panel Only print: All 
sheets combo box'",
      "     VISIBLE:  'Only print: All sheets combo box', cursor=13",
-     "SPEECH OUTPUT: 'Only print:'",
-     "SPEECH OUTPUT: 'combo box'",
-     "SPEECH OUTPUT: 'All sheets'",
-     "SPEECH OUTPUT: '1 of 3.'",
+     "SPEECH OUTPUT: 'Only print: combo box All sheets 1 of 3.'",
      "SPEECH OUTPUT: 'Alt+O'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -47,18 +44,13 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
     "4. Where Am I",
-    ["KNOWN ISSUE: We're a bit chatty here and the space is off with the combo box",
+    ["KNOWN ISSUE: The combo box role is missing and spacing is wrong in braille",
      "BRAILLE LINE:  'gtk3-demo application Print dialog Page Setup page tab Layout panel  combo boxOnly 
print: Even sheets Even sheets'",
      "     VISIBLE:  'Even sheets', cursor=1",
-     "SPEECH OUTPUT: 'Print %'",
-     "SPEECH OUTPUT: 'Page Setup'",
-     "SPEECH OUTPUT: 'page tab'",
-     "SPEECH OUTPUT: 'Layout'",
-     "SPEECH OUTPUT: 'panel'",
-     "SPEECH OUTPUT: 'Even sheets'",
-     "SPEECH OUTPUT: 'combo box'",
-     "SPEECH OUTPUT: 'Even sheets'",
-     "SPEECH OUTPUT: '2 of 3'"]))
+     "SPEECH OUTPUT: 'Print'",
+     "SPEECH OUTPUT: 'Page Setup page tab'",
+     "SPEECH OUTPUT: 'Layout panel'",
+     "SPEECH OUTPUT: 'Even sheets 2 of 3'"]))
 
 sequence.append(KeyComboAction("<Alt>F4"))
 
diff --git a/test/keystrokes/gtk3-demo/role_dialog.py b/test/keystrokes/gtk3-demo/role_dialog.py
index 4474f24..34a4bbd 100644
--- a/test/keystrokes/gtk3-demo/role_dialog.py
+++ b/test/keystrokes/gtk3-demo/role_dialog.py
@@ -28,8 +28,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. Dialog Where Am I",
     ["BRAILLE LINE:  'gtk3-demo application GtkExpander dialog & y Details collapsed toggle button'",
      "     VISIBLE:  '& y Details collapsed toggle but', cursor=1",
-     "SPEECH OUTPUT: 'Details'",
-     "SPEECH OUTPUT: 'toggle button collapsed'"]))
+     "SPEECH OUTPUT: 'Details toggle button collapsed'"]))
 
 sequence.append(KeyComboAction("<Alt>F4"))
 
diff --git a/test/keystrokes/gtk3-demo/role_icon.py b/test/keystrokes/gtk3-demo/role_icon.py
index e1106c1..9a7d2b6 100644
--- a/test/keystrokes/gtk3-demo/role_icon.py
+++ b/test/keystrokes/gtk3-demo/role_icon.py
@@ -31,8 +31,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'gtk3-demo application GtkIconView demo frame bin icon'",
      "     VISIBLE:  'bin icon', cursor=1",
      "SPEECH OUTPUT: 'Icon panel'",
-     "SPEECH OUTPUT: 'bin'",
-     "SPEECH OUTPUT: '1 of 20 items selected on 1 of 20'"]))
+     "SPEECH OUTPUT: 'bin 1 of 20 items selected on 1 of 20'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
@@ -57,8 +56,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'gtk3-demo application GtkIconView demo frame bin icon'",
      "     VISIBLE:  'bin icon', cursor=1",
      "SPEECH OUTPUT: 'Icon panel'",
-     "SPEECH OUTPUT: 'bin'",
-     "SPEECH OUTPUT: '2 of 20 items selected on 1 of 20'"]))
+     "SPEECH OUTPUT: 'bin 2 of 20 items selected on 1 of 20'"]))
 
 sequence.append(KeyComboAction("<Alt>F4"))
 
diff --git a/test/keystrokes/gtk3-demo/role_label.py b/test/keystrokes/gtk3-demo/role_label.py
index a5009eb..3438eca 100644
--- a/test/keystrokes/gtk3-demo/role_label.py
+++ b/test/keystrokes/gtk3-demo/role_label.py
@@ -35,8 +35,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'number of times:'",
      "     VISIBLE:  'number of times:', cursor=17",
      "SPEECH OUTPUT: 'This message box has been popped up the following",
-     "number of times:'",
-     "SPEECH OUTPUT: 'selected label'"]))
+     "number of times: selected label'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
@@ -48,8 +47,9 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'number of times:'",
      "     VISIBLE:  'number of times:', cursor=17",
      "SPEECH OUTPUT: 'This message box has been popped up the following",
-     "number of times:'",
-     "SPEECH OUTPUT: 'selected label'"]))
+     "number of times: selected label'",
+     "SPEECH OUTPUT: 'This message box has been popped up the following",
+     "number of times: selected label'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Home"))
@@ -88,8 +88,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'gtk3-demo application Information alert This message box has been popped up the 
following'",
      "     VISIBLE:  'This message box has been popped', cursor=5",
      "SPEECH OUTPUT: 'This message box has been popped up the following",
-     "number of times:'",
-     "SPEECH OUTPUT: 'selected label'"]))
+     "number of times: selected label'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
@@ -101,8 +100,9 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'gtk3-demo application Information alert This message box has been popped up the 
following'",
      "     VISIBLE:  'This message box has been popped', cursor=5",
      "SPEECH OUTPUT: 'This message box has been popped up the following",
-     "number of times:'",
-     "SPEECH OUTPUT: 'selected label'"]))
+     "number of times: selected label'",
+     "SPEECH OUTPUT: 'This message box has been popped up the following",
+     "number of times: selected label'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
diff --git a/test/keystrokes/gtk3-demo/role_menu.py b/test/keystrokes/gtk3-demo/role_menu.py
index 42a9ec9..59c6088 100644
--- a/test/keystrokes/gtk3-demo/role_menu.py
+++ b/test/keystrokes/gtk3-demo/role_menu.py
@@ -46,12 +46,9 @@ sequence.append(utils.AssertPresentationAction(
     "4. Where Am I",
     ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Color menu'",
      "     VISIBLE:  'Color menu', cursor=1",
-     "SPEECH OUTPUT: 'Application Class'",
-     "SPEECH OUTPUT: 'frame'",
-     "SPEECH OUTPUT: 'Preferences'",
-     "SPEECH OUTPUT: 'menu'",
-     "SPEECH OUTPUT: 'Color'",
-     "SPEECH OUTPUT: 'menu 3 of 5.'",
+     "SPEECH OUTPUT: 'Application Class frame'",
+     "SPEECH OUTPUT: 'Preferences menu'",
+     "SPEECH OUTPUT: 'Color menu 3 of 5.'",
      "SPEECH OUTPUT: 'C'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -68,14 +65,10 @@ sequence.append(utils.AssertPresentationAction(
     "6. Where Am I",
     ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Preferences menu &=y Red 
radio menu item(Ctrl+R)'",
      "     VISIBLE:  '&=y Red radio menu item(Ctrl+R)', cursor=1",
-     "SPEECH OUTPUT: 'Application Class'",
-     "SPEECH OUTPUT: 'frame'",
-     "SPEECH OUTPUT: 'Preferences'",
-     "SPEECH OUTPUT: 'menu'",
-     "SPEECH OUTPUT: 'Color'",
-     "SPEECH OUTPUT: 'menu'",
-     "SPEECH OUTPUT: 'Red'",
-     "SPEECH OUTPUT: 'radio menu item selected Ctrl+R 1 of 3.'",
+     "SPEECH OUTPUT: 'Application Class frame'",
+     "SPEECH OUTPUT: 'Preferences menu'",
+     "SPEECH OUTPUT: 'Color menu'",
+     "SPEECH OUTPUT: 'Red radio menu item selected Ctrl+R 1 of 3.'",
      "SPEECH OUTPUT: 'R'"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/gtk3-demo/role_page_tab.py b/test/keystrokes/gtk3-demo/role_page_tab.py
index d7f82b8..38d2415 100644
--- a/test/keystrokes/gtk3-demo/role_page_tab.py
+++ b/test/keystrokes/gtk3-demo/role_page_tab.py
@@ -25,9 +25,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. Page Setup page tab Where Am I",
     ["BRAILLE LINE:  'gtk3-demo application Print dialog Page Setup page tab'",
      "     VISIBLE:  'Page Setup page tab', cursor=1",
-     "SPEECH OUTPUT: 'page tab list'",
-     "SPEECH OUTPUT: 'Page Setup'",
-     "SPEECH OUTPUT: 'page tab 2 of [0-9]'"]))
+     "SPEECH OUTPUT: 'page tab list Page Setup page tab 2 of [0-9]'"]))
 
 sequence.append(KeyComboAction("<Alt>F4"))
 
diff --git a/test/keystrokes/gtk3-demo/role_push_button.py b/test/keystrokes/gtk3-demo/role_push_button.py
index 5d8548a..32b556b 100644
--- a/test/keystrokes/gtk3-demo/role_push_button.py
+++ b/test/keystrokes/gtk3-demo/role_push_button.py
@@ -31,8 +31,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. OK push button Where Am I",
     ["BRAILLE LINE:  'gtk3-demo application Button Boxes frame Horizontal Button Boxes panel Spread panel OK 
push button'",
      "     VISIBLE:  'OK push button', cursor=1",
-     "SPEECH OUTPUT: 'OK'",
-     "SPEECH OUTPUT: 'push button"]))
+     "SPEECH OUTPUT: 'OK push button"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
diff --git a/test/keystrokes/gtk3-demo/role_radio_button.py b/test/keystrokes/gtk3-demo/role_radio_button.py
index f08df99..5541dc7 100644
--- a/test/keystrokes/gtk3-demo/role_radio_button.py
+++ b/test/keystrokes/gtk3-demo/role_radio_button.py
@@ -28,8 +28,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. All Pages radio button Where Am I",
     ["BRAILLE LINE:  'gtk3-demo application Print dialog General page tab Range panel Range &=y All Pages 
radio button'",
      "     VISIBLE:  '&=y All Pages radio button', cursor=1",
-     "SPEECH OUTPUT: 'Range All Pages'",
-     "SPEECH OUTPUT: 'radio button selected 1 of 3.'",
+     "SPEECH OUTPUT: 'Range All Pages radio button selected 1 of 3.'",
      "SPEECH OUTPUT: 'Alt+A'"]))
 
 sequence.append(KeyComboAction("Down"))
@@ -47,8 +46,7 @@ sequence.append(utils.AssertPresentationAction(
     "4. Range radio button Where Am I",
     ["BRAILLE LINE:  'gtk3-demo application Print dialog General page tab Range panel Range &=y Pages: radio 
button'",
      "     VISIBLE:  '&=y Pages: radio button', cursor=1",
-     "SPEECH OUTPUT: 'Range Pages:'",
-     "SPEECH OUTPUT: 'radio button selected 3 of 3.'",
+     "SPEECH OUTPUT: 'Range Pages: radio button selected 3 of 3.'",
      "SPEECH OUTPUT: 'Alt+E'",
      "SPEECH OUTPUT: 'Specify one or more page ranges,",
      " e.g. 1-3,7,11'"]))
diff --git a/test/keystrokes/gtk3-demo/role_spin_button.py b/test/keystrokes/gtk3-demo/role_spin_button.py
index fb8c34d..1c9ca43 100644
--- a/test/keystrokes/gtk3-demo/role_spin_button.py
+++ b/test/keystrokes/gtk3-demo/role_spin_button.py
@@ -30,10 +30,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. Where Am I",
     ["BRAILLE LINE:  'gtk3-demo application Print dialog General page tab Copies panel Copies: 1 $l'",
      "     VISIBLE:  'Copies: 1 $l', cursor=10",
-     "SPEECH OUTPUT: 'Copies:'",
-     "SPEECH OUTPUT: 'spin button'",
-     "SPEECH OUTPUT: '1'",
-     "SPEECH OUTPUT: 'selected.'",
+     "SPEECH OUTPUT: 'Copies: spin button 1 selected.'",
      "SPEECH OUTPUT: 'Alt+S'"]))
 
 sequence.append(TypeAction("15"))
diff --git a/test/keystrokes/gtk3-demo/role_split_pane.py b/test/keystrokes/gtk3-demo/role_split_pane.py
index 9fe7079..b901501 100644
--- a/test/keystrokes/gtk3-demo/role_split_pane.py
+++ b/test/keystrokes/gtk3-demo/role_split_pane.py
@@ -17,33 +17,33 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("F8"))
 sequence.append(utils.AssertPresentationAction(
     "1. Split pane",
-    ["BRAILLE LINE:  'gtk3-demo application Panes frame 71 split pane'",
-     "     VISIBLE:  '71 split pane', cursor=1",
-     "SPEECH OUTPUT: 'split pane 71'"]))
+    ["BRAILLE LINE:  'gtk3-demo application Panes frame 89 split pane'",
+     "     VISIBLE:  '89 split pane', cursor=1",
+     "SPEECH OUTPUT: 'split pane 89'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
     "2. Split pane increment value",
-    ["BRAILLE LINE:  'gtk3-demo application Panes frame 72 split pane'",
-     "     VISIBLE:  '72 split pane', cursor=1",
-     "SPEECH OUTPUT: '72'"]))
+    ["BRAILLE LINE:  'gtk3-demo application Panes frame 90 split pane'",
+     "     VISIBLE:  '90 split pane', cursor=1",
+     "SPEECH OUTPUT: '90'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
     "3. Split pane Where Am I",
-    ["BRAILLE LINE:  'gtk3-demo application Panes frame 72 split pane'",
-     "     VISIBLE:  '72 split pane', cursor=1",
-     "SPEECH OUTPUT: 'split pane 72'"]))
+    ["BRAILLE LINE:  'gtk3-demo application Panes frame 90 split pane'",
+     "     VISIBLE:  '90 split pane', cursor=1",
+     "SPEECH OUTPUT: 'split pane 90'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
 sequence.append(utils.AssertPresentationAction(
     "4. Split pane decrement value",
-    ["BRAILLE LINE:  'gtk3-demo application Panes frame 71 split pane'",
-     "     VISIBLE:  '71 split pane', cursor=1",
-     "SPEECH OUTPUT: '71'"]))
+    ["BRAILLE LINE:  'gtk3-demo application Panes frame 89 split pane'",
+     "     VISIBLE:  '89 split pane', cursor=1",
+     "SPEECH OUTPUT: '89'"]))
 
 sequence.append(KeyComboAction("<Alt>F4"))
 
diff --git a/test/keystrokes/gtk3-demo/role_text_multiline.py 
b/test/keystrokes/gtk3-demo/role_text_multiline.py
index 97e9ee5..07d94a7 100644
--- a/test/keystrokes/gtk3-demo/role_text_multiline.py
+++ b/test/keystrokes/gtk3-demo/role_text_multiline.py
@@ -147,9 +147,7 @@ sequence.append(utils.AssertPresentationAction(
     "6. Where Am I",
     ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=11",
-     "SPEECH OUTPUT: 'text'",
-     "SPEECH OUTPUT: ' is a '",
-     "SPEECH OUTPUT: 'selected'"]))
+     "SPEECH OUTPUT: 'text  is a  selected'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>Down"))
@@ -176,10 +174,8 @@ sequence.append(utils.AssertPresentationAction(
     "9. Basic Where Am I multiline selection",
     ["BRAILLE LINE:  'Here is another test. $l'",
      "     VISIBLE:  'Here is another test. $l', cursor=22",
-     "SPEECH OUTPUT: 'text'",
-     "SPEECH OUTPUT: ' is a test.",
-     "Here is another test.'",
-     "SPEECH OUTPUT: 'selected'"]))
+     "SPEECH OUTPUT: 'text  is a test.",
+     "Here is another test. selected'"]))
 
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.StartRecordingAction())
@@ -188,10 +184,8 @@ sequence.append(utils.AssertPresentationAction(
     "10. Detailed Where Am I multiline selection",
     ["BRAILLE LINE:  'Here is another test. $l'",
      "     VISIBLE:  'Here is another test. $l', cursor=22",
-     "SPEECH OUTPUT: 'text'",
-     "SPEECH OUTPUT: ' is a test.",
-     "Here is another test.'",
-     "SPEECH OUTPUT: 'selected'"]))
+     "SPEECH OUTPUT: 'text  is a test.",
+     "Here is another test. selected'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Home"))
diff --git a/test/keystrokes/gtk3-demo/role_text_multiline_flatreview.py 
b/test/keystrokes/gtk3-demo/role_text_multiline_flatreview.py
index cf3332e..61d0133 100644
--- a/test/keystrokes/gtk3-demo/role_text_multiline_flatreview.py
+++ b/test/keystrokes/gtk3-demo/role_text_multiline_flatreview.py
@@ -252,9 +252,9 @@ sequence.append(KeyComboAction("KP_7"))
 sequence.append(utils.AssertPresentationAction(
     "15. KP_7 to flat review toolbar",
     ["KNOWN ISSUE: gtk3-demo's toolbar widgets lack names that were present in the past",
-     "BRAILLE LINE:  'push button panel push button $l'",
-     "     VISIBLE:  'push button panel push button $l', cursor=1",
-     "SPEECH OUTPUT: 'push button panel push button'"]))
+     "BRAILLE LINE:  'push button push button panel push button $l'",
+     "     VISIBLE:  'push button push button panel pu', cursor=1",
+     "SPEECH OUTPUT: 'push button push button panel push button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_7"))
@@ -286,8 +286,7 @@ sequence.append(KeyComboAction("KP_5"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
     "19. Insert+KP_5 to flat review 'Help' accessible",
-    ["SPEECH OUTPUT: 'Help'",
-     "SPEECH OUTPUT: 'menu'"]))
+    ["SPEECH OUTPUT: 'Help menu'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -295,8 +294,8 @@ sequence.append(KeyComboAction("KP_9"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
     "20. Insert+KP_9 to flat review end",
-    ["BRAILLE LINE:  'Cursor at row 1 column 0 - 60 chars in document $l'",
-     "     VISIBLE:  'Cursor at row 1 column 0 - 60 ch', cursor=1",
+    ["BRAILLE LINE:  ' Cursor at row 1 column 0 - 60 chars in document $l'",
+     "     VISIBLE:  ' Cursor at row 1 column 0 - 60 c', cursor=2",
      "SPEECH OUTPUT: 'Cursor at row 1 column 0 - 60 chars in document'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -315,8 +314,8 @@ sequence.append(KeyComboAction("KP_6"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
     "22. Insert+KP_6 to flat review below",
-    ["BRAILLE LINE:  'push button panel push button $l'",
-     "     VISIBLE:  'push button panel push button $l', cursor=1",
+    ["BRAILLE LINE:  'push button push button panel push button $l'",
+     "     VISIBLE:  'push button push button panel pu', cursor=1",
      "SPEECH OUTPUT: 'push button'"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/gtk3-demo/role_toggle_button.py b/test/keystrokes/gtk3-demo/role_toggle_button.py
index 70c48b2..ca0b199 100644
--- a/test/keystrokes/gtk3-demo/role_toggle_button.py
+++ b/test/keystrokes/gtk3-demo/role_toggle_button.py
@@ -18,8 +18,7 @@ sequence.append(utils.AssertPresentationAction(
     "1. Toggle button Where Am I",
     ["BRAILLE LINE:  'gtk3-demo application GtkExpander dialog & y Details collapsed toggle button'",
      "     VISIBLE:  '& y Details collapsed toggle but', cursor=1",
-     "SPEECH OUTPUT: 'Details'",
-     "SPEECH OUTPUT: 'toggle button collapsed'"]))
+     "SPEECH OUTPUT: 'Details toggle button collapsed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Return"))
@@ -35,8 +34,7 @@ sequence.append(utils.AssertPresentationAction(
     "3. Toggle button pressed Where Am I",
     ["BRAILLE LINE:  'gtk3-demo application GtkExpander dialog &=y Details expanded toggle button'",
      "     VISIBLE:  '&=y Details expanded toggle butt', cursor=1",
-     "SPEECH OUTPUT: 'Details'",
-     "SPEECH OUTPUT: 'toggle button expanded'"]))
+     "SPEECH OUTPUT: 'Details toggle button expanded'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Return"))
diff --git a/test/keystrokes/gtk3-demo/role_toolbar.py b/test/keystrokes/gtk3-demo/role_toolbar.py
index 312ae54..d83cf43 100644
--- a/test/keystrokes/gtk3-demo/role_toolbar.py
+++ b/test/keystrokes/gtk3-demo/role_toolbar.py
@@ -44,9 +44,7 @@ sequence.append(utils.AssertPresentationAction(
     "4. Open triangle toggle button Where Am I",
     ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame & y Menu toggle button'",
      "     VISIBLE:  '& y Menu toggle button', cursor=1",
-     "SPEECH OUTPUT: 'tool bar'",
-     "SPEECH OUTPUT: 'Menu'",
-     "SPEECH OUTPUT: 'toggle button not pressed'"]))
+     "SPEECH OUTPUT: 'tool bar Menu toggle button not pressed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
diff --git a/test/keystrokes/helpcontent/line_nav_intro.py b/test/keystrokes/helpcontent/line_nav_intro.py
new file mode 100644
index 0000000..c6a5aa9
--- /dev/null
+++ b/test/keystrokes/helpcontent/line_nav_intro.py
@@ -0,0 +1,347 @@
+#!/usr/bin/python
+
+"""Test of learn mode."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(TypeAction("h"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+
+sequence.append(KeyComboAction("F1"))
+sequence.append(PauseAction(2000))
+
+sequence.append(KeyComboAction("k"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(2000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Down",
+    ["BRAILLE LINE:  ' Next $l'",
+     "     VISIBLE:  ' Next $l', cursor=2",
+     "SPEECH OUTPUT: 'Next link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Down",
+    ["BRAILLE LINE:  ' Welcome to Orca h1'",
+     "     VISIBLE:  ' Welcome to Orca h1', cursor=2",
+     "SPEECH OUTPUT: 'Welcome to Orca'",
+     "SPEECH OUTPUT: 'heading level 1'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Down",
+    ["BRAILLE LINE:  ' Orca is a free, open source, flexible, and extensible screen reader that provides 
access to the graphical desktop via speech and refreshable braille.'",
+     "     VISIBLE:  'Orca is a free, open source, fle', cursor=1",
+     "SPEECH OUTPUT: 'Orca is a free, open source, flexible, and extensible '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Down",
+    ["BRAILLE LINE:  'Orca is a free, open source, flexible, and extensible screen reader that provides 
access to the graphical desktop via speech and refreshable braille.'",
+     "     VISIBLE:  'Orca is a free, open source, fle', cursor=1",
+     "SPEECH OUTPUT: 'screen reader that provides access to the graphical desktop via speech '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Down",
+    ["BRAILLE LINE:  'Orca is a free, open source, flexible, and extensible screen reader that provides 
access to the graphical desktop via speech and refreshable braille.'",
+     "     VISIBLE:  'Orca is a free, open source, fle', cursor=1",
+     "SPEECH OUTPUT: 'and refreshable braille.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Down",
+    ["BRAILLE LINE:  ' Orca works with applications and toolkits that support the Assistive Technology 
Service Provider Interface (AT-SPI), which is the primary assistive technology infrastructure for Linux and 
Solaris. Applications and toolkits supporting the AT-SPI include the GNOME Gtk+ toolkit, the Java platform's 
Swing toolkit, LibreOffice, Gecko, and WebKitGtk. AT-SPI support for the KDE Qt toolkit is being pursued.'",
+     "     VISIBLE:  'Orca works with applications and', cursor=1",
+     "SPEECH OUTPUT: 'Orca works with applications and toolkits that support the Assistive '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Down",
+    ["BRAILLE LINE:  'Orca works with applications and toolkits that support the Assistive Technology 
Service Provider Interface (AT-SPI), which is the primary assistive technology infrastructure for Linux and 
Solaris. Applications and toolkits supporting the AT-SPI include the GNOME Gtk+ toolkit, the Java platform's 
Swing toolkit, LibreOffice, Gecko, and WebKitGtk. AT-SPI support for the KDE Qt toolkit is being pursued.'",
+     "     VISIBLE:  'Orca works with applications and', cursor=1",
+     "SPEECH OUTPUT: 'Technology Service Provider Interface (AT-SPI), which is the primary '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Down",
+    ["BRAILLE LINE:  'Orca works with applications and toolkits that support the Assistive Technology 
Service Provider Interface (AT-SPI), which is the primary assistive technology infrastructure for Linux and 
Solaris. Applications and toolkits supporting the AT-SPI include the GNOME Gtk+ toolkit, the Java platform's 
Swing toolkit, LibreOffice, Gecko, and WebKitGtk. AT-SPI support for the KDE Qt toolkit is being pursued.'",
+     "     VISIBLE:  'Orca works with applications and', cursor=1",
+     "SPEECH OUTPUT: 'assistive technology infrastructure for Linux and Solaris. Applications '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Down",
+    ["BRAILLE LINE:  'Orca works with applications and toolkits that support the Assistive Technology 
Service Provider Interface (AT-SPI), which is the primary assistive technology infrastructure for Linux and 
Solaris. Applications and toolkits supporting the AT-SPI include the GNOME Gtk+ toolkit, the Java platform's 
Swing toolkit, LibreOffice, Gecko, and WebKitGtk. AT-SPI support for the KDE Qt toolkit is being pursued.'",
+     "     VISIBLE:  'Orca works with applications and', cursor=1",
+     "SPEECH OUTPUT: 'and toolkits supporting the AT-SPI include the GNOME Gtk+ toolkit, '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "10. Down",
+    ["BRAILLE LINE:  'Orca works with applications and toolkits that support the Assistive Technology 
Service Provider Interface (AT-SPI), which is the primary assistive technology infrastructure for Linux and 
Solaris. Applications and toolkits supporting the AT-SPI include the GNOME Gtk+ toolkit, the Java platform's 
Swing toolkit, LibreOffice, Gecko, and WebKitGtk. AT-SPI support for the KDE Qt toolkit is being pursued.'",
+     "     VISIBLE:  'Orca works with applications and', cursor=1",
+     "SPEECH OUTPUT: 'the Java platform's Swing toolkit, LibreOffice, Gecko, and WebKitGtk. '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Down",
+    ["BRAILLE LINE:  'Orca works with applications and toolkits that support the Assistive Technology 
Service Provider Interface (AT-SPI), which is the primary assistive technology infrastructure for Linux and 
Solaris. Applications and toolkits supporting the AT-SPI include the GNOME Gtk+ toolkit, the Java platform's 
Swing toolkit, LibreOffice, Gecko, and WebKitGtk. AT-SPI support for the KDE Qt toolkit is being pursued.'",
+     "     VISIBLE:  'Orca works with applications and', cursor=1",
+     "SPEECH OUTPUT: 'AT-SPI support for the KDE Qt toolkit is being pursued.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "12. Down",
+    ["BRAILLE LINE:  ' Launching Orca h2'",
+     "     VISIBLE:  ' Launching Orca h2', cursor=2",
+     "SPEECH OUTPUT: 'Launching Orca'",
+     "SPEECH OUTPUT: 'heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "13. Down",
+    ["BRAILLE LINE:  ' To launch Orca:'",
+     "     VISIBLE:  ' To launch Orca:', cursor=2",
+     "SPEECH OUTPUT: 'To launch Orca:'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "14. Down",
+    ["BRAILLE LINE:  ' The method for configuring Orca to be launched automatically as your preferred screen 
reader will depend upon which desktop environment you use. For instance, in GNOME 3.x this option can be 
found in the Universal Access Control Center panel on the Seeing page.'",
+     "     VISIBLE:  'The method for configuring Orca ', cursor=1",
+     "SPEECH OUTPUT: 'The method for configuring Orca to be launched automatically as '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "15. Down",
+    ["BRAILLE LINE:  'The method for configuring Orca to be launched automatically as your preferred screen 
reader will depend upon which desktop environment you use. For instance, in GNOME 3.x this option can be 
found in the Universal Access Control Center panel on the Seeing page.'",
+     "     VISIBLE:  'The method for configuring Orca ', cursor=1",
+     "SPEECH OUTPUT: 'your preferred screen reader will depend upon which desktop '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "16. Down",
+    ["BRAILLE LINE:  'The method for configuring Orca to be launched automatically as your preferred screen 
reader will depend upon which desktop environment you use. For instance, in GNOME 3.x this option can be 
found in the Universal Access Control Center panel on the Seeing page.'",
+     "     VISIBLE:  'The method for configuring Orca ', cursor=1",
+     "SPEECH OUTPUT: 'environment you use. For instance, in GNOME 3.x this option can '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "17. Down",
+    ["BRAILLE LINE:  'The method for configuring Orca to be launched automatically as your preferred screen 
reader will depend upon which desktop environment you use. For instance, in GNOME 3.x this option can be 
found in the Universal Access Control Center panel on the Seeing page.'",
+     "     VISIBLE:  'The method for configuring Orca ', cursor=1",
+     "SPEECH OUTPUT: 'be found in the Universal Access Control Center panel on the'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "18. Down",
+    ["BRAILLE LINE:  'The method for configuring Orca to be launched automatically as your preferred screen 
reader will depend upon which desktop environment you use. For instance, in GNOME 3.x this option can be 
found in the Universal Access Control Center panel on the Seeing page.'",
+     "     VISIBLE:  'ca to be launched automatically ', cursor=32",
+     "SPEECH OUTPUT: 'be found in the Universal Access Control Center panel on the'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "19. Down",
+    ["BRAILLE LINE:  ' To toggle Orca on and off in GNOME, press Super+Alt+S.'",
+     "     VISIBLE:  'To toggle Orca on and off in GNO', cursor=1",
+     "SPEECH OUTPUT: 'To toggle Orca on and off in GNOME, press'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "20. Down",
+    ["BRAILLE LINE:  ' To toggle Orca on and off in GNOME, press Super+Alt+S.'",
+     "     VISIBLE:  'Orca on and off in GNOME, press ', cursor=32",
+     "SPEECH OUTPUT: 'To toggle Orca on and off in GNOME, press'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "21. Up",
+    ["BRAILLE LINE:  ' To toggle Orca on and off in GNOME, press Super+Alt+S.'",
+     "     VISIBLE:  'To toggle Orca on and off in GNO', cursor=1",
+     "SPEECH OUTPUT: 'To toggle Orca on and off in GNOME, press'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "22. Up",
+    ["BRAILLE LINE:  'be found in the Universal Access Control Center panel on the'",
+     "     VISIBLE:  'ess Control Center panel on the', cursor=32",
+     "SPEECH OUTPUT: 'be found in the Universal Access Control Center panel on the'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "23. Up",
+    ["BRAILLE LINE:  'be found in the Universal Access Control Center panel on the'",
+     "     VISIBLE:  'be found in the Universal Access', cursor=1",
+     "SPEECH OUTPUT: 'be found in the Universal Access Control Center panel on the'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "24. Up",
+    ["BRAILLE LINE:  'environment you use. For instance, in GNOME 3.x this option can '",
+     "     VISIBLE:  'environment you use. For instanc', cursor=1",
+     "SPEECH OUTPUT: 'environment you use. For instance, in GNOME 3.x this option can '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "25. Up",
+    ["BRAILLE LINE:  'your preferred screen reader will depend upon which desktop '",
+     "     VISIBLE:  'your preferred screen reader wil', cursor=1",
+     "SPEECH OUTPUT: 'your preferred screen reader will depend upon which desktop '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "26. Up",
+    ["BRAILLE LINE:  ' The method for configuring Orca to be launched automatically as '",
+     "     VISIBLE:  'The method for configuring Orca ', cursor=1",
+     "SPEECH OUTPUT: 'The method for configuring Orca to be launched automatically as '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "27. Up",
+    ["BRAILLE LINE:  ' To launch Orca:'",
+     "     VISIBLE:  ' To launch Orca:', cursor=2",
+     "SPEECH OUTPUT: 'To launch Orca:'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "28. Up",
+    ["BRAILLE LINE:  ' Launching Orca h2'",
+     "     VISIBLE:  ' Launching Orca h2', cursor=2",
+     "SPEECH OUTPUT: 'Launching Orca'",
+     "SPEECH OUTPUT: 'heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "29. Up",
+    ["BRAILLE LINE:  'AT-SPI support for the KDE Qt toolkit is being pursued.'",
+     "     VISIBLE:  'AT-SPI support for the KDE Qt to', cursor=1",
+     "SPEECH OUTPUT: 'AT-SPI support for the KDE Qt toolkit is being pursued.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "30. Up",
+    ["BRAILLE LINE:  'the Java platform's Swing toolkit, LibreOffice, Gecko, and WebKitGtk. '",
+     "     VISIBLE:  'the Java platform's Swing toolki', cursor=1",
+     "SPEECH OUTPUT: 'the Java platform's Swing toolkit, LibreOffice, Gecko, and WebKitGtk. '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "31. Up",
+    ["BRAILLE LINE:  'and toolkits supporting the AT-SPI include the GNOME Gtk+ toolkit, '",
+     "     VISIBLE:  'and toolkits supporting the AT-S', cursor=1",
+     "SPEECH OUTPUT: 'and toolkits supporting the AT-SPI include the GNOME Gtk+ toolkit, '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "32. Up",
+    ["BRAILLE LINE:  'assistive technology infrastructure for Linux and Solaris. Applications '",
+     "     VISIBLE:  'assistive technology infrastruct', cursor=1",
+     "SPEECH OUTPUT: 'assistive technology infrastructure for Linux and Solaris. Applications '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "33. Up",
+    ["BRAILLE LINE:  'Technology Service Provider Interface (AT-SPI), which is the primary '",
+     "     VISIBLE:  'Technology Service Provider Inte', cursor=1",
+     "SPEECH OUTPUT: 'Technology Service Provider Interface (AT-SPI), which is the primary '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "34. Up",
+    ["BRAILLE LINE:  ' Orca works with applications and toolkits that support the Assistive '",
+     "     VISIBLE:  'Orca works with applications and', cursor=1",
+     "SPEECH OUTPUT: 'Orca works with applications and toolkits that support the Assistive '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "35. Up",
+    ["BRAILLE LINE:  'and refreshable braille.'",
+     "     VISIBLE:  'and refreshable braille.', cursor=1",
+     "SPEECH OUTPUT: 'and refreshable braille.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "36. Up",
+    ["BRAILLE LINE:  'screen reader that provides access to the graphical desktop via speech '",
+     "     VISIBLE:  'screen reader that provides acce', cursor=1",
+     "SPEECH OUTPUT: 'screen reader that provides access to the graphical desktop via speech '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "37. Up",
+    ["BRAILLE LINE:  ' Orca is a free, open source, flexible, and extensible '",
+     "     VISIBLE:  'Orca is a free, open source, fle', cursor=1",
+     "SPEECH OUTPUT: 'Orca is a free, open source, flexible, and extensible '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "38. Up",
+    ["BRAILLE LINE:  ' Welcome to Orca h1'",
+     "     VISIBLE:  ' Welcome to Orca h1', cursor=2",
+     "SPEECH OUTPUT: 'Welcome to Orca'",
+     "SPEECH OUTPUT: 'heading level 1'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "39. Up",
+    ["BRAILLE LINE:  ' Next $l'",
+     "     VISIBLE:  ' Next $l', cursor=2",
+     "SPEECH OUTPUT: 'Next link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "40. Up",
+    ["BRAILLE LINE:  ' Introduction to the Orca Screen Reader Getting Started'",
+     "     VISIBLE:  ' Introduction to the Orca Screen', cursor=0",
+     "SPEECH OUTPUT: 'Introduction to the Orca Screen Reader link \xa0\u203a Getting Started link 
\xa0\xbb'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/helpcontent/line_nav_intro.settings 
b/test/keystrokes/helpcontent/line_nav_intro.settings
new file mode 100644
index 0000000..75125f2
--- /dev/null
+++ b/test/keystrokes/helpcontent/line_nav_intro.settings
@@ -0,0 +1,140 @@
+{
+    "pronunciations": {}, 
+    "keybindings": {}, 
+    "general": {
+        "sayAllOnLoad": false, 
+        "enableSpeech": true, 
+        "brailleRequiredStateString": null, 
+        "enableTutorialMessages": false, 
+        "enableFunctionKeys": true, 
+        "enabledSpokenTextAttributes": "size:; family-name:; weight:400; indent:0; underline:none; 
strikethrough:false; justification:left; style:normal; paragraph-style:; text-spelling:none;", 
+        "enableMnemonicSpeaking": false, 
+        "progressBarVerbosity": 1, 
+        "speakBlankLines": true, 
+        "speechServerInfo": null, 
+        "enableSpeechIndentation": false, 
+        "speakMultiCaseStringsAsWords": false, 
+        "enableNavigationKeys": false, 
+        "speakSpreadsheetCoordinates": true, 
+        "enableEchoByWord": false, 
+        "enableModifierKeys": true, 
+        "enabledBrailledTextAttributes": "size:; family-name:; weight:400; indent:0; underline:none; 
strikethrough:false; justification:left; style:normal; text-spelling:none;", 
+        "enableBrailleContext": true, 
+        "brailleFlashTime": 5000, 
+        "presentTimeFormat": "%X", 
+        "speechServerFactory": "speechdispatcherfactory", 
+        "mouseDwellDelay": 0, 
+        "wrappedStructuralNavigation": true, 
+        "enableBraille": false, 
+        "enableKeyEcho": false, 
+        "enablePositionSpeaking": false, 
+        "brailleLinkIndicator": 192, 
+        "flashVerbosityLevel": 1, 
+        "findResultsMinimumLength": 4, 
+        "chatRoomHistories": false, 
+        "largeObjectTextLength": 75, 
+        "keyboardLayout": 1, 
+        "verbalizePunctuationStyle": 1, 
+        "spellcheckSpellError": true, 
+        "chatSpeakRoomName": false, 
+        "chatMessageVerbosity": 0, 
+        "messageVerbosityLevel": 1, 
+        "brailleAlignmentStyle": 0, 
+        "brailleSelectorIndicator": 192, 
+        "skipBlankCells": false, 
+        "speakCellCoordinates": true, 
+        "activeProfile": [
+            "Default", 
+            "default"
+        ], 
+        "enablePrintableKeys": true, 
+        "startingProfile": [
+            "Default", 
+            "default"
+        ], 
+        "orcaModifierKeys": [
+            "Insert", 
+            "KP_Insert"
+        ], 
+        "spellcheckSpellSuggestion": true, 
+        "enablePauseBreaks": true, 
+        "enableBrailleMonitor": true, 
+        "progressBarUpdateInterval": 10, 
+        "speechRequiredStateString": null, 
+        "enableDiacriticalKeys": false, 
+        "enableMouseReview": false, 
+        "enableActionKeys": true, 
+        "findResultsVerbosity": 2, 
+        "textAttributesBrailleIndicator": 0, 
+        "enableEchoByCharacter": false, 
+        "enableFlashMessages": true, 
+        "enableEchoBySentence": false, 
+        "brailleVerbosityLevel": 1, 
+        "voices": {
+            "system": {
+                "established": false
+            }, 
+            "uppercase": {
+                "average-pitch": 7.0
+            }, 
+            "hyperlink": {
+                "established": false
+            }, 
+            "default": {
+                "established": false
+            }
+        }, 
+        "profile": [
+            "Default", 
+            "default"
+        ], 
+        "brailleContractionTable": "", 
+        "speakCellHeaders": true, 
+        "flashIsPersistent": false, 
+        "speakCellSpan": true, 
+        "useColorNames": true, 
+        "enableContractedBraille": false, 
+        "spellcheckPresentContext": true, 
+        "enableProgressBarUpdates": true, 
+        "chatAnnounceBuddyTyping": false, 
+        "readTableCellRow": true, 
+        "brailleRolenameStyle": 1, 
+        "sayAllStyle": 1, 
+        "disableBrailleEOL": false, 
+        "speechVerbosityLevel": 1, 
+        "presentToolTips": false, 
+        "presentDateFormat": "%x", 
+        "structuralNavigationEnabled": true, 
+        "onlySpeakDisplayedText": false
+    }, 
+    "profiles": {
+        "default": {
+            "speechServerFactory": "orca.speechdispatcherfactory", 
+            "speechServerInfo": [
+                "Default Synthesizer", 
+                "default"
+            ], 
+            "brailleContractionTable": "/usr/share/liblouis/tables/en-us-g2.ctb", 
+            "pronunciations": {}, 
+            "profile": [
+                "Default", 
+                "default"
+            ], 
+            "voices": {
+                "system": {
+                    "established": false
+                }, 
+                "uppercase": {
+                    "average-pitch": 7.0
+                }, 
+                "hyperlink": {
+                    "average-pitch": 10.0
+                }, 
+                "default": {
+                    "established": false
+                }
+            }, 
+            "keybindings": {}
+        }
+    }
+}
diff --git a/test/keystrokes/helpcontent/line_nav_main_page.py 
b/test/keystrokes/helpcontent/line_nav_main_page.py
new file mode 100644
index 0000000..a6a47f1
--- /dev/null
+++ b/test/keystrokes/helpcontent/line_nav_main_page.py
@@ -0,0 +1,375 @@
+#!/usr/bin/python
+
+"""Test of learn mode."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(TypeAction("h"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+
+sequence.append(PauseAction(2000))
+sequence.append(KeyComboAction("F1"))
+sequence.append(PauseAction(2000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Down",
+    ["BRAILLE LINE:  ' Before You Begin h2'",
+     "     VISIBLE:  ' Before You Begin h2', cursor=2",
+     "SPEECH OUTPUT: 'Before You Begin'",
+     "SPEECH OUTPUT: 'heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Down",
+    ["BRAILLE LINE:  ' If you are not yet familiar with the navigation commands provided by your desktop 
environment, you are encouraged to read that documentation first.'",
+     "     VISIBLE:  'If you are not yet familiar with', cursor=1",
+     "SPEECH OUTPUT: 'If you are not yet familiar with the navigation commands provided '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Down",
+    ["BRAILLE LINE:  'If you are not yet familiar with the navigation commands provided by your desktop 
environment, you are encouraged to read that documentation first.'",
+     "     VISIBLE:  'If you are not yet familiar with', cursor=1",
+     "SPEECH OUTPUT: 'by your desktop environment, you are encouraged to read that '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Down",
+    ["BRAILLE LINE:  'If you are not yet familiar with the navigation commands provided by your desktop 
environment, you are encouraged to read that documentation first.'",
+     "     VISIBLE:  'If you are not yet familiar with', cursor=1",
+     "SPEECH OUTPUT: 'documentation first.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Down",
+    ["BRAILLE LINE:  ' Getting Started h2'",
+     "     VISIBLE:  ' Getting Started h2', cursor=2",
+     "SPEECH OUTPUT: 'Getting Started'",
+     "SPEECH OUTPUT: 'heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Down",
+    ["BRAILLE LINE:  ' Welcome to Orca'",
+     "     VISIBLE:  ' Welcome to Orca', cursor=2",
+     "SPEECH OUTPUT: 'Welcome to Orca'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Down",
+    ["BRAILLE LINE:  ' Welcome to Orca'",
+     "     VISIBLE:  ' Welcome to Orca', cursor=2",
+     "SPEECH OUTPUT: 'Welcome to Orca'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Down",
+    ["BRAILLE LINE:  ' reader'",
+     "     VISIBLE:  ' reader', cursor=2",
+     "SPEECH OUTPUT: 'reader'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Down",
+    ["BRAILLE LINE:  ' The Orca Modifier'",
+     "     VISIBLE:  ' The Orca Modifier', cursor=2",
+     "SPEECH OUTPUT: 'The Orca Modifier'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "10. Down",
+    ["BRAILLE LINE:  ' The Orca Modifier'",
+     "     VISIBLE:  ' The Orca Modifier', cursor=2",
+     "SPEECH OUTPUT: 'The Orca Modifier'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Down",
+    ["BRAILLE LINE:  ' A key that works like Shift,'",
+     "     VISIBLE:  ' A key that works like Shift,', cursor=2",
+     "SPEECH OUTPUT: 'A key that works like Shift,'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "12. Down",
+    ["BRAILLE LINE:  ' Configuration'",
+     "     VISIBLE:  ' Configuration', cursor=2",
+     "SPEECH OUTPUT: 'Configuration'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "13. Down",
+    ["BRAILLE LINE:  ' Configuration'",
+     "     VISIBLE:  ' Configuration', cursor=2",
+     "SPEECH OUTPUT: 'Configuration'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "14. Down",
+    ["BRAILLE LINE:  ' \"Learn\" Mode'",
+     "     VISIBLE:  ' \"Learn\" Mode', cursor=2",
+     "SPEECH OUTPUT: '\"Learn\" Mode'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "15. Down",
+    ["BRAILLE LINE:  ' \"Learn\" Mode'",
+     "     VISIBLE:  ' \"Learn\" Mode', cursor=2",
+     "SPEECH OUTPUT: '\"Learn\" Mode'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "16. Down",
+    ["BRAILLE LINE:  ' Keyboard Layout'",
+     "     VISIBLE:  ' Keyboard Layout', cursor=2",
+     "SPEECH OUTPUT: 'Keyboard Layout'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "17. Down",
+    ["BRAILLE LINE:  ' Keyboard Layout'",
+     "     VISIBLE:  ' Keyboard Layout', cursor=2",
+     "SPEECH OUTPUT: 'Keyboard Layout'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "18. Down",
+    ["BRAILLE LINE:  ' layout'",
+     "     VISIBLE:  ' layout', cursor=2",
+     "SPEECH OUTPUT: 'layout'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "19. Down",
+    ["BRAILLE LINE:  ' CapsLock in Laptop Layout'",
+     "     VISIBLE:  ' CapsLock in Laptop Layout', cursor=2",
+     "SPEECH OUTPUT: 'CapsLock in Laptop Layout'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "20. Down",
+    ["BRAILLE LINE:  ' CapsLock in Laptop Layout'",
+     "     VISIBLE:  ' CapsLock in Laptop Layout', cursor=2",
+     "SPEECH OUTPUT: 'CapsLock in Laptop Layout'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "21. Up",
+    ["BRAILLE LINE:  ' CapsLock in Laptop Layout'",
+     "     VISIBLE:  ' CapsLock in Laptop Layout', cursor=2",
+     "SPEECH OUTPUT: 'CapsLock in Laptop Layout'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "22. Up",
+    ["BRAILLE LINE:  ' layout'",
+     "     VISIBLE:  ' layout', cursor=2",
+     "SPEECH OUTPUT: 'layout'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "23. Up",
+    ["BRAILLE LINE:  ' Keyboard Layout'",
+     "     VISIBLE:  ' Keyboard Layout', cursor=2",
+     "SPEECH OUTPUT: 'Keyboard Layout'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "24. Up",
+    ["BRAILLE LINE:  ' Keyboard Layout'",
+     "     VISIBLE:  ' Keyboard Layout', cursor=2",
+     "SPEECH OUTPUT: 'Keyboard Layout'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "25. Up",
+    ["BRAILLE LINE:  ' \"Learn\" Mode'",
+     "     VISIBLE:  ' \"Learn\" Mode', cursor=2",
+     "SPEECH OUTPUT: '\"Learn\" Mode'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "26. Up",
+    ["BRAILLE LINE:  ' \"Learn\" Mode'",
+     "     VISIBLE:  ' \"Learn\" Mode', cursor=2",
+     "SPEECH OUTPUT: '\"Learn\" Mode'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "27. Up",
+    ["BRAILLE LINE:  ' Configuration'",
+     "     VISIBLE:  ' Configuration', cursor=2",
+     "SPEECH OUTPUT: 'Configuration'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "28. Up",
+    ["BRAILLE LINE:  ' Configuration'",
+     "     VISIBLE:  ' Configuration', cursor=2",
+     "SPEECH OUTPUT: 'Configuration'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "29. Up",
+    ["BRAILLE LINE:  ' A key that works like Shift,'",
+     "     VISIBLE:  ' A key that works like Shift,', cursor=2",
+     "SPEECH OUTPUT: 'A key that works like Shift,'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "30. Up",
+    ["BRAILLE LINE:  ' The Orca Modifier'",
+     "     VISIBLE:  ' The Orca Modifier', cursor=2",
+     "SPEECH OUTPUT: 'The Orca Modifier'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "31. Up",
+    ["BRAILLE LINE:  ' The Orca Modifier'",
+     "     VISIBLE:  ' The Orca Modifier', cursor=2",
+     "SPEECH OUTPUT: 'The Orca Modifier'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "32. Up",
+    ["BRAILLE LINE:  ' reader'",
+     "     VISIBLE:  ' reader', cursor=2",
+     "SPEECH OUTPUT: 'reader'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "33. Up",
+    ["BRAILLE LINE:  ' Welcome to Orca'",
+     "     VISIBLE:  ' Welcome to Orca', cursor=2",
+     "SPEECH OUTPUT: 'Welcome to Orca'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "34. Up",
+    ["BRAILLE LINE:  ' Welcome to Orca'",
+     "     VISIBLE:  ' Welcome to Orca', cursor=2",
+     "SPEECH OUTPUT: 'Welcome to Orca'",
+     "SPEECH OUTPUT: 'link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "35. Up",
+    ["BRAILLE LINE:  ' Getting Started h2'",
+     "     VISIBLE:  ' Getting Started h2', cursor=2",
+     "SPEECH OUTPUT: 'Getting Started'",
+     "SPEECH OUTPUT: 'heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "36. Up",
+    ["BRAILLE LINE:  'documentation first.'",
+     "     VISIBLE:  'documentation first.', cursor=1",
+     "SPEECH OUTPUT: 'documentation first.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "37. Up",
+    ["BRAILLE LINE:  'by your desktop environment, you are encouraged to read that '",
+     "     VISIBLE:  'by your desktop environment, you', cursor=1",
+     "SPEECH OUTPUT: 'by your desktop environment, you are encouraged to read that '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "38. Up",
+    ["BRAILLE LINE:  ' If you are not yet familiar with the navigation commands provided '",
+     "     VISIBLE:  'If you are not yet familiar with', cursor=1",
+     "SPEECH OUTPUT: 'If you are not yet familiar with the navigation commands provided '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "39. Up",
+    ["BRAILLE LINE:  ' Before You Begin h2'",
+     "     VISIBLE:  ' Before You Begin h2', cursor=2",
+     "SPEECH OUTPUT: 'Before You Begin'",
+     "SPEECH OUTPUT: 'heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "40. Up",
+    ["BRAILLE LINE:  ' Orca's logo Orca Screen Reader h1'",
+     "     VISIBLE:  'Orca's logo Orca Screen Reader h', cursor=1",
+     "SPEECH OUTPUT: 'Orca's logo'",
+     "SPEECH OUTPUT: ' Orca Screen Reade'",
+     "SPEECH OUTPUT: 'heading level 1'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/helpcontent/line_nav_main_page.settings 
b/test/keystrokes/helpcontent/line_nav_main_page.settings
new file mode 100644
index 0000000..75125f2
--- /dev/null
+++ b/test/keystrokes/helpcontent/line_nav_main_page.settings
@@ -0,0 +1,140 @@
+{
+    "pronunciations": {}, 
+    "keybindings": {}, 
+    "general": {
+        "sayAllOnLoad": false, 
+        "enableSpeech": true, 
+        "brailleRequiredStateString": null, 
+        "enableTutorialMessages": false, 
+        "enableFunctionKeys": true, 
+        "enabledSpokenTextAttributes": "size:; family-name:; weight:400; indent:0; underline:none; 
strikethrough:false; justification:left; style:normal; paragraph-style:; text-spelling:none;", 
+        "enableMnemonicSpeaking": false, 
+        "progressBarVerbosity": 1, 
+        "speakBlankLines": true, 
+        "speechServerInfo": null, 
+        "enableSpeechIndentation": false, 
+        "speakMultiCaseStringsAsWords": false, 
+        "enableNavigationKeys": false, 
+        "speakSpreadsheetCoordinates": true, 
+        "enableEchoByWord": false, 
+        "enableModifierKeys": true, 
+        "enabledBrailledTextAttributes": "size:; family-name:; weight:400; indent:0; underline:none; 
strikethrough:false; justification:left; style:normal; text-spelling:none;", 
+        "enableBrailleContext": true, 
+        "brailleFlashTime": 5000, 
+        "presentTimeFormat": "%X", 
+        "speechServerFactory": "speechdispatcherfactory", 
+        "mouseDwellDelay": 0, 
+        "wrappedStructuralNavigation": true, 
+        "enableBraille": false, 
+        "enableKeyEcho": false, 
+        "enablePositionSpeaking": false, 
+        "brailleLinkIndicator": 192, 
+        "flashVerbosityLevel": 1, 
+        "findResultsMinimumLength": 4, 
+        "chatRoomHistories": false, 
+        "largeObjectTextLength": 75, 
+        "keyboardLayout": 1, 
+        "verbalizePunctuationStyle": 1, 
+        "spellcheckSpellError": true, 
+        "chatSpeakRoomName": false, 
+        "chatMessageVerbosity": 0, 
+        "messageVerbosityLevel": 1, 
+        "brailleAlignmentStyle": 0, 
+        "brailleSelectorIndicator": 192, 
+        "skipBlankCells": false, 
+        "speakCellCoordinates": true, 
+        "activeProfile": [
+            "Default", 
+            "default"
+        ], 
+        "enablePrintableKeys": true, 
+        "startingProfile": [
+            "Default", 
+            "default"
+        ], 
+        "orcaModifierKeys": [
+            "Insert", 
+            "KP_Insert"
+        ], 
+        "spellcheckSpellSuggestion": true, 
+        "enablePauseBreaks": true, 
+        "enableBrailleMonitor": true, 
+        "progressBarUpdateInterval": 10, 
+        "speechRequiredStateString": null, 
+        "enableDiacriticalKeys": false, 
+        "enableMouseReview": false, 
+        "enableActionKeys": true, 
+        "findResultsVerbosity": 2, 
+        "textAttributesBrailleIndicator": 0, 
+        "enableEchoByCharacter": false, 
+        "enableFlashMessages": true, 
+        "enableEchoBySentence": false, 
+        "brailleVerbosityLevel": 1, 
+        "voices": {
+            "system": {
+                "established": false
+            }, 
+            "uppercase": {
+                "average-pitch": 7.0
+            }, 
+            "hyperlink": {
+                "established": false
+            }, 
+            "default": {
+                "established": false
+            }
+        }, 
+        "profile": [
+            "Default", 
+            "default"
+        ], 
+        "brailleContractionTable": "", 
+        "speakCellHeaders": true, 
+        "flashIsPersistent": false, 
+        "speakCellSpan": true, 
+        "useColorNames": true, 
+        "enableContractedBraille": false, 
+        "spellcheckPresentContext": true, 
+        "enableProgressBarUpdates": true, 
+        "chatAnnounceBuddyTyping": false, 
+        "readTableCellRow": true, 
+        "brailleRolenameStyle": 1, 
+        "sayAllStyle": 1, 
+        "disableBrailleEOL": false, 
+        "speechVerbosityLevel": 1, 
+        "presentToolTips": false, 
+        "presentDateFormat": "%x", 
+        "structuralNavigationEnabled": true, 
+        "onlySpeakDisplayedText": false
+    }, 
+    "profiles": {
+        "default": {
+            "speechServerFactory": "orca.speechdispatcherfactory", 
+            "speechServerInfo": [
+                "Default Synthesizer", 
+                "default"
+            ], 
+            "brailleContractionTable": "/usr/share/liblouis/tables/en-us-g2.ctb", 
+            "pronunciations": {}, 
+            "profile": [
+                "Default", 
+                "default"
+            ], 
+            "voices": {
+                "system": {
+                    "established": false
+                }, 
+                "uppercase": {
+                    "average-pitch": 7.0
+                }, 
+                "hyperlink": {
+                    "average-pitch": 10.0
+                }, 
+                "default": {
+                    "established": false
+                }
+            }, 
+            "keybindings": {}
+        }
+    }
+}
diff --git a/test/keystrokes/helpcontent/load_no_sayall.py b/test/keystrokes/helpcontent/load_no_sayall.py
new file mode 100644
index 0000000..36ef422
--- /dev/null
+++ b/test/keystrokes/helpcontent/load_no_sayall.py
@@ -0,0 +1,34 @@
+#!/usr/bin/python
+
+"""Test of learn mode."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(TypeAction("h"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+
+sequence.append(PauseAction(2000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("F1"))
+sequence.append(utils.AssertPresentationAction(
+    "1. F1 for help",
+    ["BRAILLE LINE:  'yelp application Orca Screen Reader frame'",
+     "     VISIBLE:  'Orca Screen Reader frame', cursor=1",
+     "BRAILLE LINE:  ' Orca's logo Orca Screen Reader h1'",
+     "     VISIBLE:  'Orca's logo Orca Screen Reader h', cursor=1",
+     "BRAILLE LINE:  'Finished loading Orca Screen Reader.'",
+     "     VISIBLE:  'Finished loading Orca Screen Rea', cursor=0",
+     "BRAILLE LINE:  ' Orca's logo Orca Screen Reader h1'",
+     "     VISIBLE:  'Orca's logo Orca Screen Reader h', cursor=1",
+     "SPEECH OUTPUT: 'F1 '",
+     "SPEECH OUTPUT: 'Orca Screen Reader frame'",
+     "SPEECH OUTPUT: 'Finished loading Orca Screen Reader.' voice=system"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/helpcontent/load_no_sayall.settings 
b/test/keystrokes/helpcontent/load_no_sayall.settings
new file mode 100644
index 0000000..75125f2
--- /dev/null
+++ b/test/keystrokes/helpcontent/load_no_sayall.settings
@@ -0,0 +1,140 @@
+{
+    "pronunciations": {}, 
+    "keybindings": {}, 
+    "general": {
+        "sayAllOnLoad": false, 
+        "enableSpeech": true, 
+        "brailleRequiredStateString": null, 
+        "enableTutorialMessages": false, 
+        "enableFunctionKeys": true, 
+        "enabledSpokenTextAttributes": "size:; family-name:; weight:400; indent:0; underline:none; 
strikethrough:false; justification:left; style:normal; paragraph-style:; text-spelling:none;", 
+        "enableMnemonicSpeaking": false, 
+        "progressBarVerbosity": 1, 
+        "speakBlankLines": true, 
+        "speechServerInfo": null, 
+        "enableSpeechIndentation": false, 
+        "speakMultiCaseStringsAsWords": false, 
+        "enableNavigationKeys": false, 
+        "speakSpreadsheetCoordinates": true, 
+        "enableEchoByWord": false, 
+        "enableModifierKeys": true, 
+        "enabledBrailledTextAttributes": "size:; family-name:; weight:400; indent:0; underline:none; 
strikethrough:false; justification:left; style:normal; text-spelling:none;", 
+        "enableBrailleContext": true, 
+        "brailleFlashTime": 5000, 
+        "presentTimeFormat": "%X", 
+        "speechServerFactory": "speechdispatcherfactory", 
+        "mouseDwellDelay": 0, 
+        "wrappedStructuralNavigation": true, 
+        "enableBraille": false, 
+        "enableKeyEcho": false, 
+        "enablePositionSpeaking": false, 
+        "brailleLinkIndicator": 192, 
+        "flashVerbosityLevel": 1, 
+        "findResultsMinimumLength": 4, 
+        "chatRoomHistories": false, 
+        "largeObjectTextLength": 75, 
+        "keyboardLayout": 1, 
+        "verbalizePunctuationStyle": 1, 
+        "spellcheckSpellError": true, 
+        "chatSpeakRoomName": false, 
+        "chatMessageVerbosity": 0, 
+        "messageVerbosityLevel": 1, 
+        "brailleAlignmentStyle": 0, 
+        "brailleSelectorIndicator": 192, 
+        "skipBlankCells": false, 
+        "speakCellCoordinates": true, 
+        "activeProfile": [
+            "Default", 
+            "default"
+        ], 
+        "enablePrintableKeys": true, 
+        "startingProfile": [
+            "Default", 
+            "default"
+        ], 
+        "orcaModifierKeys": [
+            "Insert", 
+            "KP_Insert"
+        ], 
+        "spellcheckSpellSuggestion": true, 
+        "enablePauseBreaks": true, 
+        "enableBrailleMonitor": true, 
+        "progressBarUpdateInterval": 10, 
+        "speechRequiredStateString": null, 
+        "enableDiacriticalKeys": false, 
+        "enableMouseReview": false, 
+        "enableActionKeys": true, 
+        "findResultsVerbosity": 2, 
+        "textAttributesBrailleIndicator": 0, 
+        "enableEchoByCharacter": false, 
+        "enableFlashMessages": true, 
+        "enableEchoBySentence": false, 
+        "brailleVerbosityLevel": 1, 
+        "voices": {
+            "system": {
+                "established": false
+            }, 
+            "uppercase": {
+                "average-pitch": 7.0
+            }, 
+            "hyperlink": {
+                "established": false
+            }, 
+            "default": {
+                "established": false
+            }
+        }, 
+        "profile": [
+            "Default", 
+            "default"
+        ], 
+        "brailleContractionTable": "", 
+        "speakCellHeaders": true, 
+        "flashIsPersistent": false, 
+        "speakCellSpan": true, 
+        "useColorNames": true, 
+        "enableContractedBraille": false, 
+        "spellcheckPresentContext": true, 
+        "enableProgressBarUpdates": true, 
+        "chatAnnounceBuddyTyping": false, 
+        "readTableCellRow": true, 
+        "brailleRolenameStyle": 1, 
+        "sayAllStyle": 1, 
+        "disableBrailleEOL": false, 
+        "speechVerbosityLevel": 1, 
+        "presentToolTips": false, 
+        "presentDateFormat": "%x", 
+        "structuralNavigationEnabled": true, 
+        "onlySpeakDisplayedText": false
+    }, 
+    "profiles": {
+        "default": {
+            "speechServerFactory": "orca.speechdispatcherfactory", 
+            "speechServerInfo": [
+                "Default Synthesizer", 
+                "default"
+            ], 
+            "brailleContractionTable": "/usr/share/liblouis/tables/en-us-g2.ctb", 
+            "pronunciations": {}, 
+            "profile": [
+                "Default", 
+                "default"
+            ], 
+            "voices": {
+                "system": {
+                    "established": false
+                }, 
+                "uppercase": {
+                    "average-pitch": 7.0
+                }, 
+                "hyperlink": {
+                    "average-pitch": 10.0
+                }, 
+                "default": {
+                    "established": false
+                }
+            }, 
+            "keybindings": {}
+        }
+    }
+}
diff --git a/test/keystrokes/helpcontent/load_sayall.py b/test/keystrokes/helpcontent/load_sayall.py
new file mode 100644
index 0000000..338bfcb
--- /dev/null
+++ b/test/keystrokes/helpcontent/load_sayall.py
@@ -0,0 +1,129 @@
+#!/usr/bin/python
+
+"""Test of learn mode."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(TypeAction("h"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+
+sequence.append(PauseAction(2000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("F1"))
+sequence.append(utils.AssertPresentationAction(
+    "1. F1 for help",
+    ["BRAILLE LINE:  'yelp application Orca Screen Reader frame'",
+     "     VISIBLE:  'Orca Screen Reader frame', cursor=1",
+     "BRAILLE LINE:  ' Orca's logo Orca Screen Reader h1'",
+     "     VISIBLE:  'Orca's logo Orca Screen Reader h', cursor=1",
+     "BRAILLE LINE:  'Finished loading Orca Screen Reader.'",
+     "     VISIBLE:  'Finished loading Orca Screen Rea', cursor=0",
+     "BRAILLE LINE:  ' Orca's logo Orca Screen Reader h1'",
+     "     VISIBLE:  'Orca's logo Orca Screen Reader h', cursor=1",
+     "SPEECH OUTPUT: 'F1 '",
+     "SPEECH OUTPUT: 'Orca Screen Reader frame'",
+     "SPEECH OUTPUT: ' \ufffc link Orca Screen Reade'",
+     "SPEECH OUTPUT: 'heading level 1'",
+     "SPEECH OUTPUT: 'Before You Begin",
+     "'",
+     "SPEECH OUTPUT: 'If you are not yet familiar with the navigation commands provided by your desktop 
environment, you are encouraged to read that documentation first.'",
+     "SPEECH OUTPUT: 'Getting Started'",
+     "SPEECH OUTPUT: 'heading level 2'",
+     "SPEECH OUTPUT: 'Welcome to Orca",
+     " link'",
+     "SPEECH OUTPUT: 'Introducing the Orca screen reader",
+     " link'",
+     "SPEECH OUTPUT: 'The Orca Modifier",
+     " link'",
+     "SPEECH OUTPUT: 'A key that works like Shift, Ctrl, and Alt",
+     " link'",
+     "SPEECH OUTPUT: 'Configuration",
+     " link'",
+     "SPEECH OUTPUT: 'Setting up Orca",
+     " link'",
+     "SPEECH OUTPUT: '\"Learn\" Mode",
+     " link'",
+     "SPEECH OUTPUT: 'Discovering Orca's commands",
+     " link'",
+     "SPEECH OUTPUT: 'Keyboard Layout",
+     " link'",
+     "SPEECH OUTPUT: 'Selecting the Desktop or Laptop layout",
+     " link'",
+     "SPEECH OUTPUT: 'CapsLock in Laptop Layout",
+     " link'",
+     "SPEECH OUTPUT: 'Toggling it when it is the Orca Modifier",
+     " link'",
+     "SPEECH OUTPUT: 'Keybindings",
+     " link'",
+     "SPEECH OUTPUT: 'Binding, rebinding, and unbinding commands",
+     " link'",
+     "SPEECH OUTPUT: 'Profiles",
+     " link'",
+     "SPEECH OUTPUT: 'Maintaining multiple configurations'",
+     "SPEECH OUTPUT: 'Reading Documents and Web Pages'",
+     "SPEECH OUTPUT: 'heading level 2'",
+     "SPEECH OUTPUT: 'Documents",
+     " link'",
+     "SPEECH OUTPUT: 'Reading content",
+     " link'",
+     "SPEECH OUTPUT: 'Text Attributes",
+     " link'",
+     "SPEECH OUTPUT: 'Examining text formatting",
+     " link'",
+     "SPEECH OUTPUT: 'Structural Navigation",
+     " link'",
+     "SPEECH OUTPUT: 'Moving by heading and other elements",
+     " link'",
+     "SPEECH OUTPUT: 'Tables",
+     " link'",
+     "SPEECH OUTPUT: 'Navigating and setting dynamic headers",
+     " link'",
+     "SPEECH OUTPUT: 'Filling out forms",
+     " link'",
+     "SPEECH OUTPUT: 'Accessing widgets embedded in documents",
+     " link'",
+     "SPEECH OUTPUT: 'Live Regions",
+     " link'",
+     "SPEECH OUTPUT: 'Interacting with dynamic web content'",
+     "SPEECH OUTPUT: 'Reviewing and Interacting with Screen Contents'",
+     "SPEECH OUTPUT: 'heading level 2'",
+     "SPEECH OUTPUT: 'WhereAmI",
+     " link'",
+     "SPEECH OUTPUT: 'Learning about your location",
+     " link'",
+     "SPEECH OUTPUT: 'Flat Review",
+     " link'",
+     "SPEECH OUTPUT: 'Examining a window spatially",
+     " link'",
+     "SPEECH OUTPUT: 'Orca Find",
+     " link'",
+     "SPEECH OUTPUT: 'Searching a window for objects",
+     " link'",
+     "SPEECH OUTPUT: 'Mouse Review",
+     " link'",
+     "SPEECH OUTPUT: 'Using the pointer to examine the screen",
+     " link'",
+     "SPEECH OUTPUT: 'Notifications",
+     " link'",
+     "SPEECH OUTPUT: 'Reading previously-received messages",
+     " link'",
+     "SPEECH OUTPUT: 'Bookmarks",
+     " link'",
+     "SPEECH OUTPUT: 'Storing and retrieving objects'",
+     "SPEECH OUTPUT: 'Quick Reference'",
+     "SPEECH OUTPUT: 'heading level 2'",
+     "SPEECH OUTPUT: 'Commands",
+     " link'",
+     "SPEECH OUTPUT: 'Preferences link'",
+     "SPEECH OUTPUT: 'About'",
+     "SPEECH OUTPUT: 'heading level 2'",
+     "SPEECH OUTPUT: 'Finished loading Orca Screen Reader.'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/helpcontent/load_sayall.settings 
b/test/keystrokes/helpcontent/load_sayall.settings
new file mode 100644
index 0000000..e5b8b47
--- /dev/null
+++ b/test/keystrokes/helpcontent/load_sayall.settings
@@ -0,0 +1,140 @@
+{
+    "pronunciations": {}, 
+    "keybindings": {}, 
+    "general": {
+        "sayAllOnLoad": true, 
+        "enableSpeech": true, 
+        "brailleRequiredStateString": null, 
+        "enableTutorialMessages": false, 
+        "enableFunctionKeys": true, 
+        "enabledSpokenTextAttributes": "size:; family-name:; weight:400; indent:0; underline:none; 
strikethrough:false; justification:left; style:normal; paragraph-style:; text-spelling:none;", 
+        "enableMnemonicSpeaking": false, 
+        "progressBarVerbosity": 1, 
+        "speakBlankLines": true, 
+        "speechServerInfo": null, 
+        "enableSpeechIndentation": false, 
+        "speakMultiCaseStringsAsWords": false, 
+        "enableNavigationKeys": false, 
+        "speakSpreadsheetCoordinates": true, 
+        "enableEchoByWord": false, 
+        "enableModifierKeys": true, 
+        "enabledBrailledTextAttributes": "size:; family-name:; weight:400; indent:0; underline:none; 
strikethrough:false; justification:left; style:normal; text-spelling:none;", 
+        "enableBrailleContext": true, 
+        "brailleFlashTime": 5000, 
+        "presentTimeFormat": "%X", 
+        "speechServerFactory": "speechdispatcherfactory", 
+        "mouseDwellDelay": 0, 
+        "wrappedStructuralNavigation": true, 
+        "enableBraille": false, 
+        "enableKeyEcho": false, 
+        "enablePositionSpeaking": false, 
+        "brailleLinkIndicator": 192, 
+        "flashVerbosityLevel": 1, 
+        "findResultsMinimumLength": 4, 
+        "chatRoomHistories": false, 
+        "largeObjectTextLength": 75, 
+        "keyboardLayout": 1, 
+        "verbalizePunctuationStyle": 1, 
+        "spellcheckSpellError": true, 
+        "chatSpeakRoomName": false, 
+        "chatMessageVerbosity": 0, 
+        "messageVerbosityLevel": 1, 
+        "brailleAlignmentStyle": 0, 
+        "brailleSelectorIndicator": 192, 
+        "skipBlankCells": false, 
+        "speakCellCoordinates": true, 
+        "activeProfile": [
+            "Default", 
+            "default"
+        ], 
+        "enablePrintableKeys": true, 
+        "startingProfile": [
+            "Default", 
+            "default"
+        ], 
+        "orcaModifierKeys": [
+            "Insert", 
+            "KP_Insert"
+        ], 
+        "spellcheckSpellSuggestion": true, 
+        "enablePauseBreaks": true, 
+        "enableBrailleMonitor": true, 
+        "progressBarUpdateInterval": 10, 
+        "speechRequiredStateString": null, 
+        "enableDiacriticalKeys": false, 
+        "enableMouseReview": false, 
+        "enableActionKeys": true, 
+        "findResultsVerbosity": 2, 
+        "textAttributesBrailleIndicator": 0, 
+        "enableEchoByCharacter": false, 
+        "enableFlashMessages": true, 
+        "enableEchoBySentence": false, 
+        "brailleVerbosityLevel": 1, 
+        "voices": {
+            "system": {
+                "established": false
+            }, 
+            "uppercase": {
+                "average-pitch": 7.0
+            }, 
+            "hyperlink": {
+                "established": false
+            }, 
+            "default": {
+                "established": false
+            }
+        }, 
+        "profile": [
+            "Default", 
+            "default"
+        ], 
+        "brailleContractionTable": "", 
+        "speakCellHeaders": true, 
+        "flashIsPersistent": false, 
+        "speakCellSpan": true, 
+        "useColorNames": true, 
+        "enableContractedBraille": false, 
+        "spellcheckPresentContext": true, 
+        "enableProgressBarUpdates": true, 
+        "chatAnnounceBuddyTyping": false, 
+        "readTableCellRow": true, 
+        "brailleRolenameStyle": 1, 
+        "sayAllStyle": 1, 
+        "disableBrailleEOL": false, 
+        "speechVerbosityLevel": 1, 
+        "presentToolTips": false, 
+        "presentDateFormat": "%x", 
+        "structuralNavigationEnabled": true, 
+        "onlySpeakDisplayedText": false
+    }, 
+    "profiles": {
+        "default": {
+            "speechServerFactory": "orca.speechdispatcherfactory", 
+            "speechServerInfo": [
+                "Default Synthesizer", 
+                "default"
+            ], 
+            "brailleContractionTable": "/usr/share/liblouis/tables/en-us-g2.ctb", 
+            "pronunciations": {}, 
+            "profile": [
+                "Default", 
+                "default"
+            ], 
+            "voices": {
+                "system": {
+                    "established": false
+                }, 
+                "uppercase": {
+                    "average-pitch": 7.0
+                }, 
+                "hyperlink": {
+                    "average-pitch": 10.0
+                }, 
+                "default": {
+                    "established": false
+                }
+            }, 
+            "keybindings": {}
+        }
+    }
+}
diff --git a/test/keystrokes/helpcontent/struct_nav_heading.py 
b/test/keystrokes/helpcontent/struct_nav_heading.py
new file mode 100644
index 0000000..65a8f5d
--- /dev/null
+++ b/test/keystrokes/helpcontent/struct_nav_heading.py
@@ -0,0 +1,165 @@
+#!/usr/bin/python
+
+"""Test of learn mode."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(TypeAction("h"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+
+sequence.append(KeyComboAction("F1"))
+sequence.append(PauseAction(2000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("h"))
+sequence.append(utils.AssertPresentationAction(
+    "1. h for next heading",
+    ["BRAILLE LINE:  ' Before You Begin h2'",
+     "     VISIBLE:  ' Before You Begin h2', cursor=2",
+     "BRAILLE LINE:  ' Before You Begin h2'",
+     "     VISIBLE:  ' Before You Begin h2', cursor=2",
+     "SPEECH OUTPUT: 'Before You Begin heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("h"))
+sequence.append(utils.AssertPresentationAction(
+    "2. h for next heading",
+    ["BRAILLE LINE:  ' Getting Started h2'",
+     "     VISIBLE:  ' Getting Started h2', cursor=2",
+     "BRAILLE LINE:  ' Getting Started h2'",
+     "     VISIBLE:  ' Getting Started h2', cursor=2",
+     "SPEECH OUTPUT: 'Getting Started heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("h"))
+sequence.append(utils.AssertPresentationAction(
+    "3. h for next heading",
+    ["BRAILLE LINE:  ' Reading Documents and Web Pages h2'",
+     "     VISIBLE:  'Reading Documents and Web Pages ', cursor=1",
+     "BRAILLE LINE:  ' Reading Documents and Web Pages h2'",
+     "     VISIBLE:  'Reading Documents and Web Pages ', cursor=1",
+     "SPEECH OUTPUT: 'Reading Documents and Web Pages heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("h"))
+sequence.append(utils.AssertPresentationAction(
+    "4. h for next heading",
+    ["BRAILLE LINE:  ' Reviewing and Interacting with Screen Contents h2'",
+     "     VISIBLE:  'Reviewing and Interacting with S', cursor=1",
+     "BRAILLE LINE:  ' Reviewing and Interacting with Screen Contents h2'",
+     "     VISIBLE:  'Reviewing and Interacting with S', cursor=1",
+     "SPEECH OUTPUT: 'Reviewing and Interacting with Screen Contents heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("h"))
+sequence.append(utils.AssertPresentationAction(
+    "5. h for next heading",
+    ["BRAILLE LINE:  ' Quick Reference h2'",
+     "     VISIBLE:  ' Quick Reference h2', cursor=2",
+     "BRAILLE LINE:  ' Quick Reference h2'",
+     "     VISIBLE:  ' Quick Reference h2', cursor=2",
+     "SPEECH OUTPUT: 'Quick Reference heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("h"))
+sequence.append(utils.AssertPresentationAction(
+    "6. h for next heading",
+    ["BRAILLE LINE:  ' About h2'",
+     "     VISIBLE:  ' About h2', cursor=2",
+     "BRAILLE LINE:  ' About h2'",
+     "     VISIBLE:  ' About h2', cursor=2",
+     "SPEECH OUTPUT: 'About heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("h"))
+sequence.append(utils.AssertPresentationAction(
+    "7. h for next heading",
+    ["BRAILLE LINE:  'Wrapping to top.'",
+     "     VISIBLE:  'Wrapping to top.', cursor=0",
+     "BRAILLE LINE:  ' Orca's logo Orca Screen Reader h1'",
+     "     VISIBLE:  'Orca's logo Orca Screen Reader h', cursor=1",
+     "BRAILLE LINE:  ' Orca's logo Orca Screen Reader h1'",
+     "     VISIBLE:  'Orca's logo Orca Screen Reader h', cursor=1",
+     "SPEECH OUTPUT: 'Wrapping to top.' voice=system",
+     "SPEECH OUTPUT: 'Orca's logo Orca Screen Reader heading level 1'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>h"))
+sequence.append(utils.AssertPresentationAction(
+    "10. shift+h for previous heading",
+    ["BRAILLE LINE:  'Wrapping to bottom.'",
+     "     VISIBLE:  'Wrapping to bottom.', cursor=0",
+     "BRAILLE LINE:  ' About h2'",
+     "     VISIBLE:  ' About h2', cursor=2",
+     "BRAILLE LINE:  ' About h2'",
+     "     VISIBLE:  ' About h2', cursor=2",
+     "SPEECH OUTPUT: 'Wrapping to bottom.' voice=system",
+     "SPEECH OUTPUT: 'About heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>h"))
+sequence.append(utils.AssertPresentationAction(
+    "11. shift+h for previous heading",
+    ["BRAILLE LINE:  ' Quick Reference h2'",
+     "     VISIBLE:  ' Quick Reference h2', cursor=2",
+     "BRAILLE LINE:  ' Quick Reference h2'",
+     "     VISIBLE:  ' Quick Reference h2', cursor=2",
+     "SPEECH OUTPUT: 'Quick Reference heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>h"))
+sequence.append(utils.AssertPresentationAction(
+    "12. shift+h for previous heading",
+    ["BRAILLE LINE:  ' Reviewing and Interacting with Screen Contents h2'",
+     "     VISIBLE:  'Reviewing and Interacting with S', cursor=1",
+     "BRAILLE LINE:  ' Reviewing and Interacting with Screen Contents h2'",
+     "     VISIBLE:  'Reviewing and Interacting with S', cursor=1",
+     "SPEECH OUTPUT: 'Reviewing and Interacting with Screen Contents heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>h"))
+sequence.append(utils.AssertPresentationAction(
+    "13. shift+h for previous heading",
+    ["BRAILLE LINE:  ' Reading Documents and Web Pages h2'",
+     "     VISIBLE:  'Reading Documents and Web Pages ', cursor=1",
+     "BRAILLE LINE:  ' Reading Documents and Web Pages h2'",
+     "     VISIBLE:  'Reading Documents and Web Pages ', cursor=1",
+     "SPEECH OUTPUT: 'Reading Documents and Web Pages heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>h"))
+sequence.append(utils.AssertPresentationAction(
+    "14. shift+h for previous heading",
+    ["BRAILLE LINE:  ' Getting Started h2'",
+     "     VISIBLE:  ' Getting Started h2', cursor=2",
+     "BRAILLE LINE:  ' Getting Started h2'",
+     "     VISIBLE:  ' Getting Started h2', cursor=2",
+     "SPEECH OUTPUT: 'Getting Started heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>h"))
+sequence.append(utils.AssertPresentationAction(
+    "15. shift+h for previous heading",
+    ["BRAILLE LINE:  ' Before You Begin h2'",
+     "     VISIBLE:  ' Before You Begin h2', cursor=2",
+     "BRAILLE LINE:  ' Before You Begin h2'",
+     "     VISIBLE:  ' Before You Begin h2', cursor=2",
+     "SPEECH OUTPUT: 'Before You Begin heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>h"))
+sequence.append(utils.AssertPresentationAction(
+    "16. shift+h for previous heading",
+    ["BRAILLE LINE:  ' Orca's logo Orca Screen Reader h1'",
+     "     VISIBLE:  'Orca's logo Orca Screen Reader h', cursor=1",
+     "BRAILLE LINE:  ' Orca's logo Orca Screen Reader h1'",
+     "     VISIBLE:  'Orca's logo Orca Screen Reader h', cursor=1",
+     "SPEECH OUTPUT: 'Orca's logo Orca Screen Reader heading level 1'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/helpcontent/struct_nav_list.py b/test/keystrokes/helpcontent/struct_nav_list.py
new file mode 100644
index 0000000..f1d1ca4
--- /dev/null
+++ b/test/keystrokes/helpcontent/struct_nav_list.py
@@ -0,0 +1,115 @@
+#!/usr/bin/python
+
+"""Test of learn mode."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(TypeAction("h"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+
+sequence.append(KeyComboAction("F1"))
+sequence.append(PauseAction(2000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("k"))
+sequence.append(utils.AssertPresentationAction(
+    "1. k for next link",
+    ["BRAILLE LINE:  ' Welcome to Orca'",
+     "     VISIBLE:  ' Welcome to Orca', cursor=2",
+     "BRAILLE LINE:  ' Welcome to Orca'",
+     "     VISIBLE:  ' Welcome to Orca', cursor=2",
+     "SPEECH OUTPUT: 'Welcome to Orca",
+     "Introducing the Orca screen reader",
+     " link'"]))
+
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(2000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("l"))
+sequence.append(utils.AssertPresentationAction(
+    "2. l for next list",
+    ["BRAILLE LINE:  'List with 3 items'",
+     "     VISIBLE:  'List with 3 items', cursor=0",
+     "BRAILLE LINE:  ' The method for configuring Orca to be launched automatically as your preferred screen 
reader will depend upon which desktop environment you use. For instance, in GNOME 3.x this option can be 
found in the Universal Access Control Center panel on the Seeing page.'",
+     "     VISIBLE:  ' The method for configuring Orca', cursor=0",
+     "BRAILLE LINE:  ' The method for configuring Orca to be launched automatically as your preferred screen 
reader will depend upon which desktop environment you use. For instance, in GNOME 3.x this option can be 
found in the Universal Access Control Center panel on the Seeing page.'",
+     "     VISIBLE:  ' The method for configuring Orca', cursor=0",
+     "SPEECH OUTPUT: 'List with 3 items'",
+     "SPEECH OUTPUT: '\u2022 The method for configuring Orca to be launched automatically as '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("l"))
+sequence.append(utils.AssertPresentationAction(
+    "3. l for next list",
+    ["BRAILLE LINE:  'List with 11 items'",
+     "     VISIBLE:  'List with 11 items', cursor=0",
+     "BRAILLE LINE:  ' -h, --help: Show the help message'",
+     "     VISIBLE:  ' -h, --help: Show the help messa', cursor=0",
+     "BRAILLE LINE:  ' -h, --help: Show the help message'",
+     "     VISIBLE:  ' -h, --help: Show the help messa', cursor=0",
+     "SPEECH OUTPUT: 'List with 11 items'",
+     "SPEECH OUTPUT: '\u2022 -h, --help: Show the help message'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("l"))
+sequence.append(utils.AssertPresentationAction(
+    "4. l for next list",
+    ["BRAILLE LINE:  'List with 3 items'",
+     "     VISIBLE:  'List with 3 items', cursor=0",
+     "BRAILLE LINE:  ' speech'",
+     "     VISIBLE:  ' speech', cursor=0",
+     "BRAILLE LINE:  ' speech'",
+     "     VISIBLE:  ' speech', cursor=0",
+     "SPEECH OUTPUT: 'List with 3 items'",
+     "SPEECH OUTPUT: '\u25e6 speech'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>l"))
+sequence.append(utils.AssertPresentationAction(
+    "5. shift+l for previous list",
+    ["BRAILLE LINE:  'List with 3 items'",
+     "     VISIBLE:  'List with 3 items', cursor=0",
+     "BRAILLE LINE:  ' The method for configuring Orca to be launched automatically as your preferred screen 
reader will depend upon which desktop environment you use. For instance, in GNOME 3.x this option can be 
found in the Universal Access Control Center panel on the Seeing page.'",
+     "     VISIBLE:  ' The method for configuring Orca', cursor=0",
+     "BRAILLE LINE:  ' The method for configuring Orca to be launched automatically as your preferred screen 
reader will depend upon which desktop environment you use. For instance, in GNOME 3.x this option can be 
found in the Universal Access Control Center panel on the Seeing page.'",
+     "     VISIBLE:  ' The method for configuring Orca', cursor=0",
+     "SPEECH OUTPUT: 'List with 3 items'",
+     "SPEECH OUTPUT: '\u2022 The method for configuring Orca to be launched automatically as '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>l"))
+sequence.append(utils.AssertPresentationAction(
+    "6. shift+l for previous list",
+    ["BRAILLE LINE:  'Wrapping to bottom.'",
+     "     VISIBLE:  'Wrapping to bottom.', cursor=0",
+     "BRAILLE LINE:  'List with 1 item'",
+     "     VISIBLE:  'List with 1 item', cursor=0",
+     "BRAILLE LINE:  ' Getting Started'",
+     "     VISIBLE:  ' Getting Started', cursor=0",
+     "BRAILLE LINE:  ' Getting Started'",
+     "     VISIBLE:  ' Getting Started', cursor=0",
+     "SPEECH OUTPUT: 'Wrapping to bottom.'",
+     "SPEECH OUTPUT: 'List with 1 item'",
+     "SPEECH OUTPUT: 'Getting Started link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>l"))
+sequence.append(utils.AssertPresentationAction(
+    "7. shift+l for previous list",
+    ["BRAILLE LINE:  'List with 3 items'",
+     "     VISIBLE:  'List with 3 items', cursor=0",
+     "BRAILLE LINE:  ' speech'",
+     "     VISIBLE:  ' speech', cursor=0",
+     "BRAILLE LINE:  ' speech'",
+     "     VISIBLE:  ' speech', cursor=0",
+     "SPEECH OUTPUT: 'List with 3 items'",
+     "SPEECH OUTPUT: '\u25e6 speech'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/helpcontent/struct_nav_list.settings 
b/test/keystrokes/helpcontent/struct_nav_list.settings
new file mode 100644
index 0000000..75125f2
--- /dev/null
+++ b/test/keystrokes/helpcontent/struct_nav_list.settings
@@ -0,0 +1,140 @@
+{
+    "pronunciations": {}, 
+    "keybindings": {}, 
+    "general": {
+        "sayAllOnLoad": false, 
+        "enableSpeech": true, 
+        "brailleRequiredStateString": null, 
+        "enableTutorialMessages": false, 
+        "enableFunctionKeys": true, 
+        "enabledSpokenTextAttributes": "size:; family-name:; weight:400; indent:0; underline:none; 
strikethrough:false; justification:left; style:normal; paragraph-style:; text-spelling:none;", 
+        "enableMnemonicSpeaking": false, 
+        "progressBarVerbosity": 1, 
+        "speakBlankLines": true, 
+        "speechServerInfo": null, 
+        "enableSpeechIndentation": false, 
+        "speakMultiCaseStringsAsWords": false, 
+        "enableNavigationKeys": false, 
+        "speakSpreadsheetCoordinates": true, 
+        "enableEchoByWord": false, 
+        "enableModifierKeys": true, 
+        "enabledBrailledTextAttributes": "size:; family-name:; weight:400; indent:0; underline:none; 
strikethrough:false; justification:left; style:normal; text-spelling:none;", 
+        "enableBrailleContext": true, 
+        "brailleFlashTime": 5000, 
+        "presentTimeFormat": "%X", 
+        "speechServerFactory": "speechdispatcherfactory", 
+        "mouseDwellDelay": 0, 
+        "wrappedStructuralNavigation": true, 
+        "enableBraille": false, 
+        "enableKeyEcho": false, 
+        "enablePositionSpeaking": false, 
+        "brailleLinkIndicator": 192, 
+        "flashVerbosityLevel": 1, 
+        "findResultsMinimumLength": 4, 
+        "chatRoomHistories": false, 
+        "largeObjectTextLength": 75, 
+        "keyboardLayout": 1, 
+        "verbalizePunctuationStyle": 1, 
+        "spellcheckSpellError": true, 
+        "chatSpeakRoomName": false, 
+        "chatMessageVerbosity": 0, 
+        "messageVerbosityLevel": 1, 
+        "brailleAlignmentStyle": 0, 
+        "brailleSelectorIndicator": 192, 
+        "skipBlankCells": false, 
+        "speakCellCoordinates": true, 
+        "activeProfile": [
+            "Default", 
+            "default"
+        ], 
+        "enablePrintableKeys": true, 
+        "startingProfile": [
+            "Default", 
+            "default"
+        ], 
+        "orcaModifierKeys": [
+            "Insert", 
+            "KP_Insert"
+        ], 
+        "spellcheckSpellSuggestion": true, 
+        "enablePauseBreaks": true, 
+        "enableBrailleMonitor": true, 
+        "progressBarUpdateInterval": 10, 
+        "speechRequiredStateString": null, 
+        "enableDiacriticalKeys": false, 
+        "enableMouseReview": false, 
+        "enableActionKeys": true, 
+        "findResultsVerbosity": 2, 
+        "textAttributesBrailleIndicator": 0, 
+        "enableEchoByCharacter": false, 
+        "enableFlashMessages": true, 
+        "enableEchoBySentence": false, 
+        "brailleVerbosityLevel": 1, 
+        "voices": {
+            "system": {
+                "established": false
+            }, 
+            "uppercase": {
+                "average-pitch": 7.0
+            }, 
+            "hyperlink": {
+                "established": false
+            }, 
+            "default": {
+                "established": false
+            }
+        }, 
+        "profile": [
+            "Default", 
+            "default"
+        ], 
+        "brailleContractionTable": "", 
+        "speakCellHeaders": true, 
+        "flashIsPersistent": false, 
+        "speakCellSpan": true, 
+        "useColorNames": true, 
+        "enableContractedBraille": false, 
+        "spellcheckPresentContext": true, 
+        "enableProgressBarUpdates": true, 
+        "chatAnnounceBuddyTyping": false, 
+        "readTableCellRow": true, 
+        "brailleRolenameStyle": 1, 
+        "sayAllStyle": 1, 
+        "disableBrailleEOL": false, 
+        "speechVerbosityLevel": 1, 
+        "presentToolTips": false, 
+        "presentDateFormat": "%x", 
+        "structuralNavigationEnabled": true, 
+        "onlySpeakDisplayedText": false
+    }, 
+    "profiles": {
+        "default": {
+            "speechServerFactory": "orca.speechdispatcherfactory", 
+            "speechServerInfo": [
+                "Default Synthesizer", 
+                "default"
+            ], 
+            "brailleContractionTable": "/usr/share/liblouis/tables/en-us-g2.ctb", 
+            "pronunciations": {}, 
+            "profile": [
+                "Default", 
+                "default"
+            ], 
+            "voices": {
+                "system": {
+                    "established": false
+                }, 
+                "uppercase": {
+                    "average-pitch": 7.0
+                }, 
+                "hyperlink": {
+                    "average-pitch": 10.0
+                }, 
+                "default": {
+                    "established": false
+                }
+            }, 
+            "keybindings": {}
+        }
+    }
+}
diff --git a/test/keystrokes/helpcontent/struct_nav_paragraph.py 
b/test/keystrokes/helpcontent/struct_nav_paragraph.py
new file mode 100644
index 0000000..50013ca
--- /dev/null
+++ b/test/keystrokes/helpcontent/struct_nav_paragraph.py
@@ -0,0 +1,144 @@
+#!/usr/bin/python
+
+"""Test of learn mode."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(TypeAction("h"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+
+sequence.append(KeyComboAction("F1"))
+sequence.append(PauseAction(2000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("k"))
+sequence.append(utils.AssertPresentationAction(
+    "1. k for next link",
+    ["BRAILLE LINE:  ' Welcome to Orca'",
+     "     VISIBLE:  ' Welcome to Orca', cursor=2",
+     "BRAILLE LINE:  ' Welcome to Orca'",
+     "     VISIBLE:  ' Welcome to Orca', cursor=2",
+     "SPEECH OUTPUT: 'Welcome to Orca",
+     "Introducing the Orca screen reader",
+     " link'"]))
+
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(2000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("p"))
+sequence.append(utils.AssertPresentationAction(
+    "2. p for next paragraph",
+    ["BRAILLE LINE:  ' Orca is a free, open source, flexible, and extensible screen reader that provides 
access to the graphical desktop via speech and refreshable braille.'",
+     "     VISIBLE:  'Orca is a free, open source, fle', cursor=1",
+     "BRAILLE LINE:  ' Orca is a free, open source, flexible, and extensible screen reader that provides 
access to the graphical desktop via speech and refreshable braille.'",
+     "     VISIBLE:  'Orca is a free, open source, fle', cursor=1",
+     "SPEECH OUTPUT: 'Orca is a free, open source, flexible, and extensible screen reader that provides 
access to the graphical desktop via speech and refreshable braille.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("p"))
+sequence.append(utils.AssertPresentationAction(
+    "3. p for next paragraph",
+    ["BRAILLE LINE:  ' Orca works with applications and toolkits that support the Assistive Technology 
Service Provider Interface (AT-SPI), which is the primary assistive technology infrastructure for Linux and 
Solaris. Applications and toolkits supporting the AT-SPI include the GNOME Gtk+ toolkit, the Java platform's 
Swing toolkit, LibreOffice, Gecko, and WebKitGtk. AT-SPI support for the KDE Qt toolkit is being pursued.'",
+     "     VISIBLE:  'Orca works with applications and', cursor=1",
+     "BRAILLE LINE:  ' Orca works with applications and toolkits that support the Assistive Technology 
Service Provider Interface (AT-SPI), which is the primary assistive technology infrastructure for Linux and 
Solaris. Applications and toolkits supporting the AT-SPI include the GNOME Gtk+ toolkit, the Java platform's 
Swing toolkit, LibreOffice, Gecko, and WebKitGtk. AT-SPI support for the KDE Qt toolkit is being pursued.'",
+     "     VISIBLE:  'Orca works with applications and', cursor=1",
+     "SPEECH OUTPUT: 'Orca works with applications and toolkits that support the Assistive Technology 
Service Provider Interface (AT-SPI), which is the primary assistive technology infrastructure for Linux and 
Solaris. Applications and toolkits supporting the AT-SPI include the GNOME Gtk+ toolkit, the Java platform's 
Swing toolkit, LibreOffice, Gecko, and WebKitGtk. AT-SPI support for the KDE Qt toolkit is being pursued.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("p"))
+sequence.append(utils.AssertPresentationAction(
+    "4. p for next paragraph",
+    ["BRAILLE LINE:  ' To launch Orca:'",
+     "     VISIBLE:  ' To launch Orca:', cursor=2",
+     "BRAILLE LINE:  ' To launch Orca:'",
+     "     VISIBLE:  ' To launch Orca:', cursor=2",
+     "SPEECH OUTPUT: 'To launch Orca:'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("p"))
+sequence.append(utils.AssertPresentationAction(
+    "5. p for next paragraph",
+    ["BRAILLE LINE:  ' The method for configuring Orca to be launched automatically as your preferred screen 
reader will depend upon which desktop environment you use. For instance, in GNOME 3.x this option can be 
found in the Universal Access Control Center panel on the Seeing page.'",
+     "     VISIBLE:  'The method for configuring Orca ', cursor=1",
+     "BRAILLE LINE:  ' The method for configuring Orca to be launched automatically as your preferred screen 
reader will depend upon which desktop environment you use. For instance, in GNOME 3.x this option can be 
found in the Universal Access Control Center panel on the Seeing page.'",
+     "     VISIBLE:  'The method for configuring Orca ', cursor=1",
+     "SPEECH OUTPUT: 'The method for configuring Orca to be launched automatically as your preferred screen 
reader will depend upon which desktop environment you use. For instance, in GNOME 3.x this option can be 
found in the Universal Access Control Center panel on the Seeing page.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("p"))
+sequence.append(utils.AssertPresentationAction(
+    "6. p for next paragraph",
+    ["BRAILLE LINE:  ' To toggle Orca on and off in GNOME, press Super+Alt+S.'",
+     "     VISIBLE:  'To toggle Orca on and off in GNO', cursor=1",
+     "BRAILLE LINE:  ' To toggle Orca on and off in GNOME, press Super+Alt+S.'",
+     "     VISIBLE:  'To toggle Orca on and off in GNO', cursor=1",
+     "SPEECH OUTPUT: 'To toggle Orca on and off in GNOME, press Super+Alt+S.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("p"))
+sequence.append(utils.AssertPresentationAction(
+    "7. p for next paragraph",
+    ["BRAILLE LINE:  ' Type orca, along with any optional parameters, in a terminal window or within the Run 
dialog and then press Return.'",
+     "     VISIBLE:  'Type orca, along with any option', cursor=1",
+     "BRAILLE LINE:  ' Type orca, along with any optional parameters, in a terminal window or within the Run 
dialog and then press Return.'",
+     "     VISIBLE:  'Type orca, along with any option', cursor=1",
+     "SPEECH OUTPUT: 'Type orca, along with any optional parameters, in a terminal window or within the Run 
dialog and then press Return.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>p"))
+sequence.append(utils.AssertPresentationAction(
+    "8. shift+p for previous paragraph",
+    ["BRAILLE LINE:  ' To toggle Orca on and off in GNOME, press Super+Alt+S.'",
+     "     VISIBLE:  'To toggle Orca on and off in GNO', cursor=1",
+     "BRAILLE LINE:  ' To toggle Orca on and off in GNOME, press Super+Alt+S.'",
+     "     VISIBLE:  'To toggle Orca on and off in GNO', cursor=1",
+     "SPEECH OUTPUT: 'To toggle Orca on and off in GNOME, press Super+Alt+S.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>p"))
+sequence.append(utils.AssertPresentationAction(
+    "9. shift+p for previous paragraph",
+    ["BRAILLE LINE:  ' The method for configuring Orca to be launched automatically as your preferred screen 
reader will depend upon which desktop environment you use. For instance, in GNOME 3.x this option can be 
found in the Universal Access Control Center panel on the Seeing page.'",
+     "     VISIBLE:  'The method for configuring Orca ', cursor=1",
+     "BRAILLE LINE:  ' The method for configuring Orca to be launched automatically as your preferred screen 
reader will depend upon which desktop environment you use. For instance, in GNOME 3.x this option can be 
found in the Universal Access Control Center panel on the Seeing page.'",
+     "     VISIBLE:  'The method for configuring Orca ', cursor=1",
+     "SPEECH OUTPUT: 'The method for configuring Orca to be launched automatically as your preferred screen 
reader will depend upon which desktop environment you use. For instance, in GNOME 3.x this option can be 
found in the Universal Access Control Center panel on the Seeing page.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>p"))
+sequence.append(utils.AssertPresentationAction(
+    "10. shift+p for previous paragraph",
+    ["BRAILLE LINE:  ' To launch Orca:'",
+     "     VISIBLE:  ' To launch Orca:', cursor=2",
+     "BRAILLE LINE:  ' To launch Orca:'",
+     "     VISIBLE:  ' To launch Orca:', cursor=2",
+     "SPEECH OUTPUT: 'To launch Orca:'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>p"))
+sequence.append(utils.AssertPresentationAction(
+    "11. shift+p for previous paragraph",
+    ["BRAILLE LINE:  ' Orca works with applications and toolkits that support the Assistive Technology 
Service Provider Interface (AT-SPI), which is the primary assistive technology infrastructure for Linux and 
Solaris. Applications and toolkits supporting the AT-SPI include the GNOME Gtk+ toolkit, the Java platform's 
Swing toolkit, LibreOffice, Gecko, and WebKitGtk. AT-SPI support for the KDE Qt toolkit is being pursued.'",
+     "     VISIBLE:  'Orca works with applications and', cursor=1",
+     "BRAILLE LINE:  ' Orca works with applications and toolkits that support the Assistive Technology 
Service Provider Interface (AT-SPI), which is the primary assistive technology infrastructure for Linux and 
Solaris. Applications and toolkits supporting the AT-SPI include the GNOME Gtk+ toolkit, the Java platform's 
Swing toolkit, LibreOffice, Gecko, and WebKitGtk. AT-SPI support for the KDE Qt toolkit is being pursued.'",
+     "     VISIBLE:  'Orca works with applications and', cursor=1",
+     "SPEECH OUTPUT: 'Orca works with applications and toolkits that support the Assistive Technology 
Service Provider Interface (AT-SPI), which is the primary assistive technology infrastructure for Linux and 
Solaris. Applications and toolkits supporting the AT-SPI include the GNOME Gtk+ toolkit, the Java platform's 
Swing toolkit, LibreOffice, Gecko, and WebKitGtk. AT-SPI support for the KDE Qt toolkit is being pursued.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>p"))
+sequence.append(utils.AssertPresentationAction(
+    "12. shift+p for previous paragraph",
+    ["BRAILLE LINE:  ' Orca is a free, open source, flexible, and extensible screen reader that provides 
access to the graphical desktop via speech and refreshable braille.'",
+     "     VISIBLE:  'Orca is a free, open source, fle', cursor=1",
+     "BRAILLE LINE:  ' Orca is a free, open source, flexible, and extensible screen reader that provides 
access to the graphical desktop via speech and refreshable braille.'",
+     "     VISIBLE:  'Orca is a free, open source, fle', cursor=1",
+     "SPEECH OUTPUT: 'Orca is a free, open source, flexible, and extensible screen reader that provides 
access to the graphical desktop via speech and refreshable braille.'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/helpcontent/struct_nav_paragraph.settings 
b/test/keystrokes/helpcontent/struct_nav_paragraph.settings
new file mode 100644
index 0000000..75125f2
--- /dev/null
+++ b/test/keystrokes/helpcontent/struct_nav_paragraph.settings
@@ -0,0 +1,140 @@
+{
+    "pronunciations": {}, 
+    "keybindings": {}, 
+    "general": {
+        "sayAllOnLoad": false, 
+        "enableSpeech": true, 
+        "brailleRequiredStateString": null, 
+        "enableTutorialMessages": false, 
+        "enableFunctionKeys": true, 
+        "enabledSpokenTextAttributes": "size:; family-name:; weight:400; indent:0; underline:none; 
strikethrough:false; justification:left; style:normal; paragraph-style:; text-spelling:none;", 
+        "enableMnemonicSpeaking": false, 
+        "progressBarVerbosity": 1, 
+        "speakBlankLines": true, 
+        "speechServerInfo": null, 
+        "enableSpeechIndentation": false, 
+        "speakMultiCaseStringsAsWords": false, 
+        "enableNavigationKeys": false, 
+        "speakSpreadsheetCoordinates": true, 
+        "enableEchoByWord": false, 
+        "enableModifierKeys": true, 
+        "enabledBrailledTextAttributes": "size:; family-name:; weight:400; indent:0; underline:none; 
strikethrough:false; justification:left; style:normal; text-spelling:none;", 
+        "enableBrailleContext": true, 
+        "brailleFlashTime": 5000, 
+        "presentTimeFormat": "%X", 
+        "speechServerFactory": "speechdispatcherfactory", 
+        "mouseDwellDelay": 0, 
+        "wrappedStructuralNavigation": true, 
+        "enableBraille": false, 
+        "enableKeyEcho": false, 
+        "enablePositionSpeaking": false, 
+        "brailleLinkIndicator": 192, 
+        "flashVerbosityLevel": 1, 
+        "findResultsMinimumLength": 4, 
+        "chatRoomHistories": false, 
+        "largeObjectTextLength": 75, 
+        "keyboardLayout": 1, 
+        "verbalizePunctuationStyle": 1, 
+        "spellcheckSpellError": true, 
+        "chatSpeakRoomName": false, 
+        "chatMessageVerbosity": 0, 
+        "messageVerbosityLevel": 1, 
+        "brailleAlignmentStyle": 0, 
+        "brailleSelectorIndicator": 192, 
+        "skipBlankCells": false, 
+        "speakCellCoordinates": true, 
+        "activeProfile": [
+            "Default", 
+            "default"
+        ], 
+        "enablePrintableKeys": true, 
+        "startingProfile": [
+            "Default", 
+            "default"
+        ], 
+        "orcaModifierKeys": [
+            "Insert", 
+            "KP_Insert"
+        ], 
+        "spellcheckSpellSuggestion": true, 
+        "enablePauseBreaks": true, 
+        "enableBrailleMonitor": true, 
+        "progressBarUpdateInterval": 10, 
+        "speechRequiredStateString": null, 
+        "enableDiacriticalKeys": false, 
+        "enableMouseReview": false, 
+        "enableActionKeys": true, 
+        "findResultsVerbosity": 2, 
+        "textAttributesBrailleIndicator": 0, 
+        "enableEchoByCharacter": false, 
+        "enableFlashMessages": true, 
+        "enableEchoBySentence": false, 
+        "brailleVerbosityLevel": 1, 
+        "voices": {
+            "system": {
+                "established": false
+            }, 
+            "uppercase": {
+                "average-pitch": 7.0
+            }, 
+            "hyperlink": {
+                "established": false
+            }, 
+            "default": {
+                "established": false
+            }
+        }, 
+        "profile": [
+            "Default", 
+            "default"
+        ], 
+        "brailleContractionTable": "", 
+        "speakCellHeaders": true, 
+        "flashIsPersistent": false, 
+        "speakCellSpan": true, 
+        "useColorNames": true, 
+        "enableContractedBraille": false, 
+        "spellcheckPresentContext": true, 
+        "enableProgressBarUpdates": true, 
+        "chatAnnounceBuddyTyping": false, 
+        "readTableCellRow": true, 
+        "brailleRolenameStyle": 1, 
+        "sayAllStyle": 1, 
+        "disableBrailleEOL": false, 
+        "speechVerbosityLevel": 1, 
+        "presentToolTips": false, 
+        "presentDateFormat": "%x", 
+        "structuralNavigationEnabled": true, 
+        "onlySpeakDisplayedText": false
+    }, 
+    "profiles": {
+        "default": {
+            "speechServerFactory": "orca.speechdispatcherfactory", 
+            "speechServerInfo": [
+                "Default Synthesizer", 
+                "default"
+            ], 
+            "brailleContractionTable": "/usr/share/liblouis/tables/en-us-g2.ctb", 
+            "pronunciations": {}, 
+            "profile": [
+                "Default", 
+                "default"
+            ], 
+            "voices": {
+                "system": {
+                    "established": false
+                }, 
+                "uppercase": {
+                    "average-pitch": 7.0
+                }, 
+                "hyperlink": {
+                    "average-pitch": 10.0
+                }, 
+                "default": {
+                    "established": false
+                }
+            }, 
+            "keybindings": {}
+        }
+    }
+}


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