@mudah-cli/testing 0.9.2 → 0.9.4

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.
@@ -0,0 +1,143 @@
1
+ import type { Layout } from '@mudah-cli/tui';
2
+ import { TestTui, type TestTuiOptions } from './test-tui.js';
3
+ /**
4
+ * Agentic TUI testing: let an AI model (or any decision function) drive a
5
+ * Mudah interface headlessly — no PTY, no terminal — observing the screen and
6
+ * choosing actions until a goal is met.
7
+ *
8
+ * The loop is model-agnostic. You bring `decide`: a function that takes an
9
+ * {@link AgentObservation} (plus a ready-made LLM prompt) and returns an
10
+ * {@link AgentAction}. `AgentTui` applies the action, re-observes, and
11
+ * records every step as a JSON-serializable trace for replay and debugging.
12
+ *
13
+ * ```ts
14
+ * const agent = AgentTui.mount(new Column().add(new List(['alpha', 'beta'])));
15
+ * const result = await agent.run({
16
+ * goal: 'Select "beta"',
17
+ * decide: async (observation, prompt) => parseAgentAction(await model(prompt)),
18
+ * isComplete: (obs) => obs.screen.includes('▸ beta'),
19
+ * });
20
+ * expect(result.completed).toBe(true);
21
+ * ```
22
+ */
23
+ /** One interactable node on screen, addressable by an AI model. */
24
+ export interface AgentElement {
25
+ /** Stable index-path id, e.g. `e0`, `e1.2`. Valid until the tree reshapes. */
26
+ id: string;
27
+ role: string;
28
+ label: string;
29
+ x: number;
30
+ y: number;
31
+ width: number;
32
+ height: number;
33
+ focused: boolean;
34
+ }
35
+ /** Everything a model needs to decide the next move. */
36
+ export interface AgentObservation {
37
+ /** Zero-based step counter. */
38
+ step: number;
39
+ /** ASCII snapshot of the screen, like {@link TestTui.snapshot}. */
40
+ screen: string;
41
+ /** Interactable elements, in tree order. */
42
+ elements: AgentElement[];
43
+ /** Id of the focused element, if any. */
44
+ focusedId: string | null;
45
+ }
46
+ /**
47
+ * The model's action space. Every variant is plain JSON, so a model can emit
48
+ * it directly and {@link parseAgentAction} validates it.
49
+ */
50
+ export type AgentAction =
51
+ /** Press a key: a single character, or `enter`, `escape`, `tab`, `up`, `down`, `left`, `right`, `home`, `end`, `pageup`, `pagedown`, `backspace`, `delete`, `space`. */
52
+ {
53
+ kind: 'press';
54
+ key: string;
55
+ }
56
+ /** Type text into the focused input, character by character. */
57
+ | {
58
+ kind: 'type';
59
+ text: string;
60
+ }
61
+ /** Click the center of an element by its {@link AgentElement.id}. */
62
+ | {
63
+ kind: 'click';
64
+ id: string;
65
+ }
66
+ /** Click raw screen coordinates. */
67
+ | {
68
+ kind: 'clickAt';
69
+ x: number;
70
+ y: number;
71
+ }
72
+ /** Advance widget timers deterministically (no real sleeping). */
73
+ | {
74
+ kind: 'wait';
75
+ ms: number;
76
+ }
77
+ /** Declare the goal achieved. */
78
+ | {
79
+ kind: 'done';
80
+ note?: string;
81
+ };
82
+ /** One loop iteration: what the model saw and what it did. */
83
+ export interface AgentStep {
84
+ index: number;
85
+ observation: AgentObservation;
86
+ action: AgentAction;
87
+ }
88
+ export interface AgentRunOptions {
89
+ /** Plain-language goal, shown to the model in its prompt. */
90
+ goal: string;
91
+ /**
92
+ * The model (or script). Receives the observation and a pre-formatted
93
+ * prompt; returns the next action. Throw to abort the run with
94
+ * `reason: 'error'`.
95
+ */
96
+ decide: (observation: AgentObservation, prompt: string) => AgentAction | Promise<AgentAction>;
97
+ /** Optional goal check evaluated before each decision. */
98
+ isComplete?: (observation: AgentObservation) => boolean;
99
+ /** Safety budget. Default 30. */
100
+ maxSteps?: number;
101
+ /** Called after every applied action. */
102
+ onStep?: (step: AgentStep) => void;
103
+ }
104
+ export interface AgentResult {
105
+ completed: boolean;
106
+ reason: 'done' | 'goal-met' | 'max-steps' | 'error';
107
+ steps: AgentStep[];
108
+ final: AgentObservation;
109
+ error?: unknown;
110
+ }
111
+ /**
112
+ * Format an observation as a compact LLM prompt: goal, screen, element list,
113
+ * and the exact JSON action schema the model must reply with.
114
+ */
115
+ export declare function formatAgentPrompt(goal: string, observation: AgentObservation): string;
116
+ /**
117
+ * Parse and validate model output into an {@link AgentAction}.
118
+ * Accepts raw JSON or JSON wrapped in ```json fences. Throws a descriptive
119
+ * error on anything else — feed the message back to the model and retry.
120
+ */
121
+ export declare function parseAgentAction(input: string): AgentAction;
122
+ /**
123
+ * Headless agent driver. Wraps {@link TestTui}'s synchronous, PTY-free
124
+ * harness with an observation/action loop a model can run.
125
+ */
126
+ export declare class AgentTui {
127
+ /** The underlying scripted harness — still available for assertions. */
128
+ readonly tui: TestTui;
129
+ private stepCount;
130
+ private constructor();
131
+ static mount(root: Layout, options?: TestTuiOptions): AgentTui;
132
+ /** Current screen + interactive elements. */
133
+ observe(): AgentObservation;
134
+ /** Format the current observation as an LLM prompt for `goal`. */
135
+ prompt(goal: string): string;
136
+ /** Apply one action to the harness. */
137
+ act(action: AgentAction): Promise<void>;
138
+ /**
139
+ * Run the agent loop: observe → decide → act, until the model says `done`,
140
+ * `isComplete` passes, `maxSteps` is hit, or something throws.
141
+ */
142
+ run(options: AgentRunOptions): Promise<AgentResult>;
143
+ }
package/dist/agent.js ADDED
@@ -0,0 +1,262 @@
1
+ import { TestTui } from './test-tui.js';
2
+ const INTERACTIVE_ROLES = [
3
+ 'button',
4
+ 'input',
5
+ 'textinput',
6
+ 'textarea',
7
+ 'checkbox',
8
+ 'radio',
9
+ 'select',
10
+ 'list',
11
+ 'menu',
12
+ 'tab',
13
+ 'link',
14
+ 'slider',
15
+ 'switch',
16
+ 'toggle',
17
+ 'fuzzy',
18
+ 'combobox',
19
+ 'datepicker',
20
+ 'filebrowser',
21
+ 'pager',
22
+ 'search',
23
+ ];
24
+ function isInteractive(node) {
25
+ const role = node.role.toLowerCase();
26
+ if (INTERACTIVE_ROLES.some((r) => role.includes(r)))
27
+ return true;
28
+ if (node.name !== undefined || node.href !== undefined)
29
+ return true;
30
+ if (typeof node.value === 'string' && node.value.length > 0)
31
+ return true;
32
+ return node.focused === true;
33
+ }
34
+ function labelOf(node) {
35
+ if (node.name !== undefined)
36
+ return String(node.name);
37
+ if (typeof node.value === 'string' && node.value.length > 0)
38
+ return node.value;
39
+ if (node.href !== undefined)
40
+ return String(node.href);
41
+ return node.role;
42
+ }
43
+ function collectElements(tree) {
44
+ const elements = [];
45
+ let focusedId = null;
46
+ const visit = (node, path) => {
47
+ if (isInteractive(node)) {
48
+ const id = `e${path}`;
49
+ const bounds = node.bounds;
50
+ const focused = node.focused === true;
51
+ elements.push({
52
+ id,
53
+ role: node.role,
54
+ label: labelOf(node),
55
+ x: bounds?.x ?? 0,
56
+ y: bounds?.y ?? 0,
57
+ width: bounds?.width ?? 0,
58
+ height: bounds?.height ?? 0,
59
+ focused,
60
+ });
61
+ if (focused)
62
+ focusedId = id;
63
+ }
64
+ node.children?.forEach((child, index) => {
65
+ visit(child, path === '' ? `${index}` : `${path}.${index}`);
66
+ });
67
+ };
68
+ tree.children?.forEach((child, index) => {
69
+ visit(child, `${index}`);
70
+ });
71
+ return { elements, focusedId };
72
+ }
73
+ /**
74
+ * Format an observation as a compact LLM prompt: goal, screen, element list,
75
+ * and the exact JSON action schema the model must reply with.
76
+ */
77
+ export function formatAgentPrompt(goal, observation) {
78
+ const lines = [
79
+ `Goal: ${goal}`,
80
+ ``,
81
+ `Screen:`,
82
+ '```',
83
+ observation.screen,
84
+ '```',
85
+ ``,
86
+ `Interactive elements:`,
87
+ ];
88
+ if (observation.elements.length === 0) {
89
+ lines.push('(none)');
90
+ }
91
+ else {
92
+ for (const el of observation.elements) {
93
+ lines.push(`- [${el.id}] ${el.role} "${el.label}" at (${el.x},${el.y}) ${el.width}x${el.height}${el.focused ? ' FOCUSED' : ''}`);
94
+ }
95
+ }
96
+ lines.push(``, `Reply with exactly one JSON action and nothing else:`, `{"kind":"press","key":"down"} | {"kind":"type","text":"hello"} | {"kind":"click","id":"e0"} | {"kind":"clickAt","x":10,"y":3} | {"kind":"wait","ms":500} | {"kind":"done","note":"why the goal is met"}`, `press keys: single characters, or enter, escape, tab, up, down, left, right, home, end, pageup, pagedown, backspace, delete, space.`);
97
+ return lines.join('\n');
98
+ }
99
+ /**
100
+ * Parse and validate model output into an {@link AgentAction}.
101
+ * Accepts raw JSON or JSON wrapped in ```json fences. Throws a descriptive
102
+ * error on anything else — feed the message back to the model and retry.
103
+ */
104
+ export function parseAgentAction(input) {
105
+ const stripped = input
106
+ .replace(/^```(?:json)?\s*/i, '')
107
+ .replace(/\s*```\s*$/, '')
108
+ .trim();
109
+ let parsed;
110
+ try {
111
+ parsed = JSON.parse(stripped);
112
+ }
113
+ catch {
114
+ throw new Error(`[agent] Model output is not JSON: ${JSON.stringify(input.slice(0, 120))}`);
115
+ }
116
+ if (typeof parsed !== 'object' || parsed === null) {
117
+ throw new Error('[agent] Action must be a JSON object.');
118
+ }
119
+ const action = parsed;
120
+ switch (action['kind']) {
121
+ case 'press':
122
+ if (typeof action['key'] !== 'string' || action['key'] === '') {
123
+ throw new Error('[agent] press action needs a non-empty string "key".');
124
+ }
125
+ return { kind: 'press', key: action['key'] };
126
+ case 'type':
127
+ if (typeof action['text'] !== 'string') {
128
+ throw new Error('[agent] type action needs a string "text".');
129
+ }
130
+ return { kind: 'type', text: action['text'] };
131
+ case 'click':
132
+ if (typeof action['id'] !== 'string' || action['id'] === '') {
133
+ throw new Error('[agent] click action needs a non-empty string "id".');
134
+ }
135
+ return { kind: 'click', id: action['id'] };
136
+ case 'clickAt': {
137
+ const x = action['x'];
138
+ const y = action['y'];
139
+ if (typeof x !== 'number' || typeof y !== 'number') {
140
+ throw new Error('[agent] clickAt action needs numeric "x" and "y".');
141
+ }
142
+ return { kind: 'clickAt', x, y };
143
+ }
144
+ case 'wait': {
145
+ const ms = action['ms'];
146
+ if (typeof ms !== 'number' || ms < 0) {
147
+ throw new Error('[agent] wait action needs a non-negative numeric "ms".');
148
+ }
149
+ return { kind: 'wait', ms };
150
+ }
151
+ case 'done':
152
+ return {
153
+ kind: 'done',
154
+ ...(typeof action['note'] === 'string' ? { note: action['note'] } : {}),
155
+ };
156
+ default:
157
+ throw new Error(`[agent] Unknown action kind: ${JSON.stringify(action['kind'])}. ` +
158
+ 'Expected one of: press, type, click, clickAt, wait, done.');
159
+ }
160
+ }
161
+ /**
162
+ * Headless agent driver. Wraps {@link TestTui}'s synchronous, PTY-free
163
+ * harness with an observation/action loop a model can run.
164
+ */
165
+ export class AgentTui {
166
+ /** The underlying scripted harness — still available for assertions. */
167
+ tui;
168
+ stepCount = 0;
169
+ constructor(tui) {
170
+ this.tui = tui;
171
+ }
172
+ static mount(root, options = {}) {
173
+ return new AgentTui(TestTui.mount(root, options));
174
+ }
175
+ /** Current screen + interactive elements. */
176
+ observe() {
177
+ const { elements, focusedId } = collectElements(this.tui.tree());
178
+ return {
179
+ step: this.stepCount,
180
+ screen: this.tui.snapshot(),
181
+ elements,
182
+ focusedId,
183
+ };
184
+ }
185
+ /** Format the current observation as an LLM prompt for `goal`. */
186
+ prompt(goal) {
187
+ return formatAgentPrompt(goal, this.observe());
188
+ }
189
+ /** Apply one action to the harness. */
190
+ async act(action) {
191
+ switch (action.kind) {
192
+ case 'press':
193
+ this.tui.send(action.key);
194
+ break;
195
+ case 'type':
196
+ for (const ch of action.text)
197
+ this.tui.send(ch);
198
+ break;
199
+ case 'click': {
200
+ const { elements } = this.observe();
201
+ const el = elements.find((candidate) => candidate.id === action.id);
202
+ if (!el) {
203
+ throw new Error(`[agent] Unknown element id "${action.id}". Known ids: ${elements.map((candidate) => candidate.id).join(', ') || '(none)'}`);
204
+ }
205
+ this.tui.click(el.x + Math.floor(el.width / 2), el.y + Math.floor(el.height / 2));
206
+ break;
207
+ }
208
+ case 'clickAt':
209
+ this.tui.click(action.x, action.y);
210
+ break;
211
+ case 'wait':
212
+ // Deterministic time travel: advance widget timers without sleeping.
213
+ this.tui.root.tick(action.ms);
214
+ break;
215
+ case 'done':
216
+ break;
217
+ }
218
+ this.stepCount += 1;
219
+ }
220
+ /**
221
+ * Run the agent loop: observe → decide → act, until the model says `done`,
222
+ * `isComplete` passes, `maxSteps` is hit, or something throws.
223
+ */
224
+ async run(options) {
225
+ const maxSteps = options.maxSteps ?? 30;
226
+ const steps = [];
227
+ const initial = this.observe();
228
+ if (options.isComplete?.(initial) === true) {
229
+ return { completed: true, reason: 'goal-met', steps, final: initial };
230
+ }
231
+ for (let index = 0; index < maxSteps; index++) {
232
+ const observation = this.observe();
233
+ if (options.isComplete?.(observation) === true) {
234
+ return { completed: true, reason: 'goal-met', steps, final: observation };
235
+ }
236
+ let action;
237
+ try {
238
+ action = await options.decide(observation, formatAgentPrompt(options.goal, observation));
239
+ }
240
+ catch (error) {
241
+ return { completed: false, reason: 'error', steps, final: observation, error };
242
+ }
243
+ steps.push({ index, observation, action });
244
+ options.onStep?.(steps[steps.length - 1]);
245
+ if (action.kind === 'done') {
246
+ return { completed: true, reason: 'done', steps, final: observation };
247
+ }
248
+ try {
249
+ await this.act(action);
250
+ }
251
+ catch (error) {
252
+ return { completed: false, reason: 'error', steps, final: observation, error };
253
+ }
254
+ }
255
+ const final = this.observe();
256
+ if (options.isComplete?.(final) === true) {
257
+ return { completed: true, reason: 'goal-met', steps, final };
258
+ }
259
+ return { completed: false, reason: 'max-steps', steps, final };
260
+ }
261
+ }
262
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
package/dist/fs-mock.d.ts CHANGED
@@ -1,14 +1,3 @@
1
- /**
2
- * In-memory virtual filesystem for testing.
3
- * No disk I/O — everything stays in memory.
4
- *
5
- * ```ts
6
- * const fs = new FsMock();
7
- * fs.write('/etc/config.json', '{}');
8
- * const text = fs.read('/etc/config.json');
9
- * expect(text).toBe('{}');
10
- * ```
11
- */
12
1
  export declare class FsMock {
13
2
  private root;
14
3
  write(path: string, content: string): void;
package/dist/fs-mock.js CHANGED
@@ -12,10 +12,25 @@ const fs = require('node:fs');
12
12
  * expect(text).toBe('{}');
13
13
  * ```
14
14
  */
15
+ function normalizeParts(path) {
16
+ const parts = [];
17
+ for (const part of path.split('/')) {
18
+ if (part === '' || part === '.')
19
+ continue;
20
+ if (part === '..') {
21
+ parts.pop();
22
+ continue;
23
+ }
24
+ parts.push(part);
25
+ }
26
+ return parts;
27
+ }
15
28
  export class FsMock {
16
29
  root = { type: 'dir', children: new Map() };
17
30
  write(path, content) {
18
- const parts = path.split('/').filter(Boolean);
31
+ const parts = normalizeParts(path);
32
+ if (parts.length === 0)
33
+ throw new Error('[fs-mock] write() requires a non-empty path');
19
34
  let node = this.root;
20
35
  for (let i = 0; i < parts.length - 1; i++) {
21
36
  if (!node.children)
@@ -63,7 +78,9 @@ export class FsMock {
63
78
  return out.sort();
64
79
  }
65
80
  rm(path) {
66
- const parts = path.split('/').filter(Boolean);
81
+ const parts = normalizeParts(path);
82
+ if (parts.length === 0)
83
+ return false;
67
84
  let node = this.root;
68
85
  for (let i = 0; i < parts.length - 1; i++) {
69
86
  const child = node.children?.get(parts[i]);
@@ -74,7 +91,7 @@ export class FsMock {
74
91
  return node.children?.delete(parts[parts.length - 1]) ?? false;
75
92
  }
76
93
  mkdir(path) {
77
- const parts = path.split('/').filter(Boolean);
94
+ const parts = normalizeParts(path);
78
95
  let node = this.root;
79
96
  for (const part of parts) {
80
97
  if (!node.children)
@@ -88,7 +105,7 @@ export class FsMock {
88
105
  }
89
106
  }
90
107
  resolve(path) {
91
- const parts = path.split('/').filter(Boolean);
108
+ const parts = normalizeParts(path);
92
109
  let node = this.root;
93
110
  for (const part of parts) {
94
111
  const next = node.children?.get(part);
@@ -1 +1 @@
1
- {"version":3,"file":"fs-mock.js","sourceRoot":"","sources":["../src/fs-mock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fs-mock.js","sourceRoot":"","sources":["../src/fs-mock.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export { type ReplayHandle, type SessionAction, SessionRecorder } from '@mudah-cli/tui';
2
+ export { type AgentAction, type AgentElement, type AgentObservation, type AgentResult, type AgentRunOptions, type AgentStep, AgentTui, formatAgentPrompt, parseAgentAction, } from './agent.js';
2
3
  export { FsMock, mockFs } from './fs-mock.js';
3
4
  export { NetworkMock, type NetworkMockResponse } from './network-mock.js';
4
5
  export { createMockPlugin, type MockPlugin, type MockPluginOptions, MockPluginRegistry, } from './plugin-mock.js';
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { SessionRecorder } from '@mudah-cli/tui';
2
+ export { AgentTui, formatAgentPrompt, parseAgentAction, } from './agent.js';
2
3
  export { FsMock, mockFs } from './fs-mock.js';
3
4
  export { NetworkMock } from './network-mock.js';
4
5
  export { createMockPlugin, MockPluginRegistry, } from './plugin-mock.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyC,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAA4B,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EACL,gBAAgB,EAGhB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAyB,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,OAAO,EAAuB,UAAU,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EACL,UAAU,EACV,OAAO,GAIR,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyC,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAOL,QAAQ,EACR,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAA4B,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EACL,gBAAgB,EAGhB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAyB,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,OAAO,EAAuB,UAAU,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EACL,UAAU,EACV,OAAO,GAIR,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
@@ -6,7 +6,7 @@
6
6
  * in `expect(() => assertHasColor(...)).not.toThrow()` or similar.
7
7
  */
8
8
  import { stripAnsi } from '@mudah-cli/ui';
9
- const ANSI_SGR_FOREGROUND = /\x1b\[(?:38;2;(\d+);(\d+);(\d+)|38;5;(\d+)|3[0-8])m/g;
9
+ const ANSI_SGR_FOREGROUND = /\x1b\[(?:38;2;(\d+);(\d+);(\d+)|38;5;(\d+)|3[0-8]|0|39)m/g;
10
10
  function hexFromRgb(r, g, b) {
11
11
  return `#${[r, g, b].map((n) => Number(n).toString(16).padStart(2, '0')).join('')}`;
12
12
  }
