#!/usr/bin/python3 -cimport os, sys; os.execv(os.path.dirname(sys.argv[1]) + "/../common/pywrap", sys.argv)## Copyright (C) 2024 Red Hat, Inc.# SPDX-License-Identifier: LGPL-2.1-or-laterimport testlib@testlib.nondestructiveclass TestLib(testlib.MachineCase):def testTypeaheadSelect(self):b = self.browser# Loginself.login_and_go("/playground/react-patterns")# No clear buttonb.wait_not_visible("#demo-typeahead .pf-v6-c-text-input-group__utilities button")# Open menu, pixel testb.click("#demo-typeahead .pf-v6-c-menu-toggle__button")b.assert_pixels("#typeahead-widget", "menu")b.wait_text("#toggles", "1")b.wait_text("#changes", "0")# Select from menu (with mouse)b.click("#typeahead-widget .pf-v6-c-menu__item:contains('Hawaii')")b.wait_not_present("#typeahead-widget")b.assert_pixels("#demo-typeahead .pf-v6-c-menu-toggle", "input")b.wait_text("#value", "HI")b.wait_text("#toggles", "2")b.wait_text("#changes", "0")# Clearb.click("#demo-typeahead .pf-v6-c-text-input-group__utilities button")b.wait_not_visible("#demo-typeahead .pf-v6-c-text-input-group__utilities button")b.wait_text("#value", "-")b.wait_text("#toggles", "2")b.wait_text("#changes", "1")# Open by clicking into input, close with ESCb.click("#demo-typeahead .pf-v6-c-text-input-group__text-input")b.wait_visible("#typeahead-widget")b.key("Escape")b.wait_not_present("#typeahead-widget")b.wait_text("#toggles", "4")b.wait_text("#changes", "1")# Select with keys, verify that dividers and headers are skippedb.click("#demo-typeahead .pf-v6-c-menu-toggle__button")b.wait_visible("#typeahead-widget")b.key("ArrowDown")b.key("ArrowUp") # wraps aroundb.key("ArrowUp") # skips over dividerb.key("ArrowDown") # skips over dividerb.key("ArrowDown") # wraps aroundb.key("ArrowDown") # skips over divider and headerb.key("ArrowDown")b.key("Enter")b.wait_not_present("#typeahead-widget")b.wait_text("#value", "AL")b.wait_val("#demo-typeahead .pf-v6-c-text-input-group__text-input", "Alabama")b.wait_text("#toggles", "6")b.wait_text("#changes", "1")b.click("#demo-typeahead .pf-v6-c-text-input-group__utilities button")b.wait_text("#value", "-")b.wait_text("#toggles", "6")b.wait_text("#changes", "2")# Search for non-existentb.set_input_text("#demo-typeahead .pf-v6-c-text-input-group__text-input", "Olabama")b.wait_text("#typeahead-widget .pf-v6-c-menu__item", "'Olabama' not found")b.click("#demo-typeahead .pf-v6-c-menu-toggle__button")b.wait_not_present("#typeahead-widget")b.wait_text("#toggles", "8")b.wait_text("#changes", "9")# Again with formatted "not found" messageb.set_checked("#notFoundIsString", val=True)b.set_input_text("#demo-typeahead .pf-v6-c-text-input-group__text-input", "Olabama")b.wait_text("#typeahead-widget .pf-v6-c-menu__item", "Not found")b.click("#demo-typeahead .pf-v6-c-menu-toggle__button")b.wait_not_present("#typeahead-widget")b.wait_text("#toggles", "10")b.wait_text("#changes", "16")# Search for existing, pixel test, selectb.set_input_text("#demo-typeahead .pf-v6-c-text-input-group__text-input", "Flori")b.wait_visible("#typeahead-widget")b.assert_pixels("#typeahead-widget", "search")b.click("#typeahead-widget .pf-v6-c-menu__item:contains('Florida')")b.wait_not_present("#typeahead-widget")b.wait_text("#value", "FL")b.wait_text("#toggles", "12")b.wait_text("#changes", "21")# Enable creation, create new stateb.set_checked("#isCreatable", val=True)b.set_input_text("#demo-typeahead .pf-v6-c-text-input-group__text-input", "Flori")b.click("#typeahead-widget .pf-v6-c-menu__item:contains('Create Flori')")b.wait_not_present("#typeahead-widget")b.wait_text("#value", "Flori")b.wait_val("#demo-typeahead .pf-v6-c-text-input-group__text-input", "Flori")b.wait_text("#toggles", "14")b.wait_text("#changes", "26")def testMultiTypeaheadSelect(self):b = self.browser# Loginself.login_and_go("/playground/react-patterns")# No clear buttonb.wait_not_visible("#demo-multi-typeahead .pf-v6-c-text-input-group__utilities button")# Open menu, pixel testb.click("#demo-multi-typeahead .pf-v6-c-menu-toggle__button")b.assert_pixels("#multi-typeahead-widget", "menu")b.wait_text("#multi-toggles", "1")b.wait_text("#multi-changes", "0")# Select from menu (with mouse)b.click("#multi-typeahead-widget .pf-v6-c-menu__item:contains('Strawberry Cheesecake')")b.wait_not_present("#multi-typeahead-widget")b.assert_pixels("#demo-multi-typeahead .pf-v6-c-menu-toggle", "input")b.wait_text("#multi-value", "[76]")b.wait_text("#multi-toggles", "2")b.wait_text("#multi-changes", "0")# Select another oneb.click("#demo-multi-typeahead .pf-v6-c-menu-toggle__button")b.wait_visible("#multi-typeahead-widget")b.click("#multi-typeahead-widget .pf-v6-c-menu__item:contains('Coconut Chip')")b.wait_not_present("#multi-typeahead-widget")b.wait_text("#multi-value", "[76,32]")b.wait_text("#multi-toggles", "4")b.wait_text("#multi-changes", "0")# Remove oneb.click("#demo-multi-typeahead button[aria-label='Close Strawberry Cheesecake']")b.wait_text("#multi-value", "[32]")b.wait_text("#multi-toggles", "4")b.wait_text("#multi-changes", "0")# Open by clicking into input, close with ESCb.click("#demo-multi-typeahead .pf-v6-c-text-input-group__text-input")b.wait_visible("#multi-typeahead-widget")b.key("Escape")b.wait_not_present("#multi-typeahead-widget")b.wait_text("#multi-toggles", "6")b.wait_text("#multi-changes", "0")# Select with keysb.click("#demo-multi-typeahead .pf-v6-c-menu-toggle__button")b.wait_visible("#multi-typeahead-widget")b.key("ArrowDown") # Alumni Swirlb.key("ArrowUp") # Wraps, WPSU Coffee breakb.key("ArrowDown") # Wrapsb.key("ArrowDown")b.key("ArrowDown")b.key("ArrowDown")b.key("ArrowDown") # Autumn Delightb.key("Enter")b.key("Escape")b.wait_not_present("#multi-typeahead-widget")b.wait_text("#multi-value", "[32,5]")b.wait_text("#multi-toggles", "8")b.wait_text("#multi-changes", "0")b.wait_visible("#demo-multi-typeahead .pf-v6-c-label:contains('Coconut Chip')")b.wait_visible("#demo-multi-typeahead .pf-v6-c-label:contains('Autumn Delight')")# Search for non-existentb.click("#demo-multi-typeahead .pf-v6-c-text-input-group__text-input")b.set_input_text("#demo-multi-typeahead .pf-v6-c-text-input-group__text-input", "Salmiak")b.wait_text("#multi-typeahead-widget .pf-v6-c-menu__item", "'Salmiak' not found")b.click("#demo-multi-typeahead .pf-v6-c-menu-toggle__button")b.wait_not_present("#multi-typeahead-widget")b.wait_text("#multi-toggles", "10")b.wait_text("#multi-changes", "7")# Again with formatted "not found" messageb.set_checked("#notFoundIsStringMulti", val=True)b.click("#demo-multi-typeahead .pf-v6-c-text-input-group__text-input")b.set_input_text("#demo-multi-typeahead .pf-v6-c-text-input-group__text-input", "Salmiaki")b.wait_text("#multi-typeahead-widget .pf-v6-c-menu__item", "Not found")b.click("#demo-multi-typeahead .pf-v6-c-menu-toggle__button")b.wait_not_present("#multi-typeahead-widget")b.wait_text("#multi-toggles", "12")b.wait_text("#multi-changes", "15")# Search for existing, pixel test, selectb.click("#demo-multi-typeahead .pf-v6-c-text-input-group__text-input")b.set_input_text("#demo-multi-typeahead .pf-v6-c-text-input-group__text-input", "Rum")b.wait_visible("#multi-typeahead-widget")b.click("#multi-typeahead-widget .pf-v6-c-menu__item")b.wait_not_present("#multi-typeahead-widget")b.wait_text("#multi-value", "[32,5,67]")b.wait_text("#multi-toggles", "14")b.wait_text("#multi-changes", "18")if __name__ == '__main__':testlib.test_main()