[orca] Fix a number of bugs related to label inference



commit 8a1e5bfc10b6ceb07fb9e3e66dd25817e1a0b7da
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Wed Sep 17 11:33:55 2014 -0400

    Fix a number of bugs related to label inference
    
    * Double-presentation
    * Inconsistent presentation between struct nav and caret nav
    * Infering what is clearly the wrong label

 src/orca/label_inference.py                        |   73 +++++++++-------
 src/orca/scripts/toolkits/Gecko/script.py          |   30 +------
 .../scripts/toolkits/Gecko/script_utilities.py     |   58 ++++++++++++-
 .../scripts/toolkits/Gecko/speech_generator.py     |   28 +-----
 .../firefox/label_inference_bug_546815.py          |    2 +
 .../firefox/label_inference_bugzilla_search.py     |   12 ++--
 test/keystrokes/firefox/label_inference_entries.py |   25 ++---
 test/keystrokes/firefox/label_inference_mailman.py |    3 +-
 test/keystrokes/firefox/line_nav_bug_546815.py     |   93 +++++++-------------
 .../firefox/line_nav_bugzilla_search_down.py       |   61 +++++---------
 .../firefox/line_nav_bugzilla_search_up.py         |   61 +++++---------
 test/keystrokes/firefox/line_nav_enter_bug.py      |   20 ++---
 test/keystrokes/firefox/line_nav_entries.py        |   64 ++++++--------
 test/keystrokes/firefox/line_nav_simple_form.py    |   27 ++----
 test/keystrokes/firefox/line_nav_slash_test.py     |   21 ++---
 test/keystrokes/firefox/line_nav_sun_java.py       |    2 +-
 16 files changed, 249 insertions(+), 331 deletions(-)
---
diff --git a/src/orca/label_inference.py b/src/orca/label_inference.py
index 6d87aa9..00423c2 100644
--- a/src/orca/label_inference.py
+++ b/src/orca/label_inference.py
@@ -92,6 +92,7 @@ class LabelInference:
             debug.println(debug.LEVEL_FINE, "INFER - Description: %s" % result)
         if result:
             result = result.strip()
+            result = result.replace("\n", " ")
 
         self.clearCache()
         return result, objects
@@ -167,6 +168,18 @@ class LabelInference:
 
         return True
 
+    def _cannotLabel(self, obj):
+        """Returns True if the given object should not be treated as a label."""
+
+        if not obj:
+            return True
+
+        nonLabelTextRoles = [pyatspi.ROLE_HEADING]
+        if obj.getRole() in nonLabelTextRoles:
+            return True
+
+        return self._isWidget(obj)
+
     def _isWidget(self, obj):
         """Returns True if the given object is a widget."""
 
@@ -182,18 +195,13 @@ class LabelInference:
                        pyatspi.ROLE_TOGGLE_BUTTON,
                        pyatspi.ROLE_COMBO_BOX,
                        pyatspi.ROLE_LIST,
+                       pyatspi.ROLE_LIST_BOX,
                        pyatspi.ROLE_MENU,
                        pyatspi.ROLE_MENU_ITEM,
                        pyatspi.ROLE_ENTRY,
                        pyatspi.ROLE_PASSWORD_TEXT,
                        pyatspi.ROLE_PUSH_BUTTON]
 
-        # Put new-to-pyatspi roles here.
-        try:
-            widgetRoles.append(pyatspi.ROLE_LIST_BOX)
-        except:
-            pass
-
         isWidget = obj.getRole() in widgetRoles
         self._isWidgetCache[hash(obj)] = isWidget
         return isWidget
@@ -235,7 +243,7 @@ class LabelInference:
         if not self._isSimpleObject(obj):
             return ''
 
-        if self._isWidget(obj):
+        if self._cannotLabel(obj):
             return ''
 
         contents = self._script.utilities.getObjectsFromEOCs(obj)
@@ -307,24 +315,24 @@ class LabelInference:
             index = len(contents)
 
         onLeft = contents[0:index]
+        start = 0
         for i in range(len(onLeft) - 1, -1, -1):
-            if self._isWidget(onLeft[i][0]):
-                onLeft = onLeft[(i+1):]
+            if self._cannotLabel(onLeft[i][0]):
+                start = i + 1
                 break
 
+        onLeft = onLeft[start:]
         if not (onLeft and onLeft[0]):
             return None, []
 
         lObj, start, end, string = onLeft[-1]
-        string = (string or lObj.name).strip()
-        if not string:
-            return None, []
-
         lExtents = self._getExtents(lObj, start, end)
         distance = extents[0] - (lExtents[0] + lExtents[2])
         if 0 <= distance <= proximity:
             strings = [content[3] or content[0].name for content in onLeft]
-            return ''.join(strings), [content[0] for content in onLeft]
+            result = ''.join(strings)
+            if result.strip():
+                return result, [content[0] for content in onLeft]
 
         return None, []
 
@@ -352,26 +360,26 @@ class LabelInference:
             index = len(contents)
 
         onRight = contents[min(len(contents), index+1):]
+        end = len(onRight)
         for i, item in enumerate(onRight):
-            if self._isWidget(item[0]):
+            if self._cannotLabel(item[0]):
                 if not self._preferRight(obj):
                     return None, []
-                onRight = onRight[0:i]
+                end = i + 1
                 break
 
+        onRight = onRight[0:end]
         if not (onRight and onRight[0]):
             return None, []
 
         rObj, start, end, string = onRight[0]
-        string = (string or rObj.name).strip()
-        if not string:
-            return None, []
-
         rExtents = self._getExtents(rObj, start, end)
         distance = rExtents[0] - (extents[0] + extents[2])
         if distance <= proximity or self._preferRight(obj):
             strings = [content[3] or content[0].name for content in onRight]
-            return ''.join(strings), [content[0] for content in onRight]
+            result = ''.join(strings)
+            if result.strip():
+                return result, [content[0] for content in onRight]
 
         return None, []
 
@@ -411,10 +419,10 @@ class LabelInference:
             return None, []
 
         prevObj, start, end, string = prevLine[0]
-        if string.strip():
+        if string.strip() and not self._cannotLabel(prevObj):
             x, y, width, height = self._getExtents(prevObj, start, end)
             distance = objY - (y + height)
-            if distance <= proximity:
+            if 0 <= distance <= proximity:
                 return string, [prevObj]
 
         while prevObj:
@@ -469,15 +477,15 @@ class LabelInference:
             return None, []
 
         nextObj, start, end, string = nextLine[0]
-        if string.strip():
+        if string.strip() and not self._cannotLabel(nextObj):
             x, y, width, height = self._getExtents(nextObj, start, end)
             distance = y - (objY + objHeight)
-            if distance <= proximity:
+            if 0 <= distance <= proximity:
                 return string, [nextObj]
 
         return None, []
 
-    def inferFromTable(self, obj):
+    def inferFromTable(self, obj, proximityForRight=50):
         """Attempt to infer the functional/displayed label of obj by looking
         at the contents of the surrounding table cells. Note that this approach
         assumes a simple table in which the widget is the sole occupant of its
@@ -510,18 +518,22 @@ class LabelInference:
         index = self._script.utilities.cellIndex(cell)
         row = table.getRowAtIndex(index)
         col = table.getColumnAtIndex(index)
+        objX, objY, objWidth, objHeight = self._getExtents(obj)
 
         if col > 0 and not self._preferRight(obj):
             candidate = table.getAccessibleAt(row, col - 1)
             label = self._createLabelFromContents(candidate)
-            if label:
+            if label.strip():
                 return label, [candidate]
 
         if col < table.nColumns and not self._preventRight(obj):
             candidate = table.getAccessibleAt(row, col + 1)
-            label = self._createLabelFromContents(candidate)
-            if label:
-                return label, [candidate]
+            x, y, width, height = self._getExtents(candidate)
+            distance = x - (objX + objWidth)
+            if distance <= proximityForRight or self._preferRight(obj):
+                label = self._createLabelFromContents(candidate)
+                if label.strip():
+                    return label, [candidate]
 
         cellAbove = cellBelow = labelAbove = labelBelow = None
         if row > 0:
@@ -535,7 +547,6 @@ class LabelInference:
             labelBelow = self._createLabelFromContents(cellBelow)
 
         if labelAbove and labelBelow:
-            objX, objY, objWidth, objHeight = self._getExtents(obj)
             aboveX, aboveY, aboveWidth, aboveHeight = self._getExtents(cellAbove)
             belowX, belowY, belowWidth, belowHeight = self._getExtents(cellBelow)
             dAbove = objY - (aboveY + aboveHeight)
diff --git a/src/orca/scripts/toolkits/Gecko/script.py b/src/orca/scripts/toolkits/Gecko/script.py
index 634175e..48ca2e9 100644
--- a/src/orca/scripts/toolkits/Gecko/script.py
+++ b/src/orca/scripts/toolkits/Gecko/script.py
@@ -751,7 +751,8 @@ class Script(default.Script):
                 contents = self.getLineContentsAtOffset(obj, characterOffset)
             for content in contents:
                 obj, startOffset, endOffset, text = content
-                if self.isLabellingContents(obj, contents):
+                if self.utilities.isLabellingContents(content, contents) \
+                   or self.utilities.isInferredLabelForContents(content, contents):
                     continue
 
                 utterances = self.getUtterancesFromContents([content], True)
@@ -1677,31 +1678,6 @@ class Script(default.Script):
             index = hypertext.getLinkIndex(characterOffset)
 
         return index
-
-    def isLabellingContents(self, obj, contents):
-        """Given and obj and a list of [obj, startOffset, endOffset] tuples,
-        determine if obj is labelling anything in the tuples.
-
-        Returns the object being labelled, or None.
-        """
-
-        if obj.getRole() != pyatspi.ROLE_LABEL:
-            return None
-
-        relationSet = obj.getRelationSet()
-        if not relationSet:
-            return None
-
-        for relation in relationSet:
-            if relation.getRelationType() \
-                == pyatspi.RELATION_LABEL_FOR:
-                for i in range(0, relation.getNTargets()):
-                    target = relation.getTarget(i)
-                    for content in contents:
-                        if content[0] == target:
-                            return target
-
-        return None
  
     def getTopOfFile(self):
         """Returns the object and first caret offset at the top of the