@@ -25,7 +25,8 @@ function styledRuns(text) {
25
25
  const r = match[1];
26
26
  const g = match[2];
27
27
  const b = match[3];
28
- current = r && g && b ? { text: '', hex: hexFromRgb(r, g, b) } : { text: '' };
28
+ const isReset = match[0] === '\x1b[0m' || match[0] === '\x1b[39m';
29
+ current = !isReset && r && g && b ? { text: '', hex: hexFromRgb(r, g, b) } : { text: '' };
29
30
  last = start + match[0].length;
30
31
  }
31
32
  current.text += text.slice(last);
@@ -35,6 +36,9 @@ function styledRuns(text) {
35
36
  }
36
37
  function hexToRgb(hex) {
37
38
  const v = hex.replace('#', '');
39
+ if (!/^[0-9a-fA-F]{3}$/.test(v) && !/^[0-9a-fA-F]{6}$/.test(v)) {
40
+ throw new Error(`[testing] Invalid hex color: ${hex}`);
41
+ }
38
42
  const full = v.length === 3
39
43
  ? v
40
44
  .split('')
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot-assert.js","sourceRoot":"","sources":["../src/snapshot-assert.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snapshot-assert.js","sourceRoot":"","sources":["../src/snapshot-assert.ts"],"names":[],"mappings":"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"}
@@ -63,7 +63,7 @@ export declare class TestTui {
63
63
  send(name: string, ch?: string): this;
64
64
  paste(text: string): this;
65
65
  click(x: number, y: number): this;
66
- wheel(direction: 'up' | 'down'): this;
66
+ wheel(direction: 'up' | 'down', x?: number, y?: number): this;
67
67
  resize(cols: number, rows: number): this;
68
68
  /**
69
69
  * Step back one recorded visual frame. `snapshot()` / `frame()` then
package/dist/test-tui.js CHANGED
@@ -55,10 +55,10 @@ export class TestTui {
55
55
  this.root.handleMouse(click(x, y));
56
56
  });
57
57
  }
58
- wheel(direction) {
58
+ wheel(direction, x = 0, y = 0) {
59
59
  return this.record({ kind: 'wheel', direction }, () => {
60
60
  this.root.handleMouse({
61
- ...click(0, 0),
61
+ ...click(x, y),
62
62
  buttons: { left: false, middle: false, right: false, extra: false },
63
63
  wheel: direction,
64
64
  });
@@ -1 +1 @@
1
- {"version":3,"file":"test-tui.js","sourceRoot":"","sources":["../src/test-tui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-tui.js","sourceRoot":"","sources":["../src/test-tui.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mudah-cli/testing",
3
- "version": "0.9.2",
3
+ "version": "0.9.4",
4
4
  "description": "In-process command test runner with captured output, mocked prompts, and JSON assertions.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -33,12 +33,12 @@
33
33
  ],
34
34
  "sideEffects": false,
35
35
  "dependencies": {
36
- "@mudah-cli/animation": "^0.9.2",
37
- "@mudah-cli/console": "^0.9.2",
38
- "@mudah-cli/core": "^0.9.2",
39
- "@mudah-cli/terminal": "^0.9.2",
40
- "@mudah-cli/tui": "^0.9.2",
41
- "@mudah-cli/ui": "^0.9.2"
36
+ "@mudah-cli/animation": "^0.9.4",
37
+ "@mudah-cli/console": "^0.9.4",
38
+ "@mudah-cli/core": "^0.9.4",
39
+ "@mudah-cli/terminal": "^0.9.4",
40
+ "@mudah-cli/tui": "^0.9.4",
41
+ "@mudah-cli/ui": "^0.9.4"
42
42
  },
43
43
  "publishConfig": {
44
44
  "access": "public"