@gtkx/testing 1.6.0 → 2.0.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -44
- package/dist/accessible-native.d.ts +1 -1
- package/dist/accessible-native.d.ts.map +1 -1
- package/dist/accessible-native.js +29 -8
- package/dist/accessible-native.js.map +1 -1
- package/dist/build-queries.d.ts +9 -9
- package/dist/build-queries.d.ts.map +1 -1
- package/dist/build-queries.js +2 -1
- package/dist/build-queries.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -3
- package/dist/config.js.map +1 -1
- package/dist/fire-event.d.ts +3 -3
- package/dist/fire-event.d.ts.map +1 -1
- package/dist/fire-event.js +14 -4
- package/dist/fire-event.js.map +1 -1
- package/dist/matchers.d.ts +52 -56
- package/dist/matchers.d.ts.map +1 -1
- package/dist/matchers.js +4 -16
- package/dist/matchers.js.map +1 -1
- package/dist/queries.d.ts +37 -133
- package/dist/queries.d.ts.map +1 -1
- package/dist/queries.js +48 -136
- package/dist/queries.js.map +1 -1
- package/dist/query-helpers.d.ts +2 -2
- package/dist/query-helpers.d.ts.map +1 -1
- package/dist/query-helpers.js +10 -3
- package/dist/query-helpers.js.map +1 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +4 -0
- package/dist/render.js.map +1 -1
- package/dist/role-helpers.d.ts +1 -1
- package/dist/role-helpers.d.ts.map +1 -1
- package/dist/role-helpers.js +2 -1
- package/dist/role-helpers.js.map +1 -1
- package/dist/screenshot.d.ts +1 -1
- package/dist/screenshot.d.ts.map +1 -1
- package/dist/screenshot.js +26 -8
- package/dist/screenshot.js.map +1 -1
- package/dist/suggestions.d.ts +1 -1
- package/dist/suggestions.d.ts.map +1 -1
- package/dist/suggestions.js +3 -1
- package/dist/suggestions.js.map +1 -1
- package/dist/traversal.d.ts +4 -4
- package/dist/traversal.d.ts.map +1 -1
- package/dist/traversal.js +25 -7
- package/dist/traversal.js.map +1 -1
- package/dist/types.d.ts +10 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/user-event/adjustment.d.ts +2 -14
- package/dist/user-event/adjustment.d.ts.map +1 -1
- package/dist/user-event/adjustment.js +2 -14
- package/dist/user-event/adjustment.js.map +1 -1
- package/dist/user-event/click.d.ts +20 -45
- package/dist/user-event/click.d.ts.map +1 -1
- package/dist/user-event/click.js +31 -50
- package/dist/user-event/click.js.map +1 -1
- package/dist/user-event/controller.d.ts +5 -5
- package/dist/user-event/controller.d.ts.map +1 -1
- package/dist/user-event/controller.js +5 -2
- package/dist/user-event/controller.js.map +1 -1
- package/dist/user-event/gesture.d.ts +9 -43
- package/dist/user-event/gesture.d.ts.map +1 -1
- package/dist/user-event/gesture.js +9 -43
- package/dist/user-event/gesture.js.map +1 -1
- package/dist/user-event/index.d.ts +38 -107
- package/dist/user-event/index.d.ts.map +1 -1
- package/dist/user-event/index.js +29 -30
- package/dist/user-event/index.js.map +1 -1
- package/dist/user-event/keyboard.d.ts +1 -1
- package/dist/user-event/keyboard.d.ts.map +1 -1
- package/dist/user-event/keyboard.js +24 -3
- package/dist/user-event/keyboard.js.map +1 -1
- package/dist/user-event/list-row-click.d.ts +1 -1
- package/dist/user-event/list-row-click.d.ts.map +1 -1
- package/dist/user-event/list-row-click.js +2 -1
- package/dist/user-event/list-row-click.js.map +1 -1
- package/dist/user-event/pointer.d.ts.map +1 -1
- package/dist/user-event/pointer.js +9 -11
- package/dist/user-event/pointer.js.map +1 -1
- package/dist/user-event/selection.d.ts +4 -20
- package/dist/user-event/selection.d.ts.map +1 -1
- package/dist/user-event/selection.js +11 -23
- package/dist/user-event/selection.js.map +1 -1
- package/dist/user-event/text.d.ts +5 -34
- package/dist/user-event/text.d.ts.map +1 -1
- package/dist/user-event/text.js +5 -34
- package/dist/user-event/text.js.map +1 -1
- package/dist/wait-for.d.ts +2 -2
- package/dist/wait-for.d.ts.map +1 -1
- package/dist/wait-for.js +6 -4
- package/dist/wait-for.js.map +1 -1
- package/dist/widget-accessible-properties.d.ts +4 -3
- package/dist/widget-accessible-properties.d.ts.map +1 -1
- package/dist/widget-accessible-properties.js +38 -51
- package/dist/widget-accessible-properties.js.map +1 -1
- package/dist/widget-getters.d.ts +7 -9
- package/dist/widget-getters.d.ts.map +1 -1
- package/dist/widget-getters.js.map +1 -1
- package/dist/widget-target.d.ts +4 -0
- package/dist/widget-target.d.ts.map +1 -0
- package/dist/widget-target.js +9 -0
- package/dist/widget-target.js.map +1 -0
- package/package.json +17 -10
- package/src/accessible-native.ts +45 -9
- package/src/build-queries.ts +60 -30
- package/src/config.ts +1 -3
- package/src/fire-event.ts +32 -8
- package/src/matchers.ts +63 -85
- package/src/queries.ts +94 -156
- package/src/query-helpers.ts +17 -9
- package/src/render.tsx +7 -2
- package/src/role-helpers.ts +3 -1
- package/src/screenshot.ts +49 -8
- package/src/suggestions.ts +3 -1
- package/src/traversal.ts +35 -11
- package/src/types.ts +14 -10
- package/src/user-event/adjustment.ts +2 -14
- package/src/user-event/click.ts +40 -58
- package/src/user-event/controller.ts +8 -5
- package/src/user-event/gesture.ts +9 -43
- package/src/user-event/index.ts +149 -132
- package/src/user-event/keyboard.ts +33 -4
- package/src/user-event/list-row-click.ts +2 -2
- package/src/user-event/pointer.ts +11 -15
- package/src/user-event/selection.ts +15 -25
- package/src/user-event/text.ts +5 -34
- package/src/wait-for.ts +9 -6
- package/src/widget-accessible-properties.ts +61 -69
- package/src/widget-getters.ts +11 -13
- package/src/widget-target.ts +11 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget-accessible-properties.js","sourceRoot":"","sources":["../src/widget-accessible-properties.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Gtk from \"@gtkx/gi/gtk\";\nimport {\n isAccessibleNumberMatch,\n readAccessibleBooleanProperty,\n readAccessibleFlag,\n readAccessibleInt,\n readAccessibleRelation,\n readAccessibleState,\n readAccessibleNumber as readNativeNumber,\n readAccessibleString as readNativeString,\n} from \"./accessible-native.js\";\nimport { EDITABLE_ROLES, isEditable, readEditableText } from \"./editable.js\";\nimport { isNameFromAuthor, isNameProhibited } from \"./role-naming.js\";\nimport { children, descendants, relationCandidates } from \"./traversal.js\";\nimport { callBooleanGetter, callStringGetter, getCallableMethod } from \"./widget-getters.js\";\n\ntype WidgetValueField = \"now\" | \"min\" | \"max\";\ntype CheckedState = \"checked\" | \"unchecked\" | \"mixed\";\n\nconst EDITABLE_TEXT_GETTER = \"getText\";\nconst DEFAULT_TEXT_GETTERS = [\"getLabel\", EDITABLE_TEXT_GETTER, \"getTitle\"];\n\nconst SELECTABLE_ROLES: Set<Gtk.AccessibleRole> = new Set<Gtk.AccessibleRole>([\n Gtk.AccessibleRole.ROW,\n Gtk.AccessibleRole.LIST_ITEM,\n Gtk.AccessibleRole.GRID_CELL,\n Gtk.AccessibleRole.OPTION,\n Gtk.AccessibleRole.TREE_ITEM,\n]);\n\nconst PRESSED_BY_TRISTATE: Map<number, boolean> = new Map<number, boolean>([\n [Gtk.AccessibleTristate.FALSE, false],\n [Gtk.AccessibleTristate.TRUE, true],\n]);\n\nconst CHECKED_BY_TRISTATE: Map<number, CheckedState> = new Map<number, CheckedState>([\n [Gtk.AccessibleTristate.FALSE, \"unchecked\"],\n [Gtk.AccessibleTristate.TRUE, \"checked\"],\n [Gtk.AccessibleTristate.MIXED, \"mixed\"],\n]);\n\nconst VALUE_PROPERTIES: Record<WidgetValueField, Gtk.AccessibleProperty> = {\n now: Gtk.AccessibleProperty.VALUE_NOW,\n min: Gtk.AccessibleProperty.VALUE_MIN,\n max: Gtk.AccessibleProperty.VALUE_MAX,\n};\n\nconst readAccessibleString = (widget: Gtk.Widget, property: Gtk.AccessibleProperty): string | null =>\n readNativeString(widget, property);\n\nconst readAccessibleNumber = (widget: Gtk.Widget, property: Gtk.AccessibleProperty): number | null =>\n readNativeNumber(widget, property);\n\nconst readAccessibleWidgets = (widget: Gtk.Widget, relation: Gtk.AccessibleRelation): Gtk.Widget[] | null => {\n const targets = readAccessibleRelation(widget, relation, relationCandidates(widget));\n const widgets = targets.filter((target): target is Gtk.Widget => target instanceof Gtk.Widget);\n\n return widgets.length > 0 ? widgets : null;\n};\n\nconst readAccessibleBoolean = (widget: Gtk.Widget, state: Gtk.AccessibleState): boolean | null =>\n readAccessibleFlag(widget, state);\n\nconst getLabelText = (widget: Gtk.Widget): string | null => {\n if (widget instanceof Gtk.Label) {\n return widget.getLabel();\n }\n\n return readAccessibleString(widget, Gtk.AccessibleProperty.LABEL);\n};\n\nconst stripMnemonic = (text: string): string => text.replaceAll(/_(.)/g, \"$1\");\nconst isUnderlineUsed = (widget: Gtk.Widget): boolean => callBooleanGetter(widget, \"getUseUnderline\") ?? false;\n\nconst readNamingText = (widget: Gtk.Widget, getter: string, value: string): string =>\n getter !== EDITABLE_TEXT_GETTER && isUnderlineUsed(widget) ? stripMnemonic(value) : value;\n\nconst readFirstText = (widget: Gtk.Widget, getters: string[]): string | null => {\n for (const getter of getters) {\n const value = callStringGetter(widget, getter);\n\n if (value) {\n return readNamingText(widget, getter, value);\n }\n }\n\n return null;\n};\n\n/**\n * Returns a widget's own text by trying its label, text, and title getters in\n * order, or null when none produce a value.\n *\n * @param widget The widget to read text from.\n */\nconst getWidgetText = (widget: Gtk.Widget): string | null => readFirstText(widget, DEFAULT_TEXT_GETTERS);\n\nconst namingLabelText = (widget: Gtk.Widget): string | null => {\n const text = getLabelText(widget);\n\n if (text === null) {\n return null;\n }\n\n return isUnderlineUsed(widget) ? stripMnemonic(text) : text;\n};\n\nconst isNamingLabelRole = (role: Gtk.AccessibleRole, shouldIncludePresentation: boolean): boolean =>\n role === Gtk.AccessibleRole.LABEL ||\n (shouldIncludePresentation && role === Gtk.AccessibleRole.PRESENTATION);\n\nconst collectLabels = (widget: Gtk.Widget): string[] => {\n const isIncludePresentation = widget.getAccessibleRole() === Gtk.AccessibleRole.MENU_ITEM;\n const labels: string[] = [];\n\n for (const descendant of descendants(widget)) {\n if (!isNamingLabelRole(descendant.getAccessibleRole(), isIncludePresentation)) {\n continue;\n }\n\n const labelText = namingLabelText(descendant);\n\n if (labelText) {\n labels.push(labelText);\n }\n }\n\n return labels;\n};\n\nconst getWidgetLabelText = (widget: Gtk.Widget): string | null => {\n if (widget.getAccessibleRole() !== Gtk.AccessibleRole.LABEL) {\n return null;\n }\n\n return namingLabelText(widget);\n};\n\nconst textContentParts = (widget: Gtk.Widget): string[] => {\n const own = getWidgetText(widget);\n\n if (own !== null) {\n return [own];\n }\n\n return [...children(widget)].flatMap((child) => textContentParts(child));\n};\n\nconst getWidgetTextContent = (widget: Gtk.Widget): string | null => {\n const parts = textContentParts(widget);\n\n return parts.length > 0 ? parts.join(\" \") : null;\n};\n\nconst isDropDownFaceCandidate = (widget: Gtk.Widget): boolean =>\n !(widget instanceof Gtk.Popover) && widget.getChildVisible();\n\nconst dropDownChildFaceText = (child: Gtk.Widget): string | null =>\n isDropDownFaceCandidate(child) ? getWidgetLabelText(child) ?? dropDownFaceText(child) : null;\n\nconst dropDownFaceText = (widget: Gtk.Widget): string | null => {\n for (const child of children(widget)) {\n const text = dropDownChildFaceText(child);\n\n if (text !== null) {\n return text;\n }\n }\n\n return null;\n};\n\nconst tabPanelTitle = (widget: Gtk.Widget): string | null => {\n const parent = widget.getParent();\n\n if (parent instanceof Gtk.Stack) {\n return parent.getPage(widget).getTitle() ?? null;\n }\n\n return null;\n};\n\nconst nameFromAuthor = (widget: Gtk.Widget): string | null =>\n getWidgetLabelledByText(widget) ?? readAccessibleString(widget, Gtk.AccessibleProperty.LABEL);\n\nconst nameFromContent = (widget: Gtk.Widget): string | null => {\n const ownText = getWidgetText(widget);\n\n if (ownText) {\n return ownText;\n }\n\n const childLabels = collectLabels(widget);\n\n return childLabels.length > 0 ? childLabels.join(\" \") : null;\n};\n\nconst getWidgetAccessibleName = (widget: Gtk.Widget): string | null => {\n const role = widget.getAccessibleRole();\n\n if (isNameProhibited(role)) {\n return null;\n }\n\n if (role === Gtk.AccessibleRole.TAB_PANEL) {\n return tabPanelTitle(widget);\n }\n\n const authored = isNameFromAuthor(role) ? nameFromAuthor(widget) : null;\n\n if (authored) {\n return authored;\n }\n\n return nameFromContent(widget) ?? callStringGetter(widget, \"getTooltipText\");\n};\n\nconst getWidgetName = (widget: Gtk.Widget): string | null => {\n return widget.getName();\n};\n\nconst nonEmptyText = (text: string | null): string | null => (text === null || text === \"\" ? null : text);\n\nconst readPlaceholderProperty = (widget: Gtk.Widget): string | null => {\n const value: unknown = Reflect.get(widget, \"placeholderText\");\n\n return typeof value === \"string\" ? nonEmptyText(value) : null;\n};\n\nconst getWidgetPlaceholderText = (widget: Gtk.Widget): string | null => {\n if (!EDITABLE_ROLES.has(widget.getAccessibleRole())) {\n return null;\n }\n\n return (\n nonEmptyText(callStringGetter(widget, \"getPlaceholderText\")) ??\n readPlaceholderProperty(widget) ??\n nonEmptyText(readAccessibleString(widget, Gtk.AccessibleProperty.PLACEHOLDER))\n );\n};\n\nconst comboBoxDisplayValue = (widget: Gtk.Widget): string | null =>\n widget instanceof Gtk.DropDown\n ? (dropDownFaceText(widget) ?? getWidgetValueText(widget))\n : (getWidgetValueText(widget) ?? dropDownFaceText(widget));\n\nconst getWidgetDisplayValue = (widget: Gtk.Widget): string | null => {\n if (EDITABLE_ROLES.has(widget.getAccessibleRole()) && isEditable(widget)) {\n return readEditableText(widget);\n }\n\n if (widget.getAccessibleRole() === Gtk.AccessibleRole.COMBO_BOX) {\n return comboBoxDisplayValue(widget);\n }\n\n return null;\n};\n\nconst hasDisplayValue = (widget: Gtk.Widget): boolean => {\n const role = widget.getAccessibleRole();\n\n return (EDITABLE_ROLES.has(role) && isEditable(widget)) || role === Gtk.AccessibleRole.COMBO_BOX;\n};\n\nconst isWidgetDisabled = (widget: Gtk.Widget): boolean => !widget.isSensitive();\n\nconst hasZeroOpacityAncestor = (widget: Gtk.Widget): boolean => {\n let current: Gtk.Widget | null = widget;\n\n while (current) {\n if (current.getOpacity() === 0) {\n return true;\n }\n\n current = current.getParent();\n }\n\n return false;\n};\n\nconst isWidgetVisible = (widget: Gtk.Widget): boolean => widget.isVisible() && !hasZeroOpacityAncestor(widget);\n\nconst getWidgetRequiredState = (widget: Gtk.Widget): boolean | null =>\n readAccessibleBooleanProperty(widget, Gtk.AccessibleProperty.REQUIRED);\n\nconst readTextViewSelection = (view: Gtk.TextView): string | null => {\n const buffer = view.getBuffer();\n const [hasSelection, start, end] = buffer.getSelectionBounds();\n\n return hasSelection ? buffer.getText(start, end, true) : null;\n};\n\nconst sliceSelectedText = (widget: Gtk.Widget, start: number, end: number): string | null => {\n const chars = getCallableMethod<[number, number], string | null>(widget, \"getChars\");\n\n if (chars) {\n return chars(start, end) ?? null;\n }\n\n const text = callStringGetter(widget, \"getText\");\n\n /* eslint-disable-next-line @typescript-eslint/no-misused-spread -- bounds are code point offsets */\n return text === null ? null : [...text].slice(start, end).join(\"\");\n};\n\nconst readBoundedSelection = (widget: Gtk.Widget): string | null => {\n const bounds = getCallableMethod<[], [boolean, number, number]>(widget, \"getSelectionBounds\");\n\n if (!bounds) {\n return null;\n }\n\n const [hasSelection, start, end] = bounds();\n\n return hasSelection ? sliceSelectedText(widget, start, end) : null;\n};\n\nconst getWidgetSelection = (widget: Gtk.Widget): string | null =>\n widget instanceof Gtk.TextView ? readTextViewSelection(widget) : readBoundedSelection(widget);\n\nconst checkedFromActive = (isActive: boolean): CheckedState => (isActive ? \"checked\" : \"unchecked\");\n\nconst isRadioToggle = (widget: Gtk.Widget): widget is Gtk.ToggleButton =>\n widget instanceof Gtk.ToggleButton && widget.getAccessibleRole() === Gtk.AccessibleRole.RADIO;\n\nconst getWidgetCheckedState = (widget: Gtk.Widget): CheckedState | null => {\n const tristate = readAccessibleState(widget, Gtk.AccessibleState.CHECKED);\n const state = tristate === null ? undefined : CHECKED_BY_TRISTATE.get(tristate);\n\n if (state !== undefined) {\n return state;\n }\n\n return isRadioToggle(widget) ? checkedFromActive(widget.getActive()) : null;\n};\n\nconst isWidgetChecked = (widget: Gtk.Widget): boolean | null => {\n const state = getWidgetCheckedState(widget);\n\n return state === null || state === \"mixed\" ? null : state === \"checked\";\n};\n\nconst getWidgetPressedState = (widget: Gtk.Widget): boolean | null => {\n const tristate = readAccessibleState(widget, Gtk.AccessibleState.PRESSED);\n\n return tristate === null ? null : PRESSED_BY_TRISTATE.get(tristate) ?? null;\n};\n\nconst getWidgetExpandedState = (widget: Gtk.Widget): boolean | null => {\n if (widget instanceof Gtk.TreeExpander) {\n return widget.getListRow()?.getExpanded() ?? null;\n }\n\n return readAccessibleBoolean(widget, Gtk.AccessibleState.EXPANDED);\n};\n\nconst getWidgetSelectedState = (widget: Gtk.Widget): boolean | null => {\n const selected = readAccessibleBoolean(widget, Gtk.AccessibleState.SELECTED);\n\n if (selected !== null) {\n return selected;\n }\n\n if (SELECTABLE_ROLES.has(widget.getAccessibleRole())) {\n return (widget.getStateFlags() & Gtk.StateFlags.SELECTED) !== 0;\n }\n\n return null;\n};\n\nconst getWidgetLevel = (widget: Gtk.Widget): number | null => {\n return readAccessibleInt(widget, Gtk.AccessibleProperty.LEVEL);\n};\n\nconst getWidgetInvalidState = (widget: Gtk.Widget): Gtk.AccessibleInvalidState | null => {\n const value = readAccessibleState(widget, Gtk.AccessibleState.INVALID);\n\n return value ?? null;\n};\n\nconst getWidgetErrorMessage = (widget: Gtk.Widget): Gtk.Widget[] | null =>\n readAccessibleWidgets(widget, Gtk.AccessibleRelation.ERROR_MESSAGE);\n\nconst getWidgetBusyState = (widget: Gtk.Widget): boolean | null => {\n return readAccessibleBoolean(widget, Gtk.AccessibleState.BUSY);\n};\n\nconst getWidgetDescription = (widget: Gtk.Widget): string | null => {\n return readAccessibleString(widget, Gtk.AccessibleProperty.DESCRIPTION);\n};\n\nconst getWidgetValueNow = (widget: Gtk.Widget): number | null =>\n readAccessibleNumber(widget, Gtk.AccessibleProperty.VALUE_NOW);\n\nconst getWidgetValueText = (widget: Gtk.Widget): string | null =>\n readAccessibleString(widget, Gtk.AccessibleProperty.VALUE_TEXT);\n\nconst isWidgetValueMatch = (widget: Gtk.Widget, field: WidgetValueField, expected: number): boolean =>\n isAccessibleNumberMatch(widget, VALUE_PROPERTIES[field], expected);\n\nconst getWidgetOwnLabel = (widget: Gtk.Widget): string | null => {\n return readAccessibleString(widget, Gtk.AccessibleProperty.LABEL);\n};\n\nconst collectAccessibleNames = (targets: Gtk.Widget[]): string[] => {\n const texts: string[] = [];\n\n for (const target of targets) {\n const text = getWidgetAccessibleName(target);\n\n if (text) {\n texts.push(text);\n }\n }\n\n return texts;\n};\n\nconst isSelfLabelling = (widget: Gtk.Widget, targets: Gtk.Widget[]): boolean => {\n const own = new Set(descendants(widget));\n\n return targets.every((target) => own.has(target));\n};\n\nconst getWidgetLabelledByText = (widget: Gtk.Widget): string | null => {\n const targets = readAccessibleWidgets(widget, Gtk.AccessibleRelation.LABELLED_BY);\n\n if (targets === null) {\n return null;\n }\n\n const texts = collectAccessibleNames(targets);\n\n return texts.length > 0 ? texts.join(\" \") : null;\n};\n\nconst getWidgetExternalLabelText = (widget: Gtk.Widget): string | null => {\n const targets = readAccessibleWidgets(widget, Gtk.AccessibleRelation.LABELLED_BY);\n\n return targets === null || isSelfLabelling(widget, targets) ? null : getWidgetLabelledByText(widget);\n};\n\nconst isTooltipUsedAsName = (widget: Gtk.Widget): boolean =>\n readAccessibleString(widget, Gtk.AccessibleProperty.LABEL) === null &&\n getWidgetText(widget) === null &&\n collectLabels(widget).length === 0;\n\nconst getWidgetDescribedByText = (widget: Gtk.Widget): string | null => {\n const targets = readAccessibleWidgets(widget, Gtk.AccessibleRelation.DESCRIBED_BY);\n const texts = targets === null ? [] : collectAccessibleNames(targets);\n\n if (texts.length > 0) {\n return texts.join(\" \");\n }\n\n const description = readAccessibleString(widget, Gtk.AccessibleProperty.DESCRIPTION);\n\n if (description !== null) {\n return description;\n }\n\n return isTooltipUsedAsName(widget) ? null : callStringGetter(widget, \"getTooltipText\");\n};\n\n/**\n * Returns whether a widget is excluded from the accessibility tree, because it or one of its\n * ancestors is marked hidden.\n *\n * @param widget The widget to test.\n */\nconst isInaccessible = (widget: Gtk.Widget): boolean => {\n let current: Gtk.Widget | null = widget;\n\n while (current) {\n if (readAccessibleBoolean(current, Gtk.AccessibleState.HIDDEN) === true) {\n return true;\n }\n\n current = current.getParent();\n }\n\n return false;\n};\n\nexport {\n namingLabelText,\n getWidgetText,\n getWidgetTextContent,\n getWidgetLabelText,\n getWidgetAccessibleName,\n getWidgetName,\n getWidgetPlaceholderText,\n getWidgetDisplayValue,\n hasDisplayValue,\n isWidgetDisabled,\n isWidgetVisible,\n getWidgetRequiredState,\n getWidgetSelection,\n getWidgetDescribedByText,\n getWidgetCheckedState,\n isWidgetChecked,\n getWidgetPressedState,\n getWidgetExpandedState,\n getWidgetSelectedState,\n getWidgetLevel,\n getWidgetInvalidState,\n getWidgetErrorMessage,\n getWidgetBusyState,\n getWidgetDescription,\n getWidgetValueNow,\n getWidgetValueText,\n getWidgetOwnLabel,\n getWidgetExternalLabelText,\n getWidgetLabelledByText,\n isInaccessible,\n isWidgetValueMatch,\n type CheckedState,\n type WidgetValueField,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"widget-accessible-properties.js","sourceRoot":"","sources":["../src/widget-accessible-properties.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Gtk from \"@gtkx/gi/gtk\";\nimport {\n isAccessibleNumberMatch,\n readAccessibleBooleanProperty,\n readAccessibleFlag,\n readAccessibleInt,\n readAccessibleNumber,\n readAccessibleRelation,\n readAccessibleState,\n readAccessibleString,\n} from \"./accessible-native.js\";\nimport { EDITABLE_ROLES, isEditable, readEditableText } from \"./editable.js\";\nimport { isNameFromAuthor, isNameProhibited } from \"./role-naming.js\";\nimport { children, descendants, relationCandidates } from \"./traversal.js\";\nimport { callBooleanGetter, callStringGetter, getCallableMethod } from \"./widget-getters.js\";\nimport { requireWidget } from \"./widget-target.js\";\n\ntype WidgetValueField = \"now\" | \"min\" | \"max\";\ntype CheckedState = \"checked\" | \"unchecked\" | \"mixed\";\n\nconst EDITABLE_TEXT_GETTER = \"getText\";\nconst DEFAULT_TEXT_GETTERS = [\"getLabel\", EDITABLE_TEXT_GETTER, \"getTitle\"];\n\nconst SELECTABLE_ROLES: Set<Gtk.AccessibleRole> = new Set<Gtk.AccessibleRole>([\n Gtk.AccessibleRole.ROW,\n Gtk.AccessibleRole.LIST_ITEM,\n Gtk.AccessibleRole.GRID_CELL,\n Gtk.AccessibleRole.OPTION,\n Gtk.AccessibleRole.TREE_ITEM,\n]);\n\nconst PRESSED_BY_TRISTATE: Map<number, boolean> = new Map<number, boolean>([\n [Gtk.AccessibleTristate.FALSE, false],\n [Gtk.AccessibleTristate.TRUE, true],\n]);\n\nconst CHECKED_BY_TRISTATE: Map<number, CheckedState> = new Map<number, CheckedState>([\n [Gtk.AccessibleTristate.FALSE, \"unchecked\"],\n [Gtk.AccessibleTristate.TRUE, \"checked\"],\n [Gtk.AccessibleTristate.MIXED, \"mixed\"],\n]);\n\nconst VALUE_PROPERTIES: Record<WidgetValueField, Gtk.AccessibleProperty> = {\n now: Gtk.AccessibleProperty.VALUE_NOW,\n min: Gtk.AccessibleProperty.VALUE_MIN,\n max: Gtk.AccessibleProperty.VALUE_MAX,\n};\n\nconst readAccessibleWidgets = (widget: Gtk.Widget, relation: Gtk.AccessibleRelation): Gtk.Widget[] | null => {\n const targets = readAccessibleRelation(widget, relation, relationCandidates(widget));\n const widgets = targets.filter((target): target is Gtk.Widget => target instanceof Gtk.Widget);\n\n return widgets.length > 0 ? widgets : null;\n};\n\nconst readAccessibleBoolean = (widget: Gtk.Widget, state: Gtk.AccessibleState): boolean | null =>\n readAccessibleFlag(widget, state);\n\nconst getLabelText = (widget: Gtk.Widget): string | null => {\n if (widget instanceof Gtk.Label) {\n return widget.getLabel();\n }\n\n return readAccessibleString(widget, Gtk.AccessibleProperty.LABEL);\n};\n\nconst stripMnemonic = (text: string): string => text.replaceAll(/_(.)/g, \"$1\");\nconst isUnderlineUsed = (widget: object): boolean => callBooleanGetter(widget, \"getUseUnderline\") ?? false;\n\nconst readNamingText = (widget: object, getter: string, value: string): string =>\n getter !== EDITABLE_TEXT_GETTER && isUnderlineUsed(widget) ? stripMnemonic(value) : value;\n\nconst readFirstText = (widget: object, getters: string[]): string | null => {\n for (const getter of getters) {\n const value = callStringGetter(widget, getter);\n\n if (value) {\n return readNamingText(widget, getter, value);\n }\n }\n\n return null;\n};\n\n/**\n * Returns a widget's own text by trying its label, text, and title getters in\n * order, or null when none produce a value.\n *\n * @param widget The widget to read text from.\n */\nconst getWidgetText = (widget: Gtk.Accessible): string | null => readFirstText(widget, DEFAULT_TEXT_GETTERS);\n\nconst namingLabelText = (widget: Gtk.Widget): string | null => {\n const text = getLabelText(widget);\n\n if (text === null) {\n return null;\n }\n\n return isUnderlineUsed(widget) ? stripMnemonic(text) : text;\n};\n\nconst isNamingLabelRole = (role: Gtk.AccessibleRole, shouldIncludePresentation: boolean): boolean =>\n role === Gtk.AccessibleRole.LABEL ||\n (shouldIncludePresentation && role === Gtk.AccessibleRole.PRESENTATION);\n\nconst collectLabels = (widget: Gtk.Widget): string[] => {\n const isIncludePresentation = widget.getAccessibleRole() === Gtk.AccessibleRole.MENU_ITEM;\n const labels: string[] = [];\n\n for (const descendant of descendants(widget)) {\n if (!isNamingLabelRole(descendant.getAccessibleRole(), isIncludePresentation)) {\n continue;\n }\n\n const labelText = namingLabelText(descendant);\n\n if (labelText) {\n labels.push(labelText);\n }\n }\n\n return labels;\n};\n\nconst getWidgetLabelText = (widget: Gtk.Widget): string | null => {\n if (widget.getAccessibleRole() !== Gtk.AccessibleRole.LABEL) {\n return null;\n }\n\n return namingLabelText(widget);\n};\n\nconst textContentParts = (widget: Gtk.Widget): string[] => {\n const own = getWidgetText(widget);\n\n if (own !== null) {\n return [own];\n }\n\n return [...children(widget)].flatMap((child) => textContentParts(child));\n};\n\nconst getWidgetTextContent = (widget: Gtk.Widget): string | null => {\n const parts = textContentParts(widget);\n\n return parts.length > 0 ? parts.join(\" \") : null;\n};\n\nconst isDropDownFaceCandidate = (widget: Gtk.Widget): boolean =>\n !(widget instanceof Gtk.Popover) && widget.getChildVisible();\n\nconst dropDownChildFaceText = (child: Gtk.Widget): string | null =>\n isDropDownFaceCandidate(child) ? getWidgetLabelText(child) ?? dropDownFaceText(child) : null;\n\nconst dropDownFaceText = (widget: Gtk.Widget): string | null => {\n for (const child of children(widget)) {\n const text = dropDownChildFaceText(child);\n\n if (text !== null) {\n return text;\n }\n }\n\n return null;\n};\n\nconst tabPanelTitle = (widget: Gtk.Widget): string | null => {\n const parent = widget.getParent();\n\n if (parent instanceof Gtk.Stack) {\n return parent.getPage(widget).getTitle() ?? null;\n }\n\n return null;\n};\n\nconst nameFromAuthor = (widget: Gtk.Widget): string | null =>\n getWidgetLabelledByText(widget) ?? readAccessibleString(widget, Gtk.AccessibleProperty.LABEL);\n\nconst nameFromContent = (widget: Gtk.Widget): string | null => {\n const ownText = getWidgetText(widget);\n\n if (ownText) {\n return ownText;\n }\n\n const childLabels = collectLabels(widget);\n\n return childLabels.length > 0 ? childLabels.join(\" \") : null;\n};\n\nconst getWidgetAccessibleName = (widget: Gtk.Widget): string | null => {\n const role = widget.getAccessibleRole();\n\n if (isNameProhibited(role)) {\n return null;\n }\n\n if (role === Gtk.AccessibleRole.TAB_PANEL) {\n return tabPanelTitle(widget);\n }\n\n const authored = isNameFromAuthor(role) ? nameFromAuthor(widget) : null;\n\n if (authored) {\n return authored;\n }\n\n return nameFromContent(widget) ?? callStringGetter(widget, \"getTooltipText\");\n};\n\nconst getWidgetName = (widget: Gtk.Widget): string | null => widget.getName();\n\nconst nonEmptyText = (text: string | null): string | null => (text === null || text === \"\" ? null : text);\n\nconst readPlaceholderProperty = (widget: Gtk.Widget): string | null => {\n const value: unknown = Reflect.get(widget, \"placeholderText\");\n\n return typeof value === \"string\" ? nonEmptyText(value) : null;\n};\n\nconst getWidgetPlaceholderText = (widget: Gtk.Widget): string | null => {\n if (!EDITABLE_ROLES.has(widget.getAccessibleRole())) {\n return null;\n }\n\n return (\n nonEmptyText(callStringGetter(widget, \"getPlaceholderText\")) ??\n readPlaceholderProperty(widget) ??\n nonEmptyText(readAccessibleString(widget, Gtk.AccessibleProperty.PLACEHOLDER))\n );\n};\n\nconst comboBoxDisplayValue = (widget: Gtk.Widget): string | null =>\n widget instanceof Gtk.DropDown\n ? (dropDownFaceText(widget) ?? getWidgetValueText(widget))\n : (getWidgetValueText(widget) ?? dropDownFaceText(widget));\n\nconst getWidgetDisplayValue = (widget: Gtk.Widget): string | null => {\n if (EDITABLE_ROLES.has(widget.getAccessibleRole()) && isEditable(widget)) {\n return readEditableText(widget);\n }\n\n if (widget.getAccessibleRole() === Gtk.AccessibleRole.COMBO_BOX) {\n return comboBoxDisplayValue(widget);\n }\n\n return null;\n};\n\nconst hasDisplayValue = (widget: Gtk.Widget): boolean => {\n const role = widget.getAccessibleRole();\n\n return (EDITABLE_ROLES.has(role) && isEditable(widget)) || role === Gtk.AccessibleRole.COMBO_BOX;\n};\n\nconst isWidgetDisabled = (widget: Gtk.Widget): boolean => !widget.isSensitive();\n\nconst hasZeroOpacityAncestor = (widget: Gtk.Widget): boolean => {\n let current: Gtk.Widget | null = widget;\n\n while (current) {\n if (current.getOpacity() === 0) {\n return true;\n }\n\n current = current.getParent();\n }\n\n return false;\n};\n\nconst isWidgetVisible = (widget: Gtk.Widget): boolean => widget.isVisible() && !hasZeroOpacityAncestor(widget);\n\nconst getWidgetRequiredState = (widget: Gtk.Widget): boolean | null =>\n readAccessibleBooleanProperty(widget, Gtk.AccessibleProperty.REQUIRED);\n\nconst readTextViewSelection = (view: Gtk.TextView): string | null => {\n const buffer = view.getBuffer();\n const [hasSelection, start, end] = buffer.getSelectionBounds();\n\n return hasSelection ? buffer.getText(start, end, true) : null;\n};\n\nconst sliceSelectedText = (widget: Gtk.Widget, start: number, end: number): string | null => {\n const chars = getCallableMethod<[number, number], string | null>(widget, \"getChars\");\n\n if (chars) {\n return chars(start, end) ?? null;\n }\n\n const text = callStringGetter(widget, \"getText\");\n\n /* eslint-disable-next-line @typescript-eslint/no-misused-spread -- bounds are code point offsets */\n return text === null ? null : [...text].slice(start, end).join(\"\");\n};\n\nconst readBoundedSelection = (widget: Gtk.Widget): string | null => {\n const bounds = getCallableMethod<[], [boolean, number, number]>(widget, \"getSelectionBounds\");\n\n if (!bounds) {\n return null;\n }\n\n const [hasSelection, start, end] = bounds();\n\n return hasSelection ? sliceSelectedText(widget, start, end) : null;\n};\n\nconst getWidgetSelection = (widget: Gtk.Widget): string | null =>\n widget instanceof Gtk.TextView ? readTextViewSelection(widget) : readBoundedSelection(widget);\n\nconst isRadioToggle = (widget: Gtk.Widget): widget is Gtk.ToggleButton =>\n widget instanceof Gtk.ToggleButton && widget.getAccessibleRole() === Gtk.AccessibleRole.RADIO;\n\nconst getWidgetCheckedState = (widget: Gtk.Widget): CheckedState | null => {\n const tristate = readAccessibleState(widget, Gtk.AccessibleState.CHECKED);\n const state = tristate === null ? undefined : CHECKED_BY_TRISTATE.get(tristate);\n\n if (state !== undefined) {\n return state;\n }\n\n if (!isRadioToggle(widget)) {\n return null;\n }\n\n return widget.getActive() ? \"checked\" : \"unchecked\";\n};\n\nconst isWidgetChecked = (widget: Gtk.Widget): boolean | null => {\n const state = getWidgetCheckedState(widget);\n\n return state === null || state === \"mixed\" ? null : state === \"checked\";\n};\n\nconst getWidgetPressedState = (widget: Gtk.Widget): boolean | null => {\n const tristate = readAccessibleState(widget, Gtk.AccessibleState.PRESSED);\n\n return tristate === null ? null : PRESSED_BY_TRISTATE.get(tristate) ?? null;\n};\n\nconst getWidgetExpandedState = (widget: Gtk.Widget): boolean | null => {\n if (widget instanceof Gtk.TreeExpander) {\n return widget.getListRow()?.getExpanded() ?? null;\n }\n\n return readAccessibleBoolean(widget, Gtk.AccessibleState.EXPANDED);\n};\n\nconst getWidgetSelectedState = (widget: Gtk.Widget): boolean | null => {\n const selected = readAccessibleBoolean(widget, Gtk.AccessibleState.SELECTED);\n\n if (selected !== null) {\n return selected;\n }\n\n if (SELECTABLE_ROLES.has(widget.getAccessibleRole())) {\n return (widget.getStateFlags() & Gtk.StateFlags.SELECTED) !== 0;\n }\n\n return null;\n};\n\nconst getWidgetLevel = (widget: Gtk.Widget): number | null =>\n readAccessibleInt(widget, Gtk.AccessibleProperty.LEVEL);\n\nconst getWidgetInvalidState = (widget: Gtk.Widget): Gtk.AccessibleInvalidState | null =>\n readAccessibleState(widget, Gtk.AccessibleState.INVALID);\n\nconst getWidgetErrorMessage = (widget: Gtk.Widget): Gtk.Widget[] | null =>\n readAccessibleWidgets(widget, Gtk.AccessibleRelation.ERROR_MESSAGE);\n\nconst getWidgetBusyState = (widget: Gtk.Widget): boolean | null =>\n readAccessibleBoolean(widget, Gtk.AccessibleState.BUSY);\n\nconst getWidgetDescription = (widget: Gtk.Widget): string | null =>\n readAccessibleString(widget, Gtk.AccessibleProperty.DESCRIPTION);\n\nconst getWidgetValueNow = (widget: Gtk.Widget): number | null =>\n readAccessibleNumber(widget, Gtk.AccessibleProperty.VALUE_NOW);\n\nconst getWidgetValueText = (widget: Gtk.Widget): string | null =>\n readAccessibleString(widget, Gtk.AccessibleProperty.VALUE_TEXT);\n\nconst isWidgetValueMatch = (widget: Gtk.Widget, field: WidgetValueField, expected: number): boolean =>\n isAccessibleNumberMatch(widget, VALUE_PROPERTIES[field], expected);\n\nconst getWidgetOwnLabel = (widget: Gtk.Widget): string | null =>\n readAccessibleString(widget, Gtk.AccessibleProperty.LABEL);\n\nconst collectAccessibleNames = (targets: Gtk.Widget[]): string[] =>\n targets\n .map((target) => getWidgetAccessibleName(target))\n .filter((text): text is string => text !== null && text !== \"\");\n\nconst isSelfLabelling = (widget: Gtk.Widget, targets: Gtk.Widget[]): boolean => {\n const own = new Set(descendants(widget));\n\n return targets.every((target) => own.has(target));\n};\n\nconst labelledByText = (targets: Gtk.Widget[]): string | null => {\n const texts = collectAccessibleNames(targets);\n\n return texts.length > 0 ? texts.join(\" \") : null;\n};\n\nconst getWidgetLabelledByText = (widget: Gtk.Widget): string | null => {\n const targets = readAccessibleWidgets(widget, Gtk.AccessibleRelation.LABELLED_BY);\n\n return targets === null ? null : labelledByText(targets);\n};\n\nconst getWidgetExternalLabelText = (widget: Gtk.Widget): string | null => {\n const targets = readAccessibleWidgets(widget, Gtk.AccessibleRelation.LABELLED_BY);\n\n return targets === null || isSelfLabelling(widget, targets) ? null : labelledByText(targets);\n};\n\nconst isTooltipUsedAsName = (widget: Gtk.Widget): boolean =>\n readAccessibleString(widget, Gtk.AccessibleProperty.LABEL) === null &&\n getWidgetText(widget) === null &&\n collectLabels(widget).length === 0;\n\nconst getWidgetDescribedByText = (widget: Gtk.Widget): string | null => {\n const targets = readAccessibleWidgets(widget, Gtk.AccessibleRelation.DESCRIBED_BY);\n const texts = targets === null ? [] : collectAccessibleNames(targets);\n\n if (texts.length > 0) {\n return texts.join(\" \");\n }\n\n const description = readAccessibleString(widget, Gtk.AccessibleProperty.DESCRIPTION);\n\n if (description !== null) {\n return description;\n }\n\n return isTooltipUsedAsName(widget) ? null : callStringGetter(widget, \"getTooltipText\");\n};\n\nconst isHiddenWithin = (widget: Gtk.Widget, hiddenWidgets: Map<Gtk.Widget, boolean>): boolean => {\n const cached = hiddenWidgets.get(widget);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const parent = widget.getParent();\n\n const isHidden =\n readAccessibleBoolean(widget, Gtk.AccessibleState.HIDDEN) === true ||\n (parent !== null && isHiddenWithin(parent, hiddenWidgets));\n\n hiddenWidgets.set(widget, isHidden);\n\n return isHidden;\n};\n\nconst buildInaccessibilityCheck = (): ((target: Gtk.Accessible) => boolean) => {\n const hiddenWidgets: Map<Gtk.Widget, boolean> = new Map();\n\n return (target) => isHiddenWithin(requireWidget(target), hiddenWidgets);\n};\n\n/**\n * Returns whether a widget is excluded from the accessibility tree, because it or one of its\n * ancestors is marked hidden.\n *\n * @param widget The widget to test.\n */\nconst isInaccessible = (target: Gtk.Accessible): boolean => buildInaccessibilityCheck()(target);\n\nexport {\n buildInaccessibilityCheck,\n namingLabelText,\n getWidgetText,\n getWidgetTextContent,\n getWidgetLabelText,\n getWidgetAccessibleName,\n getWidgetName,\n getWidgetPlaceholderText,\n getWidgetDisplayValue,\n hasDisplayValue,\n isWidgetDisabled,\n isWidgetVisible,\n getWidgetRequiredState,\n getWidgetSelection,\n getWidgetDescribedByText,\n getWidgetCheckedState,\n isWidgetChecked,\n getWidgetPressedState,\n getWidgetExpandedState,\n getWidgetSelectedState,\n getWidgetLevel,\n getWidgetInvalidState,\n getWidgetErrorMessage,\n getWidgetBusyState,\n getWidgetDescription,\n getWidgetValueNow,\n getWidgetValueText,\n getWidgetOwnLabel,\n getWidgetExternalLabelText,\n getWidgetLabelledByText,\n isInaccessible,\n isWidgetValueMatch,\n type CheckedState,\n type WidgetValueField,\n};\n"]}
|
package/dist/widget-getters.d.ts
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
declare const
|
|
4
|
-
declare const
|
|
5
|
-
declare const
|
|
6
|
-
declare const
|
|
7
|
-
declare const
|
|
8
|
-
declare const callBooleanGetter: (widget: Gtk.Widget, method: string) => boolean | null;
|
|
9
|
-
declare const callStringGetter: (widget: Gtk.Widget, method: string) => string | null;
|
|
1
|
+
declare const getWidgetTypeName: (widget: object) => string | null;
|
|
2
|
+
declare const getTypeTag: (object: object) => string;
|
|
3
|
+
declare const isDefaultWidgetName: (widget: object, name: string) => boolean;
|
|
4
|
+
declare const hasWidgetMethod: (widget: object, name: string) => boolean;
|
|
5
|
+
declare const getCallableMethod: <Args extends unknown[], Result>(widget: object, name: string) => ((...args: Args) => Result) | null;
|
|
6
|
+
declare const callBooleanGetter: (widget: object, method: string) => boolean | null;
|
|
7
|
+
declare const callStringGetter: (widget: object, method: string) => string | null;
|
|
10
8
|
export { callBooleanGetter, callStringGetter, getCallableMethod, getTypeTag, getWidgetTypeName, hasWidgetMethod, isDefaultWidgetName, };
|
|
11
9
|
//# sourceMappingURL=widget-getters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget-getters.d.ts","sourceRoot":"","sources":["../src/widget-getters.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"widget-getters.d.ts","sourceRoot":"","sources":["../src/widget-getters.ts"],"names":[],"mappings":"AAOA,QAAA,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,MAAM,GAAG,IAAyC,CAAC;AA2B/F,QAAA,MAAM,UAAU,GAAI,QAAQ,MAAM,KAAG,MAUpC,CAAC;AAEF,QAAA,MAAM,mBAAmB,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,KAAG,OACD,CAAC;AAE5D,QAAA,MAAM,eAAe,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,KAAG,OACD,CAAC;AAGxD,QAAA,MAAM,iBAAiB,GAAI,IAAI,SAAS,OAAO,EAAE,EAAE,MAAM,EACrD,QAAQ,MAAM,EACd,MAAM,MAAM,KACb,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,GAAG,IAIhC,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,GAAG,IAIrE,CAAC;AAEF,QAAA,MAAM,gBAAgB,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,KAAG,MAAM,GAAG,IAInE,CAAC;AAEF,OAAO,EACH,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,mBAAmB,GACtB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget-getters.js","sourceRoot":"","sources":["../src/widget-getters.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"widget-getters.js","sourceRoot":"","sources":["../src/widget-getters.ts"],"names":[],"mappings":"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","sourcesContent":["import { getClassType, getInstanceType, TYPE_INVALID, typeName } from \"@gtkx/runtime\";\nimport { resolveWrapperClass } from \"@gtkx/runtime/internal\";\nimport { type AnyClass, walkClassChain } from \"@gtkx/utils\";\n\nconst UNNAMED_TYPE_TAG = \"Object\";\n\nconst getWidgetMethod = (widget: object, name: string): unknown => Reflect.get(widget, name);\nconst getWidgetTypeName = (widget: object): string | null => typeName(getInstanceType(widget));\nconst isClass = (value: unknown): value is AnyClass => typeof value === \"function\";\n\nconst nonEmpty = (value: unknown): string | undefined =>\n typeof value === \"string\" && value.length > 0 ? value : undefined;\n\nconst getObjectClass = (object: object): AnyClass | null => {\n const cls: unknown = object.constructor;\n\n return isClass(cls) ? cls : null;\n};\n\nconst getNearestClassName = (object: object): string | undefined =>\n walkClassChain(getObjectClass(object), (ancestor) => nonEmpty(ancestor.name));\n\nconst getUntypedClassName = (object: object): string | undefined => {\n const cls = getObjectClass(object);\n\n return cls !== null && getClassType(cls) === TYPE_INVALID ? nonEmpty(cls.name) : undefined;\n};\n\nconst getExactWrapperName = (type: bigint): string | undefined => {\n const wrapper = resolveWrapperClass(type);\n\n return wrapper !== null && getClassType(wrapper) === type ? nonEmpty(wrapper.name) : undefined;\n};\n\nconst getTypeTag = (object: object): string => {\n const type = getInstanceType(object);\n\n return (\n getUntypedClassName(object) ??\n getExactWrapperName(type) ??\n nonEmpty(typeName(type)) ??\n getNearestClassName(object) ??\n UNNAMED_TYPE_TAG\n );\n};\n\nconst isDefaultWidgetName = (widget: object, name: string): boolean =>\n name.length === 0 || name === getWidgetTypeName(widget);\n\nconst hasWidgetMethod = (widget: object, name: string): boolean =>\n typeof getWidgetMethod(widget, name) === \"function\";\n\n/* eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- callers name the signature */\nconst getCallableMethod = <Args extends unknown[], Result>(\n widget: object,\n name: string,\n): ((...args: Args) => Result) | null => {\n const fn = getWidgetMethod(widget, name);\n\n return typeof fn === \"function\" ? (fn as (...args: Args) => Result).bind(widget) : null;\n};\n\nconst callBooleanGetter = (widget: object, method: string): boolean | null => {\n const value = getCallableMethod<[], unknown>(widget, method)?.();\n\n return typeof value === \"boolean\" ? value : null;\n};\n\nconst callStringGetter = (widget: object, method: string): string | null => {\n const value = getCallableMethod<[], unknown>(widget, method)?.();\n\n return typeof value === \"string\" ? value : null;\n};\n\nexport {\n callBooleanGetter,\n callStringGetter,\n getCallableMethod,\n getTypeTag,\n getWidgetTypeName,\n hasWidgetMethod,\n isDefaultWidgetName,\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"widget-target.d.ts","sourceRoot":"","sources":["../src/widget-target.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AAEpC,QAAA,MAAM,aAAa,GAAI,QAAQ,MAAM,KAAG,GAAG,CAAC,MAM3C,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"widget-target.js","sourceRoot":"","sources":["../src/widget-target.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AAEpC,MAAM,aAAa,GAAG,CAAC,MAAc,EAAc,EAAE;IACjD,IAAI,CAAC,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,SAAS,CAAC,uBAAuB,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC","sourcesContent":["import * as Gtk from \"@gtkx/gi/gtk\";\n\nconst requireWidget = (target: object): Gtk.Widget => {\n if (!(target instanceof Gtk.Widget)) {\n throw new TypeError(\"Expected a Gtk.Widget\");\n }\n\n return target;\n};\n\nexport { requireWidget };\n"]}
|
package/package.json
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gtkx/testing",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Queries, events, and screenshots for
|
|
3
|
+
"version": "2.0.0-beta.10",
|
|
4
|
+
"description": "Queries, events, and screenshots for Adwaita and GTK4 widget trees.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"gtkx",
|
|
7
7
|
"gtk",
|
|
8
8
|
"gtk4",
|
|
9
|
+
"adwaita",
|
|
10
|
+
"gnome",
|
|
9
11
|
"react",
|
|
10
12
|
"typescript",
|
|
11
13
|
"testing",
|
|
@@ -29,10 +31,14 @@
|
|
|
29
31
|
"./package.json": "./package.json",
|
|
30
32
|
".": {
|
|
31
33
|
"types": "./dist/index.d.ts",
|
|
34
|
+
"import": "./dist/index.js",
|
|
35
|
+
"require": null,
|
|
32
36
|
"default": "./dist/index.js"
|
|
33
37
|
},
|
|
34
38
|
"./internal": {
|
|
35
39
|
"types": "./dist/internal.d.ts",
|
|
40
|
+
"import": "./dist/internal.js",
|
|
41
|
+
"require": null,
|
|
36
42
|
"default": "./dist/internal.js"
|
|
37
43
|
}
|
|
38
44
|
},
|
|
@@ -55,22 +61,23 @@
|
|
|
55
61
|
}
|
|
56
62
|
},
|
|
57
63
|
"engines": {
|
|
58
|
-
"node": ">=
|
|
64
|
+
"node": ">=26.7.0"
|
|
59
65
|
},
|
|
60
66
|
"dependencies": {
|
|
61
|
-
"@
|
|
62
|
-
"@
|
|
63
|
-
"@gtkx/
|
|
64
|
-
"@
|
|
65
|
-
"@gtkx/runtime": "1.6.0"
|
|
67
|
+
"@gtkx/runtime": "2.0.0-beta.10",
|
|
68
|
+
"@gtkx/react": "2.0.0-beta.10",
|
|
69
|
+
"@gtkx/utils": "2.0.0-beta.10",
|
|
70
|
+
"@vitest/pretty-format": "^5.0.0"
|
|
66
71
|
},
|
|
67
72
|
"peerDependencies": {
|
|
68
73
|
"@types/react": "^19.2",
|
|
69
|
-
"react": "^19.2"
|
|
74
|
+
"react": "^19.2",
|
|
75
|
+
"vitest": ">=5"
|
|
70
76
|
},
|
|
71
77
|
"devDependencies": {
|
|
78
|
+
"@gtkx/config": "2.0.0-beta.10",
|
|
72
79
|
"@types/react": "^19.2.18",
|
|
73
|
-
"
|
|
80
|
+
"vitest": "^5.0.0"
|
|
74
81
|
},
|
|
75
82
|
"scripts": {
|
|
76
83
|
"release": "tsx ../../scripts/release-package.ts"
|
package/src/accessible-native.ts
CHANGED
|
@@ -168,33 +168,69 @@ const findRelationSize = (
|
|
|
168
168
|
return 0;
|
|
169
169
|
};
|
|
170
170
|
|
|
171
|
-
|
|
171
|
+
type RelationScan = { size: number; targets: Gtk.Accessible[] };
|
|
172
|
+
|
|
173
|
+
const unseen = function* <T>(items: Iterable<T>, seen: Set<T>): Generator<T> {
|
|
174
|
+
for (const item of items) {
|
|
175
|
+
if (seen.has(item)) {
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
seen.add(item);
|
|
180
|
+
yield item;
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
const possibleTargets = (relation: Gtk.AccessibleRelation, candidates: Iterable<Gtk.Accessible>): Gtk.Accessible[] => {
|
|
172
185
|
const reverse = REVERSE_RELATIONS[relation];
|
|
173
186
|
|
|
174
187
|
if (reverse === undefined) {
|
|
175
|
-
return candidates;
|
|
188
|
+
return [...candidates];
|
|
176
189
|
}
|
|
177
190
|
|
|
178
|
-
return candidates.filter((candidate) => Gtk.testAccessibleHasRelation(candidate, reverse));
|
|
191
|
+
return [...candidates].filter((candidate) => Gtk.testAccessibleHasRelation(candidate, reverse));
|
|
179
192
|
};
|
|
180
193
|
|
|
194
|
+
const scanRelationTier = (
|
|
195
|
+
accessible: Gtk.Accessible,
|
|
196
|
+
relation: Gtk.AccessibleRelation,
|
|
197
|
+
candidates: Gtk.Accessible[],
|
|
198
|
+
scan: RelationScan,
|
|
199
|
+
): RelationScan => {
|
|
200
|
+
const size = scan.size > 0 ? scan.size : findRelationSize(accessible, relation, candidates);
|
|
201
|
+
|
|
202
|
+
if (size === 0) {
|
|
203
|
+
return scan;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
const found = candidates.filter((candidate) => isRelationExactly(accessible, relation, candidate, size));
|
|
207
|
+
|
|
208
|
+
return { size, targets: [...scan.targets, ...found] };
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
const isRelationComplete = (scan: RelationScan): boolean => scan.size > 0 && scan.targets.length >= scan.size;
|
|
212
|
+
|
|
181
213
|
const readAccessibleRelation = (
|
|
182
214
|
accessible: Gtk.Accessible,
|
|
183
215
|
relation: Gtk.AccessibleRelation,
|
|
184
|
-
|
|
216
|
+
tiers: Iterable<Gtk.Accessible>[],
|
|
185
217
|
): Gtk.Accessible[] => {
|
|
186
218
|
if (!Gtk.testAccessibleHasRelation(accessible, relation)) {
|
|
187
219
|
return [];
|
|
188
220
|
}
|
|
189
221
|
|
|
190
|
-
const
|
|
191
|
-
|
|
222
|
+
const seen: Set<Gtk.Accessible> = new Set();
|
|
223
|
+
let scan: RelationScan = { size: 0, targets: [] };
|
|
192
224
|
|
|
193
|
-
|
|
194
|
-
|
|
225
|
+
for (const tier of tiers) {
|
|
226
|
+
scan = scanRelationTier(accessible, relation, possibleTargets(relation, unseen(tier, seen)), scan);
|
|
227
|
+
|
|
228
|
+
if (isRelationComplete(scan)) {
|
|
229
|
+
break;
|
|
230
|
+
}
|
|
195
231
|
}
|
|
196
232
|
|
|
197
|
-
return
|
|
233
|
+
return scan.targets;
|
|
198
234
|
};
|
|
199
235
|
|
|
200
236
|
const memberOfDomain = (check: CheckInt, handle: unknown, attribute: number, domain: number[]): number | null => {
|
package/src/build-queries.ts
CHANGED
|
@@ -5,18 +5,28 @@ import { getConfig } from "./config.js";
|
|
|
5
5
|
import { runWithExpensiveErrorDiagnosticsDisabled, suggestionError } from "./errors.js";
|
|
6
6
|
import { getSuggestedQuery, type Variant } from "./suggestions.js";
|
|
7
7
|
import { waitFor } from "./wait-for.js";
|
|
8
|
+
import { requireWidget } from "./widget-target.js";
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* The `queryAllBy` function a query family is built from, taking the scope to search followed by the
|
|
11
12
|
* family's own matcher arguments. Its name determines the family name, so `queryAllByTestId` builds
|
|
12
13
|
* a `TestId` family.
|
|
13
14
|
*/
|
|
14
|
-
type QueryAllBy<
|
|
15
|
+
type QueryAllBy<
|
|
16
|
+
Args extends unknown[],
|
|
17
|
+
Element extends Gtk.Accessible = Gtk.Accessible,
|
|
18
|
+
> = (
|
|
19
|
+
container: Container,
|
|
20
|
+
...args: Args
|
|
21
|
+
) => Element[];
|
|
15
22
|
|
|
16
23
|
/** Builds the error thrown when a single-match query finds more than one widget. */
|
|
17
|
-
type MultipleErrorBuilder<
|
|
24
|
+
type MultipleErrorBuilder<
|
|
25
|
+
Args extends unknown[],
|
|
26
|
+
Element extends Gtk.Accessible = Gtk.Accessible,
|
|
27
|
+
> = (
|
|
18
28
|
container: Container,
|
|
19
|
-
matches:
|
|
29
|
+
matches: Element[],
|
|
20
30
|
...args: Args
|
|
21
31
|
) => Error;
|
|
22
32
|
|
|
@@ -24,16 +34,22 @@ type MultipleErrorBuilder<Args extends unknown[]> = (
|
|
|
24
34
|
type MissingErrorBuilder<Args extends unknown[]> = (container: Container, ...args: Args) => Error;
|
|
25
35
|
|
|
26
36
|
/** The variants derived from one `queryAllBy` function, in the order DOM Testing Library returns them. */
|
|
27
|
-
type BuiltQueries<
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
37
|
+
type BuiltQueries<
|
|
38
|
+
Args extends unknown[],
|
|
39
|
+
Element extends Gtk.Accessible = Gtk.Accessible,
|
|
40
|
+
> = [
|
|
41
|
+
queryBy: (container: Container, ...args: Args) => Element | null,
|
|
42
|
+
getAllBy: QueryAllBy<Args, Element>,
|
|
43
|
+
getBy: (container: Container, ...args: Args) => Element,
|
|
44
|
+
findAllBy: (container: Container, ...args: Args) => Promise<Element[]>,
|
|
45
|
+
findBy: (container: Container, ...args: Args) => Promise<Element>,
|
|
33
46
|
];
|
|
34
47
|
|
|
35
48
|
type FindQuery<Args extends unknown[]> = (container: Container, ...args: Args) => unknown;
|
|
36
|
-
type SingleQuery<Args extends unknown[]
|
|
49
|
+
type SingleQuery<Args extends unknown[], Element extends Gtk.Accessible> = (
|
|
50
|
+
container: Container,
|
|
51
|
+
...args: Args
|
|
52
|
+
) => Element | null;
|
|
37
53
|
|
|
38
54
|
const getTrailingOptions = (args: unknown[]): MatcherOptions | undefined => {
|
|
39
55
|
const last = args.at(-1);
|
|
@@ -50,7 +66,7 @@ const getQueryFamily = (queryAllBy: { name: string }): string => queryAllBy.name
|
|
|
50
66
|
|
|
51
67
|
const maybeThrowSuggestion = (options: {
|
|
52
68
|
container: Container;
|
|
53
|
-
match:
|
|
69
|
+
match: object;
|
|
54
70
|
queryName: string;
|
|
55
71
|
variant: Variant;
|
|
56
72
|
shouldSuggest: boolean | undefined;
|
|
@@ -61,7 +77,7 @@ const maybeThrowSuggestion = (options: {
|
|
|
61
77
|
return;
|
|
62
78
|
}
|
|
63
79
|
|
|
64
|
-
const suggestion = getSuggestedQuery(match, variant);
|
|
80
|
+
const suggestion = getSuggestedQuery(requireWidget(match), variant);
|
|
65
81
|
|
|
66
82
|
if (suggestion && suggestion.queryName !== queryName) {
|
|
67
83
|
throw suggestionError(suggestion.toString(), container);
|
|
@@ -101,10 +117,10 @@ const findOptions = <Args extends unknown[]>(
|
|
|
101
117
|
};
|
|
102
118
|
|
|
103
119
|
const singleFrom =
|
|
104
|
-
<Args extends unknown[]>(
|
|
105
|
-
allQuery: QueryAllBy<Args>,
|
|
106
|
-
getMultipleError: MultipleErrorBuilder<Args>,
|
|
107
|
-
): SingleQuery<Args> =>
|
|
120
|
+
<Args extends unknown[], Element extends Gtk.Accessible>(
|
|
121
|
+
allQuery: QueryAllBy<Args, Element>,
|
|
122
|
+
getMultipleError: MultipleErrorBuilder<Args, Element>,
|
|
123
|
+
): SingleQuery<Args, Element> =>
|
|
108
124
|
(container, ...args) => {
|
|
109
125
|
const matches = allQuery(container, ...args);
|
|
110
126
|
|
|
@@ -116,10 +132,10 @@ const singleFrom =
|
|
|
116
132
|
};
|
|
117
133
|
|
|
118
134
|
const allOrThrow =
|
|
119
|
-
<Args extends unknown[]>(
|
|
120
|
-
allQuery: QueryAllBy<Args>,
|
|
135
|
+
<Args extends unknown[], Element extends Gtk.Accessible>(
|
|
136
|
+
allQuery: QueryAllBy<Args, Element>,
|
|
121
137
|
getMissingError: MissingErrorBuilder<Args>,
|
|
122
|
-
): QueryAllBy<Args> =>
|
|
138
|
+
): QueryAllBy<Args, Element> =>
|
|
123
139
|
(container, ...args) => {
|
|
124
140
|
const matches = allQuery(container, ...args);
|
|
125
141
|
|
|
@@ -131,7 +147,11 @@ const allOrThrow =
|
|
|
131
147
|
};
|
|
132
148
|
|
|
133
149
|
const wrapSingleWithSuggestion =
|
|
134
|
-
<Args extends unknown[]
|
|
150
|
+
<Args extends unknown[], Element extends Gtk.Accessible>(
|
|
151
|
+
query: SingleQuery<Args, Element>,
|
|
152
|
+
queryName: string,
|
|
153
|
+
variant: Variant,
|
|
154
|
+
): SingleQuery<Args, Element> =>
|
|
135
155
|
(container, ...args) => {
|
|
136
156
|
const match = query(container, ...args);
|
|
137
157
|
|
|
@@ -149,7 +169,11 @@ const wrapSingleWithSuggestion =
|
|
|
149
169
|
};
|
|
150
170
|
|
|
151
171
|
const wrapAllWithSuggestion =
|
|
152
|
-
<Args extends unknown[]
|
|
172
|
+
<Args extends unknown[], Element extends Gtk.Accessible>(
|
|
173
|
+
query: QueryAllBy<Args, Element>,
|
|
174
|
+
queryName: string,
|
|
175
|
+
variant: Variant,
|
|
176
|
+
): QueryAllBy<Args, Element> =>
|
|
153
177
|
(container, ...args) => {
|
|
154
178
|
const matches = query(container, ...args);
|
|
155
179
|
const [first] = matches;
|
|
@@ -168,8 +192,11 @@ const wrapAllWithSuggestion =
|
|
|
168
192
|
};
|
|
169
193
|
|
|
170
194
|
const requireSingle =
|
|
171
|
-
<Args extends unknown[]
|
|
172
|
-
|
|
195
|
+
<Args extends unknown[], Element extends Gtk.Accessible>(
|
|
196
|
+
query: SingleQuery<Args, Element>,
|
|
197
|
+
getMissingError: MissingErrorBuilder<Args>,
|
|
198
|
+
) =>
|
|
199
|
+
(container: Container, ...args: Args): Element => {
|
|
173
200
|
const match = query(container, ...args);
|
|
174
201
|
|
|
175
202
|
if (match === null) {
|
|
@@ -189,11 +216,14 @@ const requireSingle =
|
|
|
189
216
|
* @param getMissingError Builds the error thrown when a required match is missing.
|
|
190
217
|
* @returns The variants, in the order `[queryBy, getAllBy, getBy, findAllBy, findBy]`.
|
|
191
218
|
*/
|
|
192
|
-
const buildQueries = <
|
|
193
|
-
|
|
194
|
-
|
|
219
|
+
const buildQueries = <
|
|
220
|
+
Args extends unknown[],
|
|
221
|
+
Element extends Gtk.Accessible = Gtk.Accessible,
|
|
222
|
+
>(
|
|
223
|
+
queryAllBy: QueryAllBy<Args, Element>,
|
|
224
|
+
getMultipleError: MultipleErrorBuilder<Args, Element>,
|
|
195
225
|
getMissingError: MissingErrorBuilder<Args>,
|
|
196
|
-
): BuiltQueries<Args> => {
|
|
226
|
+
): BuiltQueries<Args, Element> => {
|
|
197
227
|
const queryName = getQueryFamily(queryAllBy);
|
|
198
228
|
const getAllBy = allOrThrow(queryAllBy, getMissingError);
|
|
199
229
|
const getBy = requireSingle(singleFrom(getAllBy, getMultipleError), getMissingError);
|
|
@@ -206,7 +236,7 @@ const buildQueries = <Args extends unknown[]>(
|
|
|
206
236
|
|
|
207
237
|
const getAllByWithSuggestion = wrapAllWithSuggestion(getAllBy, queryName, "getAll");
|
|
208
238
|
|
|
209
|
-
const getByWithSuggestion: (container: Container, ...args: Args) =>
|
|
239
|
+
const getByWithSuggestion: (container: Container, ...args: Args) => Element = (container, ...args) => {
|
|
210
240
|
const match = getBy(container, ...args);
|
|
211
241
|
|
|
212
242
|
maybeThrowSuggestion({
|
|
@@ -220,13 +250,13 @@ const buildQueries = <Args extends unknown[]>(
|
|
|
220
250
|
return match;
|
|
221
251
|
};
|
|
222
252
|
|
|
223
|
-
const findAllBy = (container: Container, ...args: Args): Promise<
|
|
253
|
+
const findAllBy = (container: Container, ...args: Args): Promise<Element[]> =>
|
|
224
254
|
waitFor(
|
|
225
255
|
() => runWithExpensiveErrorDiagnosticsDisabled(() => getAllByWithSuggestion(container, ...args)),
|
|
226
256
|
findOptions(getAllByWithSuggestion, container, args),
|
|
227
257
|
);
|
|
228
258
|
|
|
229
|
-
const findBy = (container: Container, ...args: Args): Promise<
|
|
259
|
+
const findBy = (container: Container, ...args: Args): Promise<Element> =>
|
|
230
260
|
waitFor(
|
|
231
261
|
() => runWithExpensiveErrorDiagnosticsDisabled(() => getByWithSuggestion(container, ...args)),
|
|
232
262
|
findOptions(getByWithSuggestion, container, args),
|
package/src/config.ts
CHANGED
|
@@ -50,9 +50,7 @@ function defaultGetElementError(message: string): Error {
|
|
|
50
50
|
/**
|
|
51
51
|
* Returns the current global testing configuration.
|
|
52
52
|
*/
|
|
53
|
-
const getConfig = (): Config =>
|
|
54
|
-
return currentConfig;
|
|
55
|
-
};
|
|
53
|
+
const getConfig = (): Config => currentConfig;
|
|
56
54
|
|
|
57
55
|
/**
|
|
58
56
|
* Merges the given overrides into the global testing configuration.
|