@fluentui-react-native/desktop-driver 0.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.
Files changed (235) hide show
  1. package/.cache/tsconfig.tsbuildinfo +1 -0
  2. package/AGENTS.md +68 -0
  3. package/CHANGELOG.md +16 -0
  4. package/PLAN.md +1394 -0
  5. package/README.md +223 -0
  6. package/SPEC.md +105 -0
  7. package/config/cli.cjs +8 -0
  8. package/jest.config.cjs +9 -0
  9. package/lib/agent/DesktopAgent.d.ts +56 -0
  10. package/lib/agent/DesktopAgent.d.ts.map +1 -0
  11. package/lib/agent/DesktopAgent.js +118 -0
  12. package/lib/agent/DesktopAgent.js.map +1 -0
  13. package/lib/agent/DesktopAgent.test.d.ts +2 -0
  14. package/lib/agent/DesktopAgent.test.d.ts.map +1 -0
  15. package/lib/agent/DesktopAgent.test.js +97 -0
  16. package/lib/agent/DesktopAgent.test.js.map +1 -0
  17. package/lib/agent/agent.contract.cjs +66 -0
  18. package/lib/agent/agent.contract.cjs.map +1 -0
  19. package/lib/agent/agent.contract.d.cts +2 -0
  20. package/lib/agent/agent.contract.d.cts.map +1 -0
  21. package/lib/agent/index.d.ts +3 -0
  22. package/lib/agent/index.d.ts.map +1 -0
  23. package/lib/agent/index.js +2 -0
  24. package/lib/agent/index.js.map +1 -0
  25. package/lib/artifacts/ArtifactManager.d.ts +13 -0
  26. package/lib/artifacts/ArtifactManager.d.ts.map +1 -0
  27. package/lib/artifacts/ArtifactManager.js +88 -0
  28. package/lib/artifacts/ArtifactManager.js.map +1 -0
  29. package/lib/artifacts/ArtifactManager.test.d.ts +2 -0
  30. package/lib/artifacts/ArtifactManager.test.d.ts.map +1 -0
  31. package/lib/artifacts/ArtifactManager.test.js +19 -0
  32. package/lib/artifacts/ArtifactManager.test.js.map +1 -0
  33. package/lib/artifacts/index.d.ts +2 -0
  34. package/lib/artifacts/index.d.ts.map +1 -0
  35. package/lib/artifacts/index.js +2 -0
  36. package/lib/artifacts/index.js.map +1 -0
  37. package/lib/authoring/index.d.ts +4 -0
  38. package/lib/authoring/index.d.ts.map +1 -0
  39. package/lib/authoring/index.js +2 -0
  40. package/lib/authoring/index.js.map +1 -0
  41. package/lib/authoring/results.d.ts +43 -0
  42. package/lib/authoring/results.d.ts.map +1 -0
  43. package/lib/authoring/results.js +2 -0
  44. package/lib/authoring/results.js.map +1 -0
  45. package/lib/authoring/storyTests.d.ts +81 -0
  46. package/lib/authoring/storyTests.d.ts.map +1 -0
  47. package/lib/authoring/storyTests.js +272 -0
  48. package/lib/authoring/storyTests.js.map +1 -0
  49. package/lib/authoring/storyTests.test.d.ts +2 -0
  50. package/lib/authoring/storyTests.test.d.ts.map +1 -0
  51. package/lib/authoring/storyTests.test.js +46 -0
  52. package/lib/authoring/storyTests.test.js.map +1 -0
  53. package/lib/cli/DesktopDriverCli.test.d.ts +2 -0
  54. package/lib/cli/DesktopDriverCli.test.d.ts.map +1 -0
  55. package/lib/cli/DesktopDriverCli.test.js +141 -0
  56. package/lib/cli/DesktopDriverCli.test.js.map +1 -0
  57. package/lib/cli/createDesktopDriverCommand.d.ts +8 -0
  58. package/lib/cli/createDesktopDriverCommand.d.ts.map +1 -0
  59. package/lib/cli/createDesktopDriverCommand.js +242 -0
  60. package/lib/cli/createDesktopDriverCommand.js.map +1 -0
  61. package/lib/cli/index.d.ts +3 -0
  62. package/lib/cli/index.d.ts.map +1 -0
  63. package/lib/cli/index.js +2 -0
  64. package/lib/cli/index.js.map +1 -0
  65. package/lib/client/DesktopDriverClient.d.ts +60 -0
  66. package/lib/client/DesktopDriverClient.d.ts.map +1 -0
  67. package/lib/client/DesktopDriverClient.js +155 -0
  68. package/lib/client/DesktopDriverClient.js.map +1 -0
  69. package/lib/client/index.d.ts +3 -0
  70. package/lib/client/index.d.ts.map +1 -0
  71. package/lib/client/index.js +2 -0
  72. package/lib/client/index.js.map +1 -0
  73. package/lib/host/types.d.ts +153 -0
  74. package/lib/host/types.d.ts.map +1 -0
  75. package/lib/host/types.js +2 -0
  76. package/lib/host/types.js.map +1 -0
  77. package/lib/hosts/fake/FakeDesktopHost.d.ts +72 -0
  78. package/lib/hosts/fake/FakeDesktopHost.d.ts.map +1 -0
  79. package/lib/hosts/fake/FakeDesktopHost.js +452 -0
  80. package/lib/hosts/fake/FakeDesktopHost.js.map +1 -0
  81. package/lib/index.d.ts +23 -0
  82. package/lib/index.d.ts.map +1 -0
  83. package/lib/index.js +11 -0
  84. package/lib/index.js.map +1 -0
  85. package/lib/protocol/actions.d.ts +11 -0
  86. package/lib/protocol/actions.d.ts.map +1 -0
  87. package/lib/protocol/actions.js +137 -0
  88. package/lib/protocol/actions.js.map +1 -0
  89. package/lib/protocol/capabilities.d.ts +11 -0
  90. package/lib/protocol/capabilities.d.ts.map +1 -0
  91. package/lib/protocol/capabilities.js +103 -0
  92. package/lib/protocol/capabilities.js.map +1 -0
  93. package/lib/protocol/constants.d.ts +2 -0
  94. package/lib/protocol/constants.d.ts.map +1 -0
  95. package/lib/protocol/constants.js +2 -0
  96. package/lib/protocol/constants.js.map +1 -0
  97. package/lib/protocol/errors.d.ts +37 -0
  98. package/lib/protocol/errors.d.ts.map +1 -0
  99. package/lib/protocol/errors.js +66 -0
  100. package/lib/protocol/errors.js.map +1 -0
  101. package/lib/protocol/timeouts.d.ts +2 -0
  102. package/lib/protocol/timeouts.d.ts.map +1 -0
  103. package/lib/protocol/timeouts.js +23 -0
  104. package/lib/protocol/timeouts.js.map +1 -0
  105. package/lib/protocol/types.d.ts +46 -0
  106. package/lib/protocol/types.d.ts.map +1 -0
  107. package/lib/protocol/types.js +2 -0
  108. package/lib/protocol/types.js.map +1 -0
  109. package/lib/runner/StoryTestRunner.d.ts +38 -0
  110. package/lib/runner/StoryTestRunner.d.ts.map +1 -0
  111. package/lib/runner/StoryTestRunner.js +497 -0
  112. package/lib/runner/StoryTestRunner.js.map +1 -0
  113. package/lib/runner/StoryTestRunner.test.d.ts +2 -0
  114. package/lib/runner/StoryTestRunner.test.d.ts.map +1 -0
  115. package/lib/runner/StoryTestRunner.test.js +349 -0
  116. package/lib/runner/StoryTestRunner.test.js.map +1 -0
  117. package/lib/runner/index.d.ts +3 -0
  118. package/lib/runner/index.d.ts.map +1 -0
  119. package/lib/runner/index.js +2 -0
  120. package/lib/runner/index.js.map +1 -0
  121. package/lib/server/SessionManager.d.ts +52 -0
  122. package/lib/server/SessionManager.d.ts.map +1 -0
  123. package/lib/server/SessionManager.js +208 -0
  124. package/lib/server/SessionManager.js.map +1 -0
  125. package/lib/server/TargetRegistry.d.ts +9 -0
  126. package/lib/server/TargetRegistry.d.ts.map +1 -0
  127. package/lib/server/TargetRegistry.js +24 -0
  128. package/lib/server/TargetRegistry.js.map +1 -0
  129. package/lib/server/createDesktopDriverServer.d.ts +19 -0
  130. package/lib/server/createDesktopDriverServer.d.ts.map +1 -0
  131. package/lib/server/createDesktopDriverServer.js +609 -0
  132. package/lib/server/createDesktopDriverServer.js.map +1 -0
  133. package/lib/server/desktopDriver.test.d.ts +2 -0
  134. package/lib/server/desktopDriver.test.d.ts.map +1 -0
  135. package/lib/server/desktopDriver.test.js +389 -0
  136. package/lib/server/desktopDriver.test.js.map +1 -0
  137. package/lib/server/index.d.ts +6 -0
  138. package/lib/server/index.d.ts.map +1 -0
  139. package/lib/server/index.js +4 -0
  140. package/lib/server/index.js.map +1 -0
  141. package/lib/server/webdriverio.contract.cjs +35 -0
  142. package/lib/server/webdriverio.contract.cjs.map +1 -0
  143. package/lib/server/webdriverio.contract.d.cts +2 -0
  144. package/lib/server/webdriverio.contract.d.cts.map +1 -0
  145. package/lib/server/webdriverio.test.d.ts +2 -0
  146. package/lib/server/webdriverio.test.d.ts.map +1 -0
  147. package/lib/server/webdriverio.test.js +40 -0
  148. package/lib/server/webdriverio.test.js.map +1 -0
  149. package/lib/storybook.d.ts +36 -0
  150. package/lib/storybook.d.ts.map +1 -0
  151. package/lib/storybook.js +2 -0
  152. package/lib/storybook.js.map +1 -0
  153. package/lib/testing/FakeStoryOrchestrator.d.ts +21 -0
  154. package/lib/testing/FakeStoryOrchestrator.d.ts.map +1 -0
  155. package/lib/testing/FakeStoryOrchestrator.js +44 -0
  156. package/lib/testing/FakeStoryOrchestrator.js.map +1 -0
  157. package/lib/testing/fakeStoryElements.d.ts +4 -0
  158. package/lib/testing/fakeStoryElements.d.ts.map +1 -0
  159. package/lib/testing/fakeStoryElements.js +143 -0
  160. package/lib/testing/fakeStoryElements.js.map +1 -0
  161. package/lib/testing/fakeStoryElements.test.d.ts +2 -0
  162. package/lib/testing/fakeStoryElements.test.d.ts.map +1 -0
  163. package/lib/testing/fakeStoryElements.test.js +38 -0
  164. package/lib/testing/fakeStoryElements.test.js.map +1 -0
  165. package/lib/testing/index.d.ts +7 -0
  166. package/lib/testing/index.d.ts.map +1 -0
  167. package/lib/testing/index.js +5 -0
  168. package/lib/testing/index.js.map +1 -0
  169. package/lib/testing/protocolHarness.d.ts +17 -0
  170. package/lib/testing/protocolHarness.d.ts.map +1 -0
  171. package/lib/testing/protocolHarness.js +46 -0
  172. package/lib/testing/protocolHarness.js.map +1 -0
  173. package/lib/wdio/DesktopWebdriver.d.ts +47 -0
  174. package/lib/wdio/DesktopWebdriver.d.ts.map +1 -0
  175. package/lib/wdio/DesktopWebdriver.js +76 -0
  176. package/lib/wdio/DesktopWebdriver.js.map +1 -0
  177. package/lib/wdio/DesktopWebdriver.test.d.ts +2 -0
  178. package/lib/wdio/DesktopWebdriver.test.d.ts.map +1 -0
  179. package/lib/wdio/DesktopWebdriver.test.js +74 -0
  180. package/lib/wdio/DesktopWebdriver.test.js.map +1 -0
  181. package/lib/wdio/index.d.ts +3 -0
  182. package/lib/wdio/index.d.ts.map +1 -0
  183. package/lib/wdio/index.js +2 -0
  184. package/lib/wdio/index.js.map +1 -0
  185. package/lib/wdio/wdioRunner.contract.cjs +64 -0
  186. package/lib/wdio/wdioRunner.contract.cjs.map +1 -0
  187. package/lib/wdio/wdioRunner.contract.d.cts +2 -0
  188. package/lib/wdio/wdioRunner.contract.d.cts.map +1 -0
  189. package/package.json +96 -0
  190. package/src/agent/DesktopAgent.test.ts +102 -0
  191. package/src/agent/DesktopAgent.ts +170 -0
  192. package/src/agent/agent.contract.cjs +32 -0
  193. package/src/agent/index.ts +8 -0
  194. package/src/artifacts/ArtifactManager.test.ts +20 -0
  195. package/src/artifacts/ArtifactManager.ts +105 -0
  196. package/src/artifacts/index.ts +1 -0
  197. package/src/authoring/index.ts +26 -0
  198. package/src/authoring/results.ts +47 -0
  199. package/src/authoring/storyTests.test.ts +58 -0
  200. package/src/authoring/storyTests.ts +345 -0
  201. package/src/cli/DesktopDriverCli.test.ts +150 -0
  202. package/src/cli/createDesktopDriverCommand.ts +290 -0
  203. package/src/cli/index.ts +2 -0
  204. package/src/client/DesktopDriverClient.ts +218 -0
  205. package/src/client/index.ts +2 -0
  206. package/src/host/types.ts +158 -0
  207. package/src/hosts/fake/FakeDesktopHost.ts +558 -0
  208. package/src/index.ts +101 -0
  209. package/src/protocol/actions.ts +163 -0
  210. package/src/protocol/capabilities.ts +129 -0
  211. package/src/protocol/constants.ts +1 -0
  212. package/src/protocol/errors.ts +76 -0
  213. package/src/protocol/timeouts.ts +26 -0
  214. package/src/protocol/types.ts +55 -0
  215. package/src/runner/StoryTestRunner.test.ts +362 -0
  216. package/src/runner/StoryTestRunner.ts +624 -0
  217. package/src/runner/index.ts +9 -0
  218. package/src/server/SessionManager.ts +302 -0
  219. package/src/server/TargetRegistry.ts +29 -0
  220. package/src/server/createDesktopDriverServer.ts +775 -0
  221. package/src/server/desktopDriver.test.ts +421 -0
  222. package/src/server/index.ts +5 -0
  223. package/src/server/webdriverio.contract.cjs +38 -0
  224. package/src/server/webdriverio.test.ts +41 -0
  225. package/src/storybook.ts +40 -0
  226. package/src/testing/FakeStoryOrchestrator.ts +55 -0
  227. package/src/testing/fakeStoryElements.test.ts +40 -0
  228. package/src/testing/fakeStoryElements.ts +167 -0
  229. package/src/testing/index.ts +6 -0
  230. package/src/testing/protocolHarness.ts +66 -0
  231. package/src/wdio/DesktopWebdriver.test.ts +76 -0
  232. package/src/wdio/DesktopWebdriver.ts +130 -0
  233. package/src/wdio/index.ts +2 -0
  234. package/src/wdio/wdioRunner.contract.cjs +30 -0
  235. package/tsconfig.json +15 -0
