#!/usr/bin/env python3
#
# Copyright (c) 2024 Stormux
# Copyright (c) 2010-2012 The Orca Team
# Copyright (c) 2012 Igalia, S.L.
# Copyright (c) 2005-2010 Sun Microsystems Inc.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the
# Free Software Foundation, Inc., Franklin Street, Fifth Floor,
# Boston MA  02110-1301 USA.
#
# Fork of Orca Screen Reader (GNOME)
# Original source: https://gitlab.gnome.org/GNOME/orca

"""Test of label guess for bugzilla's advanced search page."""

from macaroon.playback import *
import utils

sequence = MacroSequence()

#sequence.append(WaitForDocLoad())
sequence.append(PauseAction(5000))

# Work around some new quirk in Gecko that causes this test to fail if
# run via the test harness rather than manually.
sequence.append(KeyComboAction("<Control>r"))
sequence.append(PauseAction(3000))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
sequence.append(utils.AssertPresentationAction(
    "1. Shift Tab",
    ["BRAILLE LINE:  'S ummary: contains all of the words/strings Search table row'",
     "     VISIBLE:  'S ummary: contains all of the wo', cursor=1",
     "BRAILLE LINE:  'Summary: contains all of the words/strings combo box'",
     "     VISIBLE:  'Summary: contains all of the wor', cursor=10",
     "SPEECH OUTPUT: 'Summary: contains all of the words/strings combo box.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "2. Tab",
    ["BRAILLE LINE:  ' $l'",
     "     VISIBLE:  ' $l', cursor=1",
     "SPEECH OUTPUT: 'entry.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "3. Tab",
    ["BRAILLE LINE:  'Search push button'",
     "     VISIBLE:  'Search push button', cursor=1",
     "BRAILLE LINE:  'Browse mode'",
     "     VISIBLE:  'Browse mode', cursor=0",
     "SPEECH OUTPUT: 'Search push button'",
     "SPEECH OUTPUT: 'Browse mode' voice=system"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "4. Tab",
    ["BRAILLE LINE:  'Search push button'",
     "     VISIBLE:  'Search push button', cursor=1",
     "BRAILLE LINE:  'Admin '",
     "     VISIBLE:  'Admin ', cursor=1",
     "BRAILLE LINE:  'Focus mode'",
     "     VISIBLE:  'Focus mode', cursor=0",
     "SPEECH OUTPUT: 'table with 2 rows 1 column'",
     "SPEECH OUTPUT: 'Classification: multi-select List with 8 items'",
     "SPEECH OUTPUT: 'Admin.'",
     "SPEECH OUTPUT: 'Focus mode' voice=system"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "5. Tab",
    ["BRAILLE LINE:  'Admin '",
     "     VISIBLE:  'Admin ', cursor=1",
     "BRAILLE LINE:  'accerciser'",
     "     VISIBLE:  'accerciser', cursor=1",
     "SPEECH OUTPUT: 'table with 2 rows 1 column'",
     "SPEECH OUTPUT: 'Product: multi-select List with 379 items'",
     "SPEECH OUTPUT: 'accerciser.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "6. Tab",
    ["BRAILLE LINE:  'Component'",
     "     VISIBLE:  'Component', cursor=1",
     "BRAILLE LINE:  'Browse mode'",
     "     VISIBLE:  'Browse mode', cursor=0",
     "BRAILLE LINE:  'Component'",
     "     VISIBLE:  'Component', cursor=1",
     "SPEECH OUTPUT: 'Component link.'",
     "SPEECH OUTPUT: 'Browse mode' voice=system"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "7. Tab",
    ["BRAILLE LINE:  'abiscan'",
     "     VISIBLE:  'abiscan', cursor=1",
     "BRAILLE LINE:  'Focus mode'",
     "     VISIBLE:  'Focus mode', cursor=0",
     "SPEECH OUTPUT: 'Component: multi-select List with 1248 items'",
     "SPEECH OUTPUT: 'abiscan.'",
     "SPEECH OUTPUT: 'Focus mode' voice=system"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "8. Tab",
    ["BRAILLE LINE:  'abiscan'",
     "     VISIBLE:  'abiscan', cursor=1",
     "BRAILLE LINE:  '0.0.1'",
     "     VISIBLE:  '0.0.1', cursor=1",
     "SPEECH OUTPUT: 'table with 2 rows 1 column'",
     "SPEECH OUTPUT: 'Version: multi-select List with 857 items'",
     "SPEECH OUTPUT: '0.0.1.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "9. Tab",
    ["BRAILLE LINE:  '---'",
     "     VISIBLE:  '---', cursor=1",
     "SPEECH OUTPUT: 'table with 2 rows 1 column'",
     "SPEECH OUTPUT: 'Target Milestone: multi-select List with 555 items'",
     "SPEECH OUTPUT: '---.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "10. Tab",
    ["BRAILLE LINE:  'A Comment: contains the string combo box'",
     "     VISIBLE:  'A Comment: contains the string c', cursor=12",
     "SPEECH OUTPUT: 'A Comment: contains the string combo box.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "11. Tab",
    ["BRAILLE LINE:  ' $l'",
     "     VISIBLE:  ' $l', cursor=1",
     "SPEECH OUTPUT: 'entry.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "12. Tab",
    ["BRAILLE LINE:  'Whiteboard: contains all of the words/strings combo box'",
     "     VISIBLE:  'Whiteboard: contains all of the ', cursor=13",
     "SPEECH OUTPUT: 'Whiteboard: contains all of the words/strings combo box.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "13. Tab",
    ["BRAILLE LINE:  ' $l'",
     "     VISIBLE:  ' $l', cursor=1",
     "SPEECH OUTPUT: 'entry.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "14. Tab",
    ["BRAILLE LINE:  'Keywords'",
     "     VISIBLE:  'Keywords', cursor=1",
     "BRAILLE LINE:  'Browse mode'",
     "     VISIBLE:  'Browse mode', cursor=0",
     "BRAILLE LINE:  'Keywords'",
     "     VISIBLE:  'Keywords', cursor=1",
     "SPEECH OUTPUT: 'Keywords link.'",
     "SPEECH OUTPUT: 'Browse mode' voice=system"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "15. Tab",
    ["BRAILLE LINE:  'Keywords: contains all of the keywords combo box'",
     "     VISIBLE:  'Keywords: contains all of the ke', cursor=11",
     "BRAILLE LINE:  'Focus mode'",
     "     VISIBLE:  'Focus mode', cursor=0",
     "SPEECH OUTPUT: 'Keywords: contains all of the keywords combo box.'",
     "SPEECH OUTPUT: 'Focus mode' voice=system"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "16. Tab",
    ["BRAILLE LINE:  'Keywords: contains all of the keywords combo box'",
     "     VISIBLE:  'Keywords: contains all of the ke', cursor=11",
     "BRAILLE LINE:  ' $l'",
     "     VISIBLE:  ' $l', cursor=1",
     "SPEECH OUTPUT: 'entry.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "17. Tab",
    ["BRAILLE LINE:  'UNCONFIRMED'",
     "     VISIBLE:  'UNCONFIRMED', cursor=1",
     "SPEECH OUTPUT: 'table with 2 rows 1 column'",
     "SPEECH OUTPUT: 'Status: multi-select List with 8 items'",
     "SPEECH OUTPUT: 'UNCONFIRMED.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "18. Tab",
    ["BRAILLE LINE:  'FIXED'",
     "     VISIBLE:  'FIXED', cursor=1",
     "SPEECH OUTPUT: 'table with 2 rows 1 column'",
     "SPEECH OUTPUT: 'Resolution: multi-select List with 12 items'",
     "SPEECH OUTPUT: 'FIXED.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "19. Tab",
    ["BRAILLE LINE:  'blocker'",
     "     VISIBLE:  'blocker', cursor=1",
     "SPEECH OUTPUT: 'table with 2 rows 1 column'",
     "SPEECH OUTPUT: 'Severity: multi-select List with 7 items'",
     "SPEECH OUTPUT: 'blocker.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "20. Tab",
    ["BRAILLE LINE:  'Immediate'",
     "     VISIBLE:  'Immediate', cursor=1",
     "SPEECH OUTPUT: 'table with 2 rows 1 column'",
     "SPEECH OUTPUT: 'Priority: multi-select List with 5 items'",
     "SPEECH OUTPUT: 'Immediate.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "21. Tab",
    ["BRAILLE LINE:  'All'",
     "     VISIBLE:  'All', cursor=1",
     "SPEECH OUTPUT: 'table with 2 rows 1 column'",
     "SPEECH OUTPUT: 'OS: multi-select List with 21 items'",
     "SPEECH OUTPUT: 'All.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "22. Tab",
    ["BRAILLE LINE:  '<x> the bug assignee check box'",
     "     VISIBLE:  '<x> the bug assignee check box', cursor=1",
     "BRAILLE LINE:  'Browse mode'",
     "     VISIBLE:  'Browse mode', cursor=0",
     "SPEECH OUTPUT: 'Email and Numbering panel'",
     "SPEECH OUTPUT: 'the bug assignee check box checked.'",
     "SPEECH OUTPUT: 'Browse mode' voice=system"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "23. Tab",
    ["BRAILLE LINE:  '<x> the bug assignee check box'",
     "     VISIBLE:  '<x> the bug assignee check box', cursor=1",
     "BRAILLE LINE:  '< > the reporter check box'",
     "     VISIBLE:  '< > the reporter check box', cursor=1",
     "SPEECH OUTPUT: 'the reporter check box not checked.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "24. Tab",
    ["BRAILLE LINE:  '< > the QA contact check box'",
     "     VISIBLE:  '< > the QA contact check box', cursor=1",
     "SPEECH OUTPUT: 'the QA contact check box not checked.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "25. Tab",
    ["BRAILLE LINE:  '< > a CC list member check box'",
     "     VISIBLE:  '< > a CC list member check box', cursor=1",
     "SPEECH OUTPUT: 'a CC list member check box not checked.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "26. Tab",
    ["BRAILLE LINE:  '< > a commenter check box'",
     "     VISIBLE:  '< > a commenter check box', cursor=1",
     "SPEECH OUTPUT: 'a commenter check box not checked.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "27. Tab",
    ["BRAILLE LINE:  'contains combo box'",
     "     VISIBLE:  'contains combo box', cursor=1",
     "BRAILLE LINE:  'Focus mode'",
     "     VISIBLE:  'Focus mode', cursor=0",
     "SPEECH OUTPUT: 'contains combo box.'",
     "SPEECH OUTPUT: 'Focus mode' voice=system"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "28. Tab",
    ["BRAILLE LINE:  'contains combo box'",
     "     VISIBLE:  'contains combo box', cursor=1",
     "BRAILLE LINE:  ' $l'",
     "     VISIBLE:  ' $l', cursor=1",
     "SPEECH OUTPUT: 'entry.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "29. Tab",
    ["BRAILLE LINE:  '<x> the bug assignee check box'",
     "     VISIBLE:  '<x> the bug assignee check box', cursor=1",
     "BRAILLE LINE:  'Browse mode'",
     "     VISIBLE:  'Browse mode', cursor=0",
     "SPEECH OUTPUT: 'the bug assignee check box checked.'",
     "SPEECH OUTPUT: 'Browse mode' voice=system"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "30. Tab",
    ["BRAILLE LINE:  '<x> the bug assignee check box'",
     "     VISIBLE:  '<x> the bug assignee check box', cursor=1",
     "BRAILLE LINE:  '<x> the reporter check box'",
     "     VISIBLE:  '<x> the reporter check box', cursor=1",
     "SPEECH OUTPUT: 'the reporter check box checked.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "31. Tab",
    ["BRAILLE LINE:  '<x> the QA contact check box'",
     "     VISIBLE:  '<x> the QA contact check box', cursor=1",
     "SPEECH OUTPUT: 'the QA contact check box checked.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "32. Tab",
    ["BRAILLE LINE:  '<x> a CC list member check box'",
     "     VISIBLE:  '<x> a CC list member check box', cursor=1",
     "SPEECH OUTPUT: 'a CC list member check box checked.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "33. Tab",
    ["BRAILLE LINE:  '< > a commenter check box'",
     "     VISIBLE:  '< > a commenter check box', cursor=1",
     "SPEECH OUTPUT: 'a commenter check box not checked.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "34. Tab",
    ["BRAILLE LINE:  'contains combo box'",
     "     VISIBLE:  'contains combo box', cursor=1",
     "BRAILLE LINE:  'Focus mode'",
     "     VISIBLE:  'Focus mode', cursor=0",
     "SPEECH OUTPUT: 'contains combo box.'",
     "SPEECH OUTPUT: 'Focus mode' voice=system"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "35. Tab",
    ["BRAILLE LINE:  'contains combo box'",
     "     VISIBLE:  'contains combo box', cursor=1",
     "BRAILLE LINE:  ' $l'",
     "     VISIBLE:  ' $l', cursor=1",
     "SPEECH OUTPUT: 'entry.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "36. Tab",
    ["BRAILLE LINE:  'Only include combo box'",
     "     VISIBLE:  'Only include combo box', cursor=1",
     "SPEECH OUTPUT: 'Only include combo box.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "37. Tab",
    ["BRAILLE LINE:  'bugs numbered:  $l'",
     "     VISIBLE:  'bugs numbered:  $l', cursor=16",
     "SPEECH OUTPUT: 'bugs numbered: entry.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "38. Tab",
    ["BRAILLE LINE:  'Only bugs changed between:  $l'",
     "     VISIBLE:  'Only bugs changed between:  $l', cursor=28",
     "SPEECH OUTPUT: 'Bug Changes panel'",
     "SPEECH OUTPUT: 'List with 3 items'",
     "SPEECH OUTPUT: 'Only bugs changed between: entry.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "39. Tab",
    ["BRAILLE LINE:  'and Now $l'",
     "     VISIBLE:  'and Now $l', cursor=8",
     "BRAILLE LINE:  'and Now $l'",
     "     VISIBLE:  'and Now $l', cursor=8",
     "SPEECH OUTPUT: 'and entry Now selected.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "40. Tab",
    ["BRAILLE LINE:  '[Bug creation]'",
     "     VISIBLE:  '[Bug creation]', cursor=1",
     "SPEECH OUTPUT: 'where one or more of the following changed: multi-select List with 26 items'",
     "SPEECH OUTPUT: '[Bug creation].'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "41. Tab",
    ["BRAILLE LINE:  'and the new value was:  $l'",
     "     VISIBLE:  'and the new value was:  $l', cursor=24",
     "SPEECH OUTPUT: 'and the new value was: entry.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "42. Tab",
    ["BRAILLE LINE:  'Unspecified'",
     "     VISIBLE:  'Unspecified', cursor=1",
     "SPEECH OUTPUT: 'table with 2 rows 1 column'",
     "SPEECH OUTPUT: 'GNOME version: multi-select List with 14 items'",
     "SPEECH OUTPUT: 'Unspecified.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "43. Tab",
    ["BRAILLE LINE:  'Unspecified'",
     "     VISIBLE:  'Unspecified', cursor=1",
     "SPEECH OUTPUT: 'table with 2 rows 1 column'",
     "SPEECH OUTPUT: 'GNOME target: multi-select List with 12 items'",
     "SPEECH OUTPUT: 'Unspecified.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "44. Tab",
    ["BRAILLE LINE:  'Sort results by: Reuse same sort as last time combo box'",
     "     VISIBLE:  'Sort results by: Reuse same sort', cursor=18",
     "SPEECH OUTPUT: 'Sort results by: Reuse same sort as last time combo box.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "45. Tab",
    ["BRAILLE LINE:  'Search push button'",
     "     VISIBLE:  'Search push button', cursor=1",
     "BRAILLE LINE:  'Browse mode'",
     "     VISIBLE:  'Browse mode', cursor=0",
     "SPEECH OUTPUT: 'Search push button'",
     "SPEECH OUTPUT: 'Browse mode' voice=system"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "46. Tab",
    ["BRAILLE LINE:  'Search push button'",
     "     VISIBLE:  'Search push button', cursor=1",
     "BRAILLE LINE:  '< > and remember these as my default search options check box'",
     "     VISIBLE:  '< > and remember these as my def', cursor=1",
     "SPEECH OUTPUT: 'and remember these as my default search options check box not checked.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "47. Tab",
    ["BRAILLE LINE:  '< > Not (negate this whole chart) check box'",
     "     VISIBLE:  '< > Not \\(negate this whole chart', cursor=1",
     "SPEECH OUTPUT: 'Not (negate this whole chart) check box not checked.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "48. Tab",
    ["BRAILLE LINE:  '--- combo box'",
     "     VISIBLE:  '--- combo box', cursor=1",
     "BRAILLE LINE:  'Focus mode'",
     "     VISIBLE:  'Focus mode', cursor=0",
     "SPEECH OUTPUT: '--- combo box.'",
     "SPEECH OUTPUT: 'Focus mode' voice=system"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "49. Tab",
    ["BRAILLE LINE:  '--- combo box'",
     "     VISIBLE:  '--- combo box', cursor=1",
     "BRAILLE LINE:  '--- combo box'",
     "     VISIBLE:  '--- combo box', cursor=1",
     "SPEECH OUTPUT: '--- combo box.'"]))

sequence.append(utils.StartRecordingAction())
sequence.append(KeyComboAction("Tab"))
sequence.append(utils.AssertPresentationAction(
    "50. Tab",
    ["BRAILLE LINE:  ' $l'",
     "     VISIBLE:  ' $l', cursor=1",
     "SPEECH OUTPUT: 'entry.'"]))

sequence.append(utils.AssertionSummaryAction())
sequence.start()