@gtkx/testing 1.0.0 → 1.2.0
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 +1 -1
- package/dist/act.d.ts +1 -3
- package/dist/act.d.ts.map +1 -1
- package/dist/act.js +1 -1
- package/dist/act.js.map +1 -1
- package/dist/build-queries.d.ts +1 -1
- package/dist/build-queries.js +1 -1
- package/dist/build-queries.js.map +1 -1
- package/dist/config.d.ts +8 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/frame-sync.d.ts +2 -2
- package/dist/frame-sync.d.ts.map +1 -1
- package/dist/frame-sync.js +10 -10
- package/dist/frame-sync.js.map +1 -1
- package/dist/harness-window.d.ts +2 -1
- package/dist/harness-window.d.ts.map +1 -1
- package/dist/harness-window.js +12 -1
- package/dist/harness-window.js.map +1 -1
- package/dist/internal.d.ts +1 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +1 -0
- package/dist/internal.js.map +1 -1
- package/dist/matchers.d.ts.map +1 -1
- package/dist/matchers.js +22 -2
- package/dist/matchers.js.map +1 -1
- package/dist/pretty-widget.d.ts.map +1 -1
- package/dist/pretty-widget.js +2 -1
- package/dist/pretty-widget.js.map +1 -1
- package/dist/production.d.ts.map +1 -1
- package/dist/production.js +2 -2
- package/dist/production.js.map +1 -1
- package/dist/render.d.ts +12 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +45 -11
- package/dist/render.js.map +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.map +1 -1
- package/dist/screenshot.js +8 -14
- package/dist/screenshot.js.map +1 -1
- package/dist/timers.d.ts +9 -0
- package/dist/timers.d.ts.map +1 -0
- package/dist/timers.js +21 -0
- package/dist/timers.js.map +1 -0
- package/dist/traversal.d.ts +4 -1
- package/dist/traversal.d.ts.map +1 -1
- package/dist/traversal.js +16 -1
- package/dist/traversal.js.map +1 -1
- package/dist/types.d.ts +6 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/user-event/adjustment.d.ts.map +1 -1
- package/dist/user-event/adjustment.js +2 -1
- package/dist/user-event/adjustment.js.map +1 -1
- package/dist/user-event/click.d.ts +5 -4
- package/dist/user-event/click.d.ts.map +1 -1
- package/dist/user-event/click.js +5 -4
- package/dist/user-event/click.js.map +1 -1
- package/dist/user-event/column-header-click.d.ts.map +1 -1
- package/dist/user-event/column-header-click.js +2 -12
- package/dist/user-event/column-header-click.js.map +1 -1
- package/dist/user-event/event-wrapper.d.ts.map +1 -1
- package/dist/user-event/event-wrapper.js +34 -21
- package/dist/user-event/event-wrapper.js.map +1 -1
- package/dist/user-event/index.d.ts +36 -10
- package/dist/user-event/index.d.ts.map +1 -1
- package/dist/user-event/index.js +4 -3
- package/dist/user-event/index.js.map +1 -1
- package/dist/user-event/keyboard.d.ts.map +1 -1
- package/dist/user-event/keyboard.js +93 -38
- package/dist/user-event/keyboard.js.map +1 -1
- package/dist/user-event/list-row-click.d.ts.map +1 -1
- package/dist/user-event/list-row-click.js +4 -5
- package/dist/user-event/list-row-click.js.map +1 -1
- package/dist/user-event/native-click.d.ts.map +1 -1
- package/dist/user-event/native-click.js +4 -0
- package/dist/user-event/native-click.js.map +1 -1
- package/dist/user-event/notebook-tab-click.d.ts +5 -0
- package/dist/user-event/notebook-tab-click.d.ts.map +1 -0
- package/dist/user-event/notebook-tab-click.js +39 -0
- package/dist/user-event/notebook-tab-click.js.map +1 -0
- package/dist/user-event/text.d.ts +6 -3
- package/dist/user-event/text.d.ts.map +1 -1
- package/dist/user-event/text.js +88 -33
- package/dist/user-event/text.js.map +1 -1
- package/dist/wait-for.d.ts.map +1 -1
- package/dist/wait-for.js +4 -3
- package/dist/wait-for.js.map +1 -1
- package/dist/widget-getters.d.ts +4 -1
- package/dist/widget-getters.d.ts.map +1 -1
- package/dist/widget-getters.js +29 -2
- package/dist/widget-getters.js.map +1 -1
- package/dist/window-state.d.ts +10 -0
- package/dist/window-state.d.ts.map +1 -0
- package/dist/window-state.js +41 -0
- package/dist/window-state.js.map +1 -0
- package/package.json +15 -7
- package/src/act.ts +1 -1
- package/src/build-queries.ts +1 -1
- package/src/config.ts +10 -1
- package/src/frame-sync.ts +15 -10
- package/src/harness-window.ts +15 -1
- package/src/internal.ts +1 -0
- package/src/matchers.ts +29 -2
- package/src/pretty-widget.ts +2 -1
- package/src/production.ts +2 -3
- package/src/render.tsx +67 -12
- package/src/role-helpers.ts +2 -1
- package/src/screenshot.ts +10 -17
- package/src/timers.ts +31 -0
- package/src/traversal.ts +22 -0
- package/src/types.ts +6 -1
- package/src/user-event/adjustment.ts +2 -1
- package/src/user-event/click.ts +5 -4
- package/src/user-event/column-header-click.ts +2 -16
- package/src/user-event/event-wrapper.ts +41 -25
- package/src/user-event/index.ts +40 -13
- package/src/user-event/keyboard.ts +124 -54
- package/src/user-event/list-row-click.ts +4 -7
- package/src/user-event/native-click.ts +5 -0
- package/src/user-event/notebook-tab-click.ts +57 -0
- package/src/user-event/text.ts +113 -38
- package/src/wait-for.ts +4 -4
- package/src/widget-getters.ts +55 -2
- package/src/window-state.ts +70 -0
package/README.md
CHANGED
package/dist/act.d.ts
CHANGED
|
@@ -13,9 +13,7 @@ type ActImplementation = <T>(callback: ActCallback<T>) => PromiseLike<T>;
|
|
|
13
13
|
* @returns A promise that resolves with the callback's result after updates flush.
|
|
14
14
|
*/
|
|
15
15
|
declare const act: ActImplementation;
|
|
16
|
-
declare const getIsReactActEnvironment: () => boolean | undefined;
|
|
17
|
-
declare const setIsReactActEnvironment: (value: boolean | undefined) => void;
|
|
18
16
|
declare const runWithActEnvironment: <T>(isForced: boolean, fn: () => T | PromiseLike<T>) => Promise<T>;
|
|
19
17
|
declare const runInAct: (callback: () => unknown) => Promise<void>;
|
|
20
|
-
export { act,
|
|
18
|
+
export { act, runWithActEnvironment, runInAct };
|
|
21
19
|
//# sourceMappingURL=act.d.ts.map
|
package/dist/act.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"act.d.ts","sourceRoot":"","sources":["../src/act.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,CAAC;IACX,IAAI,wBAAwB,EAAE,OAAO,GAAG,SAAS,CAAC;CACrD;AAED,+EAA+E;AAC/E,KAAK,WAAW,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAC/C,qGAAqG;AACrG,KAAK,iBAAiB,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC;AAGzE;;;;;;GAMG;AACH,QAAA,MAAM,GAAG,EAAE,iBAA+D,CAAC;
|
|
1
|
+
{"version":3,"file":"act.d.ts","sourceRoot":"","sources":["../src/act.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,CAAC;IACX,IAAI,wBAAwB,EAAE,OAAO,GAAG,SAAS,CAAC;CACrD;AAED,+EAA+E;AAC/E,KAAK,WAAW,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAC/C,qGAAqG;AACrG,KAAK,iBAAiB,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC;AAGzE;;;;;;GAMG;AACH,QAAA,MAAM,GAAG,EAAE,iBAA+D,CAAC;AA2B3E,QAAA,MAAM,qBAAqB,GAAI,CAAC,EAAE,UAAU,OAAO,EAAE,IAAI,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAkB5F,CAAC;AAUF,QAAA,MAAM,QAAQ,GAAU,UAAU,MAAM,OAAO,KAAG,OAAO,CAAC,IAAI,CAE7D,CAAC;AAEF,OAAO,EAAE,GAAG,EAAE,qBAAqB,EAAE,QAAQ,EAAE,CAAC"}
|
package/dist/act.js
CHANGED
|
@@ -52,5 +52,5 @@ function withGlobalActEnvironment(actImplementation) {
|
|
|
52
52
|
const runInAct = async (callback) => {
|
|
53
53
|
await act(() => callback());
|
|
54
54
|
};
|
|
55
|
-
export { act,
|
|
55
|
+
export { act, runWithActEnvironment, runInAct };
|
|
56
56
|
//# sourceMappingURL=act.js.map
|
package/dist/act.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"act.js","sourceRoot":"","sources":["../src/act.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,QAAQ,EAAE,MAAM,OAAO,CAAC;AAWxC,MAAM,iBAAiB,GAAsB,QAAQ,CAAC;AACtD;;;;;;GAMG;AACH,MAAM,GAAG,GAAsB,wBAAwB,CAAC,iBAAiB,CAAC,CAAC;AAE3E,MAAM,aAAa,GAAG,GAAsB,EAAE;IAC1C,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE,CAAC;QACpC,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;AACtD,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,GAAwB,EAAE,CAAC,aAAa,EAAE,CAAC,wBAAwB,CAAC;AAErG,MAAM,wBAAwB,GAAG,CAAC,KAA0B,EAAQ,EAAE;IAClE,aAAa,EAAE,CAAC,wBAAwB,GAAG,KAAK,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAI,KAAc,EAA2B,EAAE,CAC9D,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAQ,KAAwB,CAAC,IAAI,KAAK,UAAU,CAAC;AAExG,MAAM,YAAY,GAAG,KAAK,EAAK,MAAsB,EAAE,QAA6B,EAAc,EAAE;IAChG,IAAI,CAAC;QACD,OAAO,MAAM,MAAM,CAAC;IACxB,CAAC;YAAS,CAAC;QACP,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAI,QAAiB,EAAE,EAA4B,EAAc,EAAE;IAC7F,MAAM,sBAAsB,GAAG,wBAAwB,EAAE,CAAC;IAC1D,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAEnC,IAAI,CAAC;QACD,MAAM,MAAM,GAAuB,EAAE,EAAE,CAAC;QAExC,IAAI,UAAU,CAAI,MAAM,CAAC,EAAE,CAAC;YACxB,OAAO,YAAY,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QACxD,CAAC;QAED,wBAAwB,CAAC,sBAAsB,CAAC,CAAC;QAEjD,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,wBAAwB,CAAC,sBAAsB,CAAC,CAAC;QACjD,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC,CAAC;AAEF,SAAS,wBAAwB,CAAC,iBAAoC;IAClE,OAAO,CAAI,QAAwB,EAAkB,EAAE;QACnD,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAEvF,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAuB,EAAiB,EAAE;IAC9D,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF,OAAO,EAAE,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"act.js","sourceRoot":"","sources":["../src/act.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,QAAQ,EAAE,MAAM,OAAO,CAAC;AAWxC,MAAM,iBAAiB,GAAsB,QAAQ,CAAC;AACtD;;;;;;GAMG;AACH,MAAM,GAAG,GAAsB,wBAAwB,CAAC,iBAAiB,CAAC,CAAC;AAE3E,MAAM,aAAa,GAAG,GAAsB,EAAE;IAC1C,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE,CAAC;QACpC,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;AACtD,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,GAAwB,EAAE,CAAC,aAAa,EAAE,CAAC,wBAAwB,CAAC;AAErG,MAAM,wBAAwB,GAAG,CAAC,KAA0B,EAAQ,EAAE;IAClE,aAAa,EAAE,CAAC,wBAAwB,GAAG,KAAK,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAI,KAAc,EAA2B,EAAE,CAC9D,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAQ,KAAwB,CAAC,IAAI,KAAK,UAAU,CAAC;AAExG,MAAM,YAAY,GAAG,KAAK,EAAK,MAAsB,EAAE,QAA6B,EAAc,EAAE;IAChG,IAAI,CAAC;QACD,OAAO,MAAM,MAAM,CAAC;IACxB,CAAC;YAAS,CAAC;QACP,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAI,QAAiB,EAAE,EAA4B,EAAc,EAAE;IAC7F,MAAM,sBAAsB,GAAG,wBAAwB,EAAE,CAAC;IAC1D,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAEnC,IAAI,CAAC;QACD,MAAM,MAAM,GAAuB,EAAE,EAAE,CAAC;QAExC,IAAI,UAAU,CAAI,MAAM,CAAC,EAAE,CAAC;YACxB,OAAO,YAAY,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QACxD,CAAC;QAED,wBAAwB,CAAC,sBAAsB,CAAC,CAAC;QAEjD,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,wBAAwB,CAAC,sBAAsB,CAAC,CAAC;QACjD,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC,CAAC;AAEF,SAAS,wBAAwB,CAAC,iBAAoC;IAClE,OAAO,CAAI,QAAwB,EAAkB,EAAE;QACnD,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAEvF,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAuB,EAAiB,EAAE;IAC9D,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF,OAAO,EAAE,GAAG,EAAE,qBAAqB,EAAE,QAAQ,EAAE,CAAC","sourcesContent":["import { act as reactAct } from \"react\";\n\ndeclare global {\n var IS_REACT_ACT_ENVIRONMENT: boolean | undefined;\n}\n\n/** Work run inside the act environment, either synchronous or asynchronous. */\ntype ActCallback<T> = () => T | PromiseLike<T>;\n/** Runs a callback inside React's act environment and settles with its result once updates flush. */\ntype ActImplementation = <T>(callback: ActCallback<T>) => PromiseLike<T>;\n\nconst actImplementation: ActImplementation = reactAct;\n/**\n * Runs a callback inside React's act environment, flushing pending state\n * updates and effects, and resolves once the work has settled.\n *\n * @param callback Work to run within the act environment.\n * @returns A promise that resolves with the callback's result after updates flush.\n */\nconst act: ActImplementation = withGlobalActEnvironment(actImplementation);\n\nconst getGlobalThis = (): typeof globalThis => {\n if (typeof globalThis !== \"undefined\") {\n return globalThis;\n }\n\n throw new Error(\"unable to locate global object\");\n};\n\nconst getIsReactActEnvironment = (): boolean | undefined => getGlobalThis().IS_REACT_ACT_ENVIRONMENT;\n\nconst setIsReactActEnvironment = (value: boolean | undefined): void => {\n getGlobalThis().IS_REACT_ACT_ENVIRONMENT = value;\n};\n\nconst isThenable = <T>(value: unknown): value is PromiseLike<T> =>\n value !== null && typeof value === \"object\" && typeof (value as PromiseLike<T>).then === \"function\";\n\nconst restoreAfter = async <T>(result: PromiseLike<T>, previous: boolean | undefined): Promise<T> => {\n try {\n return await result;\n } finally {\n setIsReactActEnvironment(previous);\n }\n};\n\nconst runWithActEnvironment = <T>(isForced: boolean, fn: () => T | PromiseLike<T>): Promise<T> => {\n const previousActEnvironment = getIsReactActEnvironment();\n setIsReactActEnvironment(isForced);\n\n try {\n const result: T | PromiseLike<T> = fn();\n\n if (isThenable<T>(result)) {\n return restoreAfter(result, previousActEnvironment);\n }\n\n setIsReactActEnvironment(previousActEnvironment);\n\n return Promise.resolve(result);\n } catch (error) {\n setIsReactActEnvironment(previousActEnvironment);\n throw error;\n }\n};\n\nfunction withGlobalActEnvironment(actImplementation: ActImplementation): ActImplementation {\n return <T>(callback: ActCallback<T>): PromiseLike<T> => {\n const settled = runWithActEnvironment(true, () => actImplementation(() => callback()));\n\n return Promise.resolve(settled);\n };\n}\n\nconst runInAct = async (callback: () => unknown): Promise<void> => {\n await act(() => callback());\n};\n\nexport { act, runWithActEnvironment, runInAct };\n"]}
|
package/dist/build-queries.d.ts
CHANGED
|
@@ -26,7 +26,7 @@ type BuiltQueries<Args extends unknown[]> = [
|
|
|
26
26
|
* @param queryAllBy Finds every widget the family matches.
|
|
27
27
|
* @param getMultipleError Builds the error thrown when a single-match variant finds more than one widget.
|
|
28
28
|
* @param getMissingError Builds the error thrown when a required match is missing.
|
|
29
|
-
* @returns The
|
|
29
|
+
* @returns The variants, in the order `[queryBy, getAllBy, getBy, findAllBy, findBy]`.
|
|
30
30
|
*/
|
|
31
31
|
declare const buildQueries: <Args extends unknown[]>(queryAllBy: QueryAllBy<Args>, getMultipleError: MultipleErrorBuilder<Args>, getMissingError: MissingErrorBuilder<Args>) => BuiltQueries<Args>;
|
|
32
32
|
export { buildQueries, type BuiltQueries, type MissingErrorBuilder, type MultipleErrorBuilder, type QueryAllBy, };
|
package/dist/build-queries.js
CHANGED
|
@@ -97,7 +97,7 @@ const requireSingle = (query, getMissingError) => (container, ...args) => {
|
|
|
97
97
|
* @param queryAllBy Finds every widget the family matches.
|
|
98
98
|
* @param getMultipleError Builds the error thrown when a single-match variant finds more than one widget.
|
|
99
99
|
* @param getMissingError Builds the error thrown when a required match is missing.
|
|
100
|
-
* @returns The
|
|
100
|
+
* @returns The variants, in the order `[queryBy, getAllBy, getBy, findAllBy, findBy]`.
|
|
101
101
|
*/
|
|
102
102
|
const buildQueries = (queryAllBy, getMultipleError, getMissingError) => {
|
|
103
103
|
const queryName = getQueryFamily(queryAllBy);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-queries.js","sourceRoot":"","sources":["../src/build-queries.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as Gtk from \"@gtkx/gi/gtk\";\nimport type { Container } from \"./traversal.js\";\nimport type { MatcherOptions, WaitForOptions } from \"./types.js\";\nimport { getConfig } from \"./config.js\";\nimport { runWithExpensiveErrorDiagnosticsDisabled, suggestionError } from \"./errors.js\";\nimport { getSuggestedQuery, type Variant } from \"./suggestions.js\";\nimport { waitFor } from \"./wait-for.js\";\n\n/**\n * The `queryAllBy` function a query family is built from, taking the scope to search followed by the\n * family's own matcher arguments. Its name determines the family name, so `queryAllByTestId` builds\n * a `TestId` family.\n */\ntype QueryAllBy<Args extends unknown[]> = (container: Container, ...args: Args) => Gtk.Widget[];\n\n/** Builds the error thrown when a single-match query finds more than one widget. */\ntype MultipleErrorBuilder<Args extends unknown[]> = (\n container: Container,\n matches: Gtk.Widget[],\n ...args: Args\n) => Error;\n\n/** Builds the error thrown when a query that requires a match finds none. */\ntype MissingErrorBuilder<Args extends unknown[]> = (container: Container, ...args: Args) => Error;\n\n/** The variants derived from one `queryAllBy` function, in the order DOM Testing Library returns them. */\ntype BuiltQueries<Args extends unknown[]> = [\n queryBy: (container: Container, ...args: Args) => Gtk.Widget | null,\n getAllBy: QueryAllBy<Args>,\n getBy: (container: Container, ...args: Args) => Gtk.Widget,\n findAllBy: (container: Container, ...args: Args) => Promise<Gtk.Widget[]>,\n findBy: (container: Container, ...args: Args) => Promise<Gtk.Widget>,\n];\n\ntype FindQuery<Args extends unknown[]> = (container: Container, ...args: Args) => unknown;\ntype SingleQuery<Args extends unknown[]> = (container: Container, ...args: Args) => Gtk.Widget | null;\n\nconst getTrailingOptions = (args: unknown[]): MatcherOptions | undefined => {\n const last = args.at(-1);\n\n if (last && typeof last === \"object\" && !(last instanceof RegExp)) {\n return last;\n }\n\n return undefined;\n};\n\nconst extractShouldSuggest = (args: unknown[]): boolean | undefined => getTrailingOptions(args)?.suggest;\nconst getQueryFamily = (queryAllBy: { name: string }): string => queryAllBy.name.replace(/^queryAllBy/, \"\");\n\nconst maybeThrowSuggestion = (options: {\n container: Container;\n match: Gtk.Widget;\n queryName: string;\n variant: Variant;\n shouldSuggest: boolean | undefined;\n}): void => {\n const { container, match, queryName, variant, shouldSuggest } = options;\n\n if (!(shouldSuggest ?? getConfig().throwSuggestions)) {\n return;\n }\n\n const suggestion = getSuggestedQuery(match, variant);\n\n if (suggestion && suggestion.queryName !== queryName) {\n throw suggestionError(suggestion.toString(), container);\n }\n};\n\nconst reRunForDiagnostics = <Args extends unknown[]>(\n query: FindQuery<Args>,\n container: Container,\n args: Args,\n fallback: Error,\n): Error => {\n try {\n query(container, ...args);\n } catch (error) {\n if (error instanceof Error) {\n return error;\n }\n }\n\n return fallback;\n};\n\nconst findOptions = <Args extends unknown[]>(\n query: FindQuery<Args>,\n container: Container,\n args: Args,\n): WaitForOptions => {\n const { timeout, interval, onTimeout } = getTrailingOptions(args) ?? {};\n\n return {\n stackTraceError: new Error(\"STACK_TRACE_MESSAGE\"),\n onTimeout: onTimeout ?? ((fallback: Error) => reRunForDiagnostics(query, container, args, fallback)),\n timeout,\n interval,\n };\n};\n\nconst singleFrom =\n <Args extends unknown[]>(\n allQuery: QueryAllBy<Args>,\n getMultipleError: MultipleErrorBuilder<Args>,\n ): SingleQuery<Args> =>\n (container, ...args) => {\n const matches = allQuery(container, ...args);\n\n if (matches.length > 1) {\n throw getMultipleError(container, matches, ...args);\n }\n\n return matches[0] ?? null;\n };\n\nconst allOrThrow =\n <Args extends unknown[]>(\n allQuery: QueryAllBy<Args>,\n getMissingError: MissingErrorBuilder<Args>,\n ): QueryAllBy<Args> =>\n (container, ...args) => {\n const matches = allQuery(container, ...args);\n\n if (matches.length === 0) {\n throw getMissingError(container, ...args);\n }\n\n return matches;\n };\n\nconst wrapSingleWithSuggestion =\n <Args extends unknown[]>(query: SingleQuery<Args>, queryName: string, variant: Variant): SingleQuery<Args> =>\n (container, ...args) => {\n const match = query(container, ...args);\n\n if (match) {\n maybeThrowSuggestion({\n container,\n match,\n queryName,\n variant,\n shouldSuggest: extractShouldSuggest(args),\n });\n }\n\n return match;\n };\n\nconst wrapAllWithSuggestion =\n <Args extends unknown[]>(query: QueryAllBy<Args>, queryName: string, variant: Variant): QueryAllBy<Args> =>\n (container, ...args) => {\n const matches = query(container, ...args);\n const [first] = matches;\n\n if (first !== undefined) {\n maybeThrowSuggestion({\n container,\n match: first,\n queryName,\n variant,\n shouldSuggest: extractShouldSuggest(args),\n });\n }\n\n return matches;\n };\n\nconst requireSingle =\n <Args extends unknown[]>(query: SingleQuery<Args>, getMissingError: MissingErrorBuilder<Args>) =>\n (container: Container, ...args: Args): Gtk.Widget => {\n const match = query(container, ...args);\n\n if (match === null) {\n throw getMissingError(container, ...args);\n }\n\n return match;\n };\n\n/**\n * Derives the `queryBy`, `getAllBy`, `getBy`, `findAllBy`, and `findBy` variants of a query family\n * from the family's `queryAllBy` function, mirroring DOM Testing Library's `buildQueries`. The family\n * name used when suggesting a better query comes from `queryAllBy.name`.\n *\n * @param queryAllBy Finds every widget the family matches.\n * @param getMultipleError Builds the error thrown when a single-match variant finds more than one widget.\n * @param getMissingError Builds the error thrown when a required match is missing.\n * @returns The five variants, in the order `[queryBy, getAllBy, getBy, findAllBy, findBy]`.\n */\nconst buildQueries = <Args extends unknown[]>(\n queryAllBy: QueryAllBy<Args>,\n getMultipleError: MultipleErrorBuilder<Args>,\n getMissingError: MissingErrorBuilder<Args>,\n): BuiltQueries<Args> => {\n const queryName = getQueryFamily(queryAllBy);\n const getAllBy = allOrThrow(queryAllBy, getMissingError);\n const getBy = requireSingle(singleFrom(getAllBy, getMultipleError), getMissingError);\n\n const queryByWithSuggestion = wrapSingleWithSuggestion(\n singleFrom(queryAllBy, getMultipleError),\n queryName,\n \"query\",\n );\n\n const getAllByWithSuggestion = wrapAllWithSuggestion(getAllBy, queryName, \"getAll\");\n\n const getByWithSuggestion: (container: Container, ...args: Args) => Gtk.Widget = (container, ...args) => {\n const match = getBy(container, ...args);\n\n maybeThrowSuggestion({\n container,\n match,\n queryName,\n variant: \"get\",\n shouldSuggest: extractShouldSuggest(args),\n });\n\n return match;\n };\n\n const findAllBy = (container: Container, ...args: Args): Promise<Gtk.Widget[]> =>\n waitFor(\n () => runWithExpensiveErrorDiagnosticsDisabled(() => getAllByWithSuggestion(container, ...args)),\n findOptions(getAllByWithSuggestion, container, args),\n );\n\n const findBy = (container: Container, ...args: Args): Promise<Gtk.Widget> =>\n waitFor(\n () => runWithExpensiveErrorDiagnosticsDisabled(() => getByWithSuggestion(container, ...args)),\n findOptions(getByWithSuggestion, container, args),\n );\n\n return [queryByWithSuggestion, getAllByWithSuggestion, getByWithSuggestion, findAllBy, findBy];\n};\n\nexport {\n buildQueries,\n type BuiltQueries,\n type MissingErrorBuilder,\n type MultipleErrorBuilder,\n type QueryAllBy,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"build-queries.js","sourceRoot":"","sources":["../src/build-queries.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as Gtk from \"@gtkx/gi/gtk\";\nimport type { Container } from \"./traversal.js\";\nimport type { MatcherOptions, WaitForOptions } from \"./types.js\";\nimport { getConfig } from \"./config.js\";\nimport { runWithExpensiveErrorDiagnosticsDisabled, suggestionError } from \"./errors.js\";\nimport { getSuggestedQuery, type Variant } from \"./suggestions.js\";\nimport { waitFor } from \"./wait-for.js\";\n\n/**\n * The `queryAllBy` function a query family is built from, taking the scope to search followed by the\n * family's own matcher arguments. Its name determines the family name, so `queryAllByTestId` builds\n * a `TestId` family.\n */\ntype QueryAllBy<Args extends unknown[]> = (container: Container, ...args: Args) => Gtk.Widget[];\n\n/** Builds the error thrown when a single-match query finds more than one widget. */\ntype MultipleErrorBuilder<Args extends unknown[]> = (\n container: Container,\n matches: Gtk.Widget[],\n ...args: Args\n) => Error;\n\n/** Builds the error thrown when a query that requires a match finds none. */\ntype MissingErrorBuilder<Args extends unknown[]> = (container: Container, ...args: Args) => Error;\n\n/** The variants derived from one `queryAllBy` function, in the order DOM Testing Library returns them. */\ntype BuiltQueries<Args extends unknown[]> = [\n queryBy: (container: Container, ...args: Args) => Gtk.Widget | null,\n getAllBy: QueryAllBy<Args>,\n getBy: (container: Container, ...args: Args) => Gtk.Widget,\n findAllBy: (container: Container, ...args: Args) => Promise<Gtk.Widget[]>,\n findBy: (container: Container, ...args: Args) => Promise<Gtk.Widget>,\n];\n\ntype FindQuery<Args extends unknown[]> = (container: Container, ...args: Args) => unknown;\ntype SingleQuery<Args extends unknown[]> = (container: Container, ...args: Args) => Gtk.Widget | null;\n\nconst getTrailingOptions = (args: unknown[]): MatcherOptions | undefined => {\n const last = args.at(-1);\n\n if (last && typeof last === \"object\" && !(last instanceof RegExp)) {\n return last;\n }\n\n return undefined;\n};\n\nconst extractShouldSuggest = (args: unknown[]): boolean | undefined => getTrailingOptions(args)?.suggest;\nconst getQueryFamily = (queryAllBy: { name: string }): string => queryAllBy.name.replace(/^queryAllBy/, \"\");\n\nconst maybeThrowSuggestion = (options: {\n container: Container;\n match: Gtk.Widget;\n queryName: string;\n variant: Variant;\n shouldSuggest: boolean | undefined;\n}): void => {\n const { container, match, queryName, variant, shouldSuggest } = options;\n\n if (!(shouldSuggest ?? getConfig().throwSuggestions)) {\n return;\n }\n\n const suggestion = getSuggestedQuery(match, variant);\n\n if (suggestion && suggestion.queryName !== queryName) {\n throw suggestionError(suggestion.toString(), container);\n }\n};\n\nconst reRunForDiagnostics = <Args extends unknown[]>(\n query: FindQuery<Args>,\n container: Container,\n args: Args,\n fallback: Error,\n): Error => {\n try {\n query(container, ...args);\n } catch (error) {\n if (error instanceof Error) {\n return error;\n }\n }\n\n return fallback;\n};\n\nconst findOptions = <Args extends unknown[]>(\n query: FindQuery<Args>,\n container: Container,\n args: Args,\n): WaitForOptions => {\n const { timeout, interval, onTimeout } = getTrailingOptions(args) ?? {};\n\n return {\n stackTraceError: new Error(\"STACK_TRACE_MESSAGE\"),\n onTimeout: onTimeout ?? ((fallback: Error) => reRunForDiagnostics(query, container, args, fallback)),\n timeout,\n interval,\n };\n};\n\nconst singleFrom =\n <Args extends unknown[]>(\n allQuery: QueryAllBy<Args>,\n getMultipleError: MultipleErrorBuilder<Args>,\n ): SingleQuery<Args> =>\n (container, ...args) => {\n const matches = allQuery(container, ...args);\n\n if (matches.length > 1) {\n throw getMultipleError(container, matches, ...args);\n }\n\n return matches[0] ?? null;\n };\n\nconst allOrThrow =\n <Args extends unknown[]>(\n allQuery: QueryAllBy<Args>,\n getMissingError: MissingErrorBuilder<Args>,\n ): QueryAllBy<Args> =>\n (container, ...args) => {\n const matches = allQuery(container, ...args);\n\n if (matches.length === 0) {\n throw getMissingError(container, ...args);\n }\n\n return matches;\n };\n\nconst wrapSingleWithSuggestion =\n <Args extends unknown[]>(query: SingleQuery<Args>, queryName: string, variant: Variant): SingleQuery<Args> =>\n (container, ...args) => {\n const match = query(container, ...args);\n\n if (match) {\n maybeThrowSuggestion({\n container,\n match,\n queryName,\n variant,\n shouldSuggest: extractShouldSuggest(args),\n });\n }\n\n return match;\n };\n\nconst wrapAllWithSuggestion =\n <Args extends unknown[]>(query: QueryAllBy<Args>, queryName: string, variant: Variant): QueryAllBy<Args> =>\n (container, ...args) => {\n const matches = query(container, ...args);\n const [first] = matches;\n\n if (first !== undefined) {\n maybeThrowSuggestion({\n container,\n match: first,\n queryName,\n variant,\n shouldSuggest: extractShouldSuggest(args),\n });\n }\n\n return matches;\n };\n\nconst requireSingle =\n <Args extends unknown[]>(query: SingleQuery<Args>, getMissingError: MissingErrorBuilder<Args>) =>\n (container: Container, ...args: Args): Gtk.Widget => {\n const match = query(container, ...args);\n\n if (match === null) {\n throw getMissingError(container, ...args);\n }\n\n return match;\n };\n\n/**\n * Derives the `queryBy`, `getAllBy`, `getBy`, `findAllBy`, and `findBy` variants of a query family\n * from the family's `queryAllBy` function, mirroring DOM Testing Library's `buildQueries`. The family\n * name used when suggesting a better query comes from `queryAllBy.name`.\n *\n * @param queryAllBy Finds every widget the family matches.\n * @param getMultipleError Builds the error thrown when a single-match variant finds more than one widget.\n * @param getMissingError Builds the error thrown when a required match is missing.\n * @returns The variants, in the order `[queryBy, getAllBy, getBy, findAllBy, findBy]`.\n */\nconst buildQueries = <Args extends unknown[]>(\n queryAllBy: QueryAllBy<Args>,\n getMultipleError: MultipleErrorBuilder<Args>,\n getMissingError: MissingErrorBuilder<Args>,\n): BuiltQueries<Args> => {\n const queryName = getQueryFamily(queryAllBy);\n const getAllBy = allOrThrow(queryAllBy, getMissingError);\n const getBy = requireSingle(singleFrom(getAllBy, getMultipleError), getMissingError);\n\n const queryByWithSuggestion = wrapSingleWithSuggestion(\n singleFrom(queryAllBy, getMultipleError),\n queryName,\n \"query\",\n );\n\n const getAllByWithSuggestion = wrapAllWithSuggestion(getAllBy, queryName, \"getAll\");\n\n const getByWithSuggestion: (container: Container, ...args: Args) => Gtk.Widget = (container, ...args) => {\n const match = getBy(container, ...args);\n\n maybeThrowSuggestion({\n container,\n match,\n queryName,\n variant: \"get\",\n shouldSuggest: extractShouldSuggest(args),\n });\n\n return match;\n };\n\n const findAllBy = (container: Container, ...args: Args): Promise<Gtk.Widget[]> =>\n waitFor(\n () => runWithExpensiveErrorDiagnosticsDisabled(() => getAllByWithSuggestion(container, ...args)),\n findOptions(getAllByWithSuggestion, container, args),\n );\n\n const findBy = (container: Container, ...args: Args): Promise<Gtk.Widget> =>\n waitFor(\n () => runWithExpensiveErrorDiagnosticsDisabled(() => getByWithSuggestion(container, ...args)),\n findOptions(getByWithSuggestion, container, args),\n );\n\n return [queryByWithSuggestion, getAllByWithSuggestion, getByWithSuggestion, findAllBy, findBy];\n};\n\nexport {\n buildQueries,\n type BuiltQueries,\n type MissingErrorBuilder,\n type MultipleErrorBuilder,\n type QueryAllBy,\n};\n"]}
|
package/dist/config.d.ts
CHANGED
|
@@ -11,8 +11,15 @@ type Config = {
|
|
|
11
11
|
getElementError: (message: string, container?: Container) => Error;
|
|
12
12
|
/** Default timeout in milliseconds for async utilities such as waitFor. */
|
|
13
13
|
asyncUtilTimeout: number;
|
|
14
|
-
/** Timeout in milliseconds
|
|
14
|
+
/** Timeout in milliseconds a user event waits for its widget to become actionable. */
|
|
15
15
|
actionabilityTimeout: number;
|
|
16
|
+
/**
|
|
17
|
+
* Timeout in milliseconds `render` waits for the window it shows the tree in to be laid out and
|
|
18
|
+
* activated. A window becoming active is a round trip through the compositor rather than an
|
|
19
|
+
* in-process check, so this is far longer than {@link Config.actionabilityTimeout}: it bounds
|
|
20
|
+
* how long a window that never activates takes to report, and costs nothing when one does.
|
|
21
|
+
*/
|
|
22
|
+
windowActivationTimeout: number;
|
|
16
23
|
};
|
|
17
24
|
/**
|
|
18
25
|
* Function form of a configuration update: receives the current config and
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;GAIG;AACH,KAAK,MAAM,GAAG;IACV,+FAA+F;IAC/F,gBAAgB,EAAE,OAAO,CAAC;IAE1B,0FAA0F;IAC1F,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,KAAK,KAAK,CAAC;IAEnE,2EAA2E;IAC3E,gBAAgB,EAAE,MAAM,CAAC;IAEzB,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;GAIG;AACH,KAAK,MAAM,GAAG;IACV,+FAA+F;IAC/F,gBAAgB,EAAE,OAAO,CAAC;IAE1B,0FAA0F;IAC1F,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,KAAK,KAAK,CAAC;IAEnE,2EAA2E;IAC3E,gBAAgB,EAAE,MAAM,CAAC;IAEzB,sFAAsF;IACtF,oBAAoB,EAAE,MAAM,CAAC;IAE7B;;;;;OAKG;IACH,uBAAuB,EAAE,MAAM,CAAC;CACnC,CAAC;AAEF;;;GAGG;AACH,KAAK,QAAQ,GAAG,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAgB5D;;GAEG;AACH,QAAA,MAAM,SAAS,QAAO,MAErB,CAAC;AAEF;;;;;GAKG;AACH,QAAA,MAAM,SAAS,GAAI,WAAW,OAAO,CAAC,MAAM,CAAC,GAAG,QAAQ,KAAG,IAG1D,CAAC;AAMF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,MAAM,EAAE,KAAK,QAAQ,EAAE,CAAC"}
|
package/dist/config.js
CHANGED
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAmCA,MAAM,aAAa,GAAW;IAC1B,gBAAgB,EAAE,KAAK;IACvB,eAAe,EAAE,sBAAsB;IACvC,gBAAgB,EAAE,IAAI;IACtB,oBAAoB,EAAE,GAAG;IACzB,uBAAuB,EAAE,IAAI;CAChC,CAAC;AAEF,MAAM,aAAa,GAAW,EAAE,GAAG,aAAa,EAAE,CAAC;AAEnD,SAAS,sBAAsB,CAAC,OAAe;IAC3C,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,SAAS,GAAG,GAAW,EAAE;IAC3B,OAAO,aAAa,CAAC;AACzB,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,SAAS,GAAG,CAAC,SAAqC,EAAQ,EAAE;IAC9D,MAAM,OAAO,GAAG,OAAO,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvF,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,YAAa,SAAQ,KAAK;IACnB,IAAI,GAAG,cAAc,CAAC;CAClC;AAED,OAAO,EAAE,SAAS,EAAE,SAAS,EAA8B,CAAC","sourcesContent":["import type { Container } from \"./traversal.js\";\n\n/**\n * Global configuration for the testing harness, controlling query behavior,\n * error formatting, and the timeouts used by async utilities and actionability\n * checks.\n */\ntype Config = {\n /** Whether a successful query throws instead, naming a better query, when one is available. */\n throwSuggestions: boolean;\n\n /** Builds the error thrown when a query fails, given a message and optional container. */\n getElementError: (message: string, container?: Container) => Error;\n\n /** Default timeout in milliseconds for async utilities such as waitFor. */\n asyncUtilTimeout: number;\n\n /** Timeout in milliseconds a user event waits for its widget to become actionable. */\n actionabilityTimeout: number;\n\n /**\n * Timeout in milliseconds `render` waits for the window it shows the tree in to be laid out and\n * activated. A window becoming active is a round trip through the compositor rather than an\n * in-process check, so this is far longer than {@link Config.actionabilityTimeout}: it bounds\n * how long a window that never activates takes to report, and costs nothing when one does.\n */\n windowActivationTimeout: number;\n};\n\n/**\n * Function form of a configuration update: receives the current config and\n * returns the fields to override.\n */\ntype ConfigFn = (existingConfig: Config) => Partial<Config>;\n\nconst defaultConfig: Config = {\n throwSuggestions: false,\n getElementError: defaultGetElementError,\n asyncUtilTimeout: 1000,\n actionabilityTimeout: 500,\n windowActivationTimeout: 5000,\n};\n\nconst currentConfig: Config = { ...defaultConfig };\n\nfunction defaultGetElementError(message: string): Error {\n return new ElementError(message);\n}\n\n/**\n * Returns the current global testing configuration.\n */\nconst getConfig = (): Config => {\n return currentConfig;\n};\n\n/**\n * Merges the given overrides into the global testing configuration.\n *\n * @param newConfig Either a partial config object or a function that receives\n * the current config and returns the fields to override.\n */\nconst configure = (newConfig: Partial<Config> | ConfigFn): void => {\n const updates = typeof newConfig === \"function\" ? newConfig(currentConfig) : newConfig;\n Object.assign(currentConfig, updates);\n};\n\nclass ElementError extends Error {\n override name = \"ElementError\";\n}\n\nexport { getConfig, configure, type Config, type ConfigFn };\n"]}
|
package/dist/frame-sync.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type * as Gtk from "@gtkx/gi/gtk";
|
|
2
2
|
declare const scheduleNextFrame: (widget: Gtk.Widget) => Promise<void>;
|
|
3
|
-
declare const
|
|
4
|
-
export {
|
|
3
|
+
declare const scheduleWhenWindowReady: (window: Gtk.Window | null, isReady: (window: Gtk.Window) => boolean, timeout: number, callback: () => void) => void;
|
|
4
|
+
export { scheduleNextFrame, scheduleWhenWindowReady };
|
|
5
5
|
//# sourceMappingURL=frame-sync.d.ts.map
|
package/dist/frame-sync.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frame-sync.d.ts","sourceRoot":"","sources":["../src/frame-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AAyCzC,QAAA,MAAM,iBAAiB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,CAAC,IAAI,CAWtD,CAAC;AAEP,QAAA,MAAM,
|
|
1
|
+
{"version":3,"file":"frame-sync.d.ts","sourceRoot":"","sources":["../src/frame-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AAyCzC,QAAA,MAAM,iBAAiB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,CAAC,IAAI,CAWtD,CAAC;AAEP,QAAA,MAAM,uBAAuB,GACzB,QAAQ,GAAG,CAAC,MAAM,GAAG,IAAI,EACzB,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,KAAK,OAAO,EACxC,SAAS,MAAM,EACf,UAAU,MAAM,IAAI,KACrB,IAUF,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,CAAC"}
|
package/dist/frame-sync.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as GLib from "@gtkx/gi/glib";
|
|
2
|
+
import { cancelTimeout, scheduleTimeout } from "./timers.js";
|
|
2
3
|
const CLOCK_STALL_FALLBACK_MS = 500;
|
|
3
4
|
const once = (callback) => {
|
|
4
5
|
let isCalled = false;
|
|
@@ -11,18 +12,17 @@ const once = (callback) => {
|
|
|
11
12
|
};
|
|
12
13
|
};
|
|
13
14
|
const hasFrameClock = (widget) => widget?.getFrameClock() != null;
|
|
14
|
-
const
|
|
15
|
-
const runUntilReady = (widget, isReady, finish) => {
|
|
15
|
+
const runUntilReady = (widget, isReady, timeout, finish) => {
|
|
16
16
|
let tickId = 0;
|
|
17
|
-
const fallback =
|
|
17
|
+
const fallback = scheduleTimeout(() => {
|
|
18
18
|
widget.removeTickCallback(tickId);
|
|
19
19
|
finish();
|
|
20
|
-
},
|
|
20
|
+
}, timeout);
|
|
21
21
|
tickId = widget.addTickCallback(() => {
|
|
22
22
|
if (!isReady()) {
|
|
23
23
|
return GLib.SOURCE_CONTINUE;
|
|
24
24
|
}
|
|
25
|
-
|
|
25
|
+
cancelTimeout(fallback);
|
|
26
26
|
finish();
|
|
27
27
|
return GLib.SOURCE_REMOVE;
|
|
28
28
|
});
|
|
@@ -33,15 +33,15 @@ const scheduleNextFrame = (widget) => new Promise((resolve) => {
|
|
|
33
33
|
queueMicrotask(finish);
|
|
34
34
|
return;
|
|
35
35
|
}
|
|
36
|
-
runUntilReady(widget, () => true, finish);
|
|
36
|
+
runUntilReady(widget, () => true, CLOCK_STALL_FALLBACK_MS, finish);
|
|
37
37
|
});
|
|
38
|
-
const
|
|
38
|
+
const scheduleWhenWindowReady = (window, isReady, timeout, callback) => {
|
|
39
39
|
const finish = once(callback);
|
|
40
|
-
if (!hasFrameClock(
|
|
40
|
+
if (!hasFrameClock(window) || isReady(window)) {
|
|
41
41
|
queueMicrotask(finish);
|
|
42
42
|
return;
|
|
43
43
|
}
|
|
44
|
-
runUntilReady(
|
|
44
|
+
runUntilReady(window, () => isReady(window), timeout, finish);
|
|
45
45
|
};
|
|
46
|
-
export {
|
|
46
|
+
export { scheduleNextFrame, scheduleWhenWindowReady };
|
|
47
47
|
//# sourceMappingURL=frame-sync.js.map
|
package/dist/frame-sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frame-sync.js","sourceRoot":"","sources":["../src/frame-sync.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"frame-sync.js","sourceRoot":"","sources":["../src/frame-sync.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE7D,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAEpC,MAAM,IAAI,GAAG,CAAC,QAAoB,EAAgB,EAAE;IAChD,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,OAAO,GAAG,EAAE;QACR,IAAI,QAAQ,EAAE,CAAC;YACX,OAAO;QACX,CAAC;QAED,QAAQ,GAAG,IAAI,CAAC;QAChB,QAAQ,EAAE,CAAC;IACf,CAAC,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,MAAyB,EAAwB,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,IAAI,CAAC;AAE3G,MAAM,aAAa,GAAG,CAAC,MAAkB,EAAE,OAAsB,EAAE,OAAe,EAAE,MAAkB,EAAQ,EAAE;IAC5G,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,EAAE;QAClC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,EAAE,CAAC;IACb,CAAC,EAAE,OAAO,CAAC,CAAC;IAEZ,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE;QACjC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,eAAe,CAAC;QAChC,CAAC;QAED,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxB,MAAM,EAAE,CAAC;QAET,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,MAAkB,EAAiB,EAAE,CAC5D,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;IACpB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAE7B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,cAAc,CAAC,MAAM,CAAC,CAAC;QAEvB,OAAO;IACX,CAAC;IAED,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,uBAAuB,EAAE,MAAM,CAAC,CAAC;AACvE,CAAC,CAAC,CAAC;AAEP,MAAM,uBAAuB,GAAG,CAC5B,MAAyB,EACzB,OAAwC,EACxC,OAAe,EACf,QAAoB,EAChB,EAAE;IACN,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE9B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,cAAc,CAAC,MAAM,CAAC,CAAC;QAEvB,OAAO;IACX,CAAC;IAED,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAClE,CAAC,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,CAAC","sourcesContent":["import type * as Gtk from \"@gtkx/gi/gtk\";\nimport * as GLib from \"@gtkx/gi/glib\";\nimport { cancelTimeout, scheduleTimeout } from \"./timers.js\";\n\nconst CLOCK_STALL_FALLBACK_MS = 500;\n\nconst once = (callback: () => void): (() => void) => {\n let isCalled = false;\n\n return () => {\n if (isCalled) {\n return;\n }\n\n isCalled = true;\n callback();\n };\n};\n\nconst hasFrameClock = (widget: Gtk.Widget | null): widget is Gtk.Widget => widget?.getFrameClock() != null;\n\nconst runUntilReady = (widget: Gtk.Widget, isReady: () => boolean, timeout: number, finish: () => void): void => {\n let tickId = 0;\n\n const fallback = scheduleTimeout(() => {\n widget.removeTickCallback(tickId);\n finish();\n }, timeout);\n\n tickId = widget.addTickCallback(() => {\n if (!isReady()) {\n return GLib.SOURCE_CONTINUE;\n }\n\n cancelTimeout(fallback);\n finish();\n\n return GLib.SOURCE_REMOVE;\n });\n};\n\nconst scheduleNextFrame = (widget: Gtk.Widget): Promise<void> =>\n new Promise((resolve) => {\n const finish = once(resolve);\n\n if (!hasFrameClock(widget)) {\n queueMicrotask(finish);\n\n return;\n }\n\n runUntilReady(widget, () => true, CLOCK_STALL_FALLBACK_MS, finish);\n });\n\nconst scheduleWhenWindowReady = (\n window: Gtk.Window | null,\n isReady: (window: Gtk.Window) => boolean,\n timeout: number,\n callback: () => void,\n): void => {\n const finish = once(callback);\n\n if (!hasFrameClock(window) || isReady(window)) {\n queueMicrotask(finish);\n\n return;\n }\n\n runUntilReady(window, () => isReady(window), timeout, finish);\n};\n\nexport { scheduleNextFrame, scheduleWhenWindowReady };\n"]}
|
package/dist/harness-window.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as Gtk from "@gtkx/gi/gtk";
|
|
2
2
|
declare const createHarnessWindow: () => Gtk.Window;
|
|
3
|
-
|
|
3
|
+
declare const presentHarnessWindow: (window: Gtk.Window | null) => void;
|
|
4
|
+
export { createHarnessWindow, presentHarnessWindow };
|
|
4
5
|
//# sourceMappingURL=harness-window.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-window.d.ts","sourceRoot":"","sources":["../src/harness-window.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"harness-window.d.ts","sourceRoot":"","sources":["../src/harness-window.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AAMpC,QAAA,MAAM,mBAAmB,QAAO,GAAG,CAAC,MAC4D,CAAC;AAEjG,QAAA,MAAM,oBAAoB,GAAI,QAAQ,GAAG,CAAC,MAAM,GAAG,IAAI,KAAG,IAWzD,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,CAAC"}
|
package/dist/harness-window.js
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import * as Gtk from "@gtkx/gi/gtk";
|
|
2
2
|
const HARNESS_WINDOW_WIDTH = 800;
|
|
3
3
|
const HARNESS_WINDOW_HEIGHT = 600;
|
|
4
|
+
const TEXT_END_POSITION = -1;
|
|
4
5
|
const createHarnessWindow = () => new Gtk.Window({ defaultWidth: HARNESS_WINDOW_WIDTH, defaultHeight: HARNESS_WINDOW_HEIGHT });
|
|
5
|
-
|
|
6
|
+
const presentHarnessWindow = (window) => {
|
|
7
|
+
if (!window) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
window.present();
|
|
11
|
+
const focus = window.getFocus();
|
|
12
|
+
if (focus instanceof Gtk.Text) {
|
|
13
|
+
focus.setPosition(TEXT_END_POSITION);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
export { createHarnessWindow, presentHarnessWindow };
|
|
6
17
|
//# sourceMappingURL=harness-window.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-window.js","sourceRoot":"","sources":["../src/harness-window.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AAEpC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,qBAAqB,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"harness-window.js","sourceRoot":"","sources":["../src/harness-window.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AAEpC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,MAAM,iBAAiB,GAAG,CAAC,CAAC,CAAC;AAE7B,MAAM,mBAAmB,GAAG,GAAe,EAAE,CACzC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,qBAAqB,EAAE,CAAC,CAAC;AAEjG,MAAM,oBAAoB,GAAG,CAAC,MAAyB,EAAQ,EAAE;IAC7D,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO;IACX,CAAC;IAED,MAAM,CAAC,OAAO,EAAE,CAAC;IACjB,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAEhC,IAAI,KAAK,YAAY,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5B,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,CAAC","sourcesContent":["import * as Gtk from \"@gtkx/gi/gtk\";\n\nconst HARNESS_WINDOW_WIDTH = 800;\nconst HARNESS_WINDOW_HEIGHT = 600;\nconst TEXT_END_POSITION = -1;\n\nconst createHarnessWindow = (): Gtk.Window =>\n new Gtk.Window({ defaultWidth: HARNESS_WINDOW_WIDTH, defaultHeight: HARNESS_WINDOW_HEIGHT });\n\nconst presentHarnessWindow = (window: Gtk.Window | null): void => {\n if (!window) {\n return;\n }\n\n window.present();\n const focus = window.getFocus();\n\n if (focus instanceof Gtk.Text) {\n focus.setPosition(TEXT_END_POSITION);\n }\n};\n\nexport { createHarnessWindow, presentHarnessWindow };\n"]}
|
package/dist/internal.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { readAccessibleBooleanProperty, readAccessibleFlag, readAccessibleInt, readAccessibleNumber, readAccessibleRelation, readAccessibleState, readAccessibleString, } from "./accessible-native.js";
|
|
2
2
|
export { cleanup, render } from "./production.js";
|
|
3
3
|
export { renderChildren, type ChildrenBuilder } from "./render-children.js";
|
|
4
|
+
export { getTypeTag } from "./widget-getters.js";
|
|
4
5
|
//# sourceMappingURL=internal.d.ts.map
|
package/dist/internal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,6BAA6B,EAC7B,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,6BAA6B,EAC7B,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/internal.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { readAccessibleBooleanProperty, readAccessibleFlag, readAccessibleInt, readAccessibleNumber, readAccessibleRelation, readAccessibleState, readAccessibleString, } from "./accessible-native.js";
|
|
2
2
|
export { cleanup, render } from "./production.js";
|
|
3
3
|
export { renderChildren } from "./render-children.js";
|
|
4
|
+
export { getTypeTag } from "./widget-getters.js";
|
|
4
5
|
//# sourceMappingURL=internal.js.map
|
package/dist/internal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,6BAA6B,EAC7B,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAwB,MAAM,sBAAsB,CAAC","sourcesContent":["export {\n readAccessibleBooleanProperty,\n readAccessibleFlag,\n readAccessibleInt,\n readAccessibleNumber,\n readAccessibleRelation,\n readAccessibleState,\n readAccessibleString,\n} from \"./accessible-native.js\";\nexport { cleanup, render } from \"./production.js\";\nexport { renderChildren, type ChildrenBuilder } from \"./render-children.js\";\n"]}
|
|
1
|
+
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,6BAA6B,EAC7B,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAwB,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC","sourcesContent":["export {\n readAccessibleBooleanProperty,\n readAccessibleFlag,\n readAccessibleInt,\n readAccessibleNumber,\n readAccessibleRelation,\n readAccessibleState,\n readAccessibleString,\n} from \"./accessible-native.js\";\nexport { cleanup, render } from \"./production.js\";\nexport { renderChildren, type ChildrenBuilder } from \"./render-children.js\";\nexport { getTypeTag } from \"./widget-getters.js\";\n"]}
|
package/dist/matchers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matchers.d.ts","sourceRoot":"","sources":["../src/matchers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAEH,KAAK,wBAAwB,EAKhC,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"matchers.d.ts","sourceRoot":"","sources":["../src/matchers.ts"],"names":[],"mappings":"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"}
|
package/dist/matchers.js
CHANGED
|
@@ -6,6 +6,8 @@ import { queryAllByDisplayValue, queryAllByLabelText, queryAllByPlaceholderText,
|
|
|
6
6
|
import { formatRole } from "./role-helpers.js";
|
|
7
7
|
import { descendants } from "./traversal.js";
|
|
8
8
|
import { getWidgetAccessibleName, getWidgetCheckedState, getWidgetDescribedByText, getWidgetDisplayValue, getWidgetErrorMessage, getWidgetInvalidState, getWidgetLabelText, getWidgetPressedState, getWidgetRequiredState, getWidgetSelection, getWidgetTextContent, getWidgetValueNow, hasDisplayValue, isWidgetDisabled, isWidgetValueMatch, isWidgetVisible, } from "./widget-accessible-properties.js";
|
|
9
|
+
import { getTypeTag } from "./widget-getters.js";
|
|
10
|
+
import { isWindowActivated } from "./window-state.js";
|
|
9
11
|
const registration = { isRegistered: false };
|
|
10
12
|
const MIXED_TRISTATE = Gtk.AccessibleTristate.MIXED;
|
|
11
13
|
const ROUNDED_READING = ", which the accessibility tree rounds to six significant digits";
|
|
@@ -84,7 +86,7 @@ const describeWidget = (widget) => {
|
|
|
84
86
|
const name = getWidgetAccessibleName(widget);
|
|
85
87
|
return name === null ? `<${role}>` : `<${role} name=${JSON.stringify(name)}>`;
|
|
86
88
|
};
|
|
87
|
-
const describeObject = (object) => object instanceof Gtk.Widget ? describeWidget(object) : `<${object
|
|
89
|
+
const describeObject = (object) => object instanceof Gtk.Widget ? describeWidget(object) : `<${getTypeTag(object)}>`;
|
|
88
90
|
const isTextMatch = (actual, expected, mode) => {
|
|
89
91
|
if (expected instanceof RegExp) {
|
|
90
92
|
expected.lastIndex = 0;
|
|
@@ -111,6 +113,24 @@ const stateResult = (widget, stateName, isPass) => ({
|
|
|
111
113
|
pass: isPass,
|
|
112
114
|
message: () => `expected widget ${negationPrefix(isPass)}to be ${stateName}\n${describeWidget(widget)}`,
|
|
113
115
|
});
|
|
116
|
+
const isHoldingFocus = (widget, root) => {
|
|
117
|
+
const focus = root.getFocus();
|
|
118
|
+
return focus !== null && (focus === widget || focus.isAncestor(widget));
|
|
119
|
+
};
|
|
120
|
+
const isFocusHeldByInactiveWindow = (widget) => {
|
|
121
|
+
const root = widget.getRoot();
|
|
122
|
+
return root instanceof Gtk.Window && !isWindowActivated(root) && isHoldingFocus(widget, root);
|
|
123
|
+
};
|
|
124
|
+
const focusResult = (widget, isPass) => {
|
|
125
|
+
if (isPass || !isFocusHeldByInactiveWindow(widget)) {
|
|
126
|
+
return stateResult(widget, "focused", isPass);
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
pass: false,
|
|
130
|
+
message: () => "expected widget to be focused: its window has given it the focus, " +
|
|
131
|
+
`but that window is not active\n${describeWidget(widget)}`,
|
|
132
|
+
};
|
|
133
|
+
};
|
|
114
134
|
const describeAttributeValue = (value) => value === null ? "unset" : JSON.stringify(value);
|
|
115
135
|
const attributeSetResult = (widget, label, actual) => {
|
|
116
136
|
const isSet = actual !== null;
|
|
@@ -419,7 +439,7 @@ function toBeValid(received) {
|
|
|
419
439
|
}
|
|
420
440
|
function toHaveFocus(received) {
|
|
421
441
|
const widget = asWidget(received, "toHaveFocus");
|
|
422
|
-
return
|
|
442
|
+
return focusResult(widget, widget.getPlatformState(Gtk.AccessiblePlatformState.FOCUSED));
|
|
423
443
|
}
|
|
424
444
|
function toHaveRole(received, expected) {
|
|
425
445
|
const widget = asWidget(received, "toHaveRole");
|