@@ -0,0 +1,497 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { WebDriverError } from '../protocol/errors.js';
3
+ import { webElementIdentifier } from '../protocol/constants.js';
4
+ export async function runDesktopStoryTests({ artifacts, endpoint, manifest, platformName, runId = randomUUID(), selection, session, signal, targetId, }) {
5
+ const startedAt = new Date();
6
+ const selected = selectDesktopStoryTests(manifest, endpoint, selection);
7
+ if (selected.length === 0) {
8
+ throw new Error('No desktop story tests matched the requested selection.');
9
+ }
10
+ const results = [];
11
+ artifacts?.writeMetadata('host', {
12
+ capabilities: session.capabilities,
13
+ endpoint,
14
+ platformName,
15
+ targetId,
16
+ });
17
+ for (const [index, item] of selected.entries()) {
18
+ if (signal?.aborted) {
19
+ results.push(cancelledResult(item, 'Run cancelled before the test started.'));
20
+ continue;
21
+ }
22
+ results.push(await runTest({
23
+ artifacts,
24
+ item,
25
+ runId: `${runId}-${index + 1}`,
26
+ session,
27
+ signal,
28
+ }));
29
+ }
30
+ const result = {
31
+ endpoint,
32
+ finishedAt: new Date().toISOString(),
33
+ manifest: {
34
+ platform: manifest.platformManifestDigest,
35
+ portable: manifest.portablePlanDigest,
36
+ },
37
+ platformName,
38
+ runId,
39
+ schemaVersion: 1,
40
+ startedAt: startedAt.toISOString(),
41
+ status: results.every(({ status }) => status === 'passed' || status === 'skipped') ? 'passed' : 'failed',
42
+ targetId,
43
+ tests: results,
44
+ };
45
+ artifacts?.writeRunResult(result);
46
+ return result;
47
+ }
48
+ export function selectDesktopStoryTests(manifest, endpoint, selection = {}) {
49
+ validateShard(selection);
50
+ const selected = manifest.entries
51
+ .filter((entry) => !selection.story || matchesPattern(entry.id, selection.story))
52
+ .filter((entry) => !selection.tag || entry.tags.includes(selection.tag))
53
+ .flatMap((entry) => (entry.tests?.tests ?? [])
54
+ .filter((test) => !test.platforms || test.platforms.includes(endpoint))
55
+ .filter((test) => !selection.test || matchesPattern(test.id, selection.test))
56
+ .map((test) => ({ entry, test })))
57
+ .sort((left, right) => `${left.entry.id}/${left.test.id}`.localeCompare(`${right.entry.id}/${right.test.id}`));
58
+ const shardCount = selection.shardCount;
59
+ const shardIndex = selection.shardIndex;
60
+ if (shardCount === undefined || shardIndex === undefined) {
61
+ return selected;
62
+ }
63
+ return selected.filter((_item, index) => index % shardCount === shardIndex);
64
+ }
65
+ async function runTest({ artifacts, item, runId, session, signal, }) {
66
+ const started = Date.now();
67
+ const title = item.test.title ?? item.test.id;
68
+ const missing = missingCapabilities(session.capabilities, item.test.requires ?? []);
69
+ if (missing.length > 0) {
70
+ return {
71
+ artifacts: [],
72
+ durationMs: Date.now() - started,
73
+ skipReason: `Unsupported capabilities: ${missing.join(', ')}`,
74
+ status: 'skipped',
75
+ steps: [],
76
+ storyId: item.entry.id,
77
+ testId: item.test.id,
78
+ title,
79
+ };
80
+ }
81
+ const steps = [];
82
+ const testArtifacts = [];
83
+ let status = 'passed';
84
+ let errorMessage;
85
+ try {
86
+ throwIfAborted(signal);
87
+ await withAbort(session.selectStory(item.entry.id, runId), signal);
88
+ for (const [index, step] of item.test.steps.entries()) {
89
+ throwIfAborted(signal);
90
+ const result = await runStep(session, step, index, artifacts, `${item.entry.id}-${item.test.id}`, signal);
91
+ steps.push(result);
92
+ testArtifacts.push(...result.artifacts);
93
+ if (result.status === 'failed') {
94
+ status = classifyError(result.errorObject);
95
+ errorMessage = result.error;
96
+ break;
97
+ }
98
+ }
99
+ }
100
+ catch (error) {
101
+ status = classifyError(error);
102
+ errorMessage = error instanceof Error ? error.message : String(error);
103
+ }
104
+ try {
105
+ await session.releaseActions();
106
+ }
107
+ catch (error) {
108
+ const cleanupError = error instanceof Error ? error.message : String(error);
109
+ if (status === 'passed') {
110
+ status = 'infrastructure-error';
111
+ errorMessage = `Input cleanup failed: ${cleanupError}`;
112
+ }
113
+ else {
114
+ errorMessage = `${errorMessage ?? 'Test failed.'} Input cleanup failed: ${cleanupError}`;
115
+ }
116
+ }
117
+ if (signal?.aborted && status === 'passed') {
118
+ status = 'cancelled';
119
+ errorMessage = 'Run cancelled during input cleanup.';
120
+ }
121
+ if (status !== 'passed' && artifacts) {
122
+ const captured = await captureFailureArtifacts(session, artifacts, `${item.entry.id}-${item.test.id}`);
123
+ testArtifacts.push(...captured.artifacts);
124
+ if (captured.error) {
125
+ errorMessage = `${errorMessage ?? 'Test failed.'} Evidence capture failed: ${captured.error}`;
126
+ }
127
+ }
128
+ return {
129
+ artifacts: testArtifacts,
130
+ durationMs: Date.now() - started,
131
+ ...(errorMessage ? { error: errorMessage } : {}),
132
+ status,
133
+ steps,
134
+ storyId: item.entry.id,
135
+ testId: item.test.id,
136
+ title,
137
+ };
138
+ }
139
+ async function runStep(session, step, index, artifacts, testDirectory, signal) {
140
+ const started = Date.now();
141
+ const stepArtifacts = [];
142
+ try {
143
+ throwIfAborted(signal);
144
+ if ('expect' in step) {
145
+ await withAbort(assertDesktopExpectation(session, step.expect), signal);
146
+ }
147
+ else {
148
+ await withAbort(performAction(session, step, artifacts, testDirectory, stepArtifacts, signal), signal);
149
+ }
150
+ throwIfAborted(signal);
151
+ return { artifacts: stepArtifacts, durationMs: Date.now() - started, index, status: 'passed' };
152
+ }
153
+ catch (error) {
154
+ return {
155
+ artifacts: stepArtifacts,
156
+ durationMs: Date.now() - started,
157
+ error: error instanceof Error ? error.message : String(error),
158
+ errorObject: error,
159
+ index,
160
+ status: 'failed',
161
+ };
162
+ }
163
+ }
164
+ async function performAction(session, step, artifacts, testDirectory, stepArtifacts, signal) {
165
+ switch (step.action) {
166
+ case 'actions':
167
+ await session.performActions(step.sequences);
168
+ return;
169
+ case 'clear':
170
+ await (await findDesktopElement(session, step.target)).clear();
171
+ return;
172
+ case 'click':
173
+ await (await findDesktopElement(session, step.target)).click();
174
+ return;
175
+ case 'doubleClick': {
176
+ const element = await findDesktopElement(session, step.target);
177
+ await element.click();
178
+ await element.click();
179
+ return;
180
+ }
181
+ case 'keys':
182
+ await session.performActions(keySequences(step.value));
183
+ return;
184
+ case 'note':
185
+ return;
186
+ case 'screenshot': {
187
+ const image = step.target ? await (await findDesktopElement(session, step.target)).takeScreenshot() : await session.takeScreenshot();
188
+ if (artifacts) {
189
+ stepArtifacts.push(artifacts.writeScreenshot(testDirectory, step.name, image));
190
+ }
191
+ return;
192
+ }
193
+ case 'scroll': {
194
+ const origin = step.target ? toElementReference(await findDesktopElement(session, step.target)) : 'viewport';
195
+ await session.performActions([
196
+ {
197
+ id: 'desktop-story-wheel',
198
+ type: 'wheel',
199
+ actions: [
200
+ {
201
+ type: 'scroll',
202
+ deltaX: step.deltaX ?? 0,
203
+ deltaY: step.deltaY,
204
+ duration: 0,
205
+ origin,
206
+ x: 0,
207
+ y: 0,
208
+ },
209
+ ],
210
+ },
211
+ ]);
212
+ return;
213
+ }
214
+ case 'setArgs':
215
+ await session.updateStoryArgs(requireCurrentStory(await session.getCurrentStory()), step.args);
216
+ return;
217
+ case 'source': {
218
+ const source = await session.getPageSource();
219
+ if (artifacts) {
220
+ stepArtifacts.push(artifacts.writeSource(testDirectory, step.name, source));
221
+ }
222
+ return;
223
+ }
224
+ case 'type':
225
+ await (await findDesktopElement(session, step.target)).sendKeys(step.text);
226
+ return;
227
+ case 'wait':
228
+ await waitFor(session, step, signal);
229
+ return;
230
+ }
231
+ }
232
+ export async function assertDesktopExpectation(session, expectation) {
233
+ const elements = await findDesktopElements(session, expectation.target);
234
+ if (expectation.state === 'count') {
235
+ assertEqual(elements.length, expectation.value, 'count');
236
+ return;
237
+ }
238
+ if (expectation.state === 'exists') {
239
+ assertEqual(elements.length > 0, expectation.value ?? true, 'exists');
240
+ return;
241
+ }
242
+ const element = elements[0];
243
+ if (!element) {
244
+ throw new DesktopAssertionError('Expected element does not exist.');
245
+ }
246
+ let actual;
247
+ switch (expectation.state) {
248
+ case 'accessibleName':
249
+ actual = await element.getAttribute('name');
250
+ break;
251
+ case 'checked':
252
+ actual = await element.getProperty('checked');
253
+ break;
254
+ case 'displayed':
255
+ actual = await element.isDisplayed();
256
+ break;
257
+ case 'enabled':
258
+ actual = await element.isEnabled();
259
+ break;
260
+ case 'expanded':
261
+ actual = await element.getProperty('expanded');
262
+ break;
263
+ case 'focused':
264
+ actual = await element.getProperty('focused');
265
+ break;
266
+ case 'role':
267
+ actual = await element.getTagName();
268
+ break;
269
+ case 'selected':
270
+ actual = await element.isSelected();
271
+ break;
272
+ case 'text':
273
+ actual = await element.getText();
274
+ break;
275
+ case 'value':
276
+ actual = await element.getProperty('value');
277
+ break;
278
+ default:
279
+ throw new DesktopAssertionError(`Unsupported expectation "${expectation.state}".`);
280
+ }
281
+ assertEqual(actual, expectation.value ?? true, expectation.state);
282
+ }
283
+ async function waitFor(session, step, signal) {
284
+ const deadline = Date.now() + (step.timeoutMs ?? 5000);
285
+ let lastError;
286
+ do {
287
+ throwIfAborted(signal);
288
+ try {
289
+ if (step.until) {
290
+ await assertDesktopExpectation(session, step.until);
291
+ }
292
+ else if (step.target) {
293
+ await findDesktopElement(session, step.target);
294
+ }
295
+ throwIfAborted(signal);
296
+ return;
297
+ }
298
+ catch (error) {
299
+ if (error instanceof DesktopRunCancelledError) {
300
+ throw error;
301
+ }
302
+ lastError = error;
303
+ }
304
+ await withAbort(delay(Math.min(50, Math.max(1, deadline - Date.now()))), signal);
305
+ } while (Date.now() < deadline);
306
+ throw new WebDriverError('timeout', `Wait condition was not met: ${lastError?.message ?? 'unknown condition'}`);
307
+ }
308
+ export async function findDesktopElement(session, selector) {
309
+ const elements = await findDesktopElements(session, selector);
310
+ if (!elements[0]) {
311
+ throw new WebDriverError('no such element', `No element matched ${JSON.stringify(selector)}.`);
312
+ }
313
+ return elements[0];
314
+ }
315
+ export async function findDesktopElements(session, selector) {
316
+ if ('testId' in selector) {
317
+ return session.findElements('accessibility id', selector.testId);
318
+ }
319
+ if ('accessibleName' in selector) {
320
+ return session.findElements('link text', selector.accessibleName);
321
+ }
322
+ if ('text' in selector) {
323
+ return session.findElements('-furn:text', selector.text);
324
+ }
325
+ const candidates = await session.findElements('tag name', selector.role);
326
+ if (!selector.name) {
327
+ return candidates;
328
+ }
329
+ const matches = [];
330
+ for (const candidate of candidates) {
331
+ if ((await candidate.getAttribute('name')) === selector.name) {
332
+ matches.push(candidate);
333
+ }
334
+ }
335
+ return matches;
336
+ }
337
+ function classifyError(error) {
338
+ if (error instanceof DesktopRunCancelledError) {
339
+ return 'cancelled';
340
+ }
341
+ if (error instanceof WebDriverError) {
342
+ if (error.code === 'timeout') {
343
+ return 'timed-out';
344
+ }
345
+ if (error.code === 'invalid session id' || error.code === 'session not created' || error.code === 'unknown error') {
346
+ return 'infrastructure-error';
347
+ }
348
+ }
349
+ return error instanceof DesktopAssertionError ? 'failed' : 'failed';
350
+ }
351
+ async function captureFailureArtifacts(session, artifacts, testDirectory) {
352
+ const captured = [];
353
+ const errors = [];
354
+ try {
355
+ captured.push(artifacts.writeScreenshot(testDirectory, 'failure', await session.takeScreenshot()));
356
+ }
357
+ catch (error) {
358
+ errors.push(error instanceof Error ? error.message : String(error));
359
+ }
360
+ try {
361
+ captured.push(artifacts.writeSource(testDirectory, 'failure-source', await session.getPageSource()));
362
+ }
363
+ catch (error) {
364
+ errors.push(error instanceof Error ? error.message : String(error));
365
+ }
366
+ try {
367
+ captured.push(artifacts.writeTree(testDirectory, 'failure-tree', await session.getTree()));
368
+ }
369
+ catch (error) {
370
+ errors.push(error instanceof Error ? error.message : String(error));
371
+ }
372
+ return { artifacts: captured, ...(errors.length > 0 ? { error: errors.join('; ') } : {}) };
373
+ }
374
+ function missingCapabilities(capabilities, required) {
375
+ const features = capabilities['furn:features'];
376
+ if (!features || typeof features !== 'object') {
377
+ return [...required];
378
+ }
379
+ const values = features;
380
+ const mappings = {
381
+ 'accessibility-click': 'accessibilityClick',
382
+ 'element-screenshot': 'elementScreenshot',
383
+ focus: 'focus',
384
+ keyboard: 'keyboard',
385
+ 'physical-click': 'physicalClick',
386
+ screenshot: 'screenshot',
387
+ wheel: 'wheel',
388
+ };
389
+ return required.filter((capability) => values[mappings[capability]] !== true);
390
+ }
391
+ function validateShard(selection) {
392
+ if (selection.shardCount === undefined && selection.shardIndex === undefined) {
393
+ return;
394
+ }
395
+ const shardCount = selection.shardCount;
396
+ const shardIndex = selection.shardIndex;
397
+ if (!Number.isInteger(shardCount) ||
398
+ !Number.isInteger(shardIndex) ||
399
+ shardCount === undefined ||
400
+ shardIndex === undefined ||
401
+ shardCount < 1 ||
402
+ shardIndex < 0 ||
403
+ shardIndex >= shardCount) {
404
+ throw new TypeError('Shard selection requires 0 <= shardIndex < shardCount.');
405
+ }
406
+ }
407
+ function matchesPattern(value, pattern) {
408
+ const expression = new RegExp(`^${pattern.split('*').map(escapeRegExp).join('.*')}$`);
409
+ return expression.test(value);
410
+ }
411
+ function escapeRegExp(value) {
412
+ return value.replaceAll(/[.*+?^${}()|[\]\\]/g, '\\$&');
413
+ }
414
+ function keySequences(keys) {
415
+ return [
416
+ {
417
+ id: 'desktop-story-keyboard',
418
+ type: 'key',
419
+ actions: keys.flatMap((value) => [
420
+ { type: 'keyDown', value },
421
+ { type: 'keyUp', value },
422
+ ]),
423
+ },
424
+ ];
425
+ }
426
+ function toElementReference(element) {
427
+ return { [webElementIdentifier]: element.id };
428
+ }
429
+ function requireCurrentStory(story) {
430
+ if (!story) {
431
+ throw new Error('Storybook did not report a current story.');
432
+ }
433
+ return story.storyId;
434
+ }
435
+ function assertEqual(actual, expected, label) {
436
+ if (!Object.is(actual, expected)) {
437
+ throw new DesktopAssertionError(`Expected ${label} to be ${JSON.stringify(expected)}, received ${JSON.stringify(actual)}.`);
438
+ }
439
+ }
440
+ function cancelledResult(item, reason) {
441
+ return {
442
+ artifacts: [],
443
+ durationMs: 0,
444
+ error: reason,
445
+ status: 'cancelled',
446
+ steps: [],
447
+ storyId: item.entry.id,
448
+ testId: item.test.id,
449
+ title: item.test.title ?? item.test.id,
450
+ };
451
+ }
452
+ export class DesktopAssertionError extends Error {
453
+ constructor(message) {
454
+ super(message);
455
+ this.name = 'DesktopAssertionError';
456
+ }
457
+ }
458
+ class DesktopRunCancelledError extends Error {
459
+ constructor(message) {
460
+ super(message);
461
+ this.name = 'DesktopRunCancelledError';
462
+ }
463
+ }
464
+ function throwIfAborted(signal) {
465
+ if (signal?.aborted) {
466
+ throw new DesktopRunCancelledError('Run cancelled during the test.');
467
+ }
468
+ }
469
+ function withAbort(operation, signal) {
470
+ if (!signal) {
471
+ return operation;
472
+ }
473
+ throwIfAborted(signal);
474
+ return new Promise((resolve, reject) => {
475
+ let aborted = false;
476
+ const onAbort = () => {
477
+ aborted = true;
478
+ };
479
+ signal.addEventListener('abort', onAbort, { once: true });
480
+ operation.then((value) => {
481
+ signal.removeEventListener('abort', onAbort);
482
+ if (aborted) {
483
+ reject(new DesktopRunCancelledError('Run cancelled during the test.'));
484
+ }
485
+ else {
486
+ resolve(value);
487
+ }
488
+ }, (error) => {
489
+ signal.removeEventListener('abort', onAbort);
490
+ reject(aborted ? new DesktopRunCancelledError('Run cancelled during the test.') : error);
491
+ });
492
+ });
493
+ }
494
+ function delay(milliseconds) {
495
+ return new Promise((resolve) => setTimeout(resolve, milliseconds));
496
+ }
497
+ //# sourceMappingURL=StoryTestRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StoryTestRunner.js","sourceRoot":"","sources":["../../src/runner/StoryTestRunner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=StoryTestRunner.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StoryTestRunner.test.d.ts","sourceRoot":"","sources":["../../src/runner/StoryTestRunner.test.ts"],"names":[],"mappings":""}