[orca] Create separate tests for gtk2 and gtk3



commit f20b8f458c260433922aa16794ec53c58ff6ed73
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Tue Jul 8 11:36:34 2014 -0400

    Create separate tests for gtk2 and gtk3

 test/keystrokes/gtk-demo/learn_mode.py             |   14 +-
 test/keystrokes/gtk-demo/role_accel_label.py       |   34 +--
 test/keystrokes/gtk-demo/role_alert.py             |   20 +-
 test/keystrokes/gtk-demo/role_check_box.py         |   14 +-
 test/keystrokes/gtk-demo/role_check_menu_item.py   |   29 +-
 test/keystrokes/gtk-demo/role_column_header.py     |   50 ++--
 test/keystrokes/gtk-demo/role_combo_box.py         |   55 ++--
 test/keystrokes/gtk-demo/role_combo_box2.py        |   19 +-
 test/keystrokes/gtk-demo/role_dialog.py            |   14 +-
 test/keystrokes/gtk-demo/role_drawing_area.py      |   11 +-
 test/keystrokes/gtk-demo/role_icon.py              |   10 +-
 test/keystrokes/gtk-demo/role_label.py             |   66 ++--
 test/keystrokes/gtk-demo/role_menu.py              |   62 +---
 test/keystrokes/gtk-demo/role_page_tab.py          |   26 +--
 test/keystrokes/gtk-demo/role_push_button.py       |   22 +-
 test/keystrokes/gtk-demo/role_radio_button.py      |   23 +-
 test/keystrokes/gtk-demo/role_spin_button.py       |   30 +-
 test/keystrokes/gtk-demo/role_split_pane.py        |   32 +-
 test/keystrokes/gtk-demo/role_status_bar.py        |   18 +-
 test/keystrokes/gtk-demo/role_table.py             |   29 +-
 test/keystrokes/gtk-demo/role_text_multiline.py    |  112 +++---
 .../gtk-demo/role_text_multiline_flatreview.py     |  132 ++++----
 .../gtk-demo/role_text_multiline_navigation.py     |  154 +++-----
 .../gtk-demo/role_text_multiline_navigation2.py    |   36 +-
 test/keystrokes/gtk-demo/role_toggle_button.py     |   23 +-
 test/keystrokes/gtk-demo/role_toolbar.py           |   58 ++--
 test/keystrokes/gtk-demo/role_tooltip.py           |   10 +-
 test/keystrokes/gtk-demo/role_tree_table.py        |   39 +-
 test/keystrokes/gtk-demo/role_window.py            |    8 +-
 test/keystrokes/gtk-demo/spoken_indentation.py     |   52 ++--
 test/keystrokes/gtk3-demo/learn_mode.py            |   73 ++++
 test/keystrokes/gtk3-demo/role_accel_label.py      |   61 +++
 test/keystrokes/gtk3-demo/role_alert.py            |   80 ++++
 test/keystrokes/gtk3-demo/role_check_box.py        |   77 ++++
 test/keystrokes/gtk3-demo/role_check_menu_item.py  |   53 +++
 .../{gtk-demo => gtk3-demo}/role_color_chooser.py  |   49 ++--
 test/keystrokes/gtk3-demo/role_column_header.py    |   92 +++++
 test/keystrokes/gtk3-demo/role_combo_box.py        |  122 ++++++
 test/keystrokes/gtk3-demo/role_combo_box2.py       |   66 ++++
 test/keystrokes/gtk3-demo/role_dialog.py           |   37 ++
 test/keystrokes/gtk3-demo/role_drawing_area.py     |   35 ++
 test/keystrokes/gtk3-demo/role_icon.py             |   66 ++++
 .../{gtk-demo => gtk3-demo}/role_info_bar.py       |   22 +-
 test/keystrokes/gtk3-demo/role_label.py            |  142 +++++++
 .../{gtk-demo => gtk3-demo}/role_listbox.py        |   13 +-
 test/keystrokes/gtk3-demo/role_menu.py             |   93 +++++
 test/keystrokes/gtk3-demo/role_page_tab.py         |   35 ++
 test/keystrokes/gtk3-demo/role_push_button.py      |   59 +++
 test/keystrokes/gtk3-demo/role_radio_button.py     |   59 +++
 .../role_radio_menu_item.py                        |   11 +-
 test/keystrokes/gtk3-demo/role_spin_button.py      |   76 ++++
 test/keystrokes/gtk3-demo/role_split_pane.py       |   51 +++
 test/keystrokes/gtk3-demo/role_status_bar.py       |   37 ++
 test/keystrokes/gtk3-demo/role_table.py            |   71 ++++
 test/keystrokes/gtk3-demo/role_text_multiline.py   |  220 +++++++++++
 .../gtk3-demo/role_text_multiline_flatreview.py    |  345 +++++++++++++++++
 .../gtk3-demo/role_text_multiline_navigation.py    |  388 ++++++++++++++++++++
 .../gtk3-demo/role_text_multiline_navigation2.py   |  143 +++++++
 test/keystrokes/gtk3-demo/role_toggle_button.py    |   52 +++
 test/keystrokes/gtk3-demo/role_toolbar.py          |   70 ++++
 test/keystrokes/gtk3-demo/role_tooltip.py          |   46 +++
 test/keystrokes/gtk3-demo/role_tree_table.py       |  137 +++++++
 test/keystrokes/gtk3-demo/role_window.py           |   21 +
 test/keystrokes/gtk3-demo/spoken_indentation.py    |  296 +++++++++++++++
 .../gtk3-demo/spoken_indentation.settings          |  177 +++++++++
 65 files changed, 3862 insertions(+), 715 deletions(-)
---
diff --git a/test/keystrokes/gtk-demo/learn_mode.py b/test/keystrokes/gtk-demo/learn_mode.py
index 1629dc9..aaefb1b 100644
--- a/test/keystrokes/gtk-demo/learn_mode.py
+++ b/test/keystrokes/gtk-demo/learn_mode.py
@@ -7,6 +7,10 @@ import utils
 
 sequence = MacroSequence()
 
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Printing"))
+sequence.append(KeyComboAction("Return"))
+
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(KeyComboAction("h"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
@@ -16,7 +20,7 @@ sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(TypeAction("f"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
-    "Orca command: check text attributes",
+    "1. Orca command: check text attributes",
     ["BRAILLE LINE:  'Reads the attributes associated with the current text character.'",
      "     VISIBLE:  'Reads the attributes associated ', cursor=0",
      "SPEECH OUTPUT: 'insert '",
@@ -28,7 +32,7 @@ sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(TypeAction(" "))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
-    "Orca command: bring up preferences",
+    "2. Orca command: bring up preferences",
     ["BRAILLE LINE:  'Learn mode.  Press escape to exit.'",
      "     VISIBLE:  'Learn mode.  Press escape to exi', cursor=0",
      "BRAILLE LINE:  'Displays the preferences configuration dialog.'",
@@ -40,7 +44,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_5"))
 sequence.append(utils.AssertPresentationAction(
-    "Orca command: flat review current word",
+    "3. Orca command: flat review current word",
     ["BRAILLE LINE:  'Learn mode.  Press escape to exit.'",
      "     VISIBLE:  'Learn mode.  Press escape to exi', cursor=0",
      "BRAILLE LINE:  'Speaks the current flat review item or word.'",
@@ -51,7 +55,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction("5"))
 sequence.append(utils.AssertPresentationAction(
-    "Regular typing command",
+    "4. Regular typing command",
     ["BRAILLE LINE:  'Learn mode.  Press escape to exit.'",
      "     VISIBLE:  'Learn mode.  Press escape to exi', cursor=0",
      "SPEECH OUTPUT: '5 '"]))
@@ -59,7 +63,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Escape"))
 sequence.append(utils.AssertPresentationAction(
-    "Exit learn mode",
+    "5. Exit learn mode",
     ["BRAILLE LINE:  'Exiting learn mode.'",
      "     VISIBLE:  'Exiting learn mode.', cursor=0",
      "SPEECH OUTPUT: 'escape '",
diff --git a/test/keystrokes/gtk-demo/role_accel_label.py b/test/keystrokes/gtk-demo/role_accel_label.py
index d4e17e4..41c4a52 100644
--- a/test/keystrokes/gtk-demo/role_accel_label.py
+++ b/test/keystrokes/gtk-demo/role_accel_label.py
@@ -8,49 +8,33 @@ import utils
 sequence = MacroSequence()
 
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(TypeAction("Application class"))
+sequence.append(TypeAction("Application main window"))
 sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Return"))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt>p"))
 sequence.append(utils.AssertPresentationAction(
-    "Initial menu and menu item",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Preferences menu'",
+    "1. Initial menu and menu item",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame Preferences menu'",
      "     VISIBLE:  'Preferences menu', cursor=1",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame < > Prefer Dark Theme check 
menu item'",
-     "     VISIBLE:  '< > Prefer Dark Theme check menu', cursor=1",
-     "SPEECH OUTPUT: 'Preferences menu'",
-     "SPEECH OUTPUT: 'Prefer Dark Theme check menu item not checked'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Down"))
-sequence.append(utils.AssertPresentationAction(
-    "Next menu item",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame < > Hide Titlebar when 
maximized check menu item'",
-     "     VISIBLE:  '< > Hide Titlebar when maximized', cursor=1",
-     "SPEECH OUTPUT: 'Hide Titlebar when maximized check menu item not checked'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Down"))
-sequence.append(utils.AssertPresentationAction(
-    "Next menu item",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Color menu'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame Color menu'",
      "     VISIBLE:  'Color menu', cursor=1",
+     "SPEECH OUTPUT: 'Preferences menu'",
      "SPEECH OUTPUT: 'Color menu'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Where Am I",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Color menu'",
+    "2. Where Am I",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame Color menu'",
      "     VISIBLE:  'Color menu', cursor=1",
-     "SPEECH OUTPUT: 'Application Class'",
+     "SPEECH OUTPUT: 'Application Window'",
      "SPEECH OUTPUT: 'frame'",
      "SPEECH OUTPUT: 'Preferences'",
      "SPEECH OUTPUT: 'menu'",
      "SPEECH OUTPUT: 'Color'",
-     "SPEECH OUTPUT: 'menu 3 of 5.'",
+     "SPEECH OUTPUT: 'menu 1 of 3.'",
      "SPEECH OUTPUT: 'C'"]))
 
 sequence.append(KeyComboAction("Escape"))
diff --git a/test/keystrokes/gtk-demo/role_alert.py b/test/keystrokes/gtk-demo/role_alert.py
index 393f885..9ef2b36 100644
--- a/test/keystrokes/gtk-demo/role_alert.py
+++ b/test/keystrokes/gtk-demo/role_alert.py
@@ -14,19 +14,7 @@ sequence.append(KeyComboAction("Return"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("space"))
 sequence.append(utils.AssertPresentationAction(
-    "Initial dialog",
-    ["BRAILLE LINE:  'gtk-demo application Dialogs frame'",
-     "     VISIBLE:  'Dialogs frame', cursor=1",
-     "BRAILLE LINE:  'gtk-demo application Dialogs frame Dialogs panel Message Dialog push button'",
-     "     VISIBLE:  'Message Dialog push button', cursor=1",
-     "SPEECH OUTPUT: 'Dialogs frame'",
-     "SPEECH OUTPUT: 'Dialogs panel'",
-     "SPEECH OUTPUT: 'Message Dialog push button'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("space"))
-sequence.append(utils.AssertPresentationAction(
-    "Information alert",
+    "1. Information alert",
     ["BRAILLE LINE:  'gtk-demo application Information alert'",
      "     VISIBLE:  'Information alert', cursor=1",
      "BRAILLE LINE:  'gtk-demo application Information alert OK push button'",
@@ -47,7 +35,7 @@ sequence.append(TypeAction("Again"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt>i"))
 sequence.append(utils.AssertPresentationAction(
-    "Entry 1",
+    "2. Entry 1",
     ["BRAILLE LINE:  'gtk-demo application Interactive Dialog dialog'",
      "     VISIBLE:  'Interactive Dialog dialog', cursor=1",
      "BRAILLE LINE:  'gtk-demo application Interactive Dialog dialog Entry 1 Testing $l'",
@@ -58,7 +46,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "Entry 2",
+    "3. Entry 2",
     ["BRAILLE LINE:  'gtk-demo application Interactive Dialog dialog Entry 2 Again $l'",
      "     VISIBLE:  'Entry 2 Again $l', cursor=14",
      "BRAILLE LINE:  'gtk-demo application Interactive Dialog dialog Entry 2 Again $l'",
@@ -70,7 +58,7 @@ sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
-    "Title bar",
+    "4. Title bar",
     ["BRAILLE LINE:  'Interactive Dialog'",
      "     VISIBLE:  'Interactive Dialog', cursor=0",
      "SPEECH OUTPUT: 'Interactive Dialog'"]))
diff --git a/test/keystrokes/gtk-demo/role_check_box.py b/test/keystrokes/gtk-demo/role_check_box.py
index 0c2b2c0..cac2b46 100644
--- a/test/keystrokes/gtk-demo/role_check_box.py
+++ b/test/keystrokes/gtk-demo/role_check_box.py
@@ -11,11 +11,13 @@ sequence.append(KeyComboAction("<Control>f"))
 sequence.append(TypeAction("Paned Widgets"))
 sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "Tab to first checkbox",
+    "1. Tab to first checkbox",
     ["BRAILLE LINE:  'gtk-demo application Panes frame Horizontal panel < > Resize check box'",
      "     VISIBLE:  '< > Resize check box', cursor=1",
      "SPEECH OUTPUT: 'Horizontal panel'",
@@ -24,7 +26,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Where Am I",
+    "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'",
@@ -34,7 +36,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction(" "))
 sequence.append(utils.AssertPresentationAction(
-    "Toggle its state",
+    "3. Toggle its state",
     ["BRAILLE LINE:  'gtk-demo application Panes frame Horizontal panel <x> Resize check box'",
      "     VISIBLE:  '<x> Resize check box', cursor=1",
      "SPEECH OUTPUT: 'checked'"]))
@@ -42,7 +44,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Where Am I",
+    "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'",
@@ -52,7 +54,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction(" "))
 sequence.append(utils.AssertPresentationAction(
-    "Toggle its state back",
+    "5. Toggle its state back",
     ["BRAILLE LINE:  'gtk-demo application Panes frame Horizontal panel < > Resize check box'",
      "     VISIBLE:  '< > Resize check box', cursor=1",
      "SPEECH OUTPUT: 'not checked'"]))
@@ -64,7 +66,7 @@ sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "Tab to first checkbox in next panel",
+    "6. Tab to first checkbox in next panel",
     ["BRAILLE LINE:  'gtk-demo application Panes frame Vertical panel < > Resize check box'",
      "     VISIBLE:  '< > Resize check box', cursor=1",
      "SPEECH OUTPUT: 'Vertical panel'",
diff --git a/test/keystrokes/gtk-demo/role_check_menu_item.py 
b/test/keystrokes/gtk-demo/role_check_menu_item.py
index a5d8617..f74d9e1 100644
--- a/test/keystrokes/gtk-demo/role_check_menu_item.py
+++ b/test/keystrokes/gtk-demo/role_check_menu_item.py
@@ -8,42 +8,45 @@ sequence = MacroSequence()
 import utils
 
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(TypeAction("Application class"))
+sequence.append(TypeAction("Application main window"))
 sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("<Alt>p"))
+sequence.append(KeyComboAction("Down"))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Arrow to first check menu item - not checked",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame < > Hide Titlebar when 
maximized check menu item'",
-     "     VISIBLE:  '< > Hide Titlebar when maximized', cursor=1",
-     "SPEECH OUTPUT: 'Hide Titlebar when maximized check menu item not checked'"]))
+    "1. Arrow to check menu item - checked",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame <x> Bold check menu item(Ctrl+B)'",
+     "     VISIBLE:  '<x> Bold check menu item(Ctrl+B)', cursor=1",
+     "SPEECH OUTPUT: 'Bold check menu item checked Ctrl+B'"]))
 
 sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Escape"))
 sequence.append(KeyComboAction("<Alt>p"))
+sequence.append(KeyComboAction("Down"))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Arrow to first check menu item - checked",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame <x> Hide Titlebar when 
maximized check menu item'",
-     "     VISIBLE:  '<x> Hide Titlebar when maximized', cursor=1",
-     "SPEECH OUTPUT: 'Hide Titlebar when maximized check menu item checked'"]))
+    "2. Arrow to check menu item - not checked",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame < > Bold check menu item(Ctrl+B)'",
+     "     VISIBLE:  '< > Bold check menu item(Ctrl+B)', cursor=1",
+     "SPEECH OUTPUT: 'Bold check menu item not checked Ctrl+B'"]))
 
 sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Escape"))
 sequence.append(KeyComboAction("<Alt>p"))
+sequence.append(KeyComboAction("Down"))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Arrow to first check menu item - not checked",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame < > Hide Titlebar when 
maximized check menu item'",
-     "     VISIBLE:  '< > Hide Titlebar when maximized', cursor=1",
-     "SPEECH OUTPUT: 'Hide Titlebar when maximized check menu item not checked'"]))
+    "3. Arrow to check menu item - checked",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame <x> Bold check menu item(Ctrl+B)'",
+     "     VISIBLE:  '<x> Bold check menu item(Ctrl+B)', cursor=1",
+     "SPEECH OUTPUT: 'Bold check menu item checked Ctrl+B'"]))
 
 sequence.append(KeyComboAction("Escape"))
 sequence.append(KeyComboAction("<Alt>F4"))
diff --git a/test/keystrokes/gtk-demo/role_column_header.py b/test/keystrokes/gtk-demo/role_column_header.py
index 97b1c2b..824a853 100644
--- a/test/keystrokes/gtk-demo/role_column_header.py
+++ b/test/keystrokes/gtk-demo/role_column_header.py
@@ -8,6 +8,7 @@ import utils
 sequence = MacroSequence()
 
 sequence.append(KeyComboAction("End"))
+sequence.append(KeyComboAction("Up"))
 sequence.append(KeyComboAction("<Shift>Right"))
 sequence.append(KeyComboAction("Down"))
 sequence.append(KeyComboAction("Down"))
@@ -16,18 +17,15 @@ sequence.append(KeyComboAction("Return"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "Bug number column header",
-    ["BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Bug number column header < > Fixed? 
60482 Normal scrollable notebooks and hidden tabs  '",
-     "     VISIBLE:  '60482 Normal scrollable notebook', cursor=1",
-     "BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Bug number table column header'",
+    "1. Bug number column header",
+    ["BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Bug number table column header'",
      "     VISIBLE:  'Bug number table column header', cursor=1",
-     "SPEECH OUTPUT: 'Bug number column header 60482'",
      "SPEECH OUTPUT: 'Bug number table column header'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Severity column header",
+    "2. Severity column header",
     ["BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Severity table column header'",
      "     VISIBLE:  'Severity table column header', cursor=1",
      "SPEECH OUTPUT: 'Severity table column header'"]))
@@ -35,7 +33,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Description column header",
+    "3. Description column header",
     ["BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Description table column header'",
      "     VISIBLE:  'Description table column header', cursor=1",
      "SPEECH OUTPUT: 'Description table column header'"]))