@@ -2512,7 +2488,7 @@ class Script(default.Script):
             return []
 
         utterances = []
-        contents = self.utilities.filterContentsForPresentation(contents)
+        contents = self.utilities.filterContentsForPresentation(contents, True)
         lastObj = None
         for content in contents:
             [obj, startOffset, endOffset, string] = content
diff --git a/src/orca/scripts/toolkits/Gecko/script_utilities.py 
b/src/orca/scripts/toolkits/Gecko/script_utilities.py
index 6207cf5..b14280a 100644
--- a/src/orca/scripts/toolkits/Gecko/script_utilities.py
+++ b/src/orca/scripts/toolkits/Gecko/script_utilities.py
@@ -812,17 +812,20 @@ class Utilities(script_utilities.Utilities):
 
         return False
 
-    def filterContentsForPresentation(self, contents):
+    def filterContentsForPresentation(self, contents, inferLabels=False):
         def _include(x):
             obj, start, end, string = x
             if not obj:
                 return False
 
             if (self.isTextBlockElement(obj) and not string.strip()) \
-               or self._script.isLabellingContents(obj, contents) \
+               or self.isLabellingContents(x, contents) \
                or self.isOffScreenLabel(obj, start):
                 return False
 
+            if inferLabels and self.isInferredLabelForContents(x, contents):
+                return False
+
             return True
 
         return list(filter(_include, contents))
@@ -953,6 +956,57 @@ class Utilities(script_utilities.Utilities):
 
         return False
 
+    def shouldInferLabelFor(self, obj):
+        if self.displayedLabel(obj) or obj.name:
+            return False
+
+        roles =  [pyatspi.ROLE_CHECK_BOX,
+                  pyatspi.ROLE_COMBO_BOX,
+                  pyatspi.ROLE_ENTRY,
+                  pyatspi.ROLE_LIST_BOX,
+                  pyatspi.ROLE_PASSWORD_TEXT,
+                  pyatspi.ROLE_RADIO_BUTTON]
+        if not obj.getRole() in roles:
+            return False
+
+        if not self._script.inDocumentContent():
+            return False
+
+        return True
+
+    def isInferredLabelForContents(self, content, contents):
+        obj, start, end, string = content
+        objs = list(filter(self.shouldInferLabelFor, [x[0] for x in contents]))
+        if not objs:
+            return None
+
+        for o in objs:
+            label, sources = self._script.labelInference.infer(o, False)
+            if obj in sources and label.strip() == string.strip():
+                return o
+
+        return None
+
+    def isLabellingContents(self, content, contents):
+        obj, start, end, string = content
+        if obj.getRole() != pyatspi.ROLE_LABEL:
+            return None
+
+        relationSet = obj.getRelationSet()
+        if not relationSet:
+            return None
+
+        for relation in relationSet:
+            if relation.getRelationType() \
+                == pyatspi.RELATION_LABEL_FOR:
+                for i in range(0, relation.getNTargets()):
+                    target = relation.getTarget(i)
+                    for content in contents:
+                        if content[0] == target:
+                            return target
+
+        return None
+
     def isClickableElement(self, obj):
         if not self._script.inDocumentContent(obj):
             return False
diff --git a/src/orca/scripts/toolkits/Gecko/speech_generator.py 
b/src/orca/scripts/toolkits/Gecko/speech_generator.py
index 6ae79df..a1bb633 100644
--- a/src/orca/scripts/toolkits/Gecko/speech_generator.py
+++ b/src/orca/scripts/toolkits/Gecko/speech_generator.py
@@ -152,34 +152,13 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
         result = speech_generator.SpeechGenerator._generateLabel(self,
                                                                  obj,
                                                                  **args)
-        role = args.get('role', obj.getRole())
-        # We'll attempt to infer the label under some circumstances.
-        #
-        if not len(result) \
-           and not obj.name \
-           and role in [pyatspi.ROLE_CHECK_BOX,
-                        pyatspi.ROLE_COMBO_BOX,
-                        pyatspi.ROLE_ENTRY,
-                        pyatspi.ROLE_LIST,
-                        pyatspi.ROLE_LIST_BOX,
-                        pyatspi.ROLE_PARAGRAPH,
-                        pyatspi.ROLE_PASSWORD_TEXT,
-                        pyatspi.ROLE_RADIO_BUTTON,
-                        pyatspi.ROLE_TEXT] \
-           and self._script.inDocumentContent():
+
+        if self._script.utilities.shouldInferLabelFor(obj):
             start = args.get('startOffset')
             if isinstance(start, int) and start > 0:
                 return []
 
-            if role in [pyatspi.ROLE_LIST, pyatspi.ROLE_LIST_BOX]:
-                # We're having to hack around yet another Mozilla bug:
-                # https://bugzilla.mozilla.org/show_bug.cgi?id=960241
-                focusedOnly = False
-            else:
-                # Because we cannot count on grabFocus updating the state.
-                focusedOnly = obj != orca_state.locusOfFocus
-
-            label, objects = self._script.labelInference.infer(obj, focusedOnly)
+            label, objects = self._script.labelInference.infer(obj, False)
             if label:
                 result.append(label)
                 result.extend(acss)
@@ -188,6 +167,7 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
         # relationship.  But, they will make their names be
         # the string of the thing labelling them.
         #
+        role = args.get('role', obj.getRole())
         if not len(result) \
            and role == pyatspi.ROLE_COMBO_BOX \
            and not self._script.inDocumentContent():
diff --git a/test/keystrokes/firefox/label_inference_bug_546815.py 
b/test/keystrokes/firefox/label_inference_bug_546815.py
index 447f2b0..50d2d14 100644
--- a/test/keystrokes/firefox/label_inference_bug_546815.py
+++ b/test/keystrokes/firefox/label_inference_bug_546815.py
@@ -7,6 +7,8 @@ import utils
 
 sequence = MacroSequence()
 
+sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("<Control>Home"))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/firefox/label_inference_bugzilla_search.py 
b/test/keystrokes/firefox/label_inference_bugzilla_search.py
index 24d9c1d..f2f0f70 100644
--- a/test/keystrokes/firefox/label_inference_bugzilla_search.py
+++ b/test/keystrokes/firefox/label_inference_bugzilla_search.py
@@ -14,7 +14,7 @@ sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
 sequence.append(utils.AssertPresentationAction(
     "1. Shift Tab",
     ["BRAILLE LINE:  'Summary: contains all of the words/strings combo box $l Search push button'",
-     "     VISIBLE:  'contains all of the word/string', cursor=1",
+     "     VISIBLE:  'contains all of the words/string', cursor=1",
      "BRAILLE LINE:  'Focus mode'",
      "     VISIBLE:  'Focus mode', cursor=0",
      "SPEECH OUTPUT: 'Summary: contains all of the words/strings combo box'",
@@ -25,10 +25,10 @@ sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
     "2. Tab",
     ["BRAILLE LINE:  'Summary: contains all of the words/strings combo box $l Search push button'",
-     "     VISIBLE:  'contains all of the word/string', cursor=1",
+     "     VISIBLE:  'contains all of the words/string', cursor=1",
      "BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
-     "SPEECH OUTPUT: 'Summary: entry'"]))
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -125,7 +125,7 @@ sequence.append(utils.AssertPresentationAction(
     "11. Tab",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
-     "SPEECH OUTPUT: 'A Comment: entry'"]))
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -141,7 +141,7 @@ sequence.append(utils.AssertPresentationAction(
     "13. Tab",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
-     "SPEECH OUTPUT: 'Whiteboard: entry'"]))
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -175,7 +175,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'contains all of the keywords com', cursor=1",
      "BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
-     "SPEECH OUTPUT: 'Keywords entry'"]))
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
diff --git a/test/keystrokes/firefox/label_inference_entries.py 
b/test/keystrokes/firefox/label_inference_entries.py
index a6137db..2a85d36 100644
--- a/test/keystrokes/firefox/label_inference_entries.py
+++ b/test/keystrokes/firefox/label_inference_entries.py
@@ -5,6 +5,8 @@ import utils
 
 sequence = MacroSequence()
 
+sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("<Control>Home"))
 
 sequence.append(utils.StartRecordingAction())
@@ -65,10 +67,9 @@ sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
     "6. Next form field",
-    ["KNOWN ISSUE: As the text suggests, we probably shouldn't be guessing this.",
-     "BRAILLE LINE:  ' $l Too far away to be a label.'",
+    ["BRAILLE LINE:  ' $l Too far away to be a label.'",
      "     VISIBLE:  ' $l Too far away to be a label.', cursor=1",
-     "SPEECH OUTPUT: 'Too far away to be a label. entry'"]))
+     "SPEECH OUTPUT: 'Looking at what follows visually, I'm not sure what I would type/i.e. what the labels 
are. entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -128,8 +129,7 @@ sequence.append(utils.AssertPresentationAction(
     "12. Next form field",
     ["BRAILLE LINE:  ' $l $l $l'",
      "     VISIBLE:  ' $l $l $l', cursor=4",
-     "SPEECH OUTPUT: 'Middle",
-     "initial entry'"]))
+     "SPEECH OUTPUT: 'Middle initial entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -159,8 +159,7 @@ sequence.append(utils.AssertPresentationAction(
     "15. Next form field",
     ["BRAILLE LINE:  ' $l $l $l'",
      "     VISIBLE:  ' $l $l $l', cursor=4",
-     "SPEECH OUTPUT: 'Middle",
-     "initial entry'"]))
+     "SPEECH OUTPUT: 'Middle initial entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -220,8 +219,7 @@ sequence.append(utils.AssertPresentationAction(
     "21. Next form field",
     ["BRAILLE LINE:  ' $l $l $l'",
      "     VISIBLE:  ' $l $l $l', cursor=4",
-     "SPEECH OUTPUT: 'Middle",
-     "initial entry'"]))
+     "SPEECH OUTPUT: 'Middle initial entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -251,8 +249,7 @@ sequence.append(utils.AssertPresentationAction(
     "24. Next form field",
     ["BRAILLE LINE:  ' $l $l $l $l'",
      "     VISIBLE:  ' $l $l $l $l', cursor=4",
-     "SPEECH OUTPUT: 'Middle",
-     "initial entry'"]))
+     "SPEECH OUTPUT: 'Middle initial entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -292,8 +289,7 @@ sequence.append(utils.AssertPresentationAction(
     "28. Next form field",
     ["BRAILLE LINE:  ' $l $l $l $l'",
      "     VISIBLE:  ' $l $l $l $l', cursor=4",
-     "SPEECH OUTPUT: 'Middle",
-     "initial entry'"]))
+     "SPEECH OUTPUT: 'Middle initial entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -333,8 +329,7 @@ sequence.append(utils.AssertPresentationAction(
     "32. Next form field",
     ["BRAILLE LINE:  ' $l $l $l $l'",
      "     VISIBLE:  ' $l $l $l $l', cursor=4",
-     "SPEECH OUTPUT: 'Middle",
-     "initial entry'"]))
+     "SPEECH OUTPUT: 'Middle initial entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
diff --git a/test/keystrokes/firefox/label_inference_mailman.py 
b/test/keystrokes/firefox/label_inference_mailman.py
index d263ff4..5d81289 100644
--- a/test/keystrokes/firefox/label_inference_mailman.py
+++ b/test/keystrokes/firefox/label_inference_mailman.py
@@ -135,8 +135,7 @@ sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
     "13. Next form field",
-    ["KNOWN ISSUE: We are failing to infer the label",
-     "BRAILLE LINE:  ' $l Unsubscribe or edit options push button'",
+    ["BRAILLE LINE:  ' $l Unsubscribe or edit options push button'",
      "     VISIBLE:  ' $l Unsubscribe or edit options ', cursor=1",
      "SPEECH OUTPUT: 'entry'"]))
 
diff --git a/test/keystrokes/firefox/line_nav_bug_546815.py b/test/keystrokes/firefox/line_nav_bug_546815.py
index a9796cf..93aca24 100644
--- a/test/keystrokes/firefox/line_nav_bug_546815.py
+++ b/test/keystrokes/firefox/line_nav_bug_546815.py
@@ -39,8 +39,7 @@ sequence.append(utils.AssertPresentationAction(
     "4. Line Down",
     ["BRAILLE LINE:  'Enter your Name:  $l text field using default type=text'",
      "     VISIBLE:  'Enter your Name:  $l text field ', cursor=1",
-     "SPEECH OUTPUT: 'Enter your Name:'",
-     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: 'Enter your Name: entry'",
      "SPEECH OUTPUT: 'text field using default type=text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -49,8 +48,7 @@ sequence.append(utils.AssertPresentationAction(
     "5. Line Down",
     ["BRAILLE LINE:  '1. Enter your Address:  $l text field using SIZE and'",
      "     VISIBLE:  '1. Enter your Address:  $l text ', cursor=1",
-     "SPEECH OUTPUT: '1. Enter your Address:'",
-     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: '1. Enter your Address: entry'",
      "SPEECH OUTPUT: 'text field using SIZE and'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -67,12 +65,9 @@ sequence.append(utils.AssertPresentationAction(
     "7. Line Down",
     ["BRAILLE LINE:  '2. Enter your City:  $l 3. Enter your State:  $l 4. Enter your Country: US $l image 
text field using'",
      "     VISIBLE:  '2. Enter your City:  $l 3. Enter', cursor=1",
-     "SPEECH OUTPUT: '2. Enter your City:'",
-     "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: '3. Enter your State:'",
-     "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: '4. Enter your Country:'",
-     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: '2. Enter your City: entry'",
+     "SPEECH OUTPUT: '3. Enter your State: entry'",
+     "SPEECH OUTPUT: '4. Enter your Country: entry'",
      "SPEECH OUTPUT: 'US'",
      "SPEECH OUTPUT: 'image'",
      "SPEECH OUTPUT: 'text field using'"]))
@@ -91,8 +86,7 @@ sequence.append(utils.AssertPresentationAction(
     "9. Line Down",
     ["BRAILLE LINE:  '5. Enter your Zip:  $l'",
      "     VISIBLE:  '5. Enter your Zip:  $l', cursor=1",
-     "SPEECH OUTPUT: '5. Enter your Zip:'",
-     "SPEECH OUTPUT: 'entry'"]))
+     "SPEECH OUTPUT: '5. Enter your Zip: entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -108,8 +102,7 @@ sequence.append(utils.AssertPresentationAction(
     "11. Line Down",
     ["BRAILLE LINE:  'character:  $l'",
      "     VISIBLE:  'character:  $l', cursor=1",
-     "SPEECH OUTPUT: 'character:'",
-     "SPEECH OUTPUT: 'entry'"]))
+     "SPEECH OUTPUT: 'character: entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -139,11 +132,9 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "15. Line Down",
-    ["KNOWN ISSUE: We are guessing the label and presenting it because it's text on this line",
-     "BRAILLE LINE:  '< > check box bird'",
+    ["BRAILLE LINE:  '< > check box bird'",
      "     VISIBLE:  '< > check box bird', cursor=1",
-     "SPEECH OUTPUT: 'bird check box not checked'",
-     "SPEECH OUTPUT: 'bird'"]))
+     "SPEECH OUTPUT: 'bird check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -151,8 +142,7 @@ sequence.append(utils.AssertPresentationAction(
     "16. Line Down",
     ["BRAILLE LINE:  '< > check box fish'",
      "     VISIBLE:  '< > check box fish', cursor=1",
-     "SPEECH OUTPUT: 'fish check box not checked'",
-     "SPEECH OUTPUT: 'fish'"]))
+     "SPEECH OUTPUT: 'fish check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -160,8 +150,7 @@ sequence.append(utils.AssertPresentationAction(
     "17. Line Down",
     ["BRAILLE LINE:  '< > check box wild animal'",
      "     VISIBLE:  '< > check box wild animal', cursor=1",
-     "SPEECH OUTPUT: 'wild animal check box not checked'",
-     "SPEECH OUTPUT: 'wild animal'"]))
+     "SPEECH OUTPUT: 'wild animal check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -191,11 +180,9 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "21. Line Down",
-    ["KNOWN ISSUE: We are guessing the label and presenting it because it's text on this line",
-     "BRAILLE LINE:  '&=y radio button cabernet sauvignon'",
+    ["BRAILLE LINE:  '&=y radio button cabernet sauvignon'",
      "     VISIBLE:  '&=y radio button cabernet sauvig', cursor=1",
-     "SPEECH OUTPUT: 'cabernet sauvignon selected radio button'",
-     "SPEECH OUTPUT: 'cabernet sauvignon'"]))
+     "SPEECH OUTPUT: 'cabernet sauvignon selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -203,8 +190,7 @@ sequence.append(utils.AssertPresentationAction(
     "22. Line Down",
     ["BRAILLE LINE:  '& y radio button merlot'",
      "     VISIBLE:  '& y radio button merlot', cursor=1",
-     "SPEECH OUTPUT: 'merlot not selected radio button'",
-     "SPEECH OUTPUT: 'merlot'"]))
+     "SPEECH OUTPUT: 'merlot not selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -212,8 +198,7 @@ sequence.append(utils.AssertPresentationAction(
     "23. Line Down",
     ["BRAILLE LINE:  '& y radio button nebbiolo'",
      "     VISIBLE:  '& y radio button nebbiolo', cursor=1",
-     "SPEECH OUTPUT: 'nebbiolo not selected radio button'",
-     "SPEECH OUTPUT: 'nebbiolo'"]))
+     "SPEECH OUTPUT: 'nebbiolo not selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -221,8 +206,7 @@ sequence.append(utils.AssertPresentationAction(
     "24. Line Down",
     ["BRAILLE LINE:  '& y radio button pinot noir'",
      "     VISIBLE:  '& y radio button pinot noir', cursor=1",
-     "SPEECH OUTPUT: 'pinot noir not selected radio button'",
-     "SPEECH OUTPUT: 'pinot noir'"]))
+     "SPEECH OUTPUT: 'pinot noir not selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -230,8 +214,7 @@ sequence.append(utils.AssertPresentationAction(
     "25. Line Down",
     ["BRAILLE LINE:  '& y radio button don't drink wine'",
      "     VISIBLE:  '& y radio button don't drink win', cursor=1",
-     "SPEECH OUTPUT: 'don't drink wine not selected radio button'",
-     "SPEECH OUTPUT: 'don't drink wine'"]))
+     "SPEECH OUTPUT: 'don't drink wine not selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -239,8 +222,7 @@ sequence.append(utils.AssertPresentationAction(
     "26. Line Up",
     ["BRAILLE LINE:  '& y radio button pinot noir'",
      "     VISIBLE:  '& y radio button pinot noir', cursor=1",
-     "SPEECH OUTPUT: 'pinot noir not selected radio button'",
-     "SPEECH OUTPUT: 'pinot noir'"]))
+     "SPEECH OUTPUT: 'pinot noir not selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -248,8 +230,7 @@ sequence.append(utils.AssertPresentationAction(
     "27. Line Up",
     ["BRAILLE LINE:  '& y radio button nebbiolo'",
      "     VISIBLE:  '& y radio button nebbiolo', cursor=1",
-     "SPEECH OUTPUT: 'nebbiolo not selected radio button'",
-     "SPEECH OUTPUT: 'nebbiolo'"]))
+     "SPEECH OUTPUT: 'nebbiolo not selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -257,8 +238,7 @@ sequence.append(utils.AssertPresentationAction(
     "28. Line Up",
     ["BRAILLE LINE:  '& y radio button merlot'",
      "     VISIBLE:  '& y radio button merlot', cursor=1",
-     "SPEECH OUTPUT: 'merlot not selected radio button'",
-     "SPEECH OUTPUT: 'merlot'"]))
+     "SPEECH OUTPUT: 'merlot not selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -266,8 +246,7 @@ sequence.append(utils.AssertPresentationAction(
     "29. Line Up",
     ["BRAILLE LINE:  '&=y radio button cabernet sauvignon'",
      "     VISIBLE:  '&=y radio button cabernet sauvig', cursor=1",
-     "SPEECH OUTPUT: 'cabernet sauvignon selected radio button'",
-     "SPEECH OUTPUT: 'cabernet sauvignon'"]))
+     "SPEECH OUTPUT: 'cabernet sauvignon selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -299,8 +278,7 @@ sequence.append(utils.AssertPresentationAction(
     "33. Line Up",
     ["BRAILLE LINE:  '< > check box wild animal'",
      "     VISIBLE:  '< > check box wild animal', cursor=1",
-     "SPEECH OUTPUT: 'wild animal check box not checked'",
-     "SPEECH OUTPUT: 'wild animal'"]))
+     "SPEECH OUTPUT: 'wild animal check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -308,8 +286,7 @@ sequence.append(utils.AssertPresentationAction(
     "34. Line Up",
     ["BRAILLE LINE:  '< > check box fish'",
      "     VISIBLE:  '< > check box fish', cursor=1",
-     "SPEECH OUTPUT: 'fish check box not checked'",
-     "SPEECH OUTPUT: 'fish'"]))
+     "SPEECH OUTPUT: 'fish check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -317,8 +294,7 @@ sequence.append(utils.AssertPresentationAction(
     "35. Line Up",
     ["BRAILLE LINE:  '< > check box bird'",
      "     VISIBLE:  '< > check box bird', cursor=1",
-     "SPEECH OUTPUT: 'bird check box not checked'",
-     "SPEECH OUTPUT: 'bird'"]))
+     "SPEECH OUTPUT: 'bird check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -350,8 +326,7 @@ sequence.append(utils.AssertPresentationAction(
     "39. Line Up",
     ["BRAILLE LINE:  'character:  $l'",
      "     VISIBLE:  'character:  $l', cursor=1",
-     "SPEECH OUTPUT: 'character:'",
-     "SPEECH OUTPUT: 'entry'"]))
+     "SPEECH OUTPUT: 'character: entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -367,8 +342,7 @@ sequence.append(utils.AssertPresentationAction(
     "41. Line Up",
     ["BRAILLE LINE:  '5. Enter your Zip:  $l'",
      "     VISIBLE:  '5. Enter your Zip:  $l', cursor=1",
-     "SPEECH OUTPUT: '5. Enter your Zip:'",
-     "SPEECH OUTPUT: 'entry'"]))
+     "SPEECH OUTPUT: '5. Enter your Zip: entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -384,12 +358,9 @@ sequence.append(utils.AssertPresentationAction(
     "43. Line Up",
     ["BRAILLE LINE:  '2. Enter your City:  $l 3. Enter your State:  $l 4. Enter your Country: US $l image 
text field using'",
      "     VISIBLE:  '2. Enter your City:  $l 3. Enter', cursor=1",
-     "SPEECH OUTPUT: '2. Enter your City:'",
-     "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: '3. Enter your State:'",
-     "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: '4. Enter your Country:'",
-     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: '2. Enter your City: entry'",
+     "SPEECH OUTPUT: '3. Enter your State: entry'",
+     "SPEECH OUTPUT: '4. Enter your Country: entry'",
      "SPEECH OUTPUT: 'US'",
      "SPEECH OUTPUT: 'image'",
      "SPEECH OUTPUT: 'text field using'"]))
@@ -408,8 +379,7 @@ sequence.append(utils.AssertPresentationAction(
     "45. Line Up",
     ["BRAILLE LINE:  '1. Enter your Address:  $l text field using SIZE and'",
      "     VISIBLE:  '1. Enter your Address:  $l text ', cursor=1",
-     "SPEECH OUTPUT: '1. Enter your Address:'",
-     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: '1. Enter your Address: entry'",
      "SPEECH OUTPUT: 'text field using SIZE and'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -418,8 +388,7 @@ sequence.append(utils.AssertPresentationAction(
     "46. Line Up",
     ["BRAILLE LINE:  'Enter your Name:  $l text field using default type=text'",
      "     VISIBLE:  'Enter your Name:  $l text field ', cursor=1",
-     "SPEECH OUTPUT: 'Enter your Name:'",
-     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: 'Enter your Name: entry'",
      "SPEECH OUTPUT: 'text field using default type=text'"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/firefox/line_nav_bugzilla_search_down.py 
b/test/keystrokes/firefox/line_nav_bugzilla_search_down.py
index ccb0e60..93d5b03 100644
--- a/test/keystrokes/firefox/line_nav_bugzilla_search_down.py
+++ b/test/keystrokes/firefox/line_nav_bugzilla_search_down.py
@@ -66,9 +66,8 @@ sequence.append(utils.AssertPresentationAction(
     "4. Line Down",
     ["BRAILLE LINE:  'Summary: contains all of the words/strings combo box $l Search push button'",
      "     VISIBLE:  'Summary: contains all of the wor', cursor=1",
-     "SPEECH OUTPUT: 'Summary: row header'",
-     "SPEECH OUTPUT: 'contains all of the words/strings combo box'",
-     "SPEECH OUTPUT: 'Summary: entry'",
+     "SPEECH OUTPUT: 'Summary: contains all of the words/strings combo box'",
+     "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'Search push button'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -159,8 +158,7 @@ sequence.append(utils.AssertPresentationAction(
     "15. Line Down",
     ["BRAILLE LINE:  'A Comment: contains the string combo box $l'",
      "     VISIBLE:  'A Comment: contains the string c', cursor=1",
-     "SPEECH OUTPUT: 'A Comment: row header'",
-     "SPEECH OUTPUT: 'contains the string combo box'",
+     "SPEECH OUTPUT: 'A Comment: contains the string combo box'",
      "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -169,8 +167,7 @@ sequence.append(utils.AssertPresentationAction(
     "16. Line Down",
     ["BRAILLE LINE:  'Whiteboard: contains all of the words/strings combo box $l'",
      "     VISIBLE:  'Whiteboard: contains all of the ', cursor=1",
-     "SPEECH OUTPUT: 'Whiteboard: row header'",
-     "SPEECH OUTPUT: 'contains all of the words/strings combo box'",
+     "SPEECH OUTPUT: 'Whiteboard: contains all of the words/strings combo box'",
      "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -182,7 +179,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'Keywords'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Keywords : row header'",
-     "SPEECH OUTPUT: 'contains all of the keywords combo box'",
+     "SPEECH OUTPUT: 'Keywords: contains all of the keywords combo box'",
      "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -294,11 +291,9 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "31. Line Down",
-    ["KNOWN ISSUE: We are both guessing the label and presenting its text",
-     "BRAILLE LINE:  '<x> check box the bug assignee'",
+    ["BRAILLE LINE:  '<x> check box the bug assignee'",
      "     VISIBLE:  '<x> check box the bug assignee', cursor=1",
-     "SPEECH OUTPUT: 'the bug assignee check box checked'",
-     "SPEECH OUTPUT: 'the bug assignee'"]))
+     "SPEECH OUTPUT: 'the bug assignee check box checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -306,8 +301,7 @@ sequence.append(utils.AssertPresentationAction(
     "32. Line Down",
     ["BRAILLE LINE:  '< > check box the reporter'",
      "     VISIBLE:  '< > check box the reporter', cursor=1",
-     "SPEECH OUTPUT: 'the reporter check box not checked'",
-     "SPEECH OUTPUT: 'the reporter'"]))
+     "SPEECH OUTPUT: 'the reporter check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -315,8 +309,7 @@ sequence.append(utils.AssertPresentationAction(
     "33. Line Down",
     ["BRAILLE LINE:  '< > check box the QA contact'",
      "     VISIBLE:  '< > check box the QA contact', cursor=1",
-     "SPEECH OUTPUT: 'the QA contact check box not checked'",
-     "SPEECH OUTPUT: 'the QA contact'"]))
+     "SPEECH OUTPUT: 'the QA contact check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -324,8 +317,7 @@ sequence.append(utils.AssertPresentationAction(
     "34. Line Down",
     ["BRAILLE LINE:  '< > check box a CC list member'",
      "     VISIBLE:  '< > check box a CC list member', cursor=1",
-     "SPEECH OUTPUT: 'a CC list member check box not checked'",
-     "SPEECH OUTPUT: 'a CC list member'"]))
+     "SPEECH OUTPUT: 'a CC list member check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -333,8 +325,7 @@ sequence.append(utils.AssertPresentationAction(
     "35. Line Down",
     ["BRAILLE LINE:  '< > check box a commenter'",
      "     VISIBLE:  '< > check box a commenter', cursor=1",
-     "SPEECH OUTPUT: 'a commenter check box not checked'",
-     "SPEECH OUTPUT: 'a commenter'"]))
+     "SPEECH OUTPUT: 'a commenter check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -366,8 +357,7 @@ sequence.append(utils.AssertPresentationAction(
     "39. Line Down",
     ["BRAILLE LINE:  '<x> check box the bug assignee'",
      "     VISIBLE:  '<x> check box the bug assignee', cursor=1",
-     "SPEECH OUTPUT: 'the bug assignee check box checked'",
-     "SPEECH OUTPUT: 'the bug assignee'"]))
+     "SPEECH OUTPUT: 'the bug assignee check box checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -375,8 +365,7 @@ sequence.append(utils.AssertPresentationAction(
     "40. Line Down",
     ["BRAILLE LINE:  '<x> check box the reporter'",
      "     VISIBLE:  '<x> check box the reporter', cursor=1",
-     "SPEECH OUTPUT: 'the reporter check box checked'",
-     "SPEECH OUTPUT: 'the reporter'"]))
+     "SPEECH OUTPUT: 'the reporter check box checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -384,8 +373,7 @@ sequence.append(utils.AssertPresentationAction(
     "41. Line Down",
     ["BRAILLE LINE:  '<x> check box the QA contact'",
      "     VISIBLE:  '<x> check box the QA contact', cursor=1",
-     "SPEECH OUTPUT: 'the QA contact check box checked'",
-     "SPEECH OUTPUT: 'the QA contact'"]))
+     "SPEECH OUTPUT: 'the QA contact check box checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -393,8 +381,7 @@ sequence.append(utils.AssertPresentationAction(
     "42. Line Down",
     ["BRAILLE LINE:  '<x> check box a CC list member'",
      "     VISIBLE:  '<x> check box a CC list member', cursor=1",
-     "SPEECH OUTPUT: 'a CC list member check box checked'",
-     "SPEECH OUTPUT: 'a CC list member'"]))
+     "SPEECH OUTPUT: 'a CC list member check box checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -402,8 +389,7 @@ sequence.append(utils.AssertPresentationAction(
     "43. Line Down",
     ["BRAILLE LINE:  '< > check box a commenter'",
      "     VISIBLE:  '< > check box a commenter', cursor=1",
-     "SPEECH OUTPUT: 'a commenter check box not checked'",
-     "SPEECH OUTPUT: 'a commenter'"]))
+     "SPEECH OUTPUT: 'a commenter check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -436,8 +422,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Only include combo box bugs numbered:  $l'",
      "     VISIBLE:  'Only include combo box bugs numb', cursor=1",
      "SPEECH OUTPUT: 'Only include combo box'",
-     "SPEECH OUTPUT: 'bugs numbered:'",
-     "SPEECH OUTPUT: 'entry'"]))
+     "SPEECH OUTPUT: 'bugs numbered: entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -470,8 +455,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  ' $l and Now $l'",
      "     VISIBLE:  ' $l and Now $l', cursor=1",
      "SPEECH OUTPUT: 'Only bugs changed between: entry'",
-     "SPEECH OUTPUT: 'and'",
-     "SPEECH OUTPUT: 'entry Now'"]))
+     "SPEECH OUTPUT: 'and entry Now'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -551,8 +535,7 @@ sequence.append(utils.AssertPresentationAction(
     "61. Line Down",
     ["BRAILLE LINE:  'Sort results by: Reuse same sort as last time combo box'",
      "     VISIBLE:  'Sort results by: Reuse same sort', cursor=1",
-     "SPEECH OUTPUT: 'Sort results by:'",
-     "SPEECH OUTPUT: 'Reuse same sort as last time combo box'"]))
+     "SPEECH OUTPUT: 'Sort results by: Reuse same sort as last time combo box'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -568,8 +551,7 @@ sequence.append(utils.AssertPresentationAction(
     "63. Line Down",
     ["BRAILLE LINE:  '< > check box and remember these as my default search options'",
      "     VISIBLE:  '< > check box and remember these', cursor=0",
-     "SPEECH OUTPUT: 'check box not checked'",
-     "SPEECH OUTPUT: 'and remember these as my default search options'"]))
+     "SPEECH OUTPUT: 'and remember these as my default search options check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -593,8 +575,7 @@ sequence.append(utils.AssertPresentationAction(
     "66. Line Down",
     ["BRAILLE LINE:  '< > check box Not (negate this whole chart)'",
      "     VISIBLE:  '< > check box Not \(negate this w', cursor=1",
-     "SPEECH OUTPUT: 'Not (negate this whole chart) check box not checked'",
-     "SPEECH OUTPUT: 'Not (negate this whole chart)'"]))
+     "SPEECH OUTPUT: 'Not (negate this whole chart) check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
diff --git a/test/keystrokes/firefox/line_nav_bugzilla_search_up.py 
b/test/keystrokes/firefox/line_nav_bugzilla_search_up.py
index c9473ff..02c361c 100644
--- a/test/keystrokes/firefox/line_nav_bugzilla_search_up.py
+++ b/test/keystrokes/firefox/line_nav_bugzilla_search_up.py
@@ -44,8 +44,7 @@ sequence.append(utils.AssertPresentationAction(
     "4. Line Up",
     ["BRAILLE LINE:  '< > check box Not (negate this whole chart)'",
      "     VISIBLE:  '< > check box Not \(negate this w', cursor=1",
-     "SPEECH OUTPUT: 'Not (negate this whole chart) check box not checked'",
-     "SPEECH OUTPUT: 'Not (negate this whole chart)'"]))
+     "SPEECH OUTPUT: 'Not (negate this whole chart) check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -69,8 +68,7 @@ sequence.append(utils.AssertPresentationAction(
     "7. Line Up",
     ["BRAILLE LINE:  '< > check box and remember these as my default search options'",
      "     VISIBLE:  '< > check box and remember these', cursor=0",
-     "SPEECH OUTPUT: 'check box not checked'",
-     "SPEECH OUTPUT: 'and remember these as my default search options'"]))
+     "SPEECH OUTPUT: 'and remember these as my default search options check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -86,8 +84,7 @@ sequence.append(utils.AssertPresentationAction(
     "9. Line Up",
     ["BRAILLE LINE:  'Sort results by: Reuse same sort as last time combo box'",
      "     VISIBLE:  'Sort results by: Reuse same sort', cursor=1",
-     "SPEECH OUTPUT: 'Sort results by:'",
-     "SPEECH OUTPUT: 'Reuse same sort as last time combo box'"]))
+     "SPEECH OUTPUT: 'Sort results by: Reuse same sort as last time combo box'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -168,8 +165,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  ' $l and Now $l'",
      "     VISIBLE:  ' $l and Now $l', cursor=1",
      "SPEECH OUTPUT: 'Only bugs changed between: entry'",
-     "SPEECH OUTPUT: 'and'",
-     "SPEECH OUTPUT: 'entry Now'"]))
+     "SPEECH OUTPUT: 'and entry Now'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -202,8 +198,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Only include combo box bugs numbered:  $l'",
      "     VISIBLE:  'Only include combo box bugs numb', cursor=1",
      "SPEECH OUTPUT: 'Only include combo box'",
-     "SPEECH OUTPUT: 'bugs numbered:'",
-     "SPEECH OUTPUT: 'entry'"]))
+     "SPEECH OUTPUT: 'bugs numbered: entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -235,18 +230,15 @@ sequence.append(utils.AssertPresentationAction(
     "27. Line Up",
     ["BRAILLE LINE:  '< > check box a commenter'",
      "     VISIBLE:  '< > check box a commenter', cursor=1",
-     "SPEECH OUTPUT: 'check box not checked'",
-     "SPEECH OUTPUT: 'a commenter'"]))
+     "SPEECH OUTPUT: 'a commenter check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "28. Line Up",
-    ["KNOWN ISSUE: We're guessing the label and presenting its text",
-     "BRAILLE LINE:  '<x> check box a CC list member'",
+    ["BRAILLE LINE:  '<x> check box a CC list member'",
      "     VISIBLE:  '<x> check box a CC list member', cursor=1",
-     "SPEECH OUTPUT: 'a CC list member check box checked'",
-     "SPEECH OUTPUT: 'a CC list member'"]))
+     "SPEECH OUTPUT: 'a CC list member check box checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -254,8 +246,7 @@ sequence.append(utils.AssertPresentationAction(
     "29. Line Up",
     ["BRAILLE LINE:  '<x> check box the QA contact'",
      "     VISIBLE:  '<x> check box the QA contact', cursor=1",
-     "SPEECH OUTPUT: 'the QA contact check box checked'",
-     "SPEECH OUTPUT: 'the QA contact'"]))
+     "SPEECH OUTPUT: 'the QA contact check box checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -263,8 +254,7 @@ sequence.append(utils.AssertPresentationAction(
     "30. Line Up",
     ["BRAILLE LINE:  '<x> check box the reporter'",
      "     VISIBLE:  '<x> check box the reporter', cursor=1",
-     "SPEECH OUTPUT: 'the reporter check box checked'",
-     "SPEECH OUTPUT: 'the reporter'"]))
+     "SPEECH OUTPUT: 'the reporter check box checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -272,8 +262,7 @@ sequence.append(utils.AssertPresentationAction(
     "31. Line Up",
     ["BRAILLE LINE:  '<x> check box the bug assignee'",
      "     VISIBLE:  '<x> check box the bug assignee', cursor=1",
-     "SPEECH OUTPUT: 'the bug assignee check box checked'",
-     "SPEECH OUTPUT: 'the bug assignee'"]))
+     "SPEECH OUTPUT: 'the bug assignee check box checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -305,8 +294,7 @@ sequence.append(utils.AssertPresentationAction(
     "35. Line Up",
     ["BRAILLE LINE:  '< > check box a commenter'",
      "     VISIBLE:  '< > check box a commenter', cursor=1",
-     "SPEECH OUTPUT: 'check box not checked'",
-     "SPEECH OUTPUT: 'a commenter'"]))
+     "SPEECH OUTPUT: 'a commenter check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -314,8 +302,7 @@ sequence.append(utils.AssertPresentationAction(
     "36. Line Up",
     ["BRAILLE LINE:  '< > check box a CC list member'",
      "     VISIBLE:  '< > check box a CC list member', cursor=1",
-     "SPEECH OUTPUT: 'a CC list member check box not checked'",
-     "SPEECH OUTPUT: 'a CC list member'"]))
+     "SPEECH OUTPUT: 'a CC list member check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -323,8 +310,7 @@ sequence.append(utils.AssertPresentationAction(
     "37. Line Up",
     ["BRAILLE LINE:  '< > check box the QA contact'",
      "     VISIBLE:  '< > check box the QA contact', cursor=1",
-     "SPEECH OUTPUT: 'the QA contact check box not checked'",
-     "SPEECH OUTPUT: 'the QA contact'"]))
+     "SPEECH OUTPUT: 'the QA contact check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -332,8 +318,7 @@ sequence.append(utils.AssertPresentationAction(
     "38. Line Up",
     ["BRAILLE LINE:  '< > check box the reporter'",
      "     VISIBLE:  '< > check box the reporter', cursor=1",
-     "SPEECH OUTPUT: 'the reporter check box not checked'",
-     "SPEECH OUTPUT: 'the reporter'"]))
+     "SPEECH OUTPUT: 'the reporter check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -341,8 +326,7 @@ sequence.append(utils.AssertPresentationAction(
     "39. Line Up",
     ["BRAILLE LINE:  '<x> check box the bug assignee'",
      "     VISIBLE:  '<x> check box the bug assignee', cursor=1",
-     "SPEECH OUTPUT: 'the bug assignee check box checked'",
-     "SPEECH OUTPUT: 'the bug assignee'"]))
+     "SPEECH OUTPUT: 'the bug assignee check box checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -457,7 +441,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'Keywords'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Keywords : row header'",
-     "SPEECH OUTPUT: 'contains all of the keywords combo box'",
+     "SPEECH OUTPUT: 'Keywords: contains all of the keywords combo box'",
      "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -466,8 +450,7 @@ sequence.append(utils.AssertPresentationAction(
     "54. Line Up",
     ["BRAILLE LINE:  'Whiteboard: contains all of the words/strings combo box $l'",
      "     VISIBLE:  'Whiteboard: contains all of the ', cursor=1",
-     "SPEECH OUTPUT: 'Whiteboard: row header'",
-     "SPEECH OUTPUT: 'contains all of the words/strings combo box'",
+     "SPEECH OUTPUT: 'Whiteboard: contains all of the words/strings combo box'",
      "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -476,8 +459,7 @@ sequence.append(utils.AssertPresentationAction(
     "55. Line Up",
     ["BRAILLE LINE:  'A Comment: contains the string combo box $l'",
      "     VISIBLE:  'A Comment: contains the string c', cursor=1",
-     "SPEECH OUTPUT: 'A Comment: row header'",
-     "SPEECH OUTPUT: 'contains the string combo box'",
+     "SPEECH OUTPUT: 'A Comment: contains the string combo box'",
      "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -568,9 +550,8 @@ sequence.append(utils.AssertPresentationAction(
     "66. Line Up",
     ["BRAILLE LINE:  'Summary: contains all of the words/strings combo box $l Search push button'",
      "     VISIBLE:  'Summary: contains all of the wor', cursor=1",
-     "SPEECH OUTPUT: 'Summary: row header'",
-     "SPEECH OUTPUT: 'contains all of the words/strings combo box'",
-     "SPEECH OUTPUT: 'Summary: entry'",
+     "SPEECH OUTPUT: 'Summary: contains all of the words/strings combo box'",
+     "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'Search push button'"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/firefox/line_nav_enter_bug.py b/test/keystrokes/firefox/line_nav_enter_bug.py
index cb05751..7e1f55d 100644
--- a/test/keystrokes/firefox/line_nav_enter_bug.py
+++ b/test/keystrokes/firefox/line_nav_enter_bug.py
@@ -212,7 +212,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'OS'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: ':'",
-     "SPEECH OUTPUT: 'Linux combo box'"]))
+     "SPEECH OUTPUT: 'OS: Linux combo box'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -223,7 +223,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'Severity'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: ':'",
-     "SPEECH OUTPUT: 'normal combo box'"]))
+     "SPEECH OUTPUT: 'Severity: normal combo box'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -239,8 +239,7 @@ sequence.append(utils.AssertPresentationAction(
     "23. Line Down",
     ["BRAILLE LINE:  'Summary: $l'",
      "     VISIBLE:  'Summary: $l', cursor=1",
-     "SPEECH OUTPUT: 'Summary:'",
-     "SPEECH OUTPUT: 'entry'"]))
+     "SPEECH OUTPUT: 'Summary: entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -280,8 +279,7 @@ sequence.append(utils.AssertPresentationAction(
     "28. Line Down",
     ["BRAILLE LINE:  'Cc: $l'",
      "     VISIBLE:  'Cc: $l', cursor=1",
-     "SPEECH OUTPUT: 'Cc:'",
-     "SPEECH OUTPUT: 'entry'"]))
+     "SPEECH OUTPUT: 'Cc: entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -317,8 +315,7 @@ sequence.append(utils.AssertPresentationAction(
     "32. Line Up",
     ["BRAILLE LINE:  'Cc: $l'",
      "     VISIBLE:  'Cc: $l', cursor=1",
-     "SPEECH OUTPUT: 'Cc:'",
-     "SPEECH OUTPUT: 'entry'"]))
+     "SPEECH OUTPUT: 'Cc: entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -358,8 +355,7 @@ sequence.append(utils.AssertPresentationAction(
     "37. Line Up",
     ["BRAILLE LINE:  'Summary: $l'",
      "     VISIBLE:  'Summary: $l', cursor=1",
-     "SPEECH OUTPUT: 'Summary:'",
-     "SPEECH OUTPUT: 'entry'"]))
+     "SPEECH OUTPUT: 'Summary: entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -378,7 +374,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'Severity'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: ':'",
-     "SPEECH OUTPUT: 'normal combo box'"]))
+     "SPEECH OUTPUT: 'Severity: normal combo box'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -389,7 +385,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'OS'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: ':'",
-     "SPEECH OUTPUT: 'Linux combo box'"]))
+     "SPEECH OUTPUT: 'OS: Linux combo box'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
diff --git a/test/keystrokes/firefox/line_nav_entries.py b/test/keystrokes/firefox/line_nav_entries.py
index 9cc16f4..037c508 100644
--- a/test/keystrokes/firefox/line_nav_entries.py
+++ b/test/keystrokes/firefox/line_nav_entries.py
@@ -8,7 +8,6 @@ import utils
 sequence = MacroSequence()
 
 sequence.append(PauseAction(3000))
-sequence.append(KeyComboAction("Tab"))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Home"))
@@ -22,7 +21,8 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "2. Line Down",
-    ["BRAILLE LINE:  'Type something rather amusing here:  $l'",
+    ["KNOWN ISSUE: We need to filter out the multiple objects",
+     "BRAILLE LINE:  'Type something rather amusing here:  $l'",
      "     VISIBLE:  'Type something rather amusing he', cursor=1",
      "SPEECH OUTPUT: 'Type'",
      "SPEECH OUTPUT: 'something'",
@@ -31,7 +31,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'amusing'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'here:'",
-     "SPEECH OUTPUT: 'entry'"]))
+     "SPEECH OUTPUT: 'Type something rather amusing here: entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -39,21 +39,17 @@ sequence.append(utils.AssertPresentationAction(
     "3. Line Down",
     ["BRAILLE LINE:  'Amusing numbers fall between  $l and  $l.'",
      "     VISIBLE:  'Amusing numbers fall between  $l', cursor=1",
-     "SPEECH OUTPUT: 'Amusing numbers fall between'",
-     "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: 'and'",
-     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: 'Amusing numbers fall between entry'",
+     "SPEECH OUTPUT: 'and entry'",
      "SPEECH OUTPUT: '.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "4. Line Down",
-    ["KNOWN ISSUE: We're guessing the label and also presenting its text",
-     "BRAILLE LINE:  ' $l I'm a label'",
+    ["BRAILLE LINE:  ' $l I'm a label'",
      "     VISIBLE:  ' $l I'm a label', cursor=1",
-     "SPEECH OUTPUT: 'I'm a label entry'",
-     "SPEECH OUTPUT: 'I'm a label'"]))
+     "SPEECH OUTPUT: 'I'm a label entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -61,8 +57,7 @@ sequence.append(utils.AssertPresentationAction(
     "5. Line Down",
     ["BRAILLE LINE:  ' $l Am I a label as well?'",
      "     VISIBLE:  ' $l Am I a label as well?', cursor=1",
-     "SPEECH OUTPUT: 'Am I a label as well? entry'",
-     "SPEECH OUTPUT: 'Am I a label as well?'"]))
+     "SPEECH OUTPUT: 'Am I a label as well? entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -86,7 +81,7 @@ sequence.append(utils.AssertPresentationAction(
     "8. Line Down",
     ["BRAILLE LINE:  ' $l Too far away to be a label.'",
      "     VISIBLE:  ' $l Too far away to be a label.', cursor=1",
-     "SPEECH OUTPUT: 'Too far away to be a label. entry'",
+     "SPEECH OUTPUT: 'Looking at what follows visually, I'm not sure what I would type/i.e. what the labels 
are. entry'",
      "SPEECH OUTPUT: 'Too far away to be a label.'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -95,8 +90,7 @@ sequence.append(utils.AssertPresentationAction(
     "9. Line Down",
     ["BRAILLE LINE:  'Distance doesn't count on the left $l'",
      "     VISIBLE:  'Distance doesn't count on the le', cursor=1",
-     "SPEECH OUTPUT: 'Distance doesn't count on the left'",
-     "SPEECH OUTPUT: 'entry'"]))
+     "SPEECH OUTPUT: 'Distance doesn't count on the left entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -169,8 +163,8 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  ' $l $l $l'",
      "     VISIBLE:  ' $l $l $l', cursor=1",
      "SPEECH OUTPUT: 'First name entry'",
-     "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: 'entry'"]))
+     "SPEECH OUTPUT: 'Middle initial entry'",
+     "SPEECH OUTPUT: 'Last name entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -255,8 +249,8 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  ' $l $l $l'",
      "     VISIBLE:  ' $l $l $l', cursor=1",
      "SPEECH OUTPUT: 'First Name entry'",
-     "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: 'entry'"]))
+     "SPEECH OUTPUT: 'Middle initial entry'",
+     "SPEECH OUTPUT: 'Last name entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -290,8 +284,8 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  ' $l $l $l'",
      "     VISIBLE:  ' $l $l $l', cursor=1",
      "SPEECH OUTPUT: 'First Name entry'",
-     "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: 'entry'"]))
+     "SPEECH OUTPUT: 'Middle initial entry'",
+     "SPEECH OUTPUT: 'Last name entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -376,8 +370,8 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  ' $l $l $l'",
      "     VISIBLE:  ' $l $l $l', cursor=1",
      "SPEECH OUTPUT: 'First name entry'",
-     "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: 'entry'"]))
+     "SPEECH OUTPUT: 'Middle initial entry'",
+     "SPEECH OUTPUT: 'Last name entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -449,8 +443,7 @@ sequence.append(utils.AssertPresentationAction(
     "51. Line Up",
     ["BRAILLE LINE:  'Distance doesn't count on the left $l'",
      "     VISIBLE:  'Distance doesn't count on the le', cursor=1",
-     "SPEECH OUTPUT: 'Distance doesn't count on the left'",
-     "SPEECH OUTPUT: 'entry'"]))
+     "SPEECH OUTPUT: 'Distance doesn't count on the left entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -458,7 +451,7 @@ sequence.append(utils.AssertPresentationAction(
     "52. Line Up",
     ["BRAILLE LINE:  ' $l Too far away to be a label.'",
      "     VISIBLE:  ' $l Too far away to be a label.', cursor=1",
-     "SPEECH OUTPUT: 'Too far away to be a label. entry'",
+     "SPEECH OUTPUT: 'Looking at what follows visually, I'm not sure what I would type/i.e. what the labels 
are. entry'",
      "SPEECH OUTPUT: 'Too far away to be a label.'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -483,8 +476,7 @@ sequence.append(utils.AssertPresentationAction(
     "55. Line Up",
     ["BRAILLE LINE:  ' $l Am I a label as well?'",
      "     VISIBLE:  ' $l Am I a label as well?', cursor=1",
-     "SPEECH OUTPUT: 'Am I a label as well? entry'",
-     "SPEECH OUTPUT: 'Am I a label as well?'"]))
+     "SPEECH OUTPUT: 'Am I a label as well? entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -492,8 +484,7 @@ sequence.append(utils.AssertPresentationAction(
     "56. Line Up",
     ["BRAILLE LINE:  ' $l I'm a label'",
      "     VISIBLE:  ' $l I'm a label', cursor=1",
-     "SPEECH OUTPUT: 'I'm a label entry'",
-     "SPEECH OUTPUT: 'I'm a label'"]))
+     "SPEECH OUTPUT: 'I'm a label entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -501,17 +492,16 @@ sequence.append(utils.AssertPresentationAction(
     "57. Line Up",
     ["BRAILLE LINE:  'Amusing numbers fall between  $l and  $l.'",
      "     VISIBLE:  'Amusing numbers fall between  $l', cursor=1",
-     "SPEECH OUTPUT: 'Amusing numbers fall between'",
-     "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: 'and'",
-     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: 'Amusing numbers fall between entry'",
+     "SPEECH OUTPUT: 'and entry'",
      "SPEECH OUTPUT: '.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "58. Line Up",
-    ["BRAILLE LINE:  'Type something rather amusing here:  $l'",
+    ["KNOWN ISSUE: We need to filter out the multiple objects",
+     "BRAILLE LINE:  'Type something rather amusing here:  $l'",
      "     VISIBLE:  'Type something rather amusing he', cursor=1",
      "SPEECH OUTPUT: 'Type'",
      "SPEECH OUTPUT: 'something'",
@@ -520,7 +510,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'amusing'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'here:'",
-     "SPEECH OUTPUT: 'entry'"]))
+     "SPEECH OUTPUT: 'Type something rather amusing here: entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
diff --git a/test/keystrokes/firefox/line_nav_simple_form.py b/test/keystrokes/firefox/line_nav_simple_form.py
index fe8da23..3718704 100644
--- a/test/keystrokes/firefox/line_nav_simple_form.py
+++ b/test/keystrokes/firefox/line_nav_simple_form.py
@@ -15,8 +15,7 @@ sequence.append(utils.AssertPresentationAction(
     "1. line Down",
     ["BRAILLE LINE:  'Magic disappearing text trick: tab to me and I disappear $l'",
      "     VISIBLE:  'Magic disappearing text trick: t', cursor=1",
-     "SPEECH OUTPUT: 'Magic disappearing text trick:'",
-     "SPEECH OUTPUT: 'entry tab to me and I disappear'"]))
+     "SPEECH OUTPUT: 'Magic disappearing text trick: entry tab to me and I disappear'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -24,8 +23,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. line Down",
     ["BRAILLE LINE:  'Tell me a secret:  $l'",
      "     VISIBLE:  'Tell me a secret:  $l', cursor=1",
-     "SPEECH OUTPUT: 'Tell me a secret:'",
-     "SPEECH OUTPUT: 'password text'"]))
+     "SPEECH OUTPUT: 'Tell me a secret: password text'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -93,8 +91,7 @@ sequence.append(utils.AssertPresentationAction(
     "10. line Down",
     ["BRAILLE LINE:  'Make a selection: Water combo box'",
      "     VISIBLE:  'Make a selection: Water combo bo', cursor=1",
-     "SPEECH OUTPUT: 'Make a selection:'",
-     "SPEECH OUTPUT: 'Water combo box'"]))
+     "SPEECH OUTPUT: 'Make a selection: Water combo box'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -127,10 +124,8 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Ain't he handsome (please say yes)? & y radio button Yes & y radio button No'",
      "     VISIBLE:  'Ain't he handsome (please say ye', cursor=1",
      "SPEECH OUTPUT: 'Ain't he handsome (please say yes)?'",
-     "SPEECH OUTPUT: 'not selected radio button'",
-     "SPEECH OUTPUT: 'Yes'",
-     "SPEECH OUTPUT: 'not selected radio button'",
-     "SPEECH OUTPUT: 'No'"]))
+     "SPEECH OUTPUT: 'Yes not selected radio button'",
+     "SPEECH OUTPUT: 'No not selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -162,8 +157,7 @@ sequence.append(utils.AssertPresentationAction(
     "18. line Up",
     ["BRAILLE LINE:  'Make a selection: Water combo box'",
      "     VISIBLE:  'Make a selection: Water combo bo', cursor=1",
-     "SPEECH OUTPUT: 'Make a selection:'",
-     "SPEECH OUTPUT: 'Water combo box'"]))
+     "SPEECH OUTPUT: 'Make a selection: Water combo box'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -231,8 +225,7 @@ sequence.append(utils.AssertPresentationAction(
     "26. line Up",
     ["BRAILLE LINE:  'Tell me a secret:  $l'",
      "     VISIBLE:  'Tell me a secret:  $l', cursor=1",
-     "SPEECH OUTPUT: 'Tell me a secret:'",
-     "SPEECH OUTPUT: 'password text'"]))
+     "SPEECH OUTPUT: 'Tell me a secret: password text'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -240,8 +233,7 @@ sequence.append(utils.AssertPresentationAction(
     "27. line Up",
     ["BRAILLE LINE:  'Magic disappearing text trick: tab to me and I disappear $l'",
      "     VISIBLE:  'Magic disappearing text trick: t', cursor=1",
-     "SPEECH OUTPUT: 'Magic disappearing text trick:'",
-     "SPEECH OUTPUT: 'entry tab to me and I disappear'"]))
+     "SPEECH OUTPUT: 'Magic disappearing text trick: entry tab to me and I disappear'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -249,8 +241,7 @@ sequence.append(utils.AssertPresentationAction(
     "28. line Up",
     ["BRAILLE LINE:  'Type something here:  $l'",
      "     VISIBLE:  'Type something here:  $l', cursor=1",
-     "SPEECH OUTPUT: 'Type something here:'",
-     "SPEECH OUTPUT: 'entry'"]))
+     "SPEECH OUTPUT: 'Type something here: entry'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/line_nav_slash_test.py b/test/keystrokes/firefox/line_nav_slash_test.py
index 97ad18e..c5e3f14 100644
--- a/test/keystrokes/firefox/line_nav_slash_test.py
+++ b/test/keystrokes/firefox/line_nav_slash_test.py
@@ -59,10 +59,8 @@ sequence.append(utils.AssertPresentationAction(
     "6. Line Down",
     ["BRAILLE LINE:  'Nickname $l Password $l Log in push button'",
      "     VISIBLE:  'Nickname $l Password $l Log in p', cursor=1",
-     "SPEECH OUTPUT: 'Nickname'",
-     "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: 'Password'",
-     "SPEECH OUTPUT: 'password text'",
+     "SPEECH OUTPUT: 'Nickname entry'",
+     "SPEECH OUTPUT: 'Password password text'",
      "SPEECH OUTPUT: 'Log in push button'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -85,11 +83,9 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "9. Line Down",
-    ["KNOWN ISSUE: We're guessing the label and also presenting its text",
-     "BRAILLE LINE:  '& y radio button Some polls'",
+    ["BRAILLE LINE:  '& y radio button Some polls'",
      "     VISIBLE:  '& y radio button Some polls', cursor=1",
-     "SPEECH OUTPUT: 'Some polls not selected radio button'",
-     "SPEECH OUTPUT: 'Some polls'"]))
+     "SPEECH OUTPUT: 'Some polls not selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -107,8 +103,7 @@ sequence.append(utils.AssertPresentationAction(
     "11. Line Up",
     ["BRAILLE LINE:  '& y radio button Some polls'",
      "     VISIBLE:  '& y radio button Some polls', cursor=1",
-     "SPEECH OUTPUT: 'Some polls not selected radio button'",
-     "SPEECH OUTPUT: 'Some polls'"]))
+     "SPEECH OUTPUT: 'Some polls not selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -132,10 +127,8 @@ sequence.append(utils.AssertPresentationAction(
     "14. Line Up",
     ["BRAILLE LINE:  'Nickname $l Password $l Log in push button'",
      "     VISIBLE:  'Nickname $l Password $l Log in p', cursor=1",
-     "SPEECH OUTPUT: 'Nickname'",
-     "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: 'Password'",
-     "SPEECH OUTPUT: 'password text'",
+     "SPEECH OUTPUT: 'Nickname entry'",
+     "SPEECH OUTPUT: 'Password password text'",
      "SPEECH OUTPUT: 'Log in push button'"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/firefox/line_nav_sun_java.py b/test/keystrokes/firefox/line_nav_sun_java.py
index b6a5821..f48d67f 100644
--- a/test/keystrokes/firefox/line_nav_sun_java.py
+++ b/test/keystrokes/firefox/line_nav_sun_java.py
@@ -20,7 +20,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: '\xbb'",
      "SPEECH OUTPUT: 'search tips'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: 'entry Search'",
+     "SPEECH OUTPUT: '\xbb\xa0search tips entry Search'",
      "SPEECH OUTPUT: 'Submit Search push button'"]))
 
 sequence.append(utils.StartRecordingAction())


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