[orca] Begin migration to generators for creating flat review zones
- From: Joanmarie Diggs <joanied src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [orca] Begin migration to generators for creating flat review zones
- Date: Wed, 24 Aug 2016 06:56:10 +0000 (UTC)
commit c0bf4bec8469739b94a268f5af8ff13ad335b124
Author: Joanmarie Diggs <jdiggs igalia com>
Date: Wed Aug 24 02:52:17 2016 -0400
Begin migration to generators for creating flat review zones
* Eliminates duplicated (and sometimes incorrect) code
* Fixes reviewability of Gtk+ icon panels and Gtk+ spin button values
src/orca/braille_generator.py | 3 +
src/orca/flat_review.py | 373 ++++++--------------
src/orca/generator.py | 31 ++
src/orca/script_utilities.py | 8 +-
src/orca/scripts/web/script_utilities.py | 7 +-
src/orca/speech_generator.py | 2 +-
test/keystrokes/gnome-clocks/timer_flat_review.py | 44 ++--
.../gnome-terminal/man_page_flat_review.py | 18 +-
test/keystrokes/gtk-demo/role_icon_flat_review.py | 73 ++--
.../gtk3-demo/role_dialog_flat_review.py | 33 +-
test/keystrokes/gtk3-demo/role_icon_flat_review.py | 73 ++--
11 files changed, 261 insertions(+), 404 deletions(-)
---
diff --git a/src/orca/braille_generator.py b/src/orca/braille_generator.py
index f01f499..264bd1a 100644
--- a/src/orca/braille_generator.py
+++ b/src/orca/braille_generator.py
@@ -356,6 +356,9 @@ class BrailleGenerator(generator.Generator):
and not self._shouldPresentProgressBarUpdate(obj, **args):
return []
+ return self._generatePercentage(obj, **args)
+
+ def _generatePercentage(self, obj, **args):
percent = self._script.utilities.getValueAsPercent(obj)
if percent is not None:
return ['%s%%' % percent]
diff --git a/src/orca/flat_review.py b/src/orca/flat_review.py
index 5c782f3..04558c7 100644
--- a/src/orca/flat_review.py
+++ b/src/orca/flat_review.py
@@ -1,6 +1,7 @@
# Orca
#
# Copyright 2005-2008 Sun Microsystems Inc.
+# Copyright 2016 Igalia, S.L.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
@@ -22,7 +23,8 @@
__id__ = "$Id$"
__version__ = "$Revision$"
__date__ = "$Date$"
-__copyright__ = "Copyright (c) 2005-2008 Sun Microsystems Inc."
+__copyright__ = "Copyright (c) 2005-2008 Sun Microsystems Inc." \
+ "Copyright (c) 2016 Igalia, S.L."
__license__ = "LGPL"
import pyatspi
@@ -32,7 +34,6 @@ from . import braille
from . import debug
from . import eventsynthesizer
from . import messages
-from . import object_properties
from . import orca_state
from . import settings
@@ -334,113 +335,56 @@ class TextZone(Zone):
class StateZone(Zone):
- """Represents a Zone for an accessible that shows a state using
- a graphical indicator, such as a checkbox or radio button."""
+ """A Zone whose purpose is to display the state of an object."""
- def __init__(self,
- accessible,
- x, y,
- width, height,
- role=None):
- Zone.__init__(self, accessible, "", x, y, width, height, role)
+ def __init__(self, accessible, x, y, width, height, role=None):
+ super().__init__(accessible, "", x, y, width, height, role)
- # Force the use of __getattr__ so we get the actual state
- # of the accessible each time we look at the 'string' field.
- #
- del self.string
+ def __getattribute__(self, attr):
+ """To ensure we update the state."""
- def __getattr__(self, attr):
- if attr in ["string", "length", "brailleString"]:
- # stateCount is used as a boolean and as an index
- stateset = self.accessible.getState()
- if stateset.contains(pyatspi.STATE_INDETERMINATE):
- stateCount = 2
- elif stateset.contains(pyatspi.STATE_CHECKED):
- stateCount = 1
- else:
- stateCount = 0
- if self.role in [pyatspi.ROLE_CHECK_BOX,
- pyatspi.ROLE_CHECK_MENU_ITEM,
- pyatspi.ROLE_TABLE_CELL]:
- if stateCount == 2:
- speechState = object_properties.STATE_PARTIALLY_CHECKED
- elif stateCount == 1:
- speechState = object_properties.STATE_CHECKED
- else:
- speechState = object_properties.STATE_NOT_CHECKED
- brailleState = \
- object_properties.CHECK_BOX_INDICATORS_BRAILLE[stateCount]
- elif self.role == pyatspi.ROLE_TOGGLE_BUTTON:
- if stateCount:
- speechState = object_properties.STATE_PRESSED
- else:
- speechState = object_properties.STATE_NOT_PRESSED
- brailleState = \
- object_properties.RADIO_BUTTON_INDICATORS_BRAILLE[stateCount]
- else:
- if stateCount:
- speechState = object_properties.STATE_SELECTED_RADIO_BUTTON
- else:
- speechState = object_properties.STATE_UNSELECTED_RADIO_BUTTON
- brailleState = \
- object_properties.RADIO_BUTTON_INDICATORS_BRAILLE[stateCount]
+ if attr not in ["string", "brailleString"]:
+ return super().__getattribute__(attr)
- if attr == "string":
- return speechState
- elif attr == "length":
- return len(speechState)
- elif attr == "brailleString":
- return brailleState
+ if attr == "string":
+ generator = orca_state.activeScript.speechGenerator
else:
- return Zone.__getattr__(self, attr)
+ generator = orca_state.activeScript.brailleGenerator
-class ValueZone(Zone):
- """Represents a Zone for an accessible that shows a value using
- a graphical indicator, such as a progress bar or slider."""
+ result = generator.getStateIndicator(self.accessible, role=self.role)
+ if result:
+ return result[0]
- def __init__(self,
- accessible,
- x, y,
- width, height,
- role=None):
- Zone.__init__(self, accessible, "", x, y, width, height, role)
+ return ""
- # Force the use of __getattr__ so we get the actual state
- # of the accessible each time we look at the 'string' field.
- #
- del self.string
- def __getattr__(self, attr):
- if attr in ["string", "length", "brailleString"]:
- try:
- value = self.accessible.queryValue()
- except NotImplementedError:
- debug.println(debug.LEVEL_FINE,
- 'ValueZone does not implement Value interface')
- try:
- percentValue = int((value.currentValue /
- (value.maximumValue - value.minimumValue))
- * 100.0)
- except:
- percentValue = 0
+class ValueZone(Zone):
+ """A Zone whose purpose is to display the value of an object."""
- script = orca_state.activeScript
- speechValue = script.speechGenerator.getLocalizedRoleName(
- self.accessible, alreadyFocused=True)
- speechValue = speechValue + " " + messages.percentage(percentValue)
+ def __init__(self, accessible, x, y, width, height, role=None):
+ super().__init__(accessible, "", x, y, width, height, role)
- brailleValue = script.brailleGenerator.getLocalizedRoleName(
- self.accessible, alreadyFocused=True)
- brailleValue = "%s %d%%" % (brailleValue, percentValue)
+ def __getattribute__(self, attr):
+ """To ensure we update the value."""
- if attr == "string":
- return speechValue
- elif attr == "length":
- return len(speechValue)
- elif attr == "brailleString":
- return brailleValue
+ if attr not in ["string", "brailleString"]:
+ return super().__getattribute__(attr)
+
+ if attr == "string":
+ generator = orca_state.activeScript.speechGenerator
else:
- return Zone.__getattr__(self, attr)
+ generator = orca_state.activeScript.brailleGenerator
+
+ result = ""
+
+ # TODO - JD: This cobbling together beats what we had, but the
+ # generators should also be doing the assembly.
+ rolename = generator.getLocalizedRoleName(self.accessible)
+ value = generator.getValue(self.accessible)
+ if rolename and value:
+ result = "%s %s" % (rolename, value[0])
+
+ return result
class Line:
@@ -967,63 +911,47 @@ class Context:
return zones
- def _insertStateZone(self, zones, accessible, role=None):
+ def _insertStateZone(self, zones, accessible, extents):
"""If the accessible presents non-textual state, such as a
checkbox or radio button, insert a StateZone representing
that state."""
- zone = None
- stateOnLeft = True
-
- role = role or accessible.getRole()
- if role in [pyatspi.ROLE_CHECK_BOX,
- pyatspi.ROLE_CHECK_MENU_ITEM,
- pyatspi.ROLE_RADIO_BUTTON,
- pyatspi.ROLE_RADIO_MENU_ITEM]:
+ # TODO - JD: This whole thing is pretty hacky. Either do it
+ # right or nuke it.
- # Attempt to infer if the indicator is to the left or
- # right of the text.
- #
- extents = accessible.queryComponent().getExtents(0)
- stateX = extents.x
- stateY = extents.y
- stateWidth = 1
- stateHeight = extents.height
+ indicatorExtents = extents.x, extents.y, 1, extents.height
+ role = accessible.getRole()
+ if role == pyatspi.ROLE_TOGGLE_BUTTON:
+ zone = StateZone(accessible, *indicatorExtents, role=role)
+ if zone:
+ zones.insert(0, zone)
+ return
- try:
- text = accessible.queryText()
- except NotImplementedError:
- pass
- else:
- [x, y, width, height] = \
- text.getRangeExtents( \
- 0, text.characterCount, 0)
- textToLeftEdge = x - extents.x
- textToRightEdge = (extents.x + extents.width) - (x + width)
- stateOnLeft = textToLeftEdge > 20
- if stateOnLeft:
- stateWidth = textToLeftEdge
- else:
- stateX = x + width
- stateWidth = textToRightEdge
+ if role == pyatspi.ROLE_TABLE_CELL \
+ and self.script.utilities.hasMeaningfulToggleAction(accessible):
+ role = pyatspi.ROLE_CHECK_BOX
- zone = StateZone(accessible,
- stateX, stateY, stateWidth, stateHeight)
+ if role not in [pyatspi.ROLE_CHECK_BOX,
+ pyatspi.ROLE_CHECK_MENU_ITEM,
+ pyatspi.ROLE_RADIO_BUTTON,
+ pyatspi.ROLE_RADIO_MENU_ITEM]:
+ return
- elif role == pyatspi.ROLE_TOGGLE_BUTTON:
- # [[[TODO: WDW - This is a major hack. We make up an
- # indicator for a toggle button to let the user know
- # whether a toggle button is pressed or not.]]]
- #
- extents = accessible.queryComponent().getExtents(0)
- zone = StateZone(accessible,
- extents.x, extents.y, 1, extents.height)
+ zone = None
+ stateOnLeft = True
- elif role == pyatspi.ROLE_TABLE_CELL:
- # Handle table cells that act like check boxes.
- if self.script.utilities.hasMeaningfulToggleAction(accessible):
- self._insertStateZone(zones, accessible, pyatspi.ROLE_CHECK_BOX)
+ if len(zones) == 1 and isinstance(zones[0], TextZone):
+ textZone = zones[0]
+ textToLeftEdge = textZone.x - extents.x
+ textToRightEdge = (extents.x + extents.width) - (textZone.x + width)
+ stateOnLeft = textToLeftEdge > 20
+ if stateOnLeft:
+ indicatorExtents[2] = textToLeftEdge
+ else:
+ indicatorExtents[0] = textZone.x + width
+ indicatorExtents[2] = textToRightEdge
+ zone = StateZone(accessible, *indicatorExtents, role=role)
if zone:
if stateOnLeft:
zones.insert(0, zone)
@@ -1037,31 +965,21 @@ class Context:
- accessible: the accessible
- cliprect: the extents that the Zones must fit inside.
"""
- icomponent = accessible.queryComponent()
- if not icomponent:
- return []
-
- # Get the component extents in screen coordinates.
- #
- extents = icomponent.getExtents(0)
- if not self.script.utilities.containsRegion(
- extents.x, extents.y,
- extents.width, extents.height,
- cliprect.x, cliprect.y,
- cliprect.width, cliprect.height):
+ try:
+ component = accessible.queryComponent()
+ extents = component.getExtents(pyatspi.DESKTOP_COORDS)
+ except:
return []
- debug.println(
- debug.LEVEL_FINEST,
- "flat_review.getZonesFromAccessible (name=%s role=%s)" \
- % (accessible.name, accessible.getRoleName()))
+ if not self.script.utilities.containsRegion(*extents, *cliprect):
+ return []
- # Now see if there is any accessible text. If so, find new zones,
- # where each zone represents a line of this text object. When
- # creating the zone, only keep track of the text that is actually
- # showing on the screen.
- #
+ try:
+ role = accessible.getRole()
+ childCount = accessible.childCount
+ except:
+ return []
try:
accessible.queryText()
@@ -1070,114 +988,27 @@ class Context:
else:
zones = self.getZonesFromText(accessible, cliprect)
- # We really want the accessible text information. But, if we have
- # an image, and it has a description, we can fall back on it.
- # First, try to get the image interface.
- try:
- iimage = accessible.queryImage()
- except NotImplementedError:
- iimage = None
-
- if (len(zones) == 0) and iimage:
- # Check for accessible.name, if it exists and has len > 0, use it
- # Otherwise, do the same for accessible.description
- # Otherwise, do the same for accessible.image.description
- imageName = ""
- if accessible.name and len(accessible.name):
- imageName = accessible.name
- elif accessible.description and len(accessible.description):
- imageName = accessible.description
- elif iimage.imageDescription and \
- len(iimage.imageDescription):
- imageName = iimage.imageDescription
-
- [x, y] = iimage.getImagePosition(0)
- [width, height] = iimage.getImageSize()
-
- if width != 0 and height != 0 \
- and self.script.utilities.containsRegion(
- x, y, width, height,
- cliprect.x, cliprect.y,
- cliprect.width, cliprect.height):
-
- clipping = self.clip(x, y, width, height,
- cliprect.x, cliprect.y,
- cliprect.width, cliprect.height)
-
- if (clipping[2] != 0) or (clipping[3] != 0):
- zones.append(Zone(accessible,
- imageName,
- clipping[0],
- clipping[1],
- clipping[2],
- clipping[3]))
-
- # If the accessible is a parent, we really only looked at it for
- # its accessible text. So...we'll skip the hacking here if that's
- # the case. [[[TODO: WDW - HACK That is, except in the case of
- # combo boxes, which don't implement the accesible text
- # interface. We also hack with MENU items for similar reasons.]]]
- #
- # Otherwise, even if we didn't get anything of use, we certainly
- # know there's something there. If that's the case, we'll just
- # use the component extents and the name or description of the
- # accessible.
- #
- clipping = self.clip(extents.x, extents.y,
- extents.width, extents.height,
- cliprect.x, cliprect.y,
- cliprect.width, cliprect.height)
- role = accessible.getRole()
-
- if (len(zones) == 0) \
- and role in [pyatspi.ROLE_SCROLL_BAR,
- pyatspi.ROLE_SLIDER,
- pyatspi.ROLE_PROGRESS_BAR]:
- zones.append(ValueZone(accessible,
- clipping[0],
- clipping[1],
- clipping[2],
- clipping[3]))
- elif (role != pyatspi.ROLE_COMBO_BOX) \
- and (role != pyatspi.ROLE_EMBEDDED) \
- and (role != pyatspi.ROLE_LABEL) \
- and (role != pyatspi.ROLE_MENU) \
- and (role != pyatspi.ROLE_PAGE_TAB) \
- and accessible.childCount > 0:
+ clipping = self.clip(*extents, *cliprect)
+ if not zones and role in [pyatspi.ROLE_SCROLL_BAR,
+ pyatspi.ROLE_SLIDER,
+ pyatspi.ROLE_PROGRESS_BAR]:
+ zones.append(ValueZone(accessible, *clipping))
+ elif childCount and role not in [pyatspi.ROLE_COMBO_BOX,
+ pyatspi.ROLE_EMBEDDED,
+ pyatspi.ROLE_LABEL,
+ pyatspi.ROLE_MENU,
+ pyatspi.ROLE_PAGE_TAB]:
pass
- elif len(zones) == 0:
- string = ""
- if role == pyatspi.ROLE_COMBO_BOX:
- try:
- selection = accessible[0].querySelection()
- except:
- string = self.script.utilities.displayedText(accessible[0])
- else:
- item = selection.getSelectedChild(0)
- if item:
- string = item.name
-
- if not string and accessible.name and len(accessible.name):
- string = accessible.name
- elif accessible.description and len(accessible.description):
- string = accessible.description
-
- if not string and role == pyatspi.ROLE_ICON:
- string = self.script.utilities.displayedText(accessible)
-
- if (string == "") \
- and (role != pyatspi.ROLE_TABLE_CELL):
- string = accessible.getLocalizedRoleName()
-
- if len(string) and ((clipping[2] != 0) or (clipping[3] != 0)):
- zones.append(Zone(accessible,
- string,
- clipping[0],
- clipping[1],
- clipping[2],
- clipping[3]))
-
- self._insertStateZone(zones, accessible)
+ elif not zones:
+ string = self.script.speechGenerator.getName(accessible)
+ if not string and role != pyatspi.ROLE_TABLE_CELL:
+ string = self.script.speechGenerator.getLocalizedRoleName(accessible)
+
+ # TODO - JD: This check will become obsolete soon.
+ if string and (clipping[2] or clipping[3] != 0):
+ zones.append(Zone(accessible, string, *clipping))
+
+ self._insertStateZone(zones, accessible, extents)
return zones
diff --git a/src/orca/generator.py b/src/orca/generator.py
index cf193ad..66fc3d5 100644
--- a/src/orca/generator.py
+++ b/src/orca/generator.py
@@ -1211,3 +1211,34 @@ class Generator:
atkRole = Atk.role_for_name("statusbar")
return Atk.role_get_localized_name(atkRole)
+
+ def getStateIndicator(self, obj, **args):
+ role = args.get('role', obj.getRole())
+
+ if role == pyatspi.ROLE_MENU_ITEM:
+ return self._generateMenuItemCheckedState(obj, **args)
+
+ if role in [pyatspi.ROLE_RADIO_BUTTON, pyatspi.ROLE_RADIO_MENU_ITEM]:
+ return self._generateRadioState(obj, **args)
+
+ if role in [pyatspi.ROLE_CHECK_BOX, pyatspi.ROLE_CHECK_MENU_ITEM]:
+ return self._generateCheckedState(obj, **args)
+
+ if role == pyatspi.ROLE_TOGGLE_BUTTON:
+ return self._generateToggleState(obj, **args)
+
+ if role == pyatspi.ROLE_TABLE_CELL:
+ return self._generateCellCheckedState(obj, **args)
+
+ return []
+
+ def getValue(self, obj, **args):
+ role = args.get('role', obj.getRole())
+
+ if role == pyatspi.ROLE_PROGRESS_BAR:
+ return self._generateProgressBarValue(obj, **args)
+
+ if role in [pyatspi.ROLE_SCROLL_BAR, pyatspi.ROLE_SLIDER]:
+ return self._generatePercentage(obj, **args)
+
+ return []
diff --git a/src/orca/script_utilities.py b/src/orca/script_utilities.py
index fe4086c..b269ec0 100644
--- a/src/orca/script_utilities.py
+++ b/src/orca/script_utilities.py
@@ -907,6 +907,11 @@ class Utilities:
debug.println(debug.LEVEL_INFO, msg, True)
return None
+ if maxval == minval == val:
+ if 1 <= val <= 100:
+ return int(val)
+ return None
+
return int((val / (maxval - minval)) * 100)
def isDocument(self, obj):
@@ -3526,9 +3531,6 @@ class Utilities:
return table.getRowExtentAt(row, col), table.getColumnExtentAt(row, col)
def rowAndColumnCount(self, obj):
- if not (obj and obj.getRole() == pyatspi.ROLE_TABLE):
- return -1, -1
-
try:
table = obj.queryTable()
except:
diff --git a/src/orca/scripts/web/script_utilities.py b/src/orca/scripts/web/script_utilities.py
index d7615ea..3bb1c38 100644
--- a/src/orca/scripts/web/script_utilities.py
+++ b/src/orca/scripts/web/script_utilities.py
@@ -192,12 +192,7 @@ class Utilities(script_utilities.Utilities):
if self.isDocument(obj):
return obj
- document = pyatspi.findAncestor(obj, self.isDocument)
- if not document:
- msg = "WEB: Could not find document for %s" % obj
- debug.println(debug.LEVEL_INFO, msg, True)
-
- return document
+ return pyatspi.findAncestor(obj, self.isDocument)
def _getDocumentsEmbeddedBy(self, frame):
isEmbeds = lambda r: r.getRelationType() == pyatspi.RELATION_EMBEDS
diff --git a/src/orca/speech_generator.py b/src/orca/speech_generator.py
index 6d0cc99..3f01895 100644
--- a/src/orca/speech_generator.py
+++ b/src/orca/speech_generator.py
@@ -1280,7 +1280,7 @@ class SpeechGenerator(generator.Generator):
percentValue = self._script.utilities.getValueAsPercent(obj)
if percentValue is not None:
- result = [percentValue]
+ result = [messages.percentage(percentValue)]
result.extend(self.voice(SYSTEM))
return result
diff --git a/test/keystrokes/gnome-clocks/timer_flat_review.py
b/test/keystrokes/gnome-clocks/timer_flat_review.py
index f88e107..3a27bcc 100644
--- a/test/keystrokes/gnome-clocks/timer_flat_review.py
+++ b/test/keystrokes/gnome-clocks/timer_flat_review.py
@@ -48,10 +48,9 @@ sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_7"))
sequence.append(utils.AssertPresentationAction(
"4. Review previous line",
- ["KNOWN ISSUE: We're not presenting the displayed values",
- "BRAILLE LINE: 'label spin button ∶ spin button ∶ spin button label $l'",
- " VISIBLE: 'label spin button ∶ spin button ', cursor=1",
- "SPEECH OUTPUT: 'label spin button ∶ spin button ∶ spin button label'"]))
+ ["BRAILLE LINE: 'label 00 ∶ 04 ∶ 58 label $l'",
+ " VISIBLE: 'label 00 ∶ 04 ∶ 58 label $l', cursor=1",
+ "SPEECH OUTPUT: 'label 00 ∶ 04 ∶ 58 label'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_7"))
@@ -64,17 +63,16 @@ sequence.append(utils.AssertPresentationAction(
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_9"))
sequence.append(utils.AssertPresentationAction(
- "5. Review next line",
- ["KNOWN ISSUE: The spin buttons are no longer showing",
- "BRAILLE LINE: 'label spin button ∶ spin button ∶ spin button label $l'",
- " VISIBLE: 'label spin button ∶ spin button ', cursor=1",
- "SPEECH OUTPUT: 'label spin button ∶ spin button ∶ spin button label'"]))
+ "6. Review next line",
+ ["BRAILLE LINE: 'label 00 ∶ 04 ∶ 58 label $l'",
+ " VISIBLE: 'label 00 ∶ 04 ∶ 58 label $l', cursor=1",
+ "SPEECH OUTPUT: 'label 00 ∶ 04 ∶ 58 label'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_Subtract"))
sequence.append(KeyComboAction("KP_Subtract"))
sequence.append(utils.AssertPresentationAction(
- "6. Toggle flat review",
+ "7. Toggle flat review",
["BRAILLE LINE: 'Leaving flat review.'",
" VISIBLE: 'Leaving flat review.', cursor=0",
"BRAILLE LINE: 'gnome-clocks application frame Pause push button'",
@@ -90,29 +88,29 @@ sequence.append(utils.AssertPresentationAction(
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_7"))
sequence.append(utils.AssertPresentationAction(
- "7. Review previous line",
- ["KNOWN ISSUE: The spin buttons are no longer showing",
- "BRAILLE LINE: 'label spin button ∶ spin button ∶ spin button label $l'",
- " VISIBLE: 'label spin button ∶ spin button ', cursor=1",
- "SPEECH OUTPUT: 'label spin button ∶ spin button ∶ spin button label'"]))
+ "8. Review previous line",
+ ["BRAILLE LINE: 'label 00 ∶ 04 ∶ 49 label $l'",
+ " VISIBLE: 'label 00 ∶ 04 ∶ 49 label $l', cursor=1",
+ "SPEECH OUTPUT: 'label 00 ∶ 04 ∶ 49 label'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_8"))
sequence.append(utils.AssertPresentationAction(
- "8. Review current line",
- ["BRAILLE LINE: 'label spin button ∶ spin button ∶ spin button label $l'",
- " VISIBLE: 'label spin button ∶ spin button ', cursor=1",
- "SPEECH OUTPUT: 'label spin button ∶ spin button ∶ spin button label'"]))
+ "9. Review current line",
+ ["BRAILLE LINE: 'label 00 ∶ 04 ∶ 49 label $l'",
+ " VISIBLE: 'label 00 ∶ 04 ∶ 49 label $l', cursor=1",
+ "SPEECH OUTPUT: 'label 00 ∶ 04 ∶ 49 label'"]))
sequence.append(PauseAction(3000))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_8"))
sequence.append(utils.AssertPresentationAction(
- "9. Review current line",
- ["BRAILLE LINE: 'label spin button ∶ spin button ∶ spin button label $l'",
- " VISIBLE: 'label spin button ∶ spin button ', cursor=1",
- "SPEECH OUTPUT: 'label spin button ∶ spin button ∶ spin button label'"]))
+ "10. Review current line",
+ ["KNOWN ISSUE: The values are now being displayed, but are not yet being updated. Also the labels are
useless.",
+ "BRAILLE LINE: 'label 00 ∶ 04 ∶ 49 label $l'",
+ " VISIBLE: 'label 00 ∶ 04 ∶ 49 label $l', cursor=1",
+ "SPEECH OUTPUT: 'label 00 ∶ 04 ∶ 49 label'"]))
sequence.append(utils.AssertionSummaryAction())
sequence.start()
diff --git a/test/keystrokes/gnome-terminal/man_page_flat_review.py
b/test/keystrokes/gnome-terminal/man_page_flat_review.py
index 5da5583..c211646 100644
--- a/test/keystrokes/gnome-terminal/man_page_flat_review.py
+++ b/test/keystrokes/gnome-terminal/man_page_flat_review.py
@@ -69,9 +69,9 @@ sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_9"))
sequence.append(utils.AssertPresentationAction(
"7. Review next line",
- ["BRAILLE LINE: 'vertical scroll bar 0% $l'",
- " VISIBLE: 'vertical scroll bar 0% $l', cursor=1",
- "SPEECH OUTPUT: 'vertical scroll bar 0 percent.'"]))
+ ["BRAILLE LINE: 'vertical scroll bar 3% $l'",
+ " VISIBLE: 'vertical scroll bar 3% $l', cursor=1",
+ "SPEECH OUTPUT: 'vertical scroll bar 3 percent.'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_9"))
@@ -182,9 +182,9 @@ sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_9"))
sequence.append(utils.AssertPresentationAction(
"17. Review next line",
- ["BRAILLE LINE: 'vertical scroll bar 0% $l'",
- " VISIBLE: 'vertical scroll bar 0% $l', cursor=1",
- "SPEECH OUTPUT: 'vertical scroll bar 0 percent.'"]))
+ ["BRAILLE LINE: 'vertical scroll bar 26% $l'",
+ " VISIBLE: 'vertical scroll bar 26% $l', cursor=1",
+ "SPEECH OUTPUT: 'vertical scroll bar 26 percent.'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_9"))
@@ -280,9 +280,9 @@ sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_9"))
sequence.append(utils.AssertPresentationAction(
"25. Review next line",
- ["BRAILLE LINE: 'vertical scroll bar 0% $l'",
- " VISIBLE: 'vertical scroll bar 0% $l', cursor=1",
- "SPEECH OUTPUT: 'vertical scroll bar 0 percent.'"]))
+ ["BRAILLE LINE: 'vertical scroll bar 26% $l'",
+ " VISIBLE: 'vertical scroll bar 26% $l', cursor=1",
+ "SPEECH OUTPUT: 'vertical scroll bar 26 percent.'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_9"))
diff --git a/test/keystrokes/gtk-demo/role_icon_flat_review.py
b/test/keystrokes/gtk-demo/role_icon_flat_review.py
index 92c4c37..e95acdd 100644
--- a/test/keystrokes/gtk-demo/role_icon_flat_review.py
+++ b/test/keystrokes/gtk-demo/role_icon_flat_review.py
@@ -28,34 +28,33 @@ sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_8"))
sequence.append(utils.AssertPresentationAction(
"2. Review current line",
- ["KNOWN ISSUE: This and all the subsequent assertions are broken due to flat review bugs",
- "BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=1",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'bin boot dev etc home lib $l'",
+ " VISIBLE: 'bin boot dev etc home lib $l', cursor=1",
+ "SPEECH OUTPUT: 'bin boot dev etc home lib'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_5"))
sequence.append(utils.AssertPresentationAction(
"3. Review current word",
- ["BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=1",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'bin boot dev etc home lib $l'",
+ " VISIBLE: 'bin boot dev etc home lib $l', cursor=1",
+ "SPEECH OUTPUT: 'bin'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_6"))
sequence.append(utils.AssertPresentationAction(
"4. Review next word",
- ["BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=2",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'bin boot dev etc home lib $l'",
+ " VISIBLE: 'bin boot dev etc home lib $l', cursor=5",
+ "SPEECH OUTPUT: 'boot'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_2"))
sequence.append(utils.AssertPresentationAction(
"5. Review current char",
- ["BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=2",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'bin boot dev etc home lib $l'",
+ " VISIBLE: 'bin boot dev etc home lib $l', cursor=5",
+ "SPEECH OUTPUT: 'boot'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -63,9 +62,9 @@ sequence.append(KeyComboAction("KP_6"))
sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
sequence.append(utils.AssertPresentationAction(
"6. Review item below",
- ["BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=2",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'lib64 lost+found media mnt opt proc $l'",
+ " VISIBLE: 'b64 lost+found media mnt opt pro', cursor=5",
+ "SPEECH OUTPUT: 'lost+found'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -73,9 +72,9 @@ sequence.append(KeyComboAction("KP_6"))
sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
sequence.append(utils.AssertPresentationAction(
"7. Review item below",
- ["BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=2",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'root run sbin srv sys tmp $l'",
+ " VISIBLE: 'root run sbin srv sys tmp $l', cursor=6",
+ "SPEECH OUTPUT: 'run'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -83,9 +82,9 @@ sequence.append(KeyComboAction("KP_4"))
sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
sequence.append(utils.AssertPresentationAction(
"8. Review item above",
- ["BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=2",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'lib64 lost+found media mnt opt proc $l'",
+ " VISIBLE: 'b64 lost+found media mnt opt pro', cursor=5",
+ "SPEECH OUTPUT: 'lost+found'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -93,41 +92,41 @@ sequence.append(KeyComboAction("KP_4"))
sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
sequence.append(utils.AssertPresentationAction(
"9. Review item above",
- ["BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=2",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'bin boot dev etc home lib $l'",
+ " VISIBLE: 'bin boot dev etc home lib $l', cursor=5",
+ "SPEECH OUTPUT: 'boot'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_9"))
sequence.append(utils.AssertPresentationAction(
"10. Review next line",
- ["BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=1",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'lib64 lost+found media mnt opt proc $l'",
+ " VISIBLE: 'lib64 lost+found media mnt opt p', cursor=1",
+ "SPEECH OUTPUT: 'lib64 lost+found media mnt opt proc'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_6"))
sequence.append(utils.AssertPresentationAction(
"11. Review next word",
- ["BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=2",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'lib64 lost+found media mnt opt proc $l'",
+ " VISIBLE: 'lib64 lost+found media mnt opt p', cursor=7",
+ "SPEECH OUTPUT: 'lost+found'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_3"))
sequence.append(utils.AssertPresentationAction(
"12. Review next char",
- ["BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=3",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'lib64 lost+found media mnt opt proc $l'",
+ " VISIBLE: 'lib64 lost+found media mnt opt p', cursor=18",
+ "SPEECH OUTPUT: 'media'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_7"))
sequence.append(utils.AssertPresentationAction(
"13. Review previous line",
- ["BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=1",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'bin boot dev etc home lib $l'",
+ " VISIBLE: 'bin boot dev etc home lib $l', cursor=1",
+ "SPEECH OUTPUT: 'bin boot dev etc home lib'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_7"))
diff --git a/test/keystrokes/gtk3-demo/role_dialog_flat_review.py
b/test/keystrokes/gtk3-demo/role_dialog_flat_review.py
index 63082e1..467eb33 100644
--- a/test/keystrokes/gtk3-demo/role_dialog_flat_review.py
+++ b/test/keystrokes/gtk3-demo/role_dialog_flat_review.py
@@ -175,58 +175,57 @@ sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_9"))
sequence.append(utils.AssertPresentationAction(
"20. Review next line",
- ["KNOWN ISSUE: The value is not reviewable",
- "BRAILLE LINE: '&=y All Pages Copies: spin button $l'",
- " VISIBLE: '&=y All Pages Copies: spin butto', cursor=1",
- "SPEECH OUTPUT: 'selected All Pages Copies: spin button'"]))
+ ["BRAILLE LINE: '&=y All Pages Copies: 1 $l'",
+ " VISIBLE: '&=y All Pages Copies: 1 $l', cursor=1",
+ "SPEECH OUTPUT: 'selected All Pages Copies: 1'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_5"))
sequence.append(utils.AssertPresentationAction(
"21. Review current word",
- ["BRAILLE LINE: '&=y All Pages Copies: spin button $l'",
- " VISIBLE: '&=y All Pages Copies: spin butto', cursor=1",
+ ["BRAILLE LINE: '&=y All Pages Copies: 1 $l'",
+ " VISIBLE: '&=y All Pages Copies: 1 $l', cursor=1",
"SPEECH OUTPUT: 'selected'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_2"))
sequence.append(utils.AssertPresentationAction(
"22. Review current char",
- ["BRAILLE LINE: '&=y All Pages Copies: spin button $l'",
- " VISIBLE: '&=y All Pages Copies: spin butto', cursor=1",
+ ["BRAILLE LINE: '&=y All Pages Copies: 1 $l'",
+ " VISIBLE: '&=y All Pages Copies: 1 $l', cursor=1",
"SPEECH OUTPUT: 'selected'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_6"))
sequence.append(utils.AssertPresentationAction(
"23. Review next word",
- ["BRAILLE LINE: '&=y All Pages Copies: spin button $l'",
- " VISIBLE: '&=y All Pages Copies: spin butto', cursor=5",
+ ["BRAILLE LINE: '&=y All Pages Copies: 1 $l'",
+ " VISIBLE: '&=y All Pages Copies: 1 $l', cursor=5",
"SPEECH OUTPUT: 'All Pages'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_6"))
sequence.append(utils.AssertPresentationAction(
"24. Review next word",
- ["BRAILLE LINE: '&=y All Pages Copies: spin button $l'",
- " VISIBLE: '&=y All Pages Copies: spin butto', cursor=15",
+ ["BRAILLE LINE: '&=y All Pages Copies: 1 $l'",
+ " VISIBLE: '&=y All Pages Copies: 1 $l', cursor=15",
"SPEECH OUTPUT: 'Copies:'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_3"))
sequence.append(utils.AssertPresentationAction(
"25. Review next char",
- ["BRAILLE LINE: '&=y All Pages Copies: spin button $l'",
- " VISIBLE: '&=y All Pages Copies: spin butto', cursor=16",
+ ["BRAILLE LINE: '&=y All Pages Copies: 1 $l'",
+ " VISIBLE: '&=y All Pages Copies: 1 $l', cursor=16",
"SPEECH OUTPUT: 'o'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_6"))
sequence.append(utils.AssertPresentationAction(
"26. Review next word",
- ["BRAILLE LINE: '&=y All Pages Copies: spin button $l'",
- " VISIBLE: '&=y All Pages Copies: spin butto', cursor=23",
- "SPEECH OUTPUT: 'spin button'"]))
+ ["BRAILLE LINE: '&=y All Pages Copies: 1 $l'",
+ " VISIBLE: '&=y All Pages Copies: 1 $l', cursor=23",
+ "SPEECH OUTPUT: '1'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_9"))
diff --git a/test/keystrokes/gtk3-demo/role_icon_flat_review.py
b/test/keystrokes/gtk3-demo/role_icon_flat_review.py
index 953670c..3f30aac 100644
--- a/test/keystrokes/gtk3-demo/role_icon_flat_review.py
+++ b/test/keystrokes/gtk3-demo/role_icon_flat_review.py
@@ -28,34 +28,33 @@ sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_8"))
sequence.append(utils.AssertPresentationAction(
"2. Review current line",
- ["KNOWN ISSUE: This and all the subsequent assertions are broken due to flat review bugs",
- "BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=1",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'bin boot dev $l'",
+ " VISIBLE: 'bin boot dev $l', cursor=1",
+ "SPEECH OUTPUT: 'bin boot dev'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_5"))
sequence.append(utils.AssertPresentationAction(
"3. Review current word",
- ["BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=1",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'bin boot dev $l'",
+ " VISIBLE: 'bin boot dev $l', cursor=1",
+ "SPEECH OUTPUT: 'bin'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_6"))
sequence.append(utils.AssertPresentationAction(
"4. Review next word",
- ["BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=2",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'bin boot dev $l'",
+ " VISIBLE: 'bin boot dev $l', cursor=5",
+ "SPEECH OUTPUT: 'boot'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_2"))
sequence.append(utils.AssertPresentationAction(
"5. Review current char",
- ["BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=2",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'bin boot dev $l'",
+ " VISIBLE: 'bin boot dev $l', cursor=5",
+ "SPEECH OUTPUT: 'boot'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -63,9 +62,9 @@ sequence.append(KeyComboAction("KP_6"))
sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
sequence.append(utils.AssertPresentationAction(
"6. Review item below",
- ["BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=2",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'etc home lib $l'",
+ " VISIBLE: 'etc home lib $l', cursor=5",
+ "SPEECH OUTPUT: 'home'"]))
sequence.append(PauseAction(3000))
@@ -75,9 +74,9 @@ sequence.append(KeyComboAction("KP_6"))
sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
sequence.append(utils.AssertPresentationAction(
"7. Review item below",
- ["BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=2",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'lib64 lost+found media $l'",
+ " VISIBLE: 'lib64 lost+found media $l', cursor=7",
+ "SPEECH OUTPUT: 'lost+found'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -85,9 +84,9 @@ sequence.append(KeyComboAction("KP_4"))
sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
sequence.append(utils.AssertPresentationAction(
"8. Review item above",
- ["BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=2",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'etc home lib $l'",
+ " VISIBLE: 'etc home lib $l', cursor=5",
+ "SPEECH OUTPUT: 'home'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -95,41 +94,41 @@ sequence.append(KeyComboAction("KP_4"))
sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
sequence.append(utils.AssertPresentationAction(
"9. Review item above",
- ["BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=2",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'bin boot dev $l'",
+ " VISIBLE: 'bin boot dev $l', cursor=5",
+ "SPEECH OUTPUT: 'boot'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_9"))
sequence.append(utils.AssertPresentationAction(
"10. Review next line",
- ["BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=1",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'etc home lib $l'",
+ " VISIBLE: 'etc home lib $l', cursor=1",
+ "SPEECH OUTPUT: 'etc home lib'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_6"))
sequence.append(utils.AssertPresentationAction(
"11. Review next word",
- ["BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=2",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'etc home lib $l'",
+ " VISIBLE: 'etc home lib $l', cursor=5",
+ "SPEECH OUTPUT: 'home'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_3"))
sequence.append(utils.AssertPresentationAction(
"12. Review next char",
- ["BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=3",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'etc home lib $l'",
+ " VISIBLE: 'etc home lib $l', cursor=10",
+ "SPEECH OUTPUT: 'lib'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_7"))
sequence.append(utils.AssertPresentationAction(
"13. Review previous line",
- ["BRAILLE LINE: ' $l'",
- " VISIBLE: ' $l', cursor=1",
- "SPEECH OUTPUT: 'blank'"]))
+ ["BRAILLE LINE: 'bin boot dev $l'",
+ " VISIBLE: 'bin boot dev $l', cursor=1",
+ "SPEECH OUTPUT: 'bin boot dev'"]))
sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("KP_7"))
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]