@@ -43,49 +41,47 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Enter table",
-    ["BUG? - For some reason, the VISIBLE braille is not scrolling to the focused cell.",
-     "BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Fixed? column header < > Fixed? 
60482 Normal scrollable notebooks and hidden tabs  '",
+    "4. Enter table",
+    ["BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Description column header < > 
Fixed? 60482 Normal scrollable notebooks and hidden tabs '",
+     "     VISIBLE:  'scrollable notebooks and hidden ', cursor=1",
+     "BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Fixed? column header < > Fixed? 
60482 Normal scrollable notebooks and hidden tabs '",
      "     VISIBLE:  '< > Fixed? 60482 Normal scrollab', cursor=1",
-     "SPEECH OUTPUT: 'Fixed? column header Fixed? check box not checked 60482 Normal scrollable notebooks 
and hidden tabs image'"]))
-
-# GtkTreeView swallows this keypress (for all users; not just Orca users).
-sequence.append(KeyComboAction("Left"))
+     "SPEECH OUTPUT: 'Fixed? check box not checked 60482 Normal scrollable notebooks and hidden tabs'",
+     "SPEECH OUTPUT: 'Fixed? column header check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
 sequence.append(utils.AssertPresentationAction(
-    "Normal cell",
-    ["BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Severity column header < > Fixed? 
60482 Normal scrollable notebooks and hidden tabs  '",
+    "5. Normal cell",
+    ["BRAILLE LINE:  'gtk-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: 'Severity column header Normal'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Normal cell basic Where Am I",
-    ["BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Severity column header < > Fixed? 
60482 Normal scrollable notebooks and hidden tabs  '",
+    "6. Normal cell basic Where Am I",
+    ["BRAILLE LINE:  'gtk-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 5 row 1 of 14'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Normal cell detailed Where Am I",
-    ["BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Severity column header < > Fixed? 
60482 Normal scrollable notebooks and hidden tabs  '",
+    "7. Normal cell detailed Where Am I",
+    ["BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Severity column header < > Fixed? 
60482 Normal scrollable notebooks and hidden tabs '",
      "     VISIBLE:  'Normal scrollable notebooks and ', cursor=1",
-     "BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Severity column header < > Fixed? 
60482 Normal scrollable notebooks and hidden tabs  '",
+     "BRAILLE LINE:  'gtk-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 5 row 1 of 14'",
+     "SPEECH OUTPUT: 'table Severity table cell Normal column 3 of 5 row 1 of 14 Fixed? check box not 
checked 60482 Normal scrollable notebooks and hidden tabs'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
 sequence.append(utils.AssertPresentationAction(
-    "60482 cell",
-    ["BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Bug number column header < > Fixed? 
60482 Normal scrollable notebooks and hidden tabs  '",
+    "8. 60482 cell",
+    ["BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Bug number column header < > Fixed? 
60482 Normal scrollable notebooks and hidden tabs '",
      "     VISIBLE:  '60482 Normal scrollable notebook', cursor=1",
      "SPEECH OUTPUT: 'Bug number column header 60482'"]))
 
diff --git a/test/keystrokes/gtk-demo/role_combo_box.py b/test/keystrokes/gtk-demo/role_combo_box.py
index 19c40ae..d4b2331 100644
--- a/test/keystrokes/gtk-demo/role_combo_box.py
+++ b/test/keystrokes/gtk-demo/role_combo_box.py
@@ -14,21 +14,25 @@ sequence.append(KeyComboAction("Return"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction(" "))
 sequence.append(utils.AssertPresentationAction(
-    "Warning combo box item",
-    ["BRAILLE LINE:  'gtk-demo application Combo boxes frame'",
-     "     VISIBLE:  'Combo boxes frame', cursor=1",
-     "BRAILLE LINE:  'gtk-demo application Combo boxes frame Items with icons panel Warning combo box'",
-     "     VISIBLE:  'Warning combo box', cursor=1",
-     "SPEECH OUTPUT: 'Combo boxes frame'",
-     "SPEECH OUTPUT: 'Items with icons panel'",
-     "SPEECH OUTPUT: 'Warning combo box'"]))
+    "1. Warning combo box item",
+    ["BRAILLE LINE:  'gtk-demo application window'",
+     "     VISIBLE:  'gtk-demo application window', cursor=22",
+     "BRAILLE LINE:  'gtk-demo application Combo boxes frame Some stock icons panel  combo boxWarning 
Warning'",
+     "     VISIBLE:  'Warning', cursor=1",
+     "SPEECH OUTPUT: 'window'",
+     "SPEECH OUTPUT: 'Warning'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Warning combo box item Where Am I",
-    ["BRAILLE LINE:  'gtk-demo application Combo boxes frame Items with icons panel Warning combo box'",
-     "     VISIBLE:  'Warning combo box', cursor=1",
+    "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'"]))
@@ -36,33 +40,34 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "New combo box item",
-    ["BRAILLE LINE:  'gtk-demo application Combo boxes frame Items with icons panel  combo boxNew New'",
+    "3. New combo box item",
+    ["BRAILLE LINE:  'gtk-demo application Combo boxes frame Some stock icons panel  combo boxWarning New'",
      "     VISIBLE:  'New', cursor=1",
      "SPEECH OUTPUT: 'New'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "New combo box item Where Am I",
+    "4. New combo box item Where Am I",
     ["KNOWN ISSUE: We're a bit chatty here and have some spacing issues",
-     "BRAILLE LINE:  'gtk-demo application Combo boxes frame Items with icons panel  combo boxNew New'",
+     "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: 'Items with icons'",
+     "SPEECH OUTPUT: 'Some stock icons'",
      "SPEECH OUTPUT: 'panel'",
-     "SPEECH OUTPUT: 'New'",
+     "SPEECH OUTPUT: 'Warning'",
      "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'New'",
      "SPEECH OUTPUT: '3 of 5'"]))
 
+sequence.append(KeyComboAction("Escape"))
 sequence.append(KeyComboAction("Tab"))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "Editable text combo box",
+    "5. Editable text combo box",
     ["BRAILLE LINE:  'gtk-demo application Combo boxes frame Editable panel  $l'",
      "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'Editable panel'",
@@ -72,16 +77,16 @@ sequence.append(TypeAction("Fou"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction("r"))
 sequence.append(utils.AssertPresentationAction(
-    "Editable text combo box typing",
-    ["BRAILLE LINE:  'gtk-demo application Combo boxes frame Editable panel Four $l'",
-     "     VISIBLE:  'Four $l', cursor=5",
+    "6. Editable text combo box typing",
+    ["BRAILLE LINE:  'gtk-demo application Combo boxes frame Editable panel Fou $l'",
+     "     VISIBLE:  'Fou $l', cursor=5",
      "BRAILLE LINE:  'gtk-demo application Combo boxes frame Editable panel Four $l'",
      "     VISIBLE:  'Four $l', cursor=5"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Editable text combo box Where Am I",
+    "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'",
@@ -90,7 +95,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "Editable text combo box open button",
+    "8. Editable text combo box open button",
     ["BRAILLE LINE:  'gtk-demo application Combo boxes frame Editable panel Four $l combo box'",
      "     VISIBLE:  'Four $l combo box', cursor=5",
      "SPEECH OUTPUT: 'Four combo box'"]))
@@ -98,7 +103,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "Editable text combo box with selected text",
+    "9. Editable text combo box with selected text",
     ["BRAILLE LINE:  'gtk-demo application Combo boxes frame Editable panel Four $l'",
      "     VISIBLE:  'Four $l', cursor=5",
      "BRAILLE LINE:  'gtk-demo application Combo boxes frame Editable panel Four $l'",
@@ -108,7 +113,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Editable text combo box with selected text Where Am I",
+    "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'",
diff --git a/test/keystrokes/gtk-demo/role_combo_box2.py b/test/keystrokes/gtk-demo/role_combo_box2.py
index 4fd4576..6e49b1e 100644
--- a/test/keystrokes/gtk-demo/role_combo_box2.py
+++ b/test/keystrokes/gtk-demo/role_combo_box2.py
@@ -17,16 +17,16 @@ sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "Combo box",
-    ["BRAILLE LINE:  'gtk-demo application Print dialog Page Setup page tab Layout filler Only print: All 
sheets combo box'",
+    "1. Combo box",
+    ["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: All sheets combo box'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Where Am I",
-    ["BRAILLE LINE:  'gtk-demo application Print dialog Page Setup page tab Layout filler Only print: All 
sheets combo box'",
+    "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'",
@@ -37,23 +37,22 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Change selection",
-    ["BRAILLE LINE:  'gtk-demo application Print dialog Page Setup page tab Layout filler  combo boxOnly 
print: Even sheets Even sheets'",
+    "3. Change selection",
+    ["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: 'Even sheets'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Where Am I",
+    "4. Where Am I",
     ["KNOWN ISSUE: We're a bit chatty here and the space is off with the combo box",
-     "BRAILLE LINE:  'gtk-demo application Print dialog Page Setup page tab Layout filler  combo boxOnly 
print: Even sheets Even sheets'",
+     "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: 'Layout'",
-     "SPEECH OUTPUT: 'Only print: Even sheets'",
+     "SPEECH OUTPUT: 'Even sheets'",
      "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'Even sheets'",
      "SPEECH OUTPUT: '2 of 3'"]))
diff --git a/test/keystrokes/gtk-demo/role_dialog.py b/test/keystrokes/gtk-demo/role_dialog.py
index 1df7705..036c9b0 100644
--- a/test/keystrokes/gtk-demo/role_dialog.py
+++ b/test/keystrokes/gtk-demo/role_dialog.py
@@ -13,8 +13,13 @@ sequence.append(TypeAction("Expander"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Return"))
 sequence.append(utils.AssertPresentationAction(
-    "Dialog automatic reading",
-    ["KNOWN ISSUE: Depending on timing we present more than just the stuff below",
+    "1. Dialog automatic reading",
+    ["BRAILLE LINE:  'gtk-demo application window  $l'",
+     "     VISIBLE:  'gtk-demo application window  $l', cursor=29",
+     "BRAILLE LINE:  'gtk-demo application window  $l'",
+     "     VISIBLE:  'gtk-demo application window  $l', cursor=29",
+     "BRAILLE LINE:  'gtk-demo application window  $l'",
+     "     VISIBLE:  'gtk-demo application window  $l', cursor=29",
      "BRAILLE LINE:  'gtk-demo application GtkExpander dialog'",
      "     VISIBLE:  'GtkExpander dialog', cursor=1",
      "BRAILLE LINE:  'gtk-demo application GtkExpander dialog & y Details collapsed toggle button'",
@@ -22,13 +27,10 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'GtkExpander Expander demo. Click on the triangle for details.'",
      "SPEECH OUTPUT: 'Details toggle button collapsed'"]))
 
-sequence.append(KeyComboAction("Tab"))
-sequence.append(KeyComboAction("Tab"))
-
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Dialog Where Am I",
+    "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'",
diff --git a/test/keystrokes/gtk-demo/role_drawing_area.py b/test/keystrokes/gtk-demo/role_drawing_area.py
index 8c5f01e..dfc7593 100644
--- a/test/keystrokes/gtk-demo/role_drawing_area.py
+++ b/test/keystrokes/gtk-demo/role_drawing_area.py
@@ -15,18 +15,19 @@ sequence.append(KeyComboAction("Return"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_8"))
 sequence.append(utils.AssertPresentationAction(
-    "Flat review current line",
+    "1. Flat review current line",
     ["BRAILLE LINE:  'Checkerboard pattern $l'",
      "     VISIBLE:  'Checkerboard pattern $l', cursor=1",
      "SPEECH OUTPUT: 'Checkerboard pattern'"]))
 
+# Gtk+ 2 lacks the proper role.
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_9"))
 sequence.append(utils.AssertPresentationAction(
-    "Flat review next line",
-    ["BRAILLE LINE:  'drawing area $l'",
-     "     VISIBLE:  'drawing area $l', cursor=1",
-     "SPEECH OUTPUT: 'drawing area'"]))
+    "2. Flat review next line",
+    ["BRAILLE LINE:  'unknown $l'",
+     "     VISIBLE:  'unknown $l', cursor=1",
+     "SPEECH OUTPUT: 'unknown'"]))
 
 sequence.append(KeyComboAction("<Alt>F4"))
 
diff --git a/test/keystrokes/gtk-demo/role_icon.py b/test/keystrokes/gtk-demo/role_icon.py
index 3134c5c..b9f36c6 100644
--- a/test/keystrokes/gtk-demo/role_icon.py
+++ b/test/keystrokes/gtk-demo/role_icon.py
@@ -18,7 +18,7 @@ sequence.append(KeyComboAction("Return"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "bin icon",
+    "1. bin icon",
     ["BRAILLE LINE:  'gtk-demo application GtkIconView demo frame bin icon'",
      "     VISIBLE:  'bin icon', cursor=1",
      "SPEECH OUTPUT: 'bin icon'"]))
@@ -26,7 +26,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "bin icon Where Am I",
+    "2. bin icon Where Am I",
     ["BRAILLE LINE:  'gtk-demo application GtkIconView demo frame bin icon'",
      "     VISIBLE:  'bin icon', cursor=1",
      "SPEECH OUTPUT: 'Icon panel'",
@@ -36,7 +36,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "boot icon",
+    "3. boot icon",
     ["BRAILLE LINE:  'gtk-demo application GtkIconView demo frame boot icon'",
      "     VISIBLE:  'boot icon', cursor=1",
      "SPEECH OUTPUT: 'boot icon'"]))
@@ -44,7 +44,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>Left"))
 sequence.append(utils.AssertPresentationAction(
-    "icon selection",
+    "4. icon selection",
     ["BRAILLE LINE:  'gtk-demo application GtkIconView demo frame bin icon'",
      "     VISIBLE:  'bin icon', cursor=1",
      "SPEECH OUTPUT: 'bin icon'"]))
@@ -52,7 +52,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "icon selection Where Am I",
+    "5. icon selection Where Am I",
     ["BRAILLE LINE:  'gtk-demo application GtkIconView demo frame bin icon'",
      "     VISIBLE:  'bin icon', cursor=1",
      "SPEECH OUTPUT: 'Icon panel'",
diff --git a/test/keystrokes/gtk-demo/role_label.py b/test/keystrokes/gtk-demo/role_label.py
index eb7350b..1a7fb0e 100644
--- a/test/keystrokes/gtk-demo/role_label.py
+++ b/test/keystrokes/gtk-demo/role_label.py
@@ -10,27 +10,25 @@ sequence = MacroSequence()
 sequence.append(KeyComboAction("<Control>f"))
 sequence.append(TypeAction("Dialog and Message Boxes"))
 sequence.append(KeyComboAction("Return"))
-
-sequence.append(KeyComboAction("space"))
 sequence.append(KeyComboAction("space"))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "This message box label",
-    ["BRAILLE LINE:  'number of times: $l'",
-     "     VISIBLE:  'number of times: $l', cursor=17",
-     "BRAILLE LINE:  'number of times: $l'",
-     "     VISIBLE:  'number of times: $l', cursor=17",
+    "1. This message box label",
+    ["BRAILLE LINE:  'number of times:'",
+     "     VISIBLE:  'number of times:', cursor=17",
+     "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: selected label'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "This message box label Where Am I",
-    ["BRAILLE LINE:  'number of times: $l'",
-     "     VISIBLE:  'number of times: $l', cursor=17",
+    "2. This message box label Where Am I",
+    ["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'"]))
@@ -39,11 +37,11 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "This message box label Extended Where Am I",
-    ["BRAILLE LINE:  'number of times: $l'",
-     "     VISIBLE:  'number of times: $l', cursor=17",
-     "BRAILLE LINE:  'number of times: $l'",
-     "     VISIBLE:  'number of times: $l', cursor=17",
+    "3. This message box label Extended Where Am I",
+    ["BRAILLE LINE:  'number of times:'",
+     "     VISIBLE:  'number of times:', cursor=17",
+     "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'"]))
@@ -51,10 +49,10 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Home"))
 sequence.append(utils.AssertPresentationAction(
-    "Press Home to unselect the label and move to the first character'",
-    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following $l'",
+    "4. Press Home to unselect the label and move to the first character'",
+    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following'",
      "     VISIBLE:  'This message box has been popped', cursor=1",
-     "BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following $l'",
+     "BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following'",
      "     VISIBLE:  'This message box has been popped', cursor=1",
      "SPEECH OUTPUT: 'T'",
      "SPEECH OUTPUT: 'This message box has been popped up the following",
@@ -64,16 +62,16 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "This message box label caret movement to 'h'",
-    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following $l'",
+    "5. This message box label caret movement to 'h'",
+    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following'",
      "     VISIBLE:  'This message box has been popped', cursor=2",
      "SPEECH OUTPUT: 'h'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift><Control>Right"))
 sequence.append(utils.AssertPresentationAction(
-    "This message box label caret select 'his' of 'This'",
-    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following $l'",
+    "6. This message box label caret select 'his' of 'This'",
+    ["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: 'his'",
      "SPEECH OUTPUT: 'selected' voice=system"]))
@@ -81,8 +79,8 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "This message box label caret selection Where Am I",
-    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following $l'",
+    "7. This message box label caret selection Where Am I",
+    ["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:'",
@@ -92,10 +90,10 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "This message box label caret selection Extended Where Am I",
-    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following $l'",
+    "8. This message box label caret selection Extended Where Am I",
+    ["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",
-     "BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following $l'",
+     "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:'",
@@ -104,10 +102,10 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
 sequence.append(utils.AssertPresentationAction(
-    "Left Arrow to move to h unselecting his'",
-    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following $l'",
+    "9. Left Arrow to move to h unselecting his'",
+    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following'",
      "     VISIBLE:  'This message box has been popped', cursor=2",
-     "BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following $l'",
+     "BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following'",
      "     VISIBLE:  'This message box has been popped', cursor=2",
      "SPEECH OUTPUT: 'h'",
      "SPEECH OUTPUT: 'his'",
@@ -116,8 +114,8 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift><Control>Left"))
 sequence.append(utils.AssertPresentationAction(
-    "This message box label caret select 'T' in 'This'",
-    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following $l'",
+    "10. This message box label caret select 'T' in 'This'",
+    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following'",
      "     VISIBLE:  'This message box has been popped', cursor=1",
      "SPEECH OUTPUT: 'T' voice=uppercase",
      "SPEECH OUTPUT: 'selected' voice=system"]))
@@ -125,8 +123,8 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift><Control>Right"))
 sequence.append(utils.AssertPresentationAction(
-    "This message box label caret unselect 'T' and select rest of 'This'",
-    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following $l'",
+    "11. This message box label caret unselect 'T' and select rest of 'This'",
+    ["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: 'T'",
      "SPEECH OUTPUT: 'unselected' voice=system",
diff --git a/test/keystrokes/gtk-demo/role_menu.py b/test/keystrokes/gtk-demo/role_menu.py
index 8640a01..fde47fa 100644
--- a/test/keystrokes/gtk-demo/role_menu.py
+++ b/test/keystrokes/gtk-demo/role_menu.py
@@ -8,80 +8,50 @@ import utils
 sequence = MacroSequence()
 
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(TypeAction("Application class"))
+sequence.append(TypeAction("Application main window"))
 sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Return"))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt>p"))
 sequence.append(utils.AssertPresentationAction(
-    "Initial menu and menu item",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Preferences menu'",
+    "1. Initial menu and menu item",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame Preferences menu'",
      "     VISIBLE:  'Preferences menu', cursor=1",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame < > Prefer Dark Theme check 
menu item'",
-     "     VISIBLE:  '< > Prefer Dark Theme check menu', cursor=1",
-     "SPEECH OUTPUT: 'Preferences menu'",
-     "SPEECH OUTPUT: 'Prefer Dark Theme check menu item not checked'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Down"))
-sequence.append(utils.AssertPresentationAction(
-    "Next menu item",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame < > Hide Titlebar when 
maximized check menu item'",
-     "     VISIBLE:  '< > Hide Titlebar when maximized', cursor=1",
-     "SPEECH OUTPUT: 'Hide Titlebar when maximized check menu item not checked'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Down"))
-sequence.append(utils.AssertPresentationAction(
-    "Next menu item",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Color menu'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame Color menu'",
      "     VISIBLE:  'Color menu', cursor=1",
+     "SPEECH OUTPUT: 'Preferences menu'",
      "SPEECH OUTPUT: 'Color menu'"]))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(utils.AssertPresentationAction(
-    "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: 'C'"]))
-
-sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Get into Color menu",
-    ["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: 'Red not selected radio menu item Ctrl+R'"]))
+    "2. Get into Color menu",
+    ["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: 'Red check menu item checked Ctrl+R'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "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'",
+    "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: 'radio menu item not selected Ctrl+R 1 of 3.'",
+     "SPEECH OUTPUT: 'check menu item checked Ctrl+R 1 of 3.'",
      "SPEECH OUTPUT: 'R'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
 sequence.append(utils.AssertPresentationAction(
-    "Get out of Color menu",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Color menu'",
+    "4. Get out of Color menu",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame Color menu'",
      "     VISIBLE:  'Color menu', cursor=1",
      "SPEECH OUTPUT: 'Color menu'"]))
 
diff --git a/test/keystrokes/gtk-demo/role_page_tab.py b/test/keystrokes/gtk-demo/role_page_tab.py
index 536c8a7..5f3bf74 100644
--- a/test/keystrokes/gtk-demo/role_page_tab.py
+++ b/test/keystrokes/gtk-demo/role_page_tab.py
@@ -9,32 +9,12 @@ sequence = MacroSequence()
 
 sequence.append(KeyComboAction("<Control>f"))
 sequence.append(TypeAction("Printing"))
-
-sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Return"))
-sequence.append(utils.AssertPresentationAction(
-    "General page tab",
-    ["BRAILLE LINE:  'gtk-demo application Print dialog'",
-     "     VISIBLE:  'Print dialog', cursor=1",
-     "BRAILLE LINE:  'gtk-demo application Print dialog General page tab'",
-     "     VISIBLE:  'General page tab', cursor=1",
-     "SPEECH OUTPUT: 'Print Range Copies'",
-     "SPEECH OUTPUT: 'General page tab'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(utils.AssertPresentationAction(
-    "General page tab Where Am I",
-    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab'",
-     "     VISIBLE:  'General page tab', cursor=1",
-     "SPEECH OUTPUT: 'page tab list'",
-     "SPEECH OUTPUT: 'General'",
-     "SPEECH OUTPUT: 'page tab 1 of 5'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Page Setup page tab",
+    "1. Right Arrow to Page Setup page tab",
     ["BRAILLE LINE:  'gtk-demo application Print dialog Page Setup page tab'",
      "     VISIBLE:  'Page Setup page tab', cursor=1",
      "SPEECH OUTPUT: 'Page Setup page tab'"]))
@@ -42,12 +22,12 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Page Setup page tab Where Am I",
+    "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 5'"]))
+     "SPEECH OUTPUT: '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 d39ae0c..0ca04b5 100644
--- a/test/keystrokes/gtk-demo/role_push_button.py
+++ b/test/keystrokes/gtk-demo/role_push_button.py
@@ -12,31 +12,19 @@ sequence.append(TypeAction("Button Boxes"))
 sequence.append(KeyComboAction("Return"))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Return"))
-sequence.append(utils.AssertPresentationAction(
-    "OK push button",
-    ["BRAILLE LINE:  'gtk-demo application Button Boxes frame'",
-     "     VISIBLE:  'Button Boxes frame', cursor=1",
-     "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: 'Button Boxes frame'",
-     "SPEECH OUTPUT: 'Horizontal Button Boxes panel'",
-     "SPEECH OUTPUT: 'Spread panel'",
-     "SPEECH OUTPUT: 'OK push button."]))
-
-sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "OK push button Where Am I",
+    "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: 'push button.'",
+     "SPEECH OUTPUT: 'Alt+O'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "Cancel push button",
+    "2. Cancel push button",
     ["BRAILLE LINE:  'gtk-demo application Button Boxes frame Horizontal Button Boxes panel Spread panel 
Cancel push button'",
      "     VISIBLE:  'Cancel push button', cursor=1",
      "SPEECH OUTPUT: 'Cancel push button'"]))
@@ -46,7 +34,7 @@ sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "OK Edge button",
+    "3. OK Edge button",
     ["BRAILLE LINE:  'gtk-demo application Button Boxes frame Horizontal Button Boxes panel Edge panel OK 
push button'",
      "     VISIBLE:  'OK push button', cursor=1",
      "SPEECH OUTPUT: 'Edge panel'",
diff --git a/test/keystrokes/gtk-demo/role_radio_button.py b/test/keystrokes/gtk-demo/role_radio_button.py
index 5cdb9bc..a062a8d 100644
--- a/test/keystrokes/gtk-demo/role_radio_button.py
+++ b/test/keystrokes/gtk-demo/role_radio_button.py
@@ -10,23 +10,24 @@ sequence = MacroSequence()
 sequence.append(KeyComboAction("<Control>f"))
 sequence.append(TypeAction("Printing"))
 sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt>a"))
 sequence.append(utils.AssertPresentationAction(
-    "All Pages radio button",
-    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Range &=y All Pages radio button'",
+    "1. All Pages radio button",
+    ["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: 'Range'",
+     "SPEECH OUTPUT: 'General page tab'",
      "SPEECH OUTPUT: 'All Pages selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "All Pages radio button Where Am I",
-    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Range &=y All Pages radio button'",
+    "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: 'Range All Pages'",
+     "SPEECH OUTPUT: 'All Pages'",
      "SPEECH OUTPUT: 'radio button selected 1 of 3.'",
      "SPEECH OUTPUT: 'Alt+A'"]))
 
@@ -34,18 +35,18 @@ sequence.append(KeyComboAction("Down"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "Range radio button",
-    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Range &=y Pages: radio button'",
+    "3. Range 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: 'Pages: selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Range radio button Where Am I",
-    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Range &=y Pages: radio button'",
+    "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: 'Range Pages:'",
+     "SPEECH OUTPUT: 'Pages:'",
      "SPEECH OUTPUT: 'radio button selected 3 of 3.'",
      "SPEECH OUTPUT: 'Alt+E'",
      "SPEECH OUTPUT: 'Specify one or more page ranges,",
diff --git a/test/keystrokes/gtk-demo/role_spin_button.py b/test/keystrokes/gtk-demo/role_spin_button.py
index bf27f09..7402b44 100644
--- a/test/keystrokes/gtk-demo/role_spin_button.py
+++ b/test/keystrokes/gtk-demo/role_spin_button.py
@@ -14,19 +14,19 @@ sequence.append(KeyComboAction("Return"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt>s"))
 sequence.append(utils.AssertPresentationAction(
-    "Give focus to spin button",
-    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies filler Copies: 1 $l'",
+    "1. Give focus to spin button",
+    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies: 1 $l'",
      "     VISIBLE:  'Copies: 1 $l', cursor=10",
-     "BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies filler Copies: 1 $l'",
+     "BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies: 1 $l'",
      "     VISIBLE:  'Copies: 1 $l', cursor=10",
-     "SPEECH OUTPUT: 'Copies'",
+     "SPEECH OUTPUT: 'General page tab'",
      "SPEECH OUTPUT: 'Copies: 1 selected spin button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Where Am I",
-    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies filler Copies: 1 $l'",
+    "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'",
@@ -39,13 +39,13 @@ sequence.append(TypeAction("15"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "Increment value",
+    "3. Increment value",
     ["KNOWN ISSUE: We are double-presenting this",
-     "BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies filler Copies: 16 $l'",
+     "BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies: 16 $l'",
      "     VISIBLE:  'Copies: 16 $l', cursor=9",
-     "BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies filler Copies: 16 $l'",
+     "BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies: 16 $l'",
      "     VISIBLE:  'Copies: 16 $l', cursor=9",
-     "BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies filler Copies: 16 $l'",
+     "BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies: 16 $l'",
      "     VISIBLE:  'Copies: 16 $l', cursor=9",
      "SPEECH OUTPUT: '16'",
      "SPEECH OUTPUT: '16'"]))
@@ -53,18 +53,18 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Decrement value",
-    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies filler Copies: 15 $l'",
+    "4. Decrement value",
+    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies: 15 $l'",
      "     VISIBLE:  'Copies: 15 $l', cursor=9",
-     "BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies filler Copies: 15 $l'",
+     "BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies: 15 $l'",
      "     VISIBLE:  'Copies: 15 $l', cursor=9",
      "SPEECH OUTPUT: '15'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Caret navigation",
-    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies filler Copies: 15 $l'",
+    "5. Caret navigation",
+    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies: 15 $l'",
      "     VISIBLE:  'Copies: 15 $l', cursor=10",
      "SPEECH OUTPUT: '5'"]))
 
diff --git a/test/keystrokes/gtk-demo/role_split_pane.py b/test/keystrokes/gtk-demo/role_split_pane.py
index 9ad0e7c..2d7229b 100644
--- a/test/keystrokes/gtk-demo/role_split_pane.py
+++ b/test/keystrokes/gtk-demo/role_split_pane.py
@@ -15,34 +15,34 @@ sequence.append(KeyComboAction("Return"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("F8"))
 sequence.append(utils.AssertPresentationAction(
-    "Split pane",
-    ["BRAILLE LINE:  'gtk-demo application Panes frame 71 split pane'",
-     "     VISIBLE:  '71 split pane', cursor=1",
-     "SPEECH OUTPUT: 'split pane 71'"]))
+    "1. Split pane",
+    ["BRAILLE LINE:  'gtk-demo application Panes frame 60 split pane'",
+     "     VISIBLE:  '60 split pane', cursor=1",
+     "SPEECH OUTPUT: 'split pane 60'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Split pane increment value",
-    ["BRAILLE LINE:  'gtk-demo application Panes frame 72 split pane'",
-     "     VISIBLE:  '72 split pane', cursor=1",
-     "SPEECH OUTPUT: '72'"]))
+    "2. Split pane increment value",
+    ["BRAILLE LINE:  'gtk-demo application Panes frame 61 split pane'",
+     "     VISIBLE:  '61 split pane', cursor=1",
+     "SPEECH OUTPUT: '61'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Split pane Where Am I",
-    ["BRAILLE LINE:  'gtk-demo application Panes frame 72 split pane'",
-     "     VISIBLE:  '72 split pane', cursor=1",
-     "SPEECH OUTPUT: 'split pane 72'"]))
+    "3. Split pane Where Am I",
+    ["BRAILLE LINE:  'gtk-demo application Panes frame 61 split pane'",
+     "     VISIBLE:  '61 split pane', cursor=1",
+     "SPEECH OUTPUT: 'split pane 61'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
 sequence.append(utils.AssertPresentationAction(
-    "Split pane decrement value",
-    ["BRAILLE LINE:  'gtk-demo application Panes frame 71 split pane'",
-     "     VISIBLE:  '71 split pane', cursor=1",
-     "SPEECH OUTPUT: '71'"]))
+    "4. Split pane decrement value",
+    ["BRAILLE LINE:  'gtk-demo application Panes frame 60 split pane'",
+     "     VISIBLE:  '60 split pane', cursor=1",
+     "SPEECH OUTPUT: '60'"]))
 
 sequence.append(KeyComboAction("<Alt>F4"))
 
diff --git a/test/keystrokes/gtk-demo/role_status_bar.py b/test/keystrokes/gtk-demo/role_status_bar.py
index c5e29a6..8181303 100644
--- a/test/keystrokes/gtk-demo/role_status_bar.py
+++ b/test/keystrokes/gtk-demo/role_status_bar.py
@@ -8,7 +8,7 @@ import utils
 sequence = MacroSequence()
 
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(TypeAction("Application class"))
+sequence.append(TypeAction("Application main window"))
 sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Return"))
 
@@ -18,16 +18,16 @@ sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
-    "Status bar Where Am I",
-    ["BRAILLE LINE:  'Application Class'",
-     "     VISIBLE:  'Application Class', cursor=0",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame  $l'",
-     "     VISIBLE:  ' $l', cursor=1",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame  $l'",
-     "     VISIBLE:  ' $l', cursor=1",
+    "1. Status bar Where Am I",
+    ["BRAILLE LINE:  'Application Window'",
+     "     VISIBLE:  'Application Window', cursor=0",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame Open push button'",
+     "     VISIBLE:  'Open push button', cursor=1",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame Open push button'",
+     "     VISIBLE:  'Open push button', cursor=1",
      "BRAILLE LINE:  'Cursor at row 0 column 0 - 0 chars in document'",
      "     VISIBLE:  'Cursor at row 0 column 0 - 0 cha', cursor=0",
-     "SPEECH OUTPUT: 'Application Class'",
+     "SPEECH OUTPUT: 'Application Window'",
      "SPEECH OUTPUT: 'Cursor at row 0 column 0 - 0 chars in document'"]))
 
 sequence.append(KeyComboAction("<Alt>F4"))
diff --git a/test/keystrokes/gtk-demo/role_table.py b/test/keystrokes/gtk-demo/role_table.py
index 863bd82..937efeb 100644
--- a/test/keystrokes/gtk-demo/role_table.py
+++ b/test/keystrokes/gtk-demo/role_table.py
@@ -8,6 +8,7 @@ import utils
 sequence = MacroSequence()
 
 sequence.append(KeyComboAction("End"))
+sequence.append(KeyComboAction("Up"))
 sequence.append(KeyComboAction("<Shift>Right"))
 sequence.append(KeyComboAction("Down"))
 sequence.append(KeyComboAction("Return"))
@@ -15,25 +16,25 @@ sequence.append(KeyComboAction("Return"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Table Where Am I",
-    ["BRAILLE LINE:  'gtk-demo application Shopping list frame table Number column header 3 bottles of coke 
'",
-     "     VISIBLE:  '3 bottles of coke ', cursor=1",
+    "1. Table Where Am I",
+    ["BRAILLE LINE:  'gtk-demo application Shopping list frame table Number column header 3 bottles of 
coke'",
+     "     VISIBLE:  '3 bottles of coke', cursor=1",
      "SPEECH OUTPUT: 'table Number table cell 3 column 1 of 3 row 1 of 5'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Next row",
-    ["BRAILLE LINE:  'gtk-demo application Shopping list frame table Number column header 5 packages of 
noodles '",
-     "     VISIBLE:  '5 packages of noodles ', cursor=1",
+    "2. Next row",
+    ["BRAILLE LINE:  'gtk-demo application Shopping list frame table Number column header 5 packages of 
noodles'",
+     "     VISIBLE:  '5 packages of noodles', cursor=1",
      "SPEECH OUTPUT: '5 packages of noodles'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Table Where Am I (again)",
-    ["BRAILLE LINE:  'gtk-demo application Shopping list frame table Number column header 5 packages of 
noodles '",
-     "     VISIBLE:  '5 packages of noodles ', cursor=1",
+    "3. Table Where Am I (again)",
+    ["BRAILLE LINE:  'gtk-demo application Shopping list frame table Number column header 5 packages of 
noodles'",
+     "     VISIBLE:  '5 packages of noodles', cursor=1",
      "SPEECH OUTPUT: 'table Number table cell 5 column 1 of 3 row 2 of 5'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -41,7 +42,7 @@ sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(KeyComboAction("F11"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
-    "Turn row reading off",
+    "4. Turn row reading off",
     ["BRAILLE LINE:  'Speak cell'",
      "     VISIBLE:  'Speak cell', cursor=0",
      "SPEECH OUTPUT: 'Speak cell'"]))
@@ -49,9 +50,9 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Table Right to the Product column in the packages of noodles row",
-    ["BRAILLE LINE:  'gtk-demo application Shopping list frame table Number column header 5 packages of 
noodles '",
-     "     VISIBLE:  '5 packages of noodles ', cursor=1",
+    "5. Table Right to the Product column in the packages of noodles row",
+    ["BRAILLE LINE:  'gtk-demo application Shopping list frame table Number column header 5 packages of 
noodles'",
+     "     VISIBLE:  '5 packages of noodles', cursor=1",
      "BRAILLE LINE:  'gtk-demo application Shopping list frame table Product column header packages of 
noodles table cell'",
      "     VISIBLE:  'packages of noodles table cell', cursor=1",
      "SPEECH OUTPUT: 'Product column header packages of noodles'"]))
@@ -59,7 +60,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "Table up to bottles of coke",
+    "6. Table up to bottles of coke",
     ["BRAILLE LINE:  'gtk-demo application Shopping list frame table Product column header bottles of coke 
table cell'",
      "     VISIBLE:  'bottles of coke table cell', cursor=1",
      "SPEECH OUTPUT: 'bottles of coke'"]))
diff --git a/test/keystrokes/gtk-demo/role_text_multiline.py b/test/keystrokes/gtk-demo/role_text_multiline.py
index 33e5bf6..814381e 100644
--- a/test/keystrokes/gtk-demo/role_text_multiline.py
+++ b/test/keystrokes/gtk-demo/role_text_multiline.py
@@ -8,74 +8,74 @@ import utils
 sequence = MacroSequence()
 
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(TypeAction("Application class"))
-sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("Application main window"))
 sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Tab"))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction("This is a test."))
 sequence.append(KeyComboAction("Return"))
 sequence.append(utils.AssertPresentationAction(
-    "Typing",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame T $l'",
+    "1. Typing",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame T $l'",
      "     VISIBLE:  'T $l', cursor=2",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame T $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame T $l'",
      "     VISIBLE:  'T $l', cursor=2",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame Th $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame Th $l'",
      "     VISIBLE:  'Th $l', cursor=3",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame Th $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame Th $l'",
      "     VISIBLE:  'Th $l', cursor=3",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame Thi $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame Thi $l'",
      "     VISIBLE:  'Thi $l', cursor=4",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame Thi $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame Thi $l'",
      "     VISIBLE:  'Thi $l', cursor=4",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This $l'",
      "     VISIBLE:  'This $l', cursor=5",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This $l'",
      "     VISIBLE:  'This $l', cursor=5",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This  $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This  $l'",
      "     VISIBLE:  'This  $l', cursor=6",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This  $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This  $l'",
      "     VISIBLE:  'This  $l', cursor=6",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This i $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This i $l'",
      "     VISIBLE:  'This i $l', cursor=7",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This i $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This i $l'",
      "     VISIBLE:  'This i $l', cursor=7",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is $l'",
      "     VISIBLE:  'This is $l', cursor=8",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is $l'",
      "     VISIBLE:  'This is $l', cursor=8",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is  $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is  $l'",
      "     VISIBLE:  'This is  $l', cursor=9",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is  $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is  $l'",
      "     VISIBLE:  'This is  $l', cursor=9",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is a $l'",
      "     VISIBLE:  'This is a $l', cursor=10",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is a $l'",
      "     VISIBLE:  'This is a $l', cursor=10",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a  $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is a  $l'",
      "     VISIBLE:  'This is a  $l', cursor=11",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a  $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is a  $l'",
      "     VISIBLE:  'This is a  $l', cursor=11",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a t $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is a t $l'",
      "     VISIBLE:  'This is a t $l', cursor=12",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a t $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is a t $l'",
      "     VISIBLE:  'This is a t $l', cursor=12",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a te $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is a te $l'",
      "     VISIBLE:  'This is a te $l', cursor=13",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a te $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is a te $l'",
      "     VISIBLE:  'This is a te $l', cursor=13",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a tes $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is a tes $l'",
      "     VISIBLE:  'This is a tes $l', cursor=14",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a tes $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is a tes $l'",
      "     VISIBLE:  'This is a tes $l', cursor=14",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is a test $l'",
      "     VISIBLE:  'This is a test $l', cursor=15",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is a test $l'",
      "     VISIBLE:  'This is a test $l', cursor=15",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=16",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=16",
      "BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
@@ -87,8 +87,8 @@ sequence.append(TypeAction("Here is another test."))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Home"))
 sequence.append(utils.AssertPresentationAction(
-    "Navigate home",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+    "2. Navigate home",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=1",
      "SPEECH OUTPUT: 'This is a test.'"]))
 
@@ -98,14 +98,14 @@ sequence.append(KeyComboAction("Right"))
 sequence.append(KeyComboAction("Right"))
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Arrow to end of 'This'",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+    "3. Arrow to end of 'This'",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=2",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=3",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=4",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=5",
      "SPEECH OUTPUT: 'h'",
      "SPEECH OUTPUT: 'i'",
@@ -117,12 +117,12 @@ sequence.append(KeyComboAction("<Shift><Control>Right"))
 sequence.append(KeyComboAction("<Shift><Control>Right"))
 sequence.append(KeyComboAction("<Shift><Control>Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Select 'is a test'",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+    "4. Select 'is a test'",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=8",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=10",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=15",
      "SPEECH OUTPUT: ' is'",
      "SPEECH OUTPUT: 'selected'",
@@ -134,8 +134,8 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift><Control>Left"))
 sequence.append(utils.AssertPresentationAction(
-    "Unselect 'test'",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+    "5. Unselect 'test'",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=11",
      "SPEECH OUTPUT: 'test'",
      "SPEECH OUTPUT: 'unselected'"]))
@@ -143,8 +143,8 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Where Am I",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+    "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 '",
@@ -153,7 +153,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Shift Down",
+    "7. Shift Down",
     ["BRAILLE LINE:  'Here is another test. $l'",
      "     VISIBLE:  'Here is another test. $l', cursor=10",
      "SPEECH OUTPUT: 'test.",
@@ -163,7 +163,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>End"))
 sequence.append(utils.AssertPresentationAction(
-    "Shift End",
+    "8. Shift End",
     ["BRAILLE LINE:  'Here is another test. $l'",
      "     VISIBLE:  'Here is another test. $l', cursor=22",
      "SPEECH OUTPUT: 'nother test.'",
@@ -172,7 +172,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Basic Where Am I multiline selection",
+    "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'",
@@ -184,7 +184,7 @@ sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Detailed Where Am I multiline selection",
+    "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'",
@@ -195,10 +195,10 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Home"))
 sequence.append(utils.AssertPresentationAction(
-    "Navigate home",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+    "11. Navigate home",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=1",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=1",
      "SPEECH OUTPUT: 'This is a test.'",
      "SPEECH OUTPUT: ' is a test.",
@@ -208,7 +208,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Add"))
 sequence.append(utils.AssertPresentationAction(
-    "SayAll",
+    "12. SayAll",
     ["SPEECH OUTPUT: 'This is a test.",
      "'",
      "SPEECH OUTPUT: 'Here is another test.'"]))
diff --git a/test/keystrokes/gtk-demo/role_text_multiline_flatreview.py 
b/test/keystrokes/gtk-demo/role_text_multiline_flatreview.py
index d28c9e1..5959af0 100644
--- a/test/keystrokes/gtk-demo/role_text_multiline_flatreview.py
+++ b/test/keystrokes/gtk-demo/role_text_multiline_flatreview.py
@@ -8,9 +8,9 @@ import utils
 sequence = MacroSequence()
 
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(TypeAction("Application class"))
-sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("Application main window"))
 sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Tab"))
 
 sequence.append(TypeAction("This is a test. "))
 sequence.append(KeyComboAction("Return"))
@@ -28,7 +28,7 @@ sequence.append(KeyComboAction("Down"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Subtract"))
 sequence.append(utils.AssertPresentationAction(
-    "KP_Subtract to enter flat review",
+    "1. KP_Subtract to enter flat review",
     ["BRAILLE LINE:  'Entering flat review.'",
      "     VISIBLE:  'Entering flat review.', cursor=0",
      "BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
@@ -39,7 +39,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_8"))
 sequence.append(utils.AssertPresentationAction(
-    "KP_8 to flat review 'PLEASE DO NOT PANIC.'",
+    "2. KP_8 to flat review 'PLEASE DO NOT PANIC.'",
     ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
      "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
      "SPEECH OUTPUT: 'PLEASE DO NOT PANIC.",
@@ -48,7 +48,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_5"))
 sequence.append(utils.AssertPresentationAction(
-    "KP_5 to flat review 'PLEASE'",
+    "3. KP_5 to flat review 'PLEASE'",
     ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
      "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
      "SPEECH OUTPUT: 'PLEASE'"]))
@@ -56,7 +56,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_2"))
 sequence.append(utils.AssertPresentationAction(
-    "KP_2 to flat review 'P'",
+    "4. KP_2 to flat review 'P'",
     ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
      "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
      "SPEECH OUTPUT: 'P'"]))
@@ -67,7 +67,7 @@ sequence.append(KeyComboAction("Down"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_5"))
 sequence.append(utils.AssertPresentationAction(
-    "KP_5 to flat review 'This'",
+    "5. KP_5 to flat review 'This'",
     ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=1",
      "SPEECH OUTPUT: 'This'"]))
@@ -76,13 +76,13 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_5"))
 sequence.append(KeyComboAction("KP_5"))
 sequence.append(utils.AssertPresentationAction(
-    "KP_5 2X to spell 'This'",
+    "6. KP_5 2X to spell 'This'",
     ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=1",
      "BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=1",
      "SPEECH OUTPUT: 'This'",
-     "SPEECH OUTPUT: 'T' voice=uppercase",
+     "SPEECH OUTPUT: 'T'",
      "SPEECH OUTPUT: 'h'",
      "SPEECH OUTPUT: 'i'",
      "SPEECH OUTPUT: 's'"]))
@@ -92,7 +92,7 @@ sequence.append(KeyComboAction("KP_5"))
 sequence.append(KeyComboAction("KP_5"))
 sequence.append(KeyComboAction("KP_5"))
 sequence.append(utils.AssertPresentationAction(
-    "KP_5 3X to military spell 'This'",
+    "7. KP_5 3X to military spell 'This'",
     ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=1",
      "BRAILLE LINE:  'This is only a test. $l'",
@@ -100,7 +100,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=1",
      "SPEECH OUTPUT: 'This'",
-     "SPEECH OUTPUT: 'T' voice=uppercase",
+     "SPEECH OUTPUT: 'T'",
      "SPEECH OUTPUT: 'h'",
      "SPEECH OUTPUT: 'i'",
      "SPEECH OUTPUT: 's'",
@@ -112,7 +112,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_8"))
 sequence.append(utils.AssertPresentationAction(
-    "KP_8 to flat review 'This is only a test.'",
+    "8. KP_8 to flat review 'This is only a test.'",
     ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=1",
      "SPEECH OUTPUT: 'This is only a test.",
@@ -122,42 +122,41 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_8"))
 sequence.append(KeyComboAction("KP_8"))
 sequence.append(utils.AssertPresentationAction(
-    "KP_8 2X to spell 'This is only a test.'",
+    "9. KP_8 2X to spell 'This is only a test.'",
     ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=1",
      "BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=1",
      "SPEECH OUTPUT: 'This is only a test.",
      "'",
-     "SPEECH OUTPUT: 'T' voice=uppercase",
+     "SPEECH OUTPUT: 'T'",
      "SPEECH OUTPUT: 'h'",
      "SPEECH OUTPUT: 'i'",
      "SPEECH OUTPUT: 's'",
-     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 'space'",
      "SPEECH OUTPUT: 'i'",
      "SPEECH OUTPUT: 's'",
-     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 'space'",
      "SPEECH OUTPUT: 'o'",
      "SPEECH OUTPUT: 'n'",
      "SPEECH OUTPUT: 'l'",
      "SPEECH OUTPUT: 'y'",
-     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 'space'",
      "SPEECH OUTPUT: 'a'",
-     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 'space'",
      "SPEECH OUTPUT: 't'",
      "SPEECH OUTPUT: 'e'",
      "SPEECH OUTPUT: 's'",
      "SPEECH OUTPUT: 't'",
-     "SPEECH OUTPUT: '.'",
-     "SPEECH OUTPUT: '",
-     "'"]))
+     "SPEECH OUTPUT: 'dot'",
+     "SPEECH OUTPUT: 'newline'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_8"))
 sequence.append(KeyComboAction("KP_8"))
 sequence.append(KeyComboAction("KP_8"))
 sequence.append(utils.AssertPresentationAction(
-    "KP_8 3X to military spell 'This is only a test.'",
+    "10. KP_8 3X to military spell 'This is only a test.'",
     ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=1",
      "BRAILLE LINE:  'This is only a test. $l'",
@@ -166,28 +165,27 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'This is only a test. $l', cursor=1",
      "SPEECH OUTPUT: 'This is only a test.",
      "'",
-     "SPEECH OUTPUT: 'T' voice=uppercase",
+     "SPEECH OUTPUT: 'T'",
      "SPEECH OUTPUT: 'h'",
      "SPEECH OUTPUT: 'i'",
      "SPEECH OUTPUT: 's'",
-     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 'space'",
      "SPEECH OUTPUT: 'i'",
      "SPEECH OUTPUT: 's'",
-     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 'space'",
      "SPEECH OUTPUT: 'o'",
      "SPEECH OUTPUT: 'n'",
      "SPEECH OUTPUT: 'l'",
      "SPEECH OUTPUT: 'y'",
-     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 'space'",
      "SPEECH OUTPUT: 'a'",
-     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 'space'",
      "SPEECH OUTPUT: 't'",
      "SPEECH OUTPUT: 'e'",
      "SPEECH OUTPUT: 's'",
      "SPEECH OUTPUT: 't'",
-     "SPEECH OUTPUT: '.'",
-     "SPEECH OUTPUT: '",
-     "'",
+     "SPEECH OUTPUT: 'dot'",
+     "SPEECH OUTPUT: 'newline'",
      "SPEECH OUTPUT: 'tango' voice=uppercase",
      "SPEECH OUTPUT: 'hotel'",
      "SPEECH OUTPUT: 'india'",
@@ -214,7 +212,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_2"))
 sequence.append(utils.AssertPresentationAction(
-    "KP_2 to flat review 'T'",
+    "11. KP_2 to flat review 'T'",
     ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=1",
      "SPEECH OUTPUT: 'T'"]))
@@ -223,7 +221,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_2"))
 sequence.append(KeyComboAction("KP_2"))
 sequence.append(utils.AssertPresentationAction(
-    "KP_2 2X to military spell 'T'",
+    "12. KP_2 2X to military spell 'T'",
     ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=1",
      "BRAILLE LINE:  'This is only a test. $l'",
@@ -234,7 +232,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_6"))
 sequence.append(utils.AssertPresentationAction(
-    "KP_6 to flat review 'is'",
+    "13. KP_6 to flat review 'is'",
     ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=6",
      "SPEECH OUTPUT: 'is'"]))
@@ -242,7 +240,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_7"))
 sequence.append(utils.AssertPresentationAction(
-    "KP_7 to flat review 'This is a test.' and the scrollbar",
+    "14. KP_7 to flat review 'This is a test.' and the scrollbar",
     ["BRAILLE LINE:  'This is a test.  vertical scroll bar 0% $l'",
      "     VISIBLE:  'This is a test.  vertical scroll', cursor=1",
      "SPEECH OUTPUT: 'This is a test. ",
@@ -251,34 +249,33 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_7"))
 sequence.append(utils.AssertPresentationAction(
-    "KP_7 to flat review toolbar",
-    ["KNOWN ISSUE: gtk-demo's toolbar widgets lack names that were present in the past",
-     "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'"]))
+    "15. KP_7 to flat review toolbar",
+    ["BRAILLE LINE:  'Open & y toggle button Quit panel GTK! $l'",
+     "     VISIBLE:  'Open & y toggle button Quit pane', cursor=1",
+     "SPEECH OUTPUT: 'Open not pressed toggle button Quit panel GTK!'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_7"))
 sequence.append(utils.AssertPresentationAction(
-    "KP_7 to flat review menu",
-    ["BRAILLE LINE:  'Preferences Help $l'",
-     "     VISIBLE:  'Preferences Help $l', cursor=1",
-     "SPEECH OUTPUT: 'Preferences Help'"]))
+    "16. KP_7 to flat review menu",
+    ["BRAILLE LINE:  'File Preferences Help $l'",
+     "     VISIBLE:  'File Preferences Help $l', cursor=1",
+     "SPEECH OUTPUT: 'File Preferences Help'"]))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_5"))
+sequence.append(KeyComboAction("KP_6"))
 sequence.append(utils.AssertPresentationAction(
-    "KP_5 to flat review 'Preferences'",
-    ["BRAILLE LINE:  'Preferences Help $l'",
-     "     VISIBLE:  'Preferences Help $l', cursor=1",
+    "17. KP_6 to flat review 'Preferences'",
+    ["BRAILLE LINE:  'File Preferences Help $l'",
+     "     VISIBLE:  'File Preferences Help $l', cursor=6",
      "SPEECH OUTPUT: 'Preferences'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_6"))
 sequence.append(utils.AssertPresentationAction(
-    "KP_6 to flat review 'Help'",
-    ["BRAILLE LINE:  'Preferences Help $l'",
-     "     VISIBLE:  'Preferences Help $l', cursor=13",
+    "18. KP_6 to flat review 'Help'",
+    ["BRAILLE LINE:  'File Preferences Help $l'",
+     "     VISIBLE:  'File Preferences Help $l', cursor=18",
      "SPEECH OUTPUT: 'Help'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -286,7 +283,7 @@ sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(KeyComboAction("KP_5"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
-    "Insert+KP_5 to flat review 'Help' accessible",
+    "19. Insert+KP_5 to flat review 'Help' accessible",
     ["SPEECH OUTPUT: 'Help'",
      "SPEECH OUTPUT: 'menu'"]))
 
@@ -295,9 +292,9 @@ sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(KeyComboAction("KP_9"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
-    "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 c', cursor=2",
+    "20. Insert+KP_9 to flat review end",
+    ["BRAILLE LINE:  'Cursor at row 1 column 0 - 60 chars in document $l'",
+     "     VISIBLE:  'ars in document $l', cursor=15",
      "SPEECH OUTPUT: 'Cursor at row 1 column 0 - 60 chars in document'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -305,36 +302,35 @@ sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(KeyComboAction("KP_7"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
-    "Insert+KP_7 to flat review home",
-    ["BRAILLE LINE:  'Preferences Help $l'",
-     "     VISIBLE:  'Preferences Help $l', cursor=1",
-     "SPEECH OUTPUT: 'Preferences Help'"]))
+    "21. Insert+KP_7 to flat review home",
+    ["BRAILLE LINE:  'File Preferences Help $l'",
+     "     VISIBLE:  'File Preferences Help $l', cursor=1",
+     "SPEECH OUTPUT: 'File Preferences Help'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(KeyComboAction("KP_6"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
-    "Insert+KP_6 to flat review below",
-    ["KNOWN ISSUE: gtk-demo's toolbar widgets lack names that were present in the past",
-     "BRAILLE LINE:  'push button push button panel push button $l'",
-     "     VISIBLE:  'push button push button panel pu', cursor=1",
-     "SPEECH OUTPUT: 'push button'"]))
+    "22. Insert+KP_6 to flat review below",
+    ["BRAILLE LINE:  'Open & y toggle button Quit panel GTK! $l'",
+     "     VISIBLE:  'Open & y toggle button Quit pane', cursor=1",
+     "SPEECH OUTPUT: 'Open'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(KeyComboAction("KP_4"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
-    "Insert+KP_4 to flat review above",
-    ["BRAILLE LINE:  'Preferences Help $l'",
-     "     VISIBLE:  'Preferences Help $l', cursor=1",
-     "SPEECH OUTPUT: 'Preferences'"]))
+    "23. Insert+KP_4 to flat review above",
+    ["BRAILLE LINE:  'File Preferences Help $l'",
+     "     VISIBLE:  'File Preferences Help $l', cursor=1",
+     "SPEECH OUTPUT: 'File'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Subtract"))
 sequence.append(utils.AssertPresentationAction(
-    "KP_Subtract to exit flat review",
+    "24. KP_Subtract to exit flat review",
     ["BRAILLE LINE:  'Leaving flat review.'",
      "     VISIBLE:  'Leaving flat review.', cursor=0",
      "BRAILLE LINE:  'This is only a test. $l'",
diff --git a/test/keystrokes/gtk-demo/role_text_multiline_navigation.py 
b/test/keystrokes/gtk-demo/role_text_multiline_navigation.py
index b70abe5..386b222 100644
--- a/test/keystrokes/gtk-demo/role_text_multiline_navigation.py
+++ b/test/keystrokes/gtk-demo/role_text_multiline_navigation.py
@@ -8,9 +8,9 @@ import utils
 sequence = MacroSequence()
 
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(TypeAction("Application class"))
-sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("Application main window"))
 sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Tab"))
 
 sequence.append(TypeAction("This is a test. "))
 sequence.append(KeyComboAction("Return"))
@@ -39,7 +39,7 @@ sequence.append(TypeAction("in the wild."))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
 sequence.append(utils.AssertPresentationAction(
-    "Left once from end to '.' after 'wild'",
+    "1. Left once from end to '.' after 'wild'",
     ["BRAILLE LINE:  'in the wild. $l'",
      "     VISIBLE:  'in the wild. $l', cursor=12",
      "SPEECH OUTPUT: 'dot'"]))
@@ -47,7 +47,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
 sequence.append(utils.AssertPresentationAction(
-    "Left a second time to 'd' in 'wild'",
+    "2. Left a second time to 'd' in 'wild'",
     ["BRAILLE LINE:  'in the wild. $l'",
      "     VISIBLE:  'in the wild. $l', cursor=11",
      "SPEECH OUTPUT: 'd'"]))
@@ -55,7 +55,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
 sequence.append(utils.AssertPresentationAction(
-    "Left a third time to 'l' in 'wild'",
+    "3. Left a third time to 'l' in 'wild'",
     ["BRAILLE LINE:  'in the wild. $l'",
      "     VISIBLE:  'in the wild. $l', cursor=10",
      "SPEECH OUTPUT: 'l'"]))
@@ -63,7 +63,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
 sequence.append(utils.AssertPresentationAction(
-    "Ctrl+Left to beginning of 'wild'",
+    "4. Ctrl+Left to beginning of 'wild'",
     ["BRAILLE LINE:  'in the wild. $l'",
      "     VISIBLE:  'in the wild. $l', cursor=8",
      "SPEECH OUTPUT: 'wild.'"]))
@@ -71,7 +71,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
 sequence.append(utils.AssertPresentationAction(
-    "Ctrl+Left to beginning of 'the'",
+    "5. Ctrl+Left to beginning of 'the'",
     ["BRAILLE LINE:  'in the wild. $l'",
      "     VISIBLE:  'in the wild. $l', cursor=4",
      "SPEECH OUTPUT: 'the '"]))
@@ -79,7 +79,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
 sequence.append(utils.AssertPresentationAction(
-    "Ctrl+Left to beginning of 'in'",
+    "6. Ctrl+Left to beginning of 'in'",
     ["BRAILLE LINE:  'in the wild. $l'",
      "     VISIBLE:  'in the wild. $l', cursor=1",
      "SPEECH OUTPUT: 'in '"]))
@@ -87,7 +87,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
 sequence.append(utils.AssertPresentationAction(
-    "Ctrl+Left to beginning of 'time' at end of previous line",
+    "7. Ctrl+Left to beginning of 'time' at end of previous line",
     ["BRAILLE LINE:  'time in the lab and not enough time $l'",
      "     VISIBLE:  'time in the lab and not enough t', cursor=32",
      "SPEECH OUTPUT: 'newline'",
@@ -97,7 +97,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Home"))
 sequence.append(utils.AssertPresentationAction(
-    "Home to beginning of line",
+    "8. Home to beginning of line",
     ["BRAILLE LINE:  'time in the lab and not enough time $l'",
      "     VISIBLE:  'time in the lab and not enough t', cursor=1",
      "SPEECH OUTPUT: 't'"]))
@@ -105,7 +105,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("End"))
 sequence.append(utils.AssertPresentationAction(
-    "End to end of line",
+    "9. End to end of line",
     ["BRAILLE LINE:  'time in the lab and not enough time $l'",
      "     VISIBLE:  ' in the lab and not enough time ', cursor=32",
      "SPEECH OUTPUT: 'blank'"]))
@@ -113,15 +113,15 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Home"))
 sequence.append(utils.AssertPresentationAction(
-    "Ctrl+Home to beginning of document",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+    "10. Ctrl+Home to beginning of document",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame This is a test.  $l'",
      "     VISIBLE:  'This is a test.  $l', cursor=1",
      "SPEECH OUTPUT: 'This is a test. '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>End"))
 sequence.append(utils.AssertPresentationAction(
-    "Ctrl+End to end of document",
+    "11. Ctrl+End to end of document",
     ["BRAILLE LINE:  'in the wild. $l'",
      "     VISIBLE:  'in the wild. $l', cursor=13",
      "SPEECH OUTPUT: 'in the wild.'"]))
@@ -129,40 +129,40 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Home"))
 sequence.append(utils.AssertPresentationAction(
-    "Ctrl+Home back to beginning of document",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+    "12. Ctrl+Home back to beginning of document",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame This is a test.  $l'",
      "     VISIBLE:  'This is a test.  $l', cursor=1",
      "SPEECH OUTPUT: 'This is a test. '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Right once to 'h' in 'This'",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+    "13. Right once to 'h' in 'This'",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame This is a test.  $l'",
      "     VISIBLE:  'This is a test.  $l', cursor=2",
      "SPEECH OUTPUT: 'h'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Right a second time to 'i' in 'This'",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+    "14. Right a second time to 'i' in 'This'",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame This is a test.  $l'",
      "     VISIBLE:  'This is a test.  $l', cursor=3",
      "SPEECH OUTPUT: 'i'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Right a third time to 's' in 'This'",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+    "15. Right a third time to 's' in 'This'",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame This is a test.  $l'",
      "     VISIBLE:  'This is a test.  $l', cursor=4",
      "SPEECH OUTPUT: 's'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Ctrl+Right to end of 'This'",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+    "16. Ctrl+Right to end of 'This'",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame This is a test.  $l'",
      "     VISIBLE:  'This is a test.  $l', cursor=5",
      "SPEECH OUTPUT: 'newline'",
      "SPEECH OUTPUT: 'This '"]))
@@ -170,23 +170,23 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Ctrl+Right to end of 'is'",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+    "17. Ctrl+Right to end of 'is'",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame This is a test.  $l'",
      "     VISIBLE:  'This is a test.  $l', cursor=8",
      "SPEECH OUTPUT: 'is '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Ctrl+Right to end of 'a'",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+    "18. Ctrl+Right to end of 'a'",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame This is a test.  $l'",
      "     VISIBLE:  'This is a test.  $l', cursor=10",
      "SPEECH OUTPUT: 'a '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Down a line to 'n' in 'only'",
+    "19. Down a line to 'n' in 'only'",
     ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=10",
      "SPEECH OUTPUT: 'This is only a test.'"]))
@@ -194,7 +194,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("End"))
 sequence.append(utils.AssertPresentationAction(
-    "End of line",
+    "20. End of line",
     ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=21",
      "SPEECH OUTPUT: 'blank'"]))
@@ -202,7 +202,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Right to blank line",
+    "21. Right to blank line",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'blank'"]))
@@ -210,7 +210,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Right to beginning of 'PLEASE'",
+    "22. Right to beginning of 'PLEASE'",
     ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
      "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
      "SPEECH OUTPUT: 'P'"]))
@@ -218,7 +218,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Down to line with one space",
+    "23. Down to line with one space",
     ["BRAILLE LINE:  '  $l'",
      "     VISIBLE:  '  $l', cursor=1",
      "SPEECH OUTPUT: ' '"]))
@@ -226,7 +226,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "Back up to 'PLEASE DO NOT PANIC.'",
+    "24. Back up to 'PLEASE DO NOT PANIC.'",
     ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
      "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
      "SPEECH OUTPUT: 'PLEASE DO NOT PANIC.' voice=uppercase"]))
@@ -234,7 +234,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Ctrl+Right over PLEASE",
+    "25. Ctrl+Right over PLEASE",
     ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
      "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=7",
      "SPEECH OUTPUT: 'PLEASE '"]))
@@ -242,7 +242,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
 sequence.append(utils.AssertPresentationAction(
-    "Ctrl+Left over PLEASE",
+    "26. Ctrl+Left over PLEASE",
     ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
      "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
      "SPEECH OUTPUT: 'PLEASE '"]))
@@ -252,14 +252,14 @@ sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(TypeAction("f"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
-    "Insert+f for text attributes",
+    "27. Insert+f for text attributes",
     ["SPEECH OUTPUT: 'size 11' voice=system",
      "SPEECH OUTPUT: 'family name Cantarell' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
 sequence.append(utils.AssertPresentationAction(
-    "Left to blank line",
+    "28. Left to blank line",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'blank'"]))
@@ -267,7 +267,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Right to beginning of 'PLEASE' again",
+    "29. Right to beginning of 'PLEASE' again",
     ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
      "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
      "SPEECH OUTPUT: 'P'"]))
@@ -275,7 +275,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "Up to blank line",
+    "30. Up to blank line",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'blank'"]))
@@ -283,71 +283,47 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Home"))
 sequence.append(utils.AssertPresentationAction(
-    "Ctrl+Home to beginning of document",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+    "31. Ctrl+Home to beginning of document",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame This is a test.  $l'",
      "     VISIBLE:  'This is a test.  $l', cursor=1",
      "SPEECH OUTPUT: 'This is a test. '"]))
 
-# [[[NOTE: WDW - with orca.settings.asyncMode=False, which is what
-# the regression tests use, the Delete will not give the same output
-# as what we see when orca.settings.asyncMode=True (the normal 
-# operating behavior).  See the NOTE in default.py:onTextDeleted 
-# for an explanation. We include the synchronous output here.]]]
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Delete"))
 sequence.append(utils.AssertPresentationAction(
-    "Delete right 'T' in 'This'",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame his is a test.  $l'",
+    "32. Delete right 'T' in 'This'",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame his is a test.  $l'",
      "     VISIBLE:  'his is a test.  $l', cursor=1",
      "SPEECH OUTPUT: 'h'"]))
 
-# [[[NOTE: WDW - with orca.settings.asyncMode=False, which is what
-# the regression tests use, the Delete will not give the same output
-# as what we see when orca.settings.asyncMode=True (the normal 
-# operating behavior).  See the NOTE in default.py:onTextDeleted 
-# for an explanation. We include the synchronous output here.]]]
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Delete"))
 sequence.append(utils.AssertPresentationAction(
-    "Delete right 'h' in 'his'",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame is is a test.  $l'",
+    "33. Delete right 'h' in 'his'",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame is is a test.  $l'",
      "     VISIBLE:  'is is a test.  $l', cursor=1",
      "SPEECH OUTPUT: 'i'"]))
 
-# [[[NOTE: WDW - with orca.settings.asyncMode=False, which is what
-# the regression tests use, the Delete will not give the same output
-# as what we see when orca.settings.asyncMode=True (the normal 
-# operating behavior).  See the NOTE in default.py:onTextDeleted 
-# for an explanation. We include the synchronous output here.]]]
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Delete"))
 sequence.append(utils.AssertPresentationAction(
-    "Ctrl+Delete right remaining 'is' of 'This'",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame  is a test.  $l'",
+    "34. Ctrl+Delete right remaining 'is' of 'This'",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame  is a test.  $l'",
      "     VISIBLE:  ' is a test.  $l', cursor=1",
      "SPEECH OUTPUT: 'space'"]))
 
-# [[[NOTE: WDW - with orca.settings.asyncMode=False, which is what
-# the regression tests use, the Delete will not give the same output
-# as what we see when orca.settings.asyncMode=True (the normal 
-# operating behavior).  See the NOTE in default.py:onTextDeleted 
-# for an explanation. We include the synchronous output here.]]]
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Delete"))
 sequence.append(utils.AssertPresentationAction(
-    "Ctrl+Delete right 'is'",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame  a test.  $l'",
+    "35. Ctrl+Delete right 'is'",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame  a test.  $l'",
      "     VISIBLE:  ' a test.  $l', cursor=1",
      "SPEECH OUTPUT: 'space'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Down a line",
+    "36. Down a line",
     ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=1",
      "SPEECH OUTPUT: 'This is only a test.'"]))
@@ -355,7 +331,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("End"))
 sequence.append(utils.AssertPresentationAction(
-    "End of line",
+    "37. End of line",
     ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=21",
      "SPEECH OUTPUT: 'blank'"]))
@@ -363,45 +339,37 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("BackSpace"))
 sequence.append(utils.AssertPresentationAction(
-    "BackSpace '.' after 'test'",
+    "38. BackSpace '.' after 'test'",
     ["BRAILLE LINE:  'This is only a test $l'",
      "     VISIBLE:  'This is only a test $l', cursor=20",
+     "BRAILLE LINE:  'This is only a test $l'",
+     "     VISIBLE:  'This is only a test $l', cursor=20",
      "SPEECH OUTPUT: 'dot'"]))
 
-# [[[NOTE: WDW - with orca.settings.asyncMode=False, which is what
-# the regression tests use, the BackSpace will not give the same output
-# as what we see when orca.settings.asyncMode=True (the normal 
-# operating behavior).  See the NOTE in default.py:onTextDeleted 
-# for an explanation. We include the synchronous output here.]]]
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>BackSpace"))
 sequence.append(utils.AssertPresentationAction(
-    "Ctrl+BackSpace to delete 'this'",
+    "39. Ctrl+BackSpace to delete 'this'",
     ["BRAILLE LINE:  'This is only a  $l'",
      "     VISIBLE:  'This is only a  $l', cursor=16",
      "BRAILLE LINE:  'This is only a  $l'",
      "     VISIBLE:  'This is only a  $l', cursor=16",
      "SPEECH OUTPUT: 'test'"]))
 
-# [[[NOTE: WDW - with orca.settings.asyncMode=False, which is what
-# the regression tests use, the BackSpace will not give the same output
-# as what we see when orca.settings.asyncMode=True (the normal 
-# operating behavior).  See the NOTE in default.py:onTextDeleted 
-# for an explanation. We include the synchronous output here.]]]
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>BackSpace"))
 sequence.append(utils.AssertPresentationAction(
-    "Ctrl+BackSpace to delete 'a'",
+    "40. Ctrl+BackSpace to delete 'a'",
     ["BRAILLE LINE:  'This is only  $l'",
      "     VISIBLE:  'This is only  $l', cursor=14",
+     "BRAILLE LINE:  'This is only  $l'",
+     "     VISIBLE:  'This is only  $l', cursor=14",
      "SPEECH OUTPUT: 'a '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
 sequence.append(utils.AssertPresentationAction(
-    "Ctrl+Left to beginning of 'only'",
+    "41. Ctrl+Left to beginning of 'only'",
     ["BRAILLE LINE:  'This is only  $l'",
      "     VISIBLE:  'This is only  $l', cursor=9",
      "SPEECH OUTPUT: 'newline'",
@@ -412,7 +380,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
 sequence.append(utils.AssertPresentationAction(
-    "Ctrl+Left to beginning of 'is'",
+    "42. Ctrl+Left to beginning of 'is'",
     ["BRAILLE LINE:  'This is only  $l'",
      "     VISIBLE:  'This is only  $l', cursor=6",
      "SPEECH OUTPUT: 'is '"]))
diff --git a/test/keystrokes/gtk-demo/role_text_multiline_navigation2.py 
b/test/keystrokes/gtk-demo/role_text_multiline_navigation2.py
index 2e42411..f4b1807 100644
--- a/test/keystrokes/gtk-demo/role_text_multiline_navigation2.py
+++ b/test/keystrokes/gtk-demo/role_text_multiline_navigation2.py
@@ -8,9 +8,9 @@ import utils
 sequence = MacroSequence()
 
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(TypeAction("Application class"))
-sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("Application main window"))
 sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Tab"))
 
 sequence.append(TypeAction("This is a test. "))
 sequence.append(KeyComboAction("Return"))
@@ -27,7 +27,7 @@ sequence.append(KeyComboAction("Right"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift><Control>Page_Up"))
 sequence.append(utils.AssertPresentationAction(
-    "Shift+Ctrl+Page_Up to select text to beginning of line",
+    "1. Shift+Ctrl+Page_Up to select text to beginning of line",
     ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=1",
      "SPEECH OUTPUT: 'line selected from start to previous cursor position'"]))
@@ -35,7 +35,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift><Control>Page_Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Shift+Ctrl+Page_Down to select text to end of line",
+    "2. Shift+Ctrl+Page_Down to select text to end of line",
     ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=21",
      "SPEECH OUTPUT: 'line selected to end from previous cursor position'"]))
@@ -43,8 +43,8 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>Up"))
 sequence.append(utils.AssertPresentationAction(
-    "Shift+Up to deselect some text and select some text above",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+    "3. Shift+Up to deselect some text and select some text above",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame This is a test.  $l'",
      "     VISIBLE:  'This is a test.  $l', cursor=17",
      "SPEECH OUTPUT: 'is only a test.'",
      "SPEECH OUTPUT: 'unselected' voice=system",
@@ -55,7 +55,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Shift+Down to deselect some text and select some text below",
+    "4. Shift+Down to deselect some text and select some text below",
     ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=21",
      "SPEECH OUTPUT: '",
@@ -67,7 +67,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Page_Up"))
 sequence.append(utils.AssertPresentationAction(
-    "Ctrl+Page_Up to beginning of line",
+    "5. Ctrl+Page_Up to beginning of line",
     ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=1",
      "BRAILLE LINE:  'This is only a test. $l'",
@@ -79,7 +79,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Page_Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Ctrl+Page_Down to end of line",
+    "6. Ctrl+Page_Down to end of line",
     ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=21",
      "SPEECH OUTPUT: 'This is only a test.'"]))
@@ -87,15 +87,15 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Page_Up"))
 sequence.append(utils.AssertPresentationAction(
-    "Page up",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+    "7. Page up",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame This is a test.  $l'",
      "     VISIBLE:  'This is a test.  $l', cursor=1",
      "SPEECH OUTPUT: 'This is a test. '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Page_Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Page down",
+    "8. Page down",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'blank'"]))
@@ -103,15 +103,15 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>Page_Up"))
 sequence.append(utils.AssertPresentationAction(
-    "Shift+Page_Up to select text",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+    "9. Shift+Page_Up to select text",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame This is a test.  $l'",
      "     VISIBLE:  'This is a test.  $l', cursor=1",
      "SPEECH OUTPUT: 'page selected to cursor position'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>Page_Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Shift+Page_Down to deselect text",
+    "10. Shift+Page_Down to deselect text",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
      "BRAILLE LINE:  ' $l'",
@@ -122,15 +122,15 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Page_Up"))
 sequence.append(utils.AssertPresentationAction(
-    "Page_Up",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+    "11. Page_Up",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame This is a test.  $l'",
      "     VISIBLE:  'This is a test.  $l', cursor=1",
      "SPEECH OUTPUT: 'This is a test. '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Add"))
 sequence.append(utils.AssertPresentationAction(
-    "KP_Add to do a SayAll",
+    "12. KP_Add to do a SayAll",
     ["SPEECH OUTPUT: 'This is a test. ",
      "'",
      "SPEECH OUTPUT: 'This is only a test.",
diff --git a/test/keystrokes/gtk-demo/role_toggle_button.py b/test/keystrokes/gtk-demo/role_toggle_button.py
index 9e2cb39..957f26d 100644
--- a/test/keystrokes/gtk-demo/role_toggle_button.py
+++ b/test/keystrokes/gtk-demo/role_toggle_button.py
@@ -11,13 +11,10 @@ sequence.append(KeyComboAction("<Control>f"))
 sequence.append(TypeAction("Expander"))
 sequence.append(KeyComboAction("Return"))
 
-sequence.append(KeyComboAction("Tab"))
-sequence.append(KeyComboAction("Tab"))
-
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Toggle button Where Am I",
+    "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'",
@@ -26,19 +23,15 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Return"))
 sequence.append(utils.AssertPresentationAction(
-    "Toggle button state changed to expanded",
-    ["KNOWN ISSUE: Here we are presenting both the former and new state",
-     "BRAILLE LINE:  'gtk-demo application GtkExpander dialog &=y Details collapsed toggle button'",
-     "     VISIBLE:  '&=y Details collapsed toggle but', cursor=1",
-     "BRAILLE LINE:  'gtk-demo application GtkExpander dialog &=y Details expanded toggle button'",
+    "2. Toggle button state changed to expanded",
+    ["BRAILLE LINE:  'gtk-demo application GtkExpander dialog &=y Details expanded toggle button'",
      "     VISIBLE:  '&=y Details expanded toggle butt', cursor=1",
-     "SPEECH OUTPUT: 'collapsed'",
      "SPEECH OUTPUT: 'expanded'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Toggle button pressed Where Am I",
+    "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'",
@@ -47,13 +40,9 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Return"))
 sequence.append(utils.AssertPresentationAction(
-    "Toggle button state changed to collapsed",
-    ["KNOWN ISSUE: Here we are presenting both the former and new state",
-     "BRAILLE LINE:  'gtk-demo application GtkExpander dialog & y Details expanded toggle button'",
-     "     VISIBLE:  '& y Details expanded toggle butt', cursor=1",
-     "BRAILLE LINE:  'gtk-demo application GtkExpander dialog & y Details collapsed toggle button'",
+    "4. Toggle button state changed to collapsed",
+    ["BRAILLE LINE:  'gtk-demo application GtkExpander dialog & y Details collapsed toggle button'",
      "     VISIBLE:  '& y Details collapsed toggle but', cursor=1",
-     "SPEECH OUTPUT: 'expanded'",
      "SPEECH OUTPUT: 'collapsed'"]))
 
 sequence.append(KeyComboAction("<Alt>F4"))
diff --git a/test/keystrokes/gtk-demo/role_toolbar.py b/test/keystrokes/gtk-demo/role_toolbar.py
index d734919..d38415e 100644
--- a/test/keystrokes/gtk-demo/role_toolbar.py
+++ b/test/keystrokes/gtk-demo/role_toolbar.py
@@ -8,60 +8,52 @@ import utils
 sequence = MacroSequence()
 
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(TypeAction("Application class"))
-sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("Application main window"))
 sequence.append(KeyComboAction("Return"))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Control>Tab"))
-sequence.append(utils.AssertPresentationAction(
-    "Push button initial focus",
-    ["KNOWN ISSUE: The widgets on the toolbar no longer have accessible names, so Orca cannot present them.",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame push button'",
-     "     VISIBLE:  'push button', cursor=1",
-     "SPEECH OUTPUT: 'push button'"]))
-
-sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Where Am I",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame push button'",
-     "     VISIBLE:  'push button', cursor=1",
-     "SPEECH OUTPUT: 'tool bar push button'"]))
+    "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'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Open triangle toggle button",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame & y Menu toggle button'",
-     "     VISIBLE:  '& y Menu toggle button', cursor=1",
-     "SPEECH OUTPUT: 'Menu toggle button not pressed'"]))
+    "2. Open triangle toggle button",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame & y toggle button'",
+     "     VISIBLE:  '& y toggle button', cursor=1",
+     "SPEECH OUTPUT: 'toggle button not pressed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "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'"]))
+    "3. Open triangle toggle button Where Am I",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame & y toggle button'",
+     "     VISIBLE:  '& y toggle button', cursor=1",
+     "SPEECH OUTPUT: 'tool bar toggle button not pressed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Next push button",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame push button'",
-     "     VISIBLE:  'push button', cursor=1",
-     "SPEECH OUTPUT: 'push button'"]))
+    "4. Next push button",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame Quit push button'",
+     "     VISIBLE:  'Quit push button', cursor=1",
+     "SPEECH OUTPUT: 'Quit push button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Where Am I",
-    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame push button'",
-     "     VISIBLE:  'push button', cursor=1",
-     "SPEECH OUTPUT: 'tool bar push button'"]))
+    "6. 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'"]))
 
 sequence.append(KeyComboAction("<Alt>F4"))
 
diff --git a/test/keystrokes/gtk-demo/role_tooltip.py b/test/keystrokes/gtk-demo/role_tooltip.py
index 930f315..94d1880 100644
--- a/test/keystrokes/gtk-demo/role_tooltip.py
+++ b/test/keystrokes/gtk-demo/role_tooltip.py
@@ -17,7 +17,7 @@ sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>F1"))
 sequence.append(utils.AssertPresentationAction(
-    "Show tooltip",
+    "1. Show tooltip",
     ["BRAILLE LINE:  'Specify one or more page ranges,",
      " e.g. 1-3,7,11'",
      "     VISIBLE:  'Specify one or more page ranges,', cursor=0",
@@ -27,9 +27,13 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>F1"))
 sequence.append(utils.AssertPresentationAction(
-    "Hide tooltip",
-    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Range &=y Pages: radio button'",
+    "2. Hide tooltip",
+    ["KNOWN ISSUE: Too much context",
+     "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'"]))
 
diff --git a/test/keystrokes/gtk-demo/role_tree_table.py b/test/keystrokes/gtk-demo/role_tree_table.py
index d65718c..5091923 100644
--- a/test/keystrokes/gtk-demo/role_tree_table.py
+++ b/test/keystrokes/gtk-demo/role_tree_table.py
@@ -8,25 +8,28 @@ import utils
 sequence = MacroSequence()
 
 sequence.append(KeyComboAction("End"))
+sequence.append(KeyComboAction("Up"))
 sequence.append(KeyComboAction("<Shift>Right"))
 sequence.append(KeyComboAction("Down"))
 sequence.append(KeyComboAction("Down"))
 sequence.append(KeyComboAction("Down"))
 sequence.append(KeyComboAction("Return"))
 
-sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Down"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "January cell focus",
+    "1. January cell focus",
     ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Holiday column header 
January expanded < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
      "     VISIBLE:  'January expanded < > Alex < > Ha', cursor=1",
-     "SPEECH OUTPUT: 'tree table'",
-     "SPEECH OUTPUT: 'Holiday column header January expanded 3 items Alex check box not checked Havoc check 
box not checked Tim check box not checked Owen check box not checked Dave check box not checked tree level 
1'"]))
+     "SPEECH OUTPUT: 'January expanded 3 items Alex check box not checked Havoc check box not checked Tim 
check box not checked Owen check box not checked Dave check box not checked tree level 1'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "January cell basic Where Am I",
+    "2. January cell basic Where Am I",
     ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Holiday column header 
January expanded < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
      "     VISIBLE:  'January expanded < > Alex < > Ha', cursor=1",
      "SPEECH OUTPUT: 'tree table Holiday table cell January column 1 of 6 row 1 of 53 expanded tree level 
1'"]))
@@ -35,7 +38,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "January cell detailed Where Am I",
+    "3. January cell detailed Where Am I",
     ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Holiday column header 
January expanded < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
      "     VISIBLE:  'January expanded < > Alex < > Ha', cursor=1",
      "BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Holiday column header 
January expanded < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
@@ -46,7 +49,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>Left"))
 sequence.append(utils.AssertPresentationAction(
-    "January cell collapsed",
+    "4. January cell collapsed",
     ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Holiday column header 
January collapsed < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
      "     VISIBLE:  'January collapsed < > Alex < > H', cursor=1",
      "SPEECH OUTPUT: 'collapsed'"]))
@@ -54,7 +57,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "January cell collapsed basic Where Am I",
+    "5. January cell collapsed basic Where Am I",
     ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Holiday column header 
January collapsed < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
      "     VISIBLE:  'January collapsed < > Alex < > H', cursor=1",
      "SPEECH OUTPUT: 'tree table Holiday table cell January column 1 of 6 row 1 of 50 collapsed tree level 
1'"]))
@@ -63,7 +66,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "January cell collapsed detailed Where Am I",
+    "6. January cell collapsed detailed Where Am I",
     ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Holiday column header 
January collapsed < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
      "     VISIBLE:  'January collapsed < > Alex < > H', cursor=1",
      "BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Holiday column header 
January collapsed < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
@@ -74,15 +77,15 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>Right"))
 sequence.append(utils.AssertPresentationAction(
-    "January cell expanded",
-   ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Holiday column header January 
expanded < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
+    "7. January cell expanded",
+    ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Holiday column header 
January expanded < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
     "     VISIBLE:  'January expanded < > Alex < > Ha', cursor=1",
-    "SPEECH OUTPUT: 'expanded 2 items'"]))
+    "SPEECH OUTPUT: 'expanded 3 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "New Year's Day cell",
+    "8. New Year's Day cell",
     ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Holiday column header New 
Years Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave TREE LEVEL 2'",
      "     VISIBLE:  'New Years Day <x> Alex <x> Havoc', cursor=1",
      "SPEECH OUTPUT: 'New Years Day Alex check box checked Havoc check box checked Tim check box checked 
Owen check box checked Dave check box not checked tree level 2'"]))
@@ -90,7 +93,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Alex checkbox cell",
+    "9. Alex checkbox cell",
     ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Alex column header New Years 
Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
      "     VISIBLE:  '<x> Alex <x> Havoc <x> Tim <x> O', cursor=1",
      "SPEECH OUTPUT: 'Alex column header check box checked'"]))
@@ -98,7 +101,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Alex checkbox cell basic Where Am I",
+    "10. Alex checkbox cell basic Where Am I",
     ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Alex column header New Years 
Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
      "     VISIBLE:  '<x> Alex <x> Havoc <x> Tim <x> O', cursor=1",
      "SPEECH OUTPUT: 'tree table Alex table cell check box checked column 2 of 6 row 2 of 53'"]))
@@ -107,7 +110,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Alex checkbox cell detailed Where Am I",
+    "11. Alex checkbox cell detailed Where Am I",
     ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Alex column header New Years 
Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
      "     VISIBLE:  '<x> Alex <x> Havoc <x> Tim <x> O', cursor=1",
      "BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Alex column header New Years 
Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
@@ -118,7 +121,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction(" "))
 sequence.append(utils.AssertPresentationAction(
-    "Alex checkbox cell unchecked",
+    "12. Alex checkbox cell unchecked",
     ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Alex column header New Years 
Day < > Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
      "     VISIBLE:  '< > Alex <x> Havoc <x> Tim <x> O', cursor=1",
      "SPEECH OUTPUT: 'not checked'"]))
@@ -126,7 +129,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction(" "))
 sequence.append(utils.AssertPresentationAction(
-    "Alex checkbox cell checked",
+    "13. Alex checkbox cell checked",
     ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Alex column header New Years 
Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
      "     VISIBLE:  '<x> Alex <x> Havoc <x> Tim <x> O', cursor=1",
      "SPEECH OUTPUT: 'checked'"]))
diff --git a/test/keystrokes/gtk-demo/role_window.py b/test/keystrokes/gtk-demo/role_window.py
index 9256feb..56bca42 100644
--- a/test/keystrokes/gtk-demo/role_window.py
+++ b/test/keystrokes/gtk-demo/role_window.py
@@ -12,10 +12,10 @@ sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
-    "Window Where Am I",
-    ["BRAILLE LINE:  'Application Class'",
-     "     VISIBLE:  'Application Class', cursor=0",
-     "SPEECH OUTPUT: 'Application Class'"]))
+    "1. Window Where Am I",
+    ["BRAILLE LINE:  'GTK+ Code Demos'",
+     "     VISIBLE:  'GTK+ Code Demos', cursor=0",
+     "SPEECH OUTPUT: 'GTK+ Code Demos'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/spoken_indentation.py b/test/keystrokes/gtk-demo/spoken_indentation.py
index 98fec6f..ff9522b 100644
--- a/test/keystrokes/gtk-demo/spoken_indentation.py
+++ b/test/keystrokes/gtk-demo/spoken_indentation.py
@@ -8,9 +8,9 @@ import utils
 sequence = MacroSequence()
 
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(TypeAction("Application class"))
-sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("Application main window"))
 sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Tab"))
 
 sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("Return"))
@@ -122,7 +122,7 @@ sequence.append(KeyComboAction("Return"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Home"))
 sequence.append(utils.AssertPresentationAction(
-    "1 Tab",
+    "1. 1 Tab",
     ["SPEECH OUTPUT: 'left control '",
      "SPEECH OUTPUT: '1 tab ' voice=system",
      "SPEECH OUTPUT: ' '"]))
@@ -130,161 +130,161 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "1 Tab and the word 'foo'",
+    "2. 1 Tab and the word 'foo'",
     ["SPEECH OUTPUT: '1 tab ' voice=system",
      "SPEECH OUTPUT: ' foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "2 Tabs",
+    "3. 2 Tabs",
     ["SPEECH OUTPUT: '2 tabs ' voice=system",
      "SPEECH OUTPUT: '         '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "2 Tabs and the word 'foo'",
+    "4. 2 Tabs and the word 'foo'",
     ["SPEECH OUTPUT: '2 tabs ' voice=system",
      "SPEECH OUTPUT: '         foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "1 space",
+    "5. 1 space",
     ["SPEECH OUTPUT: '1 space ' voice=system",
      "SPEECH OUTPUT: ' '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "1 space and the word 'foo'",
+    "6. 1 space and the word 'foo'",
     ["SPEECH OUTPUT: '1 space ' voice=system",
      "SPEECH OUTPUT: ' foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "2 spaces",
+    "7. 2 spaces",
     ["SPEECH OUTPUT: '2 spaces ' voice=system",
      "SPEECH OUTPUT: '  '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "2 spaces and the word 'foo'",
+    "8. 2 spaces and the word 'foo'",
     ["SPEECH OUTPUT: '2 spaces ' voice=system",
      "SPEECH OUTPUT: '  foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "1 Tab and 1 space",
+    "9. 1 Tab and 1 space",
     ["SPEECH OUTPUT: '1 tab 1 space ' voice=system",
      "SPEECH OUTPUT: '  '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "1 Tab, 1 space, and the word 'foo'",
+    "10. 1 Tab, 1 space, and the word 'foo'",
     ["SPEECH OUTPUT: '1 tab 1 space ' voice=system",
      "SPEECH OUTPUT: '  foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "1 Tab and 2 spaces",
+    "11. 1 Tab and 2 spaces",
     ["SPEECH OUTPUT: '1 tab 2 spaces ' voice=system",
      "SPEECH OUTPUT: '   '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "1 Tab, 2 spaces, and the word 'foo'",
+    "12. 1 Tab, 2 spaces, and the word 'foo'",
     ["SPEECH OUTPUT: '1 tab 2 spaces ' voice=system",
      "SPEECH OUTPUT: '   foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "2 Tabs and 1 space",
+    "13. 2 Tabs and 1 space",
     ["SPEECH OUTPUT: '2 tabs 1 space ' voice=system",
      "SPEECH OUTPUT: '          '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "2 Tabs, 1 space, and the word 'foo'",
+    "14. 2 Tabs, 1 space, and the word 'foo'",
     ["SPEECH OUTPUT: '2 tabs 1 space ' voice=system",
      "SPEECH OUTPUT: '          foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "2 Tabs and 2 spaces",
+    "15. 2 Tabs and 2 spaces",
     ["SPEECH OUTPUT: '2 tabs 2 spaces ' voice=system",
      "SPEECH OUTPUT: '           '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "2 Tabs, 2 spaces, and the word 'foo'",
+    "16. 2 Tabs, 2 spaces, and the word 'foo'",
     ["SPEECH OUTPUT: '2 tabs 2 spaces ' voice=system",
      "SPEECH OUTPUT: '           foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "1 Tab, 1 space, and 1 Tab",
+    "17. 1 Tab, 1 space, and 1 Tab",
     ["SPEECH OUTPUT: '1 tab 1 space 1 tab ' voice=system",
      "SPEECH OUTPUT: '         '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "1 Tab, 1 space, 1 Tab, and the word 'foo'",
+    "18. 1 Tab, 1 space, 1 Tab, and the word 'foo'",
     ["SPEECH OUTPUT: '1 tab 1 space 1 tab ' voice=system",
      "SPEECH OUTPUT: '         foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "1 Tab, 1 space, 1 Tab, and 1 space",
+    "19. 1 Tab, 1 space, 1 Tab, and 1 space",
     ["SPEECH OUTPUT: '1 tab 1 space 1 tab 1 space ' voice=system",
      "SPEECH OUTPUT: '          '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "1 Tab, 1 space, 1 Tab, 1 space, and the word 'foo'",
+    "20. 1 Tab, 1 space, 1 Tab, 1 space, and the word 'foo'",
     ["SPEECH OUTPUT: '1 tab 1 space 1 tab 1 space ' voice=system",
      "SPEECH OUTPUT: '          foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "1 Tab, 2 spaces, and 1 Tab",
+    "21. 1 Tab, 2 spaces, and 1 Tab",
     ["SPEECH OUTPUT: '1 tab 2 spaces 1 tab ' voice=system",
      "SPEECH OUTPUT: '         '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "1 Tab, 2 spaces, 1 Tab, and the word 'foo'",
+    "22. 1 Tab, 2 spaces, 1 Tab, and the word 'foo'",
     ["SPEECH OUTPUT: '1 tab 2 spaces 1 tab ' voice=system",
      "SPEECH OUTPUT: '         foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "2 spaces and 1 Tab",
+    "23. 2 spaces and 1 Tab",
     ["SPEECH OUTPUT: '2 spaces 1 tab ' voice=system",
      "SPEECH OUTPUT: '         '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "2 spaces, 1 Tab, and the word 'foo'",
+    "24. 2 spaces, 1 Tab, and the word 'foo'",
     ["SPEECH OUTPUT: '2 spaces 1 tab ' voice=system",
      "SPEECH OUTPUT: '         foo'"]))
 
diff --git a/test/keystrokes/gtk3-demo/learn_mode.py b/test/keystrokes/gtk3-demo/learn_mode.py
new file mode 100644
index 0000000..aaefb1b
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/learn_mode.py
@@ -0,0 +1,73 @@
+#!/usr/bin/python
+
+"""Test of learn mode."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Printing"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(KeyComboAction("h"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(TypeAction("f"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Orca command: check text attributes",
+    ["BRAILLE LINE:  'Reads the attributes associated with the current text character.'",
+     "     VISIBLE:  'Reads the attributes associated ', cursor=0",
+     "SPEECH OUTPUT: 'insert '",
+     "SPEECH OUTPUT: 'f '",
+     "SPEECH OUTPUT: 'Reads the attributes associated with the current text character.' voice=system"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(TypeAction(" "))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Orca command: bring up preferences",
+    ["BRAILLE LINE:  'Learn mode.  Press escape to exit.'",
+     "     VISIBLE:  'Learn mode.  Press escape to exi', cursor=0",
+     "BRAILLE LINE:  'Displays the preferences configuration dialog.'",
+     "     VISIBLE:  'Displays the preferences configu', cursor=0",
+     "SPEECH OUTPUT: 'insert '",
+     "SPEECH OUTPUT: 'space '",
+     "SPEECH OUTPUT: 'Displays the preferences configuration dialog.' voice=system"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Orca command: flat review current word",
+    ["BRAILLE LINE:  'Learn mode.  Press escape to exit.'",
+     "     VISIBLE:  'Learn mode.  Press escape to exi', cursor=0",
+     "BRAILLE LINE:  'Speaks the current flat review item or word.'",
+     "     VISIBLE:  'Speaks the current flat review i', cursor=0",
+     "SPEECH OUTPUT: 'begin '",
+     "SPEECH OUTPUT: 'Speaks the current flat review item or word.' voice=system"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(TypeAction("5"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Regular typing command",
+    ["BRAILLE LINE:  'Learn mode.  Press escape to exit.'",
+     "     VISIBLE:  'Learn mode.  Press escape to exi', cursor=0",
+     "SPEECH OUTPUT: '5 '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Escape"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Exit learn mode",
+    ["BRAILLE LINE:  'Exiting learn mode.'",
+     "     VISIBLE:  'Exiting learn mode.', cursor=0",
+     "SPEECH OUTPUT: 'escape '",
+     "SPEECH OUTPUT: 'Exiting learn mode.' voice=system"]))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_accel_label.py b/test/keystrokes/gtk3-demo/role_accel_label.py
new file mode 100644
index 0000000..9fa39bd
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_accel_label.py
@@ -0,0 +1,61 @@
+#!/usr/bin/python
+
+"""Test of menu accelerator label output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Application class"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Alt>p"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Initial menu and menu item",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Preferences menu'",
+     "     VISIBLE:  'Preferences menu', cursor=1",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame < > Prefer Dark Theme check 
menu item'",
+     "     VISIBLE:  '< > Prefer Dark Theme check menu', cursor=1",
+     "SPEECH OUTPUT: 'Preferences menu'",
+     "SPEECH OUTPUT: 'Prefer Dark Theme check menu item not checked'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Next menu item",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame < > Hide Titlebar when 
maximized check menu item'",
+     "     VISIBLE:  '< > Hide Titlebar when maximized', cursor=1",
+     "SPEECH OUTPUT: 'Hide Titlebar when maximized check menu item not checked'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Next menu item",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Color menu'",
+     "     VISIBLE:  'Color menu', cursor=1",
+     "SPEECH OUTPUT: 'Color menu'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+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: 'C'"]))
+
+sequence.append(KeyComboAction("Escape"))
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_alert.py b/test/keystrokes/gtk3-demo/role_alert.py
new file mode 100644
index 0000000..9ccdf5e
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_alert.py
@@ -0,0 +1,80 @@
+#!/usr/bin/python
+
+"""Test of presentation of dialogs and alerts."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Dialog and Message Boxes"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("space"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Initial dialog",
+    ["BRAILLE LINE:  'gtk3-demo application Dialogs frame'",
+     "     VISIBLE:  'Dialogs frame', cursor=1",
+     "BRAILLE LINE:  'gtk3-demo application Dialogs frame Dialogs panel Message Dialog push button'",
+     "     VISIBLE:  'Message Dialog push button', cursor=1",
+     "SPEECH OUTPUT: 'Dialogs frame'",
+     "SPEECH OUTPUT: 'Dialogs panel'",
+     "SPEECH OUTPUT: 'Message Dialog push button'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("space"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Information alert",
+    ["BRAILLE LINE:  'gtk3-demo application Information alert'",
+     "     VISIBLE:  'Information alert', cursor=1",
+     "BRAILLE LINE:  'gtk3-demo application Information alert Cancel push button'",
+     "     VISIBLE:  'Cancel push button', cursor=1",
+     "SPEECH OUTPUT: 'Information   This message box has been popped up the following",
+     "number of times: 1'",
+     "SPEECH OUTPUT: 'Cancel push button'"]))
+
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Down"))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction("Testing"))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction("Again"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Alt>i"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Entry 1",
+    ["BRAILLE LINE:  'gtk3-demo application Interactive Dialog dialog'",
+     "     VISIBLE:  'Interactive Dialog dialog', cursor=1",
+     "BRAILLE LINE:  'gtk3-demo application Interactive Dialog dialog Entry 1 Testing $l'",
+     "     VISIBLE:  'Entry 1 Testing $l', cursor=16",
+     "SPEECH OUTPUT: 'Interactive Dialog'",
+     "SPEECH OUTPUT: 'Entry 1 text Testing selected'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Entry 2",
+    ["BRAILLE LINE:  'gtk3-demo application Interactive Dialog dialog Entry 2 Again $l'",
+     "     VISIBLE:  'Entry 2 Again $l', cursor=14",
+     "BRAILLE LINE:  'gtk3-demo application Interactive Dialog dialog Entry 2 Again $l'",
+     "     VISIBLE:  'Entry 2 Again $l', cursor=14",
+     "SPEECH OUTPUT: 'Entry 2 text Again selected'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Title bar",
+    ["BRAILLE LINE:  'Interactive Dialog'",
+     "     VISIBLE:  'Interactive Dialog', cursor=0",
+     "SPEECH OUTPUT: 'Interactive Dialog'"]))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_check_box.py b/test/keystrokes/gtk3-demo/role_check_box.py
new file mode 100644
index 0000000..8cc9bfc
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_check_box.py
@@ -0,0 +1,77 @@
+#!/usr/bin/python
+
+"""Test of checkbox output."""
+
+from macaroon.playback import *
+
+sequence = MacroSequence()
+import utils
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Paned Widgets"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Tab to first checkbox",
+    ["BRAILLE LINE:  'gtk3-demo application Panes frame Horizontal panel < > Resize check box'",
+     "     VISIBLE:  '< > Resize check box', cursor=1",
+     "SPEECH OUTPUT: 'Horizontal panel'",
+     "SPEECH OUTPUT: 'Resize check box not checked'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+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: 'Alt+R'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(TypeAction(" "))
+sequence.append(utils.AssertPresentationAction(
+    "3. Toggle its state",
+    ["BRAILLE LINE:  'gtk3-demo application Panes frame Horizontal panel <x> Resize check box'",
+     "     VISIBLE:  '<x> Resize check box', cursor=1",
+     "SPEECH OUTPUT: 'checked'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+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: 'Alt+R'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(TypeAction(" "))
+sequence.append(utils.AssertPresentationAction(
+    "5. Toggle its state back",
+    ["BRAILLE LINE:  'gtk3-demo application Panes frame Horizontal panel < > Resize check box'",
+     "     VISIBLE:  '< > Resize check box', cursor=1",
+     "SPEECH OUTPUT: 'not checked'"]))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Tab"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Tab to first checkbox in next panel",
+    ["BRAILLE LINE:  'gtk3-demo application Panes frame Vertical panel < > Resize check box'",
+     "     VISIBLE:  '< > Resize check box', cursor=1",
+     "SPEECH OUTPUT: 'Vertical panel'",
+     "SPEECH OUTPUT: 'Resize check box not checked'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_check_menu_item.py 
b/test/keystrokes/gtk3-demo/role_check_menu_item.py
new file mode 100644
index 0000000..27c87f4
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_check_menu_item.py
@@ -0,0 +1,53 @@
+#!/usr/bin/python
+
+"""Test of check menu item output."""
+
+from macaroon.playback import *
+
+sequence = MacroSequence()
+import utils
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Application class"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("<Alt>p"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Arrow to first check menu item - not checked",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame < > Hide Titlebar when 
maximized check menu item'",
+     "     VISIBLE:  '< > Hide Titlebar when maximized', cursor=1",
+     "SPEECH OUTPUT: 'Hide Titlebar when maximized check menu item not checked'"]))
+
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Escape"))
+sequence.append(KeyComboAction("<Alt>p"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Arrow to first check menu item - checked",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame <x> Hide Titlebar when 
maximized check menu item'",
+     "     VISIBLE:  '<x> Hide Titlebar when maximized', cursor=1",
+     "SPEECH OUTPUT: 'Hide Titlebar when maximized check menu item checked'"]))
+
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Escape"))
+sequence.append(KeyComboAction("<Alt>p"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Arrow to first check menu item - not checked",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame < > Hide Titlebar when 
maximized check menu item'",
+     "     VISIBLE:  '< > Hide Titlebar when maximized', cursor=1",
+     "SPEECH OUTPUT: 'Hide Titlebar when maximized check menu item not checked'"]))
+
+sequence.append(KeyComboAction("Escape"))
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_color_chooser.py b/test/keystrokes/gtk3-demo/role_color_chooser.py
similarity index 72%
rename from test/keystrokes/gtk-demo/role_color_chooser.py
rename to test/keystrokes/gtk3-demo/role_color_chooser.py
index cfc6bd5..c96308e 100644
--- a/test/keystrokes/gtk-demo/role_color_chooser.py
+++ b/test/keystrokes/gtk3-demo/role_color_chooser.py
@@ -12,20 +12,21 @@ sequence.append(TypeAction("Color Chooser"))
 sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("space"))
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Arrow to the next swatch",
-    ["BRAILLE LINE:  'gtk-demo application Changing color dialog & y Light Orange radio button'",
+    "1. Arrow to the next swatch",
+    ["BRAILLE LINE:  'gtk3-demo application Changing color dialog & y Light Orange radio button'",
      "     VISIBLE:  '& y Light Orange radio button', cursor=1",
      "SPEECH OUTPUT: 'Light Orange not selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("space"))
 sequence.append(utils.AssertPresentationAction(
-    "Space to select the current swatch",
-    ["BRAILLE LINE:  'gtk-demo application Changing color dialog &=y Light Orange radio button'",
+    "2. Space to select the current swatch",
+    ["BRAILLE LINE:  'gtk3-demo application Changing color dialog &=y Light Orange radio button'",
      "     VISIBLE:  '&=y Light Orange radio button', cursor=1",
      "SPEECH OUTPUT: 'selected'"]))
 
@@ -40,87 +41,87 @@ sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "Focus Hue color chooser",
-    ["BRAILLE LINE:  'gtk-demo application Changing color dialog Hue 0.00 color chooser'",
+    "3. Focus Hue color chooser",
+    ["BRAILLE LINE:  'gtk3-demo application Changing color dialog Hue 0.00 color chooser'",
      "     VISIBLE:  'Hue 0.00 color chooser', cursor=1",
      "SPEECH OUTPUT: 'color chooser 0.00'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Change Hue value",
-    ["BRAILLE LINE:  'gtk-demo application Changing color dialog Hue 0.01 color chooser'",
+    "4. Change Hue value",
+    ["BRAILLE LINE:  'gtk3-demo application Changing color dialog Hue 0.01 color chooser'",
      "     VISIBLE:  'Hue 0.01 color chooser', cursor=1",
      "SPEECH OUTPUT: '0.01'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Change Hue value",
-    ["BRAILLE LINE:  'gtk-demo application Changing color dialog Hue 0.02 color chooser'",
+    "5. Change Hue value",
+    ["BRAILLE LINE:  'gtk3-demo application Changing color dialog Hue 0.02 color chooser'",
      "     VISIBLE:  'Hue 0.02 color chooser', cursor=1",
      "SPEECH OUTPUT: '0.02'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Hue Where Am I",
-    ["BRAILLE LINE:  'gtk-demo application Changing color dialog Hue 0.02 color chooser'",
+    "6. Hue Where Am I",
+    ["BRAILLE LINE:  'gtk3-demo application Changing color dialog Hue 0.02 color chooser'",
      "     VISIBLE:  'Hue 0.02 color chooser', cursor=1",
      "SPEECH OUTPUT: 'color chooser 0.02 2 percent.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "Focus Color Plane color chooser",
-    ["BRAILLE LINE:  'gtk-demo application Changing color dialog Color Plane color chooser'",
+    "7. Focus Color Plane color chooser",
+    ["BRAILLE LINE:  'gtk3-demo application Changing color dialog Color Plane color chooser'",
      "     VISIBLE:  'Color Plane color chooser', cursor=1",
      "SPEECH OUTPUT: 'color chooser'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Change value in Plane",
+    "8. Change value in Plane",
     ["KNOWN ISSUE: We are presenting nothing here.",
      ""]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Change value in Plane",
+    "9. Change value in Plane",
     ["KNOWN ISSUE: We are presenting nothing here.",
      ""]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Plane Where Am I",
+    "10. Plane Where Am I",
     ["KNOWN ISSUE: We're not presenting the value here.",
-     "BRAILLE LINE:  'gtk-demo application Changing color dialog Color Plane color chooser'",
+     "BRAILLE LINE:  'gtk3-demo application Changing color dialog Color Plane color chooser'",
      "     VISIBLE:  'Color Plane color chooser', cursor=1",
      "SPEECH OUTPUT: 'color chooser'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "Focus Alpha color chooser",
-    ["BRAILLE LINE:  'gtk-demo application Changing color dialog Alpha 1.00 color chooser'",
+    "11. Focus Alpha color chooser",
+    ["BRAILLE LINE:  'gtk3-demo application Changing color dialog Alpha 1.00 color chooser'",
      "     VISIBLE:  'Alpha 1.00 color chooser', cursor=1",
      "SPEECH OUTPUT: 'color chooser 1.00'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "Change Alpha value",
-     ["BRAILLE LINE:  'gtk-demo application Changing color dialog Alpha 0.99 color chooser'",
+    "12. Change Alpha value",
+     ["BRAILLE LINE:  'gtk3-demo application Changing color dialog Alpha 0.99 color chooser'",
       "     VISIBLE:  'Alpha 0.99 color chooser', cursor=1",
       "SPEECH OUTPUT: '0.99'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Alpha Where Am I",
-    ["BRAILLE LINE:  'gtk-demo application Changing color dialog Alpha 0.99 color chooser'",
+    "13. Alpha Where Am I",
+    ["BRAILLE LINE:  'gtk3-demo application Changing color dialog Alpha 0.99 color chooser'",
      "     VISIBLE:  'Alpha 0.99 color chooser', cursor=1",
      "SPEECH OUTPUT: 'color chooser 0.99 99 percent.'"]))
 
diff --git a/test/keystrokes/gtk3-demo/role_column_header.py b/test/keystrokes/gtk3-demo/role_column_header.py
new file mode 100644
index 0000000..b96a2e8
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_column_header.py
@@ -0,0 +1,92 @@
+#!/usr/bin/python
+
+"""Test of column header output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("End"))
+sequence.append(KeyComboAction("<Shift>Right"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Bug number column header",
+    ["BRAILLE LINE:  'gtk3-demo application GtkListStore demo frame table Bug number table column header'",
+     "     VISIBLE:  'Bug number table column header', cursor=1",
+     "SPEECH OUTPUT: 'Bug number table column header'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Right"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Severity column header",
+    ["BRAILLE LINE:  'gtk3-demo application GtkListStore demo frame table Severity table column header'",
+     "     VISIBLE:  'Severity table column header', cursor=1",
+     "SPEECH OUTPUT: 'Severity table column header'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Right"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Description column header",
+    ["BRAILLE LINE:  'gtk3-demo application GtkListStore demo frame table Description table column header'",
+     "     VISIBLE:  'Description table column header', cursor=1",
+     "SPEECH OUTPUT: 'Description table column header'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Enter table",
+    ["BRAILLE LINE:  'gtk3-demo application GtkListStore demo frame table Fixed? column header < > Fixed? 
60482 Normal scrollable notebooks and hidden tabs  '",
+     "     VISIBLE:  '< > Fixed? 60482 Normal scrollab', cursor=1",
+     "SPEECH OUTPUT: 'Fixed? check box not checked 60482 Normal scrollable notebooks and hidden tabs 
image'"]))
+
+# GtkTreeView swallows this keypress (for all users; not just Orca users).
+sequence.append(KeyComboAction("Left"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Left"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Normal cell",
+    ["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: 'Severity column header Normal'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Normal cell basic Where Am I",
+    ["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'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Normal cell detailed Where Am I",
+    ["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",
+     "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'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Left"))
+sequence.append(utils.AssertPresentationAction(
+    "8. 60482 cell",
+    ["BRAILLE LINE:  'gtk3-demo application GtkListStore demo frame table Bug number column header < > 
Fixed? 60482 Normal scrollable notebooks and hidden tabs  '",
+     "     VISIBLE:  '60482 Normal scrollable notebook', cursor=1",
+     "SPEECH OUTPUT: 'Bug number column header 60482'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_combo_box.py b/test/keystrokes/gtk3-demo/role_combo_box.py
new file mode 100644
index 0000000..6eec1d7
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_combo_box.py
@@ -0,0 +1,122 @@
+#!/usr/bin/python
+
+"""Test of combobox output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Combo boxes"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(TypeAction(" "))
+sequence.append(utils.AssertPresentationAction(
+    "1. Warning combo box item",
+    ["BRAILLE LINE:  'gtk3-demo application Combo boxes frame'",
+     "     VISIBLE:  'Combo boxes frame', cursor=1",
+     "BRAILLE LINE:  'gtk3-demo application Combo boxes frame Items with icons panel Warning combo box'",
+     "     VISIBLE:  'Warning combo box', cursor=1",
+     "SPEECH OUTPUT: 'Combo boxes frame'",
+     "SPEECH OUTPUT: 'Items with icons panel'",
+     "SPEECH OUTPUT: 'Warning combo box'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+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'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "3. New combo box item",
+    ["BRAILLE LINE:  'gtk3-demo application Combo boxes frame Items with icons panel  combo boxNew New'",
+     "     VISIBLE:  'New', cursor=1",
+     "SPEECH OUTPUT: 'New'"]))
+
+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",
+     "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'"]))
+
+sequence.append(KeyComboAction("Tab"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Editable text combo box",
+    ["BRAILLE LINE:  'gtk3-demo application Combo boxes frame Editable panel  $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "SPEECH OUTPUT: 'Editable panel'",
+     "SPEECH OUTPUT: 'text'"]))
+
+sequence.append(TypeAction("Fou"))
+sequence.append(utils.StartRecordingAction())
+sequence.append(TypeAction("r"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Editable text combo box typing",
+    ["BRAILLE LINE:  'gtk3-demo application Combo boxes frame Editable panel Four $l'",
+     "     VISIBLE:  'Four $l', cursor=5",
+     "BRAILLE LINE:  'gtk3-demo application Combo boxes frame Editable panel Four $l'",
+     "     VISIBLE:  'Four $l', cursor=5"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+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'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Editable text combo box open button",
+    ["BRAILLE LINE:  'gtk3-demo application Combo boxes frame Editable panel Four $l combo box'",
+     "     VISIBLE:  'Four $l combo box', cursor=5",
+     "SPEECH OUTPUT: 'Four combo box'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Editable text combo box with selected text",
+    ["BRAILLE LINE:  'gtk3-demo application Combo boxes frame Editable panel Four $l'",
+     "     VISIBLE:  'Four $l', cursor=5",
+     "BRAILLE LINE:  'gtk3-demo application Combo boxes frame Editable panel Four $l'",
+     "     VISIBLE:  'Four $l', cursor=5",
+     "SPEECH OUTPUT: 'text Four selected'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+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'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_combo_box2.py b/test/keystrokes/gtk3-demo/role_combo_box2.py
new file mode 100644
index 0000000..08a2ab8
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_combo_box2.py
@@ -0,0 +1,66 @@
+#!/usr/bin/python
+
+"""Test of labelled combo box output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+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(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: 'Only print: All sheets combo box'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+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: 'Alt+O'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Change selection",
+    ["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: 'Even sheets'"]))
+
+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",
+     "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'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_dialog.py b/test/keystrokes/gtk3-demo/role_dialog.py
new file mode 100644
index 0000000..4474f24
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_dialog.py
@@ -0,0 +1,37 @@
+#!/usr/bin/python
+
+"""Test of dialog presentation."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Expander"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Return"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Dialog automatic reading",
+    ["BRAILLE LINE:  'gtk3-demo application GtkExpander dialog'",
+     "     VISIBLE:  'GtkExpander dialog', cursor=1",
+     "BRAILLE LINE:  'gtk3-demo application GtkExpander dialog & y Details collapsed toggle button'",
+     "     VISIBLE:  '& y Details collapsed toggle but', cursor=1",
+     "SPEECH OUTPUT: 'GtkExpander Expander demo. Click on the triangle for details.'",
+     "SPEECH OUTPUT: 'Details toggle button collapsed'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+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'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_drawing_area.py b/test/keystrokes/gtk3-demo/role_drawing_area.py
new file mode 100644
index 0000000..9163150
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_drawing_area.py
@@ -0,0 +1,35 @@
+#!/usr/bin/python
+
+"""Test of drawing area output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Drawing Area"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Flat review current line",
+    ["BRAILLE LINE:  'Checkerboard pattern $l'",
+     "     VISIBLE:  'Checkerboard pattern $l', cursor=1",
+     "SPEECH OUTPUT: 'Checkerboard pattern'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Flat review next line",
+    ["BRAILLE LINE:  'drawing area $l'",
+     "     VISIBLE:  'drawing area $l', cursor=1",
+     "SPEECH OUTPUT: 'drawing area'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_icon.py b/test/keystrokes/gtk3-demo/role_icon.py
new file mode 100644
index 0000000..e1106c1
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_icon.py
@@ -0,0 +1,66 @@
+#!/usr/bin/python
+
+"""Test of icon output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Images"))
+sequence.append(KeyComboAction("Escape"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("<Shift>Right"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "1. bin icon",
+    ["BRAILLE LINE:  'gtk3-demo application GtkIconView demo frame bin icon'",
+     "     VISIBLE:  'bin icon', cursor=1",
+     "SPEECH OUTPUT: 'bin icon'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "2. bin icon Where Am I",
+    ["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'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Right"))
+sequence.append(utils.AssertPresentationAction(
+    "3. boot icon",
+    ["BRAILLE LINE:  'gtk3-demo application GtkIconView demo frame boot icon'",
+     "     VISIBLE:  'boot icon', cursor=1",
+     "SPEECH OUTPUT: 'boot icon'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>Left"))
+sequence.append(utils.AssertPresentationAction(
+    "4. icon selection",
+    ["BRAILLE LINE:  'gtk3-demo application GtkIconView demo frame bin icon'",
+     "     VISIBLE:  'bin icon', cursor=1",
+     "SPEECH OUTPUT: 'bin icon'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "5. icon selection Where Am I",
+    ["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'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_info_bar.py b/test/keystrokes/gtk3-demo/role_info_bar.py
similarity index 67%
rename from test/keystrokes/gtk-demo/role_info_bar.py
rename to test/keystrokes/gtk3-demo/role_info_bar.py
index 7a9863f..f6c306e 100644
--- a/test/keystrokes/gtk-demo/role_info_bar.py
+++ b/test/keystrokes/gtk3-demo/role_info_bar.py
@@ -10,20 +10,8 @@ sequence = MacroSequence()
 sequence.append(KeyComboAction("<Control>f"))
 sequence.append(TypeAction("Info bar"))
 sequence.append(KeyComboAction("Return"))
-
-sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Return"))
-sequence.append(utils.AssertPresentationAction(
-    "Start the demo",
-    ["BRAILLE LINE:  'gtk-demo application Info Bars frame'",
-     "     VISIBLE:  'Info Bars frame', cursor=1",
-     "BRAILLE LINE:  'gtk-demo application Info Bars frame Question info bar OK push button'",
-     "     VISIBLE:  'OK push button', cursor=1",
-     "SPEECH OUTPUT: 'Info Bars frame'",
-     "SPEECH OUTPUT: 'Question This is",
-     "an info bar with message type",
-     "GTK_MESSAGE_QUESTION'",
-     "SPEECH OUTPUT: 'OK push button'"]))
+sequence.append(PauseAction(3000))
 
 # Dismiss all the showing info bars
 sequence.append(KeyComboAction("Tab"))
@@ -39,11 +27,13 @@ sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("space"))
 
 sequence.append(KeyComboAction("Tab"))
+sequence.append(PauseAction(3000))
+
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("space"))
 sequence.append(utils.AssertPresentationAction(
-    "Show the Message info bar",
-    ["BRAILLE LINE:  'gtk-demo application Info Bars frame Info bars panel An example of different info bars 
filler &=y Message toggle button'",
+    "1. Show the Message info bar",
+    ["BRAILLE LINE:  'gtk3-demo application Info Bars frame Info bars panel &=y Message toggle button'",
      "     VISIBLE:  '&=y Message toggle button', cursor=1",
      "SPEECH OUTPUT: 'pressed'"]))
 
@@ -52,7 +42,7 @@ sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(KeyComboAction("KP_7"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
-    "Flat review the home position to read the message",
+    "2. Flat review the home position to read the message",
     ["BRAILLE LINE:  'This is an info bar with message type GTK_MESSAGE_INFO filler $l'",
      "     VISIBLE:  'This is an info bar with message', cursor=1",
      "SPEECH OUTPUT: 'This is an info bar with message type GTK_MESSAGE_INFO filler'"]))
diff --git a/test/keystrokes/gtk3-demo/role_label.py b/test/keystrokes/gtk3-demo/role_label.py
new file mode 100644
index 0000000..a5009eb
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_label.py
@@ -0,0 +1,142 @@
+#!/usr/bin/python
+
+"""Test of label presentation."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Dialog and Message Boxes"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(KeyComboAction("space"))
+sequence.append(KeyComboAction("space"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Tab"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "1. This message box label",
+    ["BRAILLE LINE:  'number of times:'",
+     "     VISIBLE:  'number of times:', cursor=17",
+     "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: selected label'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "2. This message box label Where Am I",
+    ["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'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "3. This message box label Extended Where Am I",
+    ["BRAILLE LINE:  'number of times:'",
+     "     VISIBLE:  'number of times:', cursor=17",
+     "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'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Home"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Press Home to unselect the label and move to the first character'",
+    ["BRAILLE LINE:  'gtk3-demo application Information alert This message box has been popped up the 
following'",
+     "     VISIBLE:  'This message box has been popped', cursor=1",
+     "BRAILLE LINE:  'gtk3-demo application Information alert This message box has been popped up the 
following'",
+     "     VISIBLE:  'This message box has been popped', cursor=1",
+     "SPEECH OUTPUT: 'T'",
+     "SPEECH OUTPUT: 'This message box has been popped up the following",
+     "number of times:'",
+     "SPEECH OUTPUT: 'unselected' voice=system"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Right"))
+sequence.append(utils.AssertPresentationAction(
+    "5. This message box label caret movement to 'h'",
+    ["BRAILLE LINE:  'gtk3-demo application Information alert This message box has been popped up the 
following'",
+     "     VISIBLE:  'This message box has been popped', cursor=2",
+     "SPEECH OUTPUT: 'h'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift><Control>Right"))
+sequence.append(utils.AssertPresentationAction(
+    "6. This message box label caret select 'his' of 'This'",
+    ["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: 'his'",
+     "SPEECH OUTPUT: 'selected' voice=system"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "7. This message box label caret selection Where Am I",
+    ["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'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "8. This message box label caret selection Extended Where Am I",
+    ["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",
+     "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'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Left"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Left Arrow to move to h unselecting his'",
+    ["BRAILLE LINE:  'gtk3-demo application Information alert This message box has been popped up the 
following'",
+     "     VISIBLE:  'This message box has been popped', cursor=2",
+     "BRAILLE LINE:  'gtk3-demo application Information alert This message box has been popped up the 
following'",
+     "     VISIBLE:  'This message box has been popped', cursor=2",
+     "SPEECH OUTPUT: 'h'",
+     "SPEECH OUTPUT: 'his'",
+     "SPEECH OUTPUT: 'unselected' voice=system"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift><Control>Left"))
+sequence.append(utils.AssertPresentationAction(
+    "10. This message box label caret select 'T' in 'This'",
+    ["BRAILLE LINE:  'gtk3-demo application Information alert This message box has been popped up the 
following'",
+     "     VISIBLE:  'This message box has been popped', cursor=1",
+     "SPEECH OUTPUT: 'T' voice=uppercase",
+     "SPEECH OUTPUT: 'selected' voice=system"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift><Control>Right"))
+sequence.append(utils.AssertPresentationAction(
+    "11. This message box label caret unselect 'T' and select rest of 'This'",
+    ["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: 'T'",
+     "SPEECH OUTPUT: 'unselected' voice=system",
+     "SPEECH OUTPUT: 'his'",
+     "SPEECH OUTPUT: 'selected' voice=system"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_listbox.py b/test/keystrokes/gtk3-demo/role_listbox.py
similarity index 88%
rename from test/keystrokes/gtk-demo/role_listbox.py
rename to test/keystrokes/gtk3-demo/role_listbox.py
index ab96abd..a711e1b 100644
--- a/test/keystrokes/gtk-demo/role_listbox.py
+++ b/test/keystrokes/gtk3-demo/role_listbox.py
@@ -11,13 +11,14 @@ sequence.append(KeyComboAction("<Control>f"))
 sequence.append(TypeAction("List Box"))
 sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Where Am I",
+    "1. Where Am I",
     ["KNOWN ISSUE: The order of presentation can vary. Seems to be a timing issue.",
-     "BRAILLE LINE:  'gtk-demo application List Box frame list box 2",
+     "BRAILLE LINE:  'gtk3-demo application List Box frame list box 2",
      "Reshares 4",
      "Favorites 23:00:00 - 26 Mar 2013 Resent by @GTKtoolkit 26 Mar 13 GTK+ 3.8.0 (STABLE) released: 
wayland, Multi-application Broadway, improved CSS support and more ... http://ur1.ca/d6yms  #gtk #gtk3 
Details push button'",
      "     VISIBLE:  '2",
@@ -31,9 +32,9 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Next item",
+    "2. Next item",
     ["KNOWN ISSUE: The order of presentation can vary. Seems to be a timing issue.",
-     "BRAILLE LINE:  'gtk-demo application List Box frame list box 0",
+     "BRAILLE LINE:  'gtk3-demo application List Box frame list box 0",
      "Favorites 0",
      "Reshares 20:20:00 - 11 Oct 2013 @GTKtoolkit 11 Oct 13 GLib 2.34.0 (STABLE) released: 
http://ur1.ca/aj4du  #glib Details push button'",
      "     VISIBLE:  'Resent by 0",
@@ -46,9 +47,9 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "Where Am I",
+    "3. Where Am I",
     ["KNOWN ISSUE: The order of presentation can vary. Seems to be a timing issue.",
-     "BRAILLE LINE:  'gtk-demo application List Box frame list box Resent by 0",
+     "BRAILLE LINE:  'gtk3-demo application List Box frame list box Resent by 0",
      "Favorites 0",
      "Reshares 20:20:00 - 11 Oct 2013 @GTKtoolkit 11 Oct 13 GLib 2.34.0 (STABLE) released: 
http://ur1.ca/aj4du  #glib Details push button'",
      "     VISIBLE:  'Resent by 0",
diff --git a/test/keystrokes/gtk3-demo/role_menu.py b/test/keystrokes/gtk3-demo/role_menu.py
new file mode 100644
index 0000000..42a9ec9
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_menu.py
@@ -0,0 +1,93 @@
+#!/usr/bin/python
+
+"""Test of menu and menu item output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Application class"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Alt>p"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Initial menu and menu item",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Preferences menu'",
+     "     VISIBLE:  'Preferences menu', cursor=1",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame < > Prefer Dark Theme check 
menu item'",
+     "     VISIBLE:  '< > Prefer Dark Theme check menu', cursor=1",
+     "SPEECH OUTPUT: 'Preferences menu'",
+     "SPEECH OUTPUT: 'Prefer Dark Theme check menu item not checked'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Next menu item",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame < > Hide Titlebar when 
maximized check menu item'",
+     "     VISIBLE:  '< > Hide Titlebar when maximized', cursor=1",
+     "SPEECH OUTPUT: 'Hide Titlebar when maximized check menu item not checked'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Next menu item",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Color menu'",
+     "     VISIBLE:  'Color menu', cursor=1",
+     "SPEECH OUTPUT: 'Color menu'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+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: 'C'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Right"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Get into Color menu",
+    ["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: 'Red selected radio menu item Ctrl+R'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+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: 'R'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Left"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Get out of Color menu",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Color menu'",
+     "     VISIBLE:  'Color menu', cursor=1",
+     "SPEECH OUTPUT: 'Color menu'"]))
+
+sequence.append(KeyComboAction("Escape"))
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_page_tab.py b/test/keystrokes/gtk3-demo/role_page_tab.py
new file mode 100644
index 0000000..d7f82b8
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_page_tab.py
@@ -0,0 +1,35 @@
+#!/usr/bin/python
+
+"""Test of page tab output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Printing"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Right"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Right Arrow to the Page Setup page tab",
+    ["BRAILLE LINE:  'gtk3-demo application Print dialog Page Setup page tab'",
+     "     VISIBLE:  'Page Setup page tab', cursor=1",
+     "SPEECH OUTPUT: 'Page Setup page tab'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+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]'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_push_button.py b/test/keystrokes/gtk3-demo/role_push_button.py
new file mode 100644
index 0000000..5d8548a
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_push_button.py
@@ -0,0 +1,59 @@
+#!/usr/bin/python
+
+"""Test of push button output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Button Boxes"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Return"))
+sequence.append(utils.AssertPresentationAction(
+    "1. OK push button",
+    ["BRAILLE LINE:  'gtk3-demo application Button Boxes frame'",
+     "     VISIBLE:  'Button Boxes frame', cursor=1",
+     "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: 'Button Boxes frame'",
+     "SPEECH OUTPUT: 'Horizontal Button Boxes panel'",
+     "SPEECH OUTPUT: 'Spread panel'",
+     "SPEECH OUTPUT: 'OK push button'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+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"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Cancel push button",
+    ["BRAILLE LINE:  'gtk3-demo application Button Boxes frame Horizontal Button Boxes panel Spread panel 
Cancel push button'",
+     "     VISIBLE:  'Cancel push button', cursor=1",
+     "SPEECH OUTPUT: 'Cancel push button'"]))
+
+sequence.append(KeyComboAction("Tab"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "4. OK Edge button",
+    ["BRAILLE LINE:  'gtk3-demo application Button Boxes frame Horizontal Button Boxes panel Edge panel OK 
push button'",
+     "     VISIBLE:  'OK push button', cursor=1",
+     "SPEECH OUTPUT: 'Edge panel'",
+     "SPEECH OUTPUT: 'OK push button'"]))
+
+sequence.append(KeyComboAction("<Alt>F4", 500))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_radio_button.py b/test/keystrokes/gtk3-demo/role_radio_button.py
new file mode 100644
index 0000000..f08df99
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_radio_button.py
@@ -0,0 +1,59 @@
+#!/usr/bin/python
+
+"""Test of radio button output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Printing"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Alt>a"))
+sequence.append(utils.AssertPresentationAction(
+    "1. All Pages radio button",
+    ["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: 'General page tab'",
+     "SPEECH OUTPUT: 'Range panel'",
+     "SPEECH OUTPUT: 'All Pages selected radio button'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+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: 'Alt+A'"]))
+
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Range radio button",
+    ["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: 'Pages: selected radio button'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+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: 'Alt+E'",
+     "SPEECH OUTPUT: 'Specify one or more page ranges,",
+     " e.g. 1-3,7,11'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_radio_menu_item.py 
b/test/keystrokes/gtk3-demo/role_radio_menu_item.py
similarity index 79%
rename from test/keystrokes/gtk-demo/role_radio_menu_item.py
rename to test/keystrokes/gtk3-demo/role_radio_menu_item.py
index f3641d2..98844e8 100644
--- a/test/keystrokes/gtk-demo/role_radio_menu_item.py
+++ b/test/keystrokes/gtk3-demo/role_radio_menu_item.py
@@ -13,11 +13,12 @@ sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("<Alt>p"))
 sequence.append(KeyComboAction("C"))
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "radio menu item - not selected",
+    "1. radio menu item - not selected",
     ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Preferences menu & y Green 
radio menu item(Ctrl+G)'",
      "     VISIBLE:  '& y Green radio menu item(Ctrl+G', cursor=1",
      "SPEECH OUTPUT: 'Green not selected radio menu item Ctrl+G'"]))
@@ -25,10 +26,10 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "radio menu item - selected",
-    ["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: 'Red not selected radio menu item Ctrl+R'"]))
+    "2. radio menu item - selected",
+    ["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: 'Red selected radio menu item Ctrl+R'"]))
 
 sequence.append(KeyComboAction("Escape"))
 sequence.append(KeyComboAction("<Alt>F4"))
diff --git a/test/keystrokes/gtk3-demo/role_spin_button.py b/test/keystrokes/gtk3-demo/role_spin_button.py
new file mode 100644
index 0000000..fb8c34d
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_spin_button.py
@@ -0,0 +1,76 @@
+#!/usr/bin/python
+
+"""Test of spin button output"""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Printing"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Alt>s"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Give focus to spin button",
+    ["BRAILLE LINE:  'gtk3-demo application Print dialog General page tab Copies panel Copies: 1 $l'",
+     "     VISIBLE:  'Copies: 1 $l', cursor=10",
+     "BRAILLE LINE:  'gtk3-demo application Print dialog General page tab Copies panel Copies: 1 $l'",
+     "     VISIBLE:  'Copies: 1 $l', cursor=10",
+     "SPEECH OUTPUT: 'General page tab'",
+     "SPEECH OUTPUT: 'Copies panel'",
+     "SPEECH OUTPUT: 'Copies: 1 selected spin button'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+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: 'Alt+S'"]))
+
+sequence.append(TypeAction("15"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Increment value",
+    ["KNOWN ISSUE: We are double-presenting this",
+     "BRAILLE LINE:  'gtk3-demo application Print dialog General page tab Copies panel Copies: 16 $l'",
+     "     VISIBLE:  'Copies: 16 $l', cursor=9",
+     "BRAILLE LINE:  'gtk3-demo application Print dialog General page tab Copies panel Copies: 16 $l'",
+     "     VISIBLE:  'Copies: 16 $l', cursor=9",
+     "BRAILLE LINE:  'gtk3-demo application Print dialog General page tab Copies panel Copies: 16 $l'",
+     "     VISIBLE:  'Copies: 16 $l', cursor=9",
+     "SPEECH OUTPUT: '16'",
+     "SPEECH OUTPUT: '16'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Decrement value",
+    ["BRAILLE LINE:  'gtk3-demo application Print dialog General page tab Copies panel Copies: 15 $l'",
+     "     VISIBLE:  'Copies: 15 $l', cursor=9",
+     "BRAILLE LINE:  'gtk3-demo application Print dialog General page tab Copies panel Copies: 15 $l'",
+     "     VISIBLE:  'Copies: 15 $l', cursor=9",
+     "SPEECH OUTPUT: '15'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Right"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Caret navigation",
+    ["BRAILLE LINE:  'gtk3-demo application Print dialog General page tab Copies panel Copies: 15 $l'",
+     "     VISIBLE:  'Copies: 15 $l', cursor=10",
+     "SPEECH OUTPUT: '5'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_split_pane.py b/test/keystrokes/gtk3-demo/role_split_pane.py
new file mode 100644
index 0000000..9fe7079
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_split_pane.py
@@ -0,0 +1,51 @@
+#!/usr/bin/python
+
+"""Test of split pane output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Paned Widgets"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+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'"]))
+
+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'"]))
+
+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'"]))
+
+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'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_status_bar.py b/test/keystrokes/gtk3-demo/role_status_bar.py
new file mode 100644
index 0000000..adcc0e7
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_status_bar.py
@@ -0,0 +1,37 @@
+#!/usr/bin/python
+
+"""Test of status bar output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Application class"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Status bar Where Am I",
+    ["BRAILLE LINE:  'Application Class'",
+     "     VISIBLE:  'Application Class', cursor=0",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame  $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame  $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  'Cursor at row 0 column 0 - 0 chars in document'",
+     "     VISIBLE:  'Cursor at row 0 column 0 - 0 cha', cursor=0",
+     "SPEECH OUTPUT: 'Application Class'",
+     "SPEECH OUTPUT: 'Cursor at row 0 column 0 - 0 chars in document'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_table.py b/test/keystrokes/gtk3-demo/role_table.py
new file mode 100644
index 0000000..866f3dc
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_table.py
@@ -0,0 +1,71 @@
+#!/usr/bin/python
+
+"""Test of table output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("End"))
+sequence.append(KeyComboAction("<Shift>Right"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Table Where Am I",
+    ["BRAILLE LINE:  'gtk3-demo application Shopping list frame table Number column header 3 bottles of coke 
'",
+     "     VISIBLE:  '3 bottles of coke ', cursor=1",
+     "SPEECH OUTPUT: 'table Number table cell 3 column 1 of 3 row 1 of 5'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Next row",
+    ["BRAILLE LINE:  'gtk3-demo application Shopping list frame table Number column header 5 packages of 
noodles '",
+     "     VISIBLE:  '5 packages of noodles ', cursor=1",
+     "SPEECH OUTPUT: '5 packages of noodles'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Table Where Am I (again)",
+    ["BRAILLE LINE:  'gtk3-demo application Shopping list frame table Number column header 5 packages of 
noodles '",
+     "     VISIBLE:  '5 packages of noodles ', cursor=1",
+     "SPEECH OUTPUT: 'table Number table cell 5 column 1 of 3 row 2 of 5'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(KeyComboAction("F11"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Turn row reading off",
+    ["BRAILLE LINE:  'Speak cell'",
+     "     VISIBLE:  'Speak cell', cursor=0",
+     "SPEECH OUTPUT: 'Speak cell'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Right"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Table Right to the Product column in the packages of noodles row",
+    ["BRAILLE LINE:  'gtk3-demo application Shopping list frame table Number column header 5 packages of 
noodles '",
+     "     VISIBLE:  '5 packages of noodles ', cursor=1",
+     "BRAILLE LINE:  'gtk3-demo application Shopping list frame table Product column header packages of 
noodles table cell'",
+     "     VISIBLE:  'packages of noodles table cell', cursor=1",
+     "SPEECH OUTPUT: 'Product column header packages of noodles'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Table up to bottles of coke",
+    ["BRAILLE LINE:  'gtk3-demo application Shopping list frame table Product column header bottles of coke 
table cell'",
+     "     VISIBLE:  'bottles of coke table cell', cursor=1",
+     "SPEECH OUTPUT: 'bottles of coke'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_text_multiline.py 
b/test/keystrokes/gtk3-demo/role_text_multiline.py
new file mode 100644
index 0000000..97e9ee5
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_text_multiline.py
@@ -0,0 +1,220 @@
+#!/usr/bin/python
+
+"""Test of multiline editable text."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Application class"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(TypeAction("This is a test."))
+sequence.append(KeyComboAction("Return"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Typing",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame T $l'",
+     "     VISIBLE:  'T $l', cursor=2",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame T $l'",
+     "     VISIBLE:  'T $l', cursor=2",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame Th $l'",
+     "     VISIBLE:  'Th $l', cursor=3",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame Th $l'",
+     "     VISIBLE:  'Th $l', cursor=3",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame Thi $l'",
+     "     VISIBLE:  'Thi $l', cursor=4",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame Thi $l'",
+     "     VISIBLE:  'Thi $l', cursor=4",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This $l'",
+     "     VISIBLE:  'This $l', cursor=5",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This $l'",
+     "     VISIBLE:  'This $l', cursor=5",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This  $l'",
+     "     VISIBLE:  'This  $l', cursor=6",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This  $l'",
+     "     VISIBLE:  'This  $l', cursor=6",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This i $l'",
+     "     VISIBLE:  'This i $l', cursor=7",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This i $l'",
+     "     VISIBLE:  'This i $l', cursor=7",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is $l'",
+     "     VISIBLE:  'This is $l', cursor=8",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is $l'",
+     "     VISIBLE:  'This is $l', cursor=8",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is  $l'",
+     "     VISIBLE:  'This is  $l', cursor=9",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is  $l'",
+     "     VISIBLE:  'This is  $l', cursor=9",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a $l'",
+     "     VISIBLE:  'This is a $l', cursor=10",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a $l'",
+     "     VISIBLE:  'This is a $l', cursor=10",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a  $l'",
+     "     VISIBLE:  'This is a  $l', cursor=11",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a  $l'",
+     "     VISIBLE:  'This is a  $l', cursor=11",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a t $l'",
+     "     VISIBLE:  'This is a t $l', cursor=12",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a t $l'",
+     "     VISIBLE:  'This is a t $l', cursor=12",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a te $l'",
+     "     VISIBLE:  'This is a te $l', cursor=13",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a te $l'",
+     "     VISIBLE:  'This is a te $l', cursor=13",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a tes $l'",
+     "     VISIBLE:  'This is a tes $l', cursor=14",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a tes $l'",
+     "     VISIBLE:  'This is a tes $l', cursor=14",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test $l'",
+     "     VISIBLE:  'This is a test $l', cursor=15",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test $l'",
+     "     VISIBLE:  'This is a test $l', cursor=15",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+     "     VISIBLE:  'This is a test. $l', cursor=16",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+     "     VISIBLE:  'This is a test. $l', cursor=16",
+     "BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1"]))
+
+sequence.append(TypeAction("Here is another test."))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Navigate home",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+     "     VISIBLE:  'This is a test. $l', cursor=1",
+     "SPEECH OUTPUT: 'This is a test.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Right"))
+sequence.append(KeyComboAction("Right"))
+sequence.append(KeyComboAction("Right"))
+sequence.append(KeyComboAction("Right"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Arrow to end of 'This'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+     "     VISIBLE:  'This is a test. $l', cursor=2",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+     "     VISIBLE:  'This is a test. $l', cursor=3",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+     "     VISIBLE:  'This is a test. $l', cursor=4",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+     "     VISIBLE:  'This is a test. $l', cursor=5",
+     "SPEECH OUTPUT: 'h'",
+     "SPEECH OUTPUT: 'i'",
+     "SPEECH OUTPUT: 's'",
+     "SPEECH OUTPUT: 'space'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift><Control>Right"))
+sequence.append(KeyComboAction("<Shift><Control>Right"))
+sequence.append(KeyComboAction("<Shift><Control>Right"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Select 'is a test'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+     "     VISIBLE:  'This is a test. $l', cursor=8",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+     "     VISIBLE:  'This is a test. $l', cursor=10",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+     "     VISIBLE:  'This is a test. $l', cursor=15",
+     "SPEECH OUTPUT: ' is'",
+     "SPEECH OUTPUT: 'selected'",
+     "SPEECH OUTPUT: ' a'",
+     "SPEECH OUTPUT: 'selected'",
+     "SPEECH OUTPUT: ' test'",
+     "SPEECH OUTPUT: 'selected'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift><Control>Left"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Unselect 'test'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+     "     VISIBLE:  'This is a test. $l', cursor=11",
+     "SPEECH OUTPUT: 'test'",
+     "SPEECH OUTPUT: 'unselected'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+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'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>Down"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Shift Down",
+    ["BRAILLE LINE:  'Here is another test. $l'",
+     "     VISIBLE:  'Here is another test. $l', cursor=10",
+     "SPEECH OUTPUT: 'test.",
+     "Here is a'",
+     "SPEECH OUTPUT: 'selected' voice=system"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>End"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Shift End",
+    ["BRAILLE LINE:  'Here is another test. $l'",
+     "     VISIBLE:  'Here is another test. $l', cursor=22",
+     "SPEECH OUTPUT: 'nother test.'",
+     "SPEECH OUTPUT: 'selected' voice=system"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+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'"]))
+
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+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'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Navigate home",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+     "     VISIBLE:  'This is a test. $l', cursor=1",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
+     "     VISIBLE:  'This is a test. $l', cursor=1",
+     "SPEECH OUTPUT: 'This is a test.'",
+     "SPEECH OUTPUT: ' is a test.",
+     "Here is another test.'",
+     "SPEECH OUTPUT: 'unselected' voice=system"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Add"))
+sequence.append(utils.AssertPresentationAction(
+    "12. SayAll",
+    ["SPEECH OUTPUT: 'This is a test.",
+     "'",
+     "SPEECH OUTPUT: 'Here is another test.'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_text_multiline_flatreview.py 
b/test/keystrokes/gtk3-demo/role_text_multiline_flatreview.py
new file mode 100644
index 0000000..cf3332e
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_text_multiline_flatreview.py
@@ -0,0 +1,345 @@
+#!/usr/bin/python
+
+"""Test of flat review of text and a toolbar."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Application class"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(TypeAction("This is a test. "))
+sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("This is only a test."))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("PLEASE DO NOT PANIC."))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Down"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Subtract"))
+sequence.append(utils.AssertPresentationAction(
+    "1. KP_Subtract to enter flat review",
+    ["BRAILLE LINE:  'Entering flat review.'",
+     "     VISIBLE:  'Entering flat review.', cursor=0",
+     "BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
+     "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
+     "SPEECH OUTPUT: 'Entering flat review.'",
+     "SPEECH OUTPUT: 'PLEASE' voice=uppercase"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "2. KP_8 to flat review 'PLEASE DO NOT PANIC.'",
+    ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
+     "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
+     "SPEECH OUTPUT: 'PLEASE DO NOT PANIC.",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(utils.AssertPresentationAction(
+    "3. KP_5 to flat review 'PLEASE'",
+    ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
+     "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
+     "SPEECH OUTPUT: 'PLEASE'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_2"))
+sequence.append(utils.AssertPresentationAction(
+    "4. KP_2 to flat review 'P'",
+    ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
+     "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
+     "SPEECH OUTPUT: 'P'"]))
+
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(KeyComboAction("Down"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(utils.AssertPresentationAction(
+    "5. KP_5 to flat review 'This'",
+    ["BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "SPEECH OUTPUT: 'This'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(utils.AssertPresentationAction(
+    "6. KP_5 2X to spell 'This'",
+    ["BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "SPEECH OUTPUT: 'This'",
+     "SPEECH OUTPUT: 'T'",
+     "SPEECH OUTPUT: 'h'",
+     "SPEECH OUTPUT: 'i'",
+     "SPEECH OUTPUT: 's'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(utils.AssertPresentationAction(
+    "7. KP_5 3X to military spell 'This'",
+    ["BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "SPEECH OUTPUT: 'This'",
+     "SPEECH OUTPUT: 'T'",
+     "SPEECH OUTPUT: 'h'",
+     "SPEECH OUTPUT: 'i'",
+     "SPEECH OUTPUT: 's'",
+     "SPEECH OUTPUT: 'tango' voice=uppercase",
+     "SPEECH OUTPUT: 'hotel'",
+     "SPEECH OUTPUT: 'india'",
+     "SPEECH OUTPUT: 'sierra'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "8. KP_8 to flat review 'This is only a test.'",
+    ["BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "SPEECH OUTPUT: 'This is only a test.",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "9. KP_8 2X to spell 'This is only a test.'",
+    ["BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "SPEECH OUTPUT: 'This is only a test.",
+     "'",
+     "SPEECH OUTPUT: 'T'",
+     "SPEECH OUTPUT: 'h'",
+     "SPEECH OUTPUT: 'i'",
+     "SPEECH OUTPUT: 's'",
+     "SPEECH OUTPUT: 'space'",
+     "SPEECH OUTPUT: 'i'",
+     "SPEECH OUTPUT: 's'",
+     "SPEECH OUTPUT: 'space'",
+     "SPEECH OUTPUT: 'o'",
+     "SPEECH OUTPUT: 'n'",
+     "SPEECH OUTPUT: 'l'",
+     "SPEECH OUTPUT: 'y'",
+     "SPEECH OUTPUT: 'space'",
+     "SPEECH OUTPUT: 'a'",
+     "SPEECH OUTPUT: 'space'",
+     "SPEECH OUTPUT: 't'",
+     "SPEECH OUTPUT: 'e'",
+     "SPEECH OUTPUT: 's'",
+     "SPEECH OUTPUT: 't'",
+     "SPEECH OUTPUT: 'dot'",
+     "SPEECH OUTPUT: 'newline'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "10. KP_8 3X to military spell 'This is only a test.'",
+    ["BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "SPEECH OUTPUT: 'This is only a test.",
+     "'",
+     "SPEECH OUTPUT: 'T'",
+     "SPEECH OUTPUT: 'h'",
+     "SPEECH OUTPUT: 'i'",
+     "SPEECH OUTPUT: 's'",
+     "SPEECH OUTPUT: 'space'",
+     "SPEECH OUTPUT: 'i'",
+     "SPEECH OUTPUT: 's'",
+     "SPEECH OUTPUT: 'space'",
+     "SPEECH OUTPUT: 'o'",
+     "SPEECH OUTPUT: 'n'",
+     "SPEECH OUTPUT: 'l'",
+     "SPEECH OUTPUT: 'y'",
+     "SPEECH OUTPUT: 'space'",
+     "SPEECH OUTPUT: 'a'",
+     "SPEECH OUTPUT: 'space'",
+     "SPEECH OUTPUT: 't'",
+     "SPEECH OUTPUT: 'e'",
+     "SPEECH OUTPUT: 's'",
+     "SPEECH OUTPUT: 't'",
+     "SPEECH OUTPUT: 'dot'",
+     "SPEECH OUTPUT: 'newline'",
+     "SPEECH OUTPUT: 'tango' voice=uppercase",
+     "SPEECH OUTPUT: 'hotel'",
+     "SPEECH OUTPUT: 'india'",
+     "SPEECH OUTPUT: 'sierra'",
+     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 'india'",
+     "SPEECH OUTPUT: 'sierra'",
+     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 'oscar'",
+     "SPEECH OUTPUT: 'november'",
+     "SPEECH OUTPUT: 'lima'",
+     "SPEECH OUTPUT: 'yankee'",
+     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 'alpha'",
+     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 'tango'",
+     "SPEECH OUTPUT: 'echo'",
+     "SPEECH OUTPUT: 'sierra'",
+     "SPEECH OUTPUT: 'tango'",
+     "SPEECH OUTPUT: '.'",
+     "SPEECH OUTPUT: '",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_2"))
+sequence.append(utils.AssertPresentationAction(
+    "11. KP_2 to flat review 'T'",
+    ["BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "SPEECH OUTPUT: 'T'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_2"))
+sequence.append(KeyComboAction("KP_2"))
+sequence.append(utils.AssertPresentationAction(
+    "12. KP_2 2X to military spell 'T'",
+    ["BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "SPEECH OUTPUT: 'T'",
+     "SPEECH OUTPUT: 'tango' voice=uppercase"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "13. KP_6 to flat review 'is'",
+    ["BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=6",
+     "SPEECH OUTPUT: 'is'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "14. KP_7 to flat review 'This is a test.' and the scrollbar",
+    ["BRAILLE LINE:  'This is a test.  vertical scroll bar 0% $l'",
+     "     VISIBLE:  'This is a test.  vertical scroll', cursor=1",
+     "SPEECH OUTPUT: 'This is a test. ",
+     " vertical scroll bar 0 percent.'"]))
+
+sequence.append(utils.StartRecordingAction())
+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'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "16. KP_7 to flat review menu",
+    ["BRAILLE LINE:  'Preferences Help $l'",
+     "     VISIBLE:  'Preferences Help $l', cursor=1",
+     "SPEECH OUTPUT: 'Preferences Help'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(utils.AssertPresentationAction(
+    "17. KP_5 to flat review 'Preferences'",
+    ["BRAILLE LINE:  'Preferences Help $l'",
+     "     VISIBLE:  'Preferences Help $l', cursor=1",
+     "SPEECH OUTPUT: 'Preferences'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "18. KP_6 to flat review 'Help'",
+    ["BRAILLE LINE:  'Preferences Help $l'",
+     "     VISIBLE:  'Preferences Help $l', cursor=13",
+     "SPEECH OUTPUT: 'Help'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+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'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+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",
+     "SPEECH OUTPUT: 'Cursor at row 1 column 0 - 60 chars in document'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "21. Insert+KP_7 to flat review home",
+    ["BRAILLE LINE:  'Preferences Help $l'",
+     "     VISIBLE:  'Preferences Help $l', cursor=1",
+     "SPEECH OUTPUT: 'Preferences Help'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+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",
+     "SPEECH OUTPUT: 'push button'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(KeyComboAction("KP_4"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "23. Insert+KP_4 to flat review above",
+    ["BRAILLE LINE:  'Preferences Help $l'",
+     "     VISIBLE:  'Preferences Help $l', cursor=1",
+     "SPEECH OUTPUT: 'Preferences'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Subtract"))
+sequence.append(utils.AssertPresentationAction(
+    "24. KP_Subtract to exit flat review",
+    ["BRAILLE LINE:  'Leaving flat review.'",
+     "     VISIBLE:  'Leaving flat review.', cursor=0",
+     "BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "SPEECH OUTPUT: 'Leaving flat review.' voice=system"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_text_multiline_navigation.py 
b/test/keystrokes/gtk3-demo/role_text_multiline_navigation.py
new file mode 100644
index 0000000..8365437
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_text_multiline_navigation.py
@@ -0,0 +1,388 @@
+#!/usr/bin/python
+
+"""Test of text output for caret navigation."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Application class"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(TypeAction("This is a test. "))
+sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("This is only a test."))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("PLEASE DO NOT PANIC."))
+sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction(" "))
+sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("I'm just going to keep on typing."))
+sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("Then, I'm going to type some"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("more.  I just do not know when to"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("quit typing."))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("I think I might have spent too much"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("time in the lab and not enough time"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("in the wild."))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Left"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Left once from end to '.' after 'wild'",
+    ["BRAILLE LINE:  'in the wild. $l'",
+     "     VISIBLE:  'in the wild. $l', cursor=12",
+     "SPEECH OUTPUT: 'dot'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Left"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Left a second time to 'd' in 'wild'",
+    ["BRAILLE LINE:  'in the wild. $l'",
+     "     VISIBLE:  'in the wild. $l', cursor=11",
+     "SPEECH OUTPUT: 'd'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Left"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Left a third time to 'l' in 'wild'",
+    ["BRAILLE LINE:  'in the wild. $l'",
+     "     VISIBLE:  'in the wild. $l', cursor=10",
+     "SPEECH OUTPUT: 'l'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Left"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Ctrl+Left to beginning of 'wild'",
+    ["BRAILLE LINE:  'in the wild. $l'",
+     "     VISIBLE:  'in the wild. $l', cursor=8",
+     "SPEECH OUTPUT: 'wild.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Left"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Ctrl+Left to beginning of 'the'",
+    ["BRAILLE LINE:  'in the wild. $l'",
+     "     VISIBLE:  'in the wild. $l', cursor=4",
+     "SPEECH OUTPUT: 'the '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Left"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Ctrl+Left to beginning of 'in'",
+    ["BRAILLE LINE:  'in the wild. $l'",
+     "     VISIBLE:  'in the wild. $l', cursor=1",
+     "SPEECH OUTPUT: 'in '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Left"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Ctrl+Left to beginning of 'time' at end of previous line",
+    ["BRAILLE LINE:  'time in the lab and not enough time $l'",
+     "     VISIBLE:  'time in the lab and not enough t', cursor=32",
+     "SPEECH OUTPUT: 'newline'",
+     "SPEECH OUTPUT: 'time",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Home"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Home to beginning of line",
+    ["BRAILLE LINE:  'time in the lab and not enough time $l'",
+     "     VISIBLE:  'time in the lab and not enough t', cursor=1",
+     "SPEECH OUTPUT: 't'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("End"))
+sequence.append(utils.AssertPresentationAction(
+    "9. End to end of line",
+    ["BRAILLE LINE:  'time in the lab and not enough time $l'",
+     "     VISIBLE:  ' in the lab and not enough time ', cursor=32",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "10. Ctrl+Home to beginning of document",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+     "     VISIBLE:  'This is a test.  $l', cursor=1",
+     "SPEECH OUTPUT: 'This is a test. '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>End"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Ctrl+End to end of document",
+    ["BRAILLE LINE:  'in the wild. $l'",
+     "     VISIBLE:  'in the wild. $l', cursor=13",
+     "SPEECH OUTPUT: 'in the wild.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "12. Ctrl+Home back to beginning of document",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+     "     VISIBLE:  'This is a test.  $l', cursor=1",
+     "SPEECH OUTPUT: 'This is a test. '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Right"))
+sequence.append(utils.AssertPresentationAction(
+    "13. Right once to 'h' in 'This'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+     "     VISIBLE:  'This is a test.  $l', cursor=2",
+     "SPEECH OUTPUT: 'h'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Right"))
+sequence.append(utils.AssertPresentationAction(
+    "14. Right a second time to 'i' in 'This'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+     "     VISIBLE:  'This is a test.  $l', cursor=3",
+     "SPEECH OUTPUT: 'i'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Right"))
+sequence.append(utils.AssertPresentationAction(
+    "15. Right a third time to 's' in 'This'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+     "     VISIBLE:  'This is a test.  $l', cursor=4",
+     "SPEECH OUTPUT: 's'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Right"))
+sequence.append(utils.AssertPresentationAction(
+    "16. Ctrl+Right to end of 'This'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+     "     VISIBLE:  'This is a test.  $l', cursor=5",
+     "SPEECH OUTPUT: 'newline'",
+     "SPEECH OUTPUT: 'This '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Right"))
+sequence.append(utils.AssertPresentationAction(
+    "17. Ctrl+Right to end of 'is'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+     "     VISIBLE:  'This is a test.  $l', cursor=8",
+     "SPEECH OUTPUT: 'is '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Right"))
+sequence.append(utils.AssertPresentationAction(
+    "18. Ctrl+Right to end of 'a'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+     "     VISIBLE:  'This is a test.  $l', cursor=10",
+     "SPEECH OUTPUT: 'a '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "19. Down a line to 'n' in 'only'",
+    ["BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=10",
+     "SPEECH OUTPUT: 'This is only a test.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("End"))
+sequence.append(utils.AssertPresentationAction(
+    "20. End of line",
+    ["BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=21",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Right"))
+sequence.append(utils.AssertPresentationAction(
+    "21. Right to blank line",
+    ["BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Right"))
+sequence.append(utils.AssertPresentationAction(
+    "22. Right to beginning of 'PLEASE'",
+    ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
+     "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
+     "SPEECH OUTPUT: 'P'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "23. Down to line with one space",
+    ["BRAILLE LINE:  '  $l'",
+     "     VISIBLE:  '  $l', cursor=1",
+     "SPEECH OUTPUT: ' '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "24. Back up to 'PLEASE DO NOT PANIC.'",
+    ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
+     "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
+     "SPEECH OUTPUT: 'PLEASE DO NOT PANIC.' voice=uppercase"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Right"))
+sequence.append(utils.AssertPresentationAction(
+    "25. Ctrl+Right over PLEASE",
+    ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
+     "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=7",
+     "SPEECH OUTPUT: 'PLEASE '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Left"))
+sequence.append(utils.AssertPresentationAction(
+    "26. Ctrl+Left over PLEASE",
+    ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
+     "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
+     "SPEECH OUTPUT: 'PLEASE '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(TypeAction("f"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "27. Insert+f for text attributes",
+    ["SPEECH OUTPUT: 'size 11' voice=system",
+     "SPEECH OUTPUT: 'family name Cantarell' voice=system"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Left"))
+sequence.append(utils.AssertPresentationAction(
+    "28. Left to blank line",
+    ["BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Right"))
+sequence.append(utils.AssertPresentationAction(
+    "29. Right to beginning of 'PLEASE' again",
+    ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
+     "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
+     "SPEECH OUTPUT: 'P'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "30. Up to blank line",
+    ["BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "31. Ctrl+Home to beginning of document",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+     "     VISIBLE:  'This is a test.  $l', cursor=1",
+     "SPEECH OUTPUT: 'This is a test. '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Delete"))
+sequence.append(utils.AssertPresentationAction(
+    "32. Delete right 'T' in 'This'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame his is a test.  $l'",
+     "     VISIBLE:  'his is a test.  $l', cursor=1",
+     "SPEECH OUTPUT: 'h'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Delete"))
+sequence.append(utils.AssertPresentationAction(
+    "33. Delete right 'h' in 'his'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame is is a test.  $l'",
+     "     VISIBLE:  'is is a test.  $l', cursor=1",
+     "SPEECH OUTPUT: 'i'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Delete"))
+sequence.append(utils.AssertPresentationAction(
+    "34. Ctrl+Delete right remaining 'is' of 'This'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame  is a test.  $l'",
+     "     VISIBLE:  ' is a test.  $l', cursor=1",
+     "SPEECH OUTPUT: 'space'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Delete"))
+sequence.append(utils.AssertPresentationAction(
+    "35. Ctrl+Delete right 'is'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame  a test.  $l'",
+     "     VISIBLE:  ' a test.  $l', cursor=1",
+     "SPEECH OUTPUT: 'space'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "36. Down a line",
+    ["BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "SPEECH OUTPUT: 'This is only a test.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("End"))
+sequence.append(utils.AssertPresentationAction(
+    "37. End of line",
+    ["BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=21",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("BackSpace"))
+sequence.append(utils.AssertPresentationAction(
+    "38. BackSpace '.' after 'test'",
+    ["BRAILLE LINE:  'This is only a test $l'",
+     "     VISIBLE:  'This is only a test $l', cursor=20",
+     "SPEECH OUTPUT: 'dot'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>BackSpace"))
+sequence.append(utils.AssertPresentationAction(
+    "39. Ctrl+BackSpace to delete 'this'",
+    ["BRAILLE LINE:  'This is only a  $l'",
+     "     VISIBLE:  'This is only a  $l', cursor=16",
+     "BRAILLE LINE:  'This is only a  $l'",
+     "     VISIBLE:  'This is only a  $l', cursor=16",
+     "SPEECH OUTPUT: 'test'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>BackSpace"))
+sequence.append(utils.AssertPresentationAction(
+    "40. Ctrl+BackSpace to delete 'a'",
+    ["BRAILLE LINE:  'This is only  $l'",
+     "     VISIBLE:  'This is only  $l', cursor=14",
+     "SPEECH OUTPUT: 'a '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Left"))
+sequence.append(utils.AssertPresentationAction(
+    "41. Ctrl+Left to beginning of 'only'",
+    ["BRAILLE LINE:  'This is only  $l'",
+     "     VISIBLE:  'This is only  $l', cursor=9",
+     "SPEECH OUTPUT: 'newline'",
+     "SPEECH OUTPUT: 'only ",
+     "",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Left"))
+sequence.append(utils.AssertPresentationAction(
+    "42. Ctrl+Left to beginning of 'is'",
+    ["BRAILLE LINE:  'This is only  $l'",
+     "     VISIBLE:  'This is only  $l', cursor=6",
+     "SPEECH OUTPUT: 'is '"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_text_multiline_navigation2.py 
b/test/keystrokes/gtk3-demo/role_text_multiline_navigation2.py
new file mode 100644
index 0000000..a7ac5ed
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_text_multiline_navigation2.py
@@ -0,0 +1,143 @@
+#!/usr/bin/python
+
+"""Test of text output for caret navigation and flat review."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Application class"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(TypeAction("This is a test. "))
+sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("This is only a test."))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("Right"))
+sequence.append(KeyComboAction("Right"))
+sequence.append(KeyComboAction("Right"))
+sequence.append(KeyComboAction("Right"))
+sequence.append(KeyComboAction("Right"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift><Control>Page_Up"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Shift+Ctrl+Page_Up to select text to beginning of line",
+    ["BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "SPEECH OUTPUT: 'line selected from start to previous cursor position'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift><Control>Page_Down"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Shift+Ctrl+Page_Down to select text to end of line",
+    ["BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=21",
+     "SPEECH OUTPUT: 'line selected to end from previous cursor position'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>Up"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Shift+Up to deselect some text and select some text above",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+     "     VISIBLE:  'This is a test.  $l', cursor=17",
+     "SPEECH OUTPUT: 'is only a test.'",
+     "SPEECH OUTPUT: 'unselected' voice=system",
+     "SPEECH OUTPUT: '",
+     "This '",
+     "SPEECH OUTPUT: 'selected' voice=system"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>Down"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Shift+Down to deselect some text and select some text below",
+    ["BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=21",
+     "SPEECH OUTPUT: '",
+     "This '",
+     "SPEECH OUTPUT: 'unselected' voice=system",
+     "SPEECH OUTPUT: 'is only a test.'",
+     "SPEECH OUTPUT: 'selected' voice=system"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Page_Up"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Ctrl+Page_Up to beginning of line",
+    ["BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "SPEECH OUTPUT: 'T'",
+     "SPEECH OUTPUT: 'is only a test.'",
+     "SPEECH OUTPUT: 'unselected' voice=system"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Page_Down"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Ctrl+Page_Down to end of line",
+    ["BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=21",
+     "SPEECH OUTPUT: 'This is only a test.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Page_Up"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Page up",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+     "     VISIBLE:  'This is a test.  $l', cursor=1",
+     "SPEECH OUTPUT: 'This is a test. '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Page_Down"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Page down",
+    ["BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>Page_Up"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Shift+Page_Up to select text",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+     "     VISIBLE:  'This is a test.  $l', cursor=1",
+     "SPEECH OUTPUT: 'page selected to cursor position'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>Page_Down"))
+sequence.append(utils.AssertPresentationAction(
+    "10. Shift+Page_Down to deselect text",
+    ["BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "SPEECH OUTPUT: 'blank' voice=system",
+     "SPEECH OUTPUT: 'page unselected from cursor position'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Page_Up"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Page_Up",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
+     "     VISIBLE:  'This is a test.  $l', cursor=1",
+     "SPEECH OUTPUT: 'This is a test. '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Add"))
+sequence.append(utils.AssertPresentationAction(
+    "12. KP_Add to do a SayAll",
+    ["SPEECH OUTPUT: 'This is a test. ",
+     "'",
+     "SPEECH OUTPUT: 'This is only a test.",
+     "'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_toggle_button.py b/test/keystrokes/gtk3-demo/role_toggle_button.py
new file mode 100644
index 0000000..70c48b2
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_toggle_button.py
@@ -0,0 +1,52 @@
+#!/usr/bin/python
+
+"""Test of toggle button output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Expander"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+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'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Return"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Toggle button state changed to expanded",
+    ["BRAILLE LINE:  'gtk3-demo application GtkExpander dialog &=y Details expanded toggle button'",
+     "     VISIBLE:  '&=y Details expanded toggle butt', cursor=1",
+     "SPEECH OUTPUT: 'expanded'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+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'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Return"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Toggle button state changed to collapsed",
+    ["BRAILLE LINE:  'gtk3-demo application GtkExpander dialog & y Details collapsed toggle button'",
+     "     VISIBLE:  '& y Details collapsed toggle but', cursor=1",
+     "SPEECH OUTPUT: 'collapsed'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_toolbar.py b/test/keystrokes/gtk3-demo/role_toolbar.py
new file mode 100644
index 0000000..312ae54
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_toolbar.py
@@ -0,0 +1,70 @@
+#!/usr/bin/python
+
+"""Test of toolbar output using."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Application class"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Push button initial focus",
+    ["KNOWN ISSUE: The widgets on the toolbar no longer have accessible names, so Orca cannot present them.",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame push button'",
+     "     VISIBLE:  'push button', cursor=1",
+     "SPEECH OUTPUT: 'push button'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Where Am I",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame push button'",
+     "     VISIBLE:  'push button', cursor=1",
+     "SPEECH OUTPUT: 'tool bar push button'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Right"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Open triangle toggle button",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame & y Menu toggle button'",
+     "     VISIBLE:  '& y Menu toggle button', cursor=1",
+     "SPEECH OUTPUT: 'Menu toggle button not pressed'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+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'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Right"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Next push button",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame push button'",
+     "     VISIBLE:  'push button', cursor=1",
+     "SPEECH OUTPUT: 'push button'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Where Am I",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame push button'",
+     "     VISIBLE:  'push button', cursor=1",
+     "SPEECH OUTPUT: 'tool bar push button'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_tooltip.py b/test/keystrokes/gtk3-demo/role_tooltip.py
new file mode 100644
index 0000000..285bafd
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_tooltip.py
@@ -0,0 +1,46 @@
+#!/usr/bin/python
+
+"""Test of tooltips."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Printing"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(KeyComboAction("<Alt>e"))
+sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>F1"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Show tooltip",
+    ["BRAILLE LINE:  'Specify one or more page ranges,",
+     " e.g. 1-3,7,11'",
+     "     VISIBLE:  'Specify one or more page ranges,', cursor=0",
+     "SPEECH OUTPUT: 'Specify one or more page ranges,",
+     " e.g. 1-3,7,11'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>F1"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Hide tooltip",
+    ["KNOWN ISSUE: Too much context",
+     "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: 'Print'",
+     "SPEECH OUTPUT: 'General'",
+     "SPEECH OUTPUT: 'page tab'",
+     "SPEECH OUTPUT: 'Range'",
+     "SPEECH OUTPUT: 'panel'",
+     "SPEECH OUTPUT: 'Pages:'",
+     "SPEECH OUTPUT: 'selected radio button'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_tree_table.py b/test/keystrokes/gtk3-demo/role_tree_table.py
new file mode 100644
index 0000000..247e43d
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_tree_table.py
@@ -0,0 +1,137 @@
+#!/usr/bin/python
+
+"""Test of tree table output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("End"))
+sequence.append(KeyComboAction("<Shift>Right"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "1. January cell focus",
+    ["BRAILLE LINE:  'gtk3-demo application Card planning sheet frame tree table Holiday column header 
January expanded < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
+     "     VISIBLE:  'January expanded < > Alex < > Ha', cursor=1",
+     "SPEECH OUTPUT: 'January expanded 3 items Alex check box not checked Havoc check box not checked Tim 
check box not checked Owen check box not checked Dave check box not checked tree level 1'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "2. January cell basic Where Am I",
+    ["BRAILLE LINE:  'gtk3-demo application Card planning sheet frame tree table Holiday column header 
January expanded < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
+     "     VISIBLE:  'January expanded < > Alex < > Ha', cursor=1",
+     "SPEECH OUTPUT: 'tree table Holiday table cell January column 1 of 6 row 1 of 53 expanded tree level 
1'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "3. January cell detailed Where Am I",
+    ["BRAILLE LINE:  'gtk3-demo application Card planning sheet frame tree table Holiday column header 
January expanded < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
+     "     VISIBLE:  'January expanded < > Alex < > Ha', cursor=1",
+     "BRAILLE LINE:  'gtk3-demo application Card planning sheet frame tree table Holiday column header 
January expanded < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
+     "     VISIBLE:  'January expanded < > Alex < > Ha', cursor=1",
+     "SPEECH OUTPUT: 'tree table Holiday table cell January column 1 of 6 row 1 of 53 expanded tree level 
1'",
+     "SPEECH OUTPUT: 'tree table Holiday table cell January column 1 of 6 row 1 of 53 January expanded 3 
items Alex check box not checked Havoc check box not checked Tim check box not checked Owen check box not 
checked Dave check box not checked expanded tree level 1'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>Left"))
+sequence.append(utils.AssertPresentationAction(
+    "4. January cell collapsed",
+    ["BRAILLE LINE:  'gtk3-demo application Card planning sheet frame tree table Holiday column header 
January collapsed < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
+     "     VISIBLE:  'January collapsed < > Alex < > H', cursor=1",
+     "SPEECH OUTPUT: 'collapsed'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "5. January cell collapsed basic Where Am I",
+    ["BRAILLE LINE:  'gtk3-demo application Card planning sheet frame tree table Holiday column header 
January collapsed < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
+     "     VISIBLE:  'January collapsed < > Alex < > H', cursor=1",
+     "SPEECH OUTPUT: 'tree table Holiday table cell January column 1 of 6 row 1 of 50 collapsed tree level 
1'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "6. January cell collapsed detailed Where Am I",
+    ["BRAILLE LINE:  'gtk3-demo application Card planning sheet frame tree table Holiday column header 
January collapsed < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
+     "     VISIBLE:  'January collapsed < > Alex < > H', cursor=1",
+     "BRAILLE LINE:  'gtk3-demo application Card planning sheet frame tree table Holiday column header 
January collapsed < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
+     "     VISIBLE:  'January collapsed < > Alex < > H', cursor=1",
+     "SPEECH OUTPUT: 'tree table Holiday table cell January column 1 of 6 row 1 of 50 collapsed tree level 
1'",
+     "SPEECH OUTPUT: 'tree table Holiday table cell January column 1 of 6 row 1 of 50 January collapsed Alex 
check box not checked Havoc check box not checked Tim check box not checked Owen check box not checked Dave 
check box not checked collapsed tree level 1'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>Right"))
+sequence.append(utils.AssertPresentationAction(
+    "7. January cell expanded",
+    ["BRAILLE LINE:  'gtk3-demo application Card planning sheet frame tree table Holiday column header 
January expanded < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
+    "     VISIBLE:  'January expanded < > Alex < > Ha', cursor=1",
+    "SPEECH OUTPUT: 'expanded 3 items'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "8. New Year's Day cell",
+    ["BRAILLE LINE:  'gtk3-demo application Card planning sheet frame tree table Holiday column header New 
Years Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave TREE LEVEL 2'",
+     "     VISIBLE:  'New Years Day <x> Alex <x> Havoc', cursor=1",
+     "SPEECH OUTPUT: 'New Years Day Alex check box checked Havoc check box checked Tim check box checked 
Owen check box checked Dave check box not checked tree level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Right"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Alex checkbox cell",
+    ["BRAILLE LINE:  'gtk3-demo application Card planning sheet frame tree table Alex column header New 
Years Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
+     "     VISIBLE:  '<x> Alex <x> Havoc <x> Tim <x> O', cursor=1",
+     "SPEECH OUTPUT: 'Alex column header check box checked'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "10. Alex checkbox cell basic Where Am I",
+    ["BRAILLE LINE:  'gtk3-demo application Card planning sheet frame tree table Alex column header New 
Years Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
+     "     VISIBLE:  '<x> Alex <x> Havoc <x> Tim <x> O', cursor=1",
+     "SPEECH OUTPUT: 'tree table Alex table cell check box checked column 2 of 6 row 2 of 53'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Alex checkbox cell detailed Where Am I",
+    ["BRAILLE LINE:  'gtk3-demo application Card planning sheet frame tree table Alex column header New 
Years Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
+     "     VISIBLE:  '<x> Alex <x> Havoc <x> Tim <x> O', cursor=1",
+     "BRAILLE LINE:  'gtk3-demo application Card planning sheet frame tree table Alex column header New 
Years Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
+     "     VISIBLE:  '<x> Alex <x> Havoc <x> Tim <x> O', cursor=1",
+     "SPEECH OUTPUT: 'tree table Alex table cell check box checked column 2 of 6 row 2 of 53'",
+     "SPEECH OUTPUT: 'tree table Alex table cell check box checked column 2 of 6 row 2 of 53 New Years Day 
Alex check box checked Havoc check box checked Tim check box checked Owen check box checked Dave check box 
not checked'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(TypeAction(" "))
+sequence.append(utils.AssertPresentationAction(
+    "12. Alex checkbox cell unchecked",
+    ["BRAILLE LINE:  'gtk3-demo application Card planning sheet frame tree table Alex column header New 
Years Day < > Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
+     "     VISIBLE:  '< > Alex <x> Havoc <x> Tim <x> O', cursor=1",
+     "SPEECH OUTPUT: 'not checked'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(TypeAction(" "))
+sequence.append(utils.AssertPresentationAction(
+    "13. Alex checkbox cell checked",
+    ["BRAILLE LINE:  'gtk3-demo application Card planning sheet frame tree table Alex column header New 
Years Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
+     "     VISIBLE:  '<x> Alex <x> Havoc <x> Tim <x> O', cursor=1",
+     "SPEECH OUTPUT: 'checked'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_window.py b/test/keystrokes/gtk3-demo/role_window.py
new file mode 100644
index 0000000..7db5eca
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_window.py
@@ -0,0 +1,21 @@
+#!/usr/bin/python
+
+"""Test of window title output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Window Where Am I",
+    ["BRAILLE LINE:  'Application Class'",
+     "     VISIBLE:  'Application Class', cursor=0",
+     "SPEECH OUTPUT: 'Application Class'"]))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/spoken_indentation.py b/test/keystrokes/gtk3-demo/spoken_indentation.py
new file mode 100644
index 0000000..47b83e6
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/spoken_indentation.py
@@ -0,0 +1,296 @@
+#!/usr/bin/python
+
+"""Test of presentation of whitespace with braille disabled."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Application class"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction("foo"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction("foo"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(TypeAction(" "))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(TypeAction(" foo"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(TypeAction("  "))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(TypeAction("  foo"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction(" "))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction(" foo"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction("  "))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction("  foo"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction(" "))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction(" foo"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction("  "))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction("  foo"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction(" "))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction(" "))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction("foo"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction(" "))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction(" "))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction(" "))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction(" foo"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction("  "))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction("  "))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction("foo"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(TypeAction("  "))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(TypeAction("  "))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction("foo"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "1. 1 Tab",
+    ["KNOWN ISSUE: We verbalize AND speak it rather than just verbalizing it",
+     "SPEECH OUTPUT: 'left control '",
+     "SPEECH OUTPUT: '1 tab ' voice=system",
+     "SPEECH OUTPUT: ' '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "2. 1 Tab and the word 'foo'",
+    ["SPEECH OUTPUT: '1 tab ' voice=system",
+     "SPEECH OUTPUT: ' foo'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "3. 2 Tabs",
+    ["SPEECH OUTPUT: '2 tabs ' voice=system",
+     "SPEECH OUTPUT: '         '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "4. 2 Tabs and the word 'foo'",
+    ["SPEECH OUTPUT: '2 tabs ' voice=system",
+     "SPEECH OUTPUT: '         foo'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "5. 1 space",
+    ["SPEECH OUTPUT: '1 space ' voice=system",
+     "SPEECH OUTPUT: ' '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "6. 1 space and the word 'foo'",
+    ["SPEECH OUTPUT: '1 space ' voice=system",
+     "SPEECH OUTPUT: ' foo'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "7. 2 spaces",
+    ["SPEECH OUTPUT: '2 spaces ' voice=system",
+     "SPEECH OUTPUT: '  '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "8. 2 spaces and the word 'foo'",
+    ["SPEECH OUTPUT: '2 spaces ' voice=system",
+     "SPEECH OUTPUT: '  foo'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "9. 1 Tab and 1 space",
+    ["SPEECH OUTPUT: '1 tab 1 space ' voice=system",
+     "SPEECH OUTPUT: '  '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "10. 1 Tab, 1 space, and the word 'foo'",
+    ["SPEECH OUTPUT: '1 tab 1 space ' voice=system",
+     "SPEECH OUTPUT: '  foo'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "11. 1 Tab and 2 spaces",
+    ["SPEECH OUTPUT: '1 tab 2 spaces ' voice=system",
+     "SPEECH OUTPUT: '   '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "12. 1 Tab, 2 spaces, and the word 'foo'",
+    ["SPEECH OUTPUT: '1 tab 2 spaces ' voice=system",
+     "SPEECH OUTPUT: '   foo'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "13. 2 Tabs and 1 space",
+    ["SPEECH OUTPUT: '2 tabs 1 space ' voice=system",
+     "SPEECH OUTPUT: '          '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "14. 2 Tabs, 1 space, and the word 'foo'",
+    ["SPEECH OUTPUT: '2 tabs 1 space ' voice=system",
+     "SPEECH OUTPUT: '          foo'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "15. 2 Tabs and 2 spaces",
+    ["SPEECH OUTPUT: '2 tabs 2 spaces ' voice=system",
+     "SPEECH OUTPUT: '           '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "16. 2 Tabs, 2 spaces, and the word 'foo'",
+    ["SPEECH OUTPUT: '2 tabs 2 spaces ' voice=system",
+     "SPEECH OUTPUT: '           foo'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "17. 1 Tab, 1 space, and 1 Tab",
+    ["SPEECH OUTPUT: '1 tab 1 space 1 tab ' voice=system",
+     "SPEECH OUTPUT: '         '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "18. 1 Tab, 1 space, 1 Tab, and the word 'foo'",
+    ["SPEECH OUTPUT: '1 tab 1 space 1 tab ' voice=system",
+     "SPEECH OUTPUT: '         foo'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "19. 1 Tab, 1 space, 1 Tab, and 1 space",
+    ["SPEECH OUTPUT: '1 tab 1 space 1 tab 1 space ' voice=system",
+     "SPEECH OUTPUT: '          '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "20. 1 Tab, 1 space, 1 Tab, 1 space, and the word 'foo'",
+    ["SPEECH OUTPUT: '1 tab 1 space 1 tab 1 space ' voice=system",
+     "SPEECH OUTPUT: '          foo'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "21. 1 Tab, 2 spaces, and 1 Tab",
+    ["SPEECH OUTPUT: '1 tab 2 spaces 1 tab ' voice=system",
+     "SPEECH OUTPUT: '         '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "22. 1 Tab, 2 spaces, 1 Tab, and the word 'foo'",
+    ["SPEECH OUTPUT: '1 tab 2 spaces 1 tab ' voice=system",
+     "SPEECH OUTPUT: '         foo'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "23. 2 spaces and 1 Tab",
+    ["SPEECH OUTPUT: '2 spaces 1 tab ' voice=system",
+     "SPEECH OUTPUT: '         '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "24. 2 spaces, 1 Tab, and the word 'foo'",
+    ["SPEECH OUTPUT: '2 spaces 1 tab ' voice=system",
+     "SPEECH OUTPUT: '         foo'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/spoken_indentation.settings 
b/test/keystrokes/gtk3-demo/spoken_indentation.settings
new file mode 100644
index 0000000..6bc57bf
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/spoken_indentation.settings
@@ -0,0 +1,177 @@
+{
+    "pronunciations": {}, 
+    "keybindings": {}, 
+    "profiles": {
+        "default": {
+            "speechServerFactory": "orca.speechdispatcherfactory", 
+            "profile": [
+                "Default", 
+                "default"
+            ], 
+            "voices": {
+                "default": {
+                    "average-pitch": 5.0, 
+                    "rate": 50.0, 
+                    "gain": 10.0
+                }, 
+                "uppercase": {
+                    "average-pitch": 5.6
+                }, 
+                "system": {
+                    "established": false
+                }, 
+                "hyperlink": {
+                    "average-pitch": 3.0
+                }
+            }, 
+            "speechServerInfo": [
+                "Default Synthesizer", 
+                "default"
+            ], 
+            "keybindings": {}, 
+            "pronunciations": {}
+        }
+    }, 
+    "general": {
+        "speakCellHeaders": true, 
+        "magEdgeMargin": 0, 
+        "brailleContractionTable": "", 
+        "magPointerFollowsFocus": false, 
+        "magTextTrackingMode": 2, 
+        "magZoomerBorderSize": 1, 
+        "brailleAlignmentStyle": 0, 
+        "enableEchoByWord": false, 
+        "enableMagZoomerColorInversion": false, 
+        "magCursorSize": 32, 
+        "magSmoothingMode": 0, 
+        "magZoomerLeft": 1200, 
+        "sayAllStyle": 1, 
+        "brailleSelectorIndicator": 192, 
+        "presentDateFormat": "%x", 
+        "magContrastLevel": 0, 
+        "magMouseTrackingMode": 0, 
+        "speakCellSpan": true, 
+        "progressBarUpdateInterval": 10, 
+        "speakCellCoordinates": true, 
+        "enablePauseBreaks": true, 
+        "brailleEOLIndicator": " $l", 
+        "verbalizePunctuationStyle": 1, 
+        "progressBarVerbosity": 1, 
+        "enableSpeech": true, 
+        "enableBraille": false, 
+        "chatAnnounceBuddyTyping": false, 
+        "speakMultiCaseStringsAsWords": false, 
+        "enableBrailleGrouping": false, 
+        "readTableCellRow": true, 
+        "activeProfile": [
+            "Default", 
+            "default"
+        ], 
+        "textAttributesBrailleIndicator": 0, 
+        "enableMagCursorExplicitSize": false, 
+        "messageVerbosityLevel": 1, 
+        "enableMagLiveUpdating": true, 
+        "enableSpeechIndentation": true, 
+        "enableKeyEcho": true, 
+        "magHideCursor": false, 
+        "magZoomerBorderColor": "#000000", 
+        "magPointerFollowsZoomer": true, 
+        "mouseDwellDelay": 0, 
+        "magBrightnessLevelRed": 0, 
+        "enableMagnifier": false, 
+        "magZoomFactor": 4.0, 
+        "speechServerFactory": "speechdispatcherfactory", 
+        "enableMagZoomerBorder": false, 
+        "flashVerbosityLevel": 1, 
+        "enableFlashMessages": true, 
+        "speechServerInfo": null, 
+        "presentToolTips": false, 
+        "flashIsPersistent": false, 
+        "brailleRequiredStateString": "required", 
+        "firstStart": false, 
+        "largeObjectTextLength": 75, 
+        "enableEchoBySentence": false, 
+        "magContrastLevelBlue": 0, 
+        "magContrastLevelRed": 0, 
+        "enableContractedBraille": false, 
+        "orcaModifierKeys": [
+            "Insert", 
+            "KP_Insert"
+        ], 
+        "enableMagCursor": true, 
+        "speechRequiredStateString": "required", 
+        "quitOrcaNoConfirmation": false, 
+        "skipBlankCells": false, 
+        "magCursorColor": "#000000", 
+        "enablePositionSpeaking": false, 
+        "magZoomerType": 0, 
+        "onlySpeakDisplayedText": false, 
+        "enableProgressBarUpdates": true, 
+        "wrappedStructuralNavigation": true, 
+        "chatRoomHistories": false, 
+        "brailleVerbosityLevel": 1, 
+        "enableFunctionKeys": true, 
+        "enableModifierKeys": true, 
+        "magCrossHairColor": "#000000", 
+        "enableTutorialMessages": false, 
+        "enableActionKeys": true, 
+        "speakBlankLines": true, 
+        "magColorFilteringMode": 0, 
+        "magZoomerRight": 2400, 
+        "keyboardLayout": 1, 
+        "magTargetDisplay": "", 
+        "disableBrailleEOL": false, 
+        "magZoomerTop": 0, 
+        "magSourceDisplay": "", 
+        "enableDiacriticalKeys": false, 
+        "enableMnemonicSpeaking": false, 
+        "enabledBrailledTextAttributes": "size:; family-name:; weight:400; indent:0; underline:none; 
strikethrough:false; justification:left; style:normal; text-spelling:none;", 
+        "speechVerbosityLevel": 1, 
+        "enableMagCrossHair": true, 
+        "enableBrailleMonitor": false, 
+        "voices": {
+            "default": {
+                "established": false
+            }, 
+            "uppercase": {
+                "average-pitch": 5.6
+            }, 
+            "system": {
+                "established": false
+            }, 
+            "hyperlink": {
+                "established": false
+            }
+        }, 
+        "magContrastLevelGreen": 0, 
+        "brailleFlashTime": 5000, 
+        "magCrossHairSize": 16, 
+        "enableMouseReview": false, 
+        "enableNavigationKeys": false, 
+        "magBrightnessLevelGreen": 0, 
+        "chatSpeakRoomName": false, 
+        "startingProfile": [
+            "Default", 
+            "default"
+        ], 
+        "enableLockingKeys": true, 
+        "profile": [
+            "Default", 
+            "default"
+        ], 
+        "brailleRolenameStyle": 1, 
+        "brailleLinkIndicator": 192, 
+        "enableEchoByCharacter": false, 
+        "magBrightnessLevelBlue": 0, 
+        "enableBrailleContext": true, 
+        "magControlTrackingMode": 2, 
+        "magZoomerBottom": 1920, 
+        "enablePrintableKeys": true, 
+        "enabledSpokenTextAttributes": "size:; family-name:; weight:400; indent:0; underline:none; 
strikethrough:false; justification:left; style:normal; paragraph-style:; text-spelling:none;", 
+        "chatMessageVerbosity": 0, 
+        "presentTimeFormat": "%X", 
+        "magBrightnessLevel": 0, 
+        "presentRequiredState": false, 
+        "enableMagCrossHairClip": false
+    }
+}



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