@hivecommons/promptargs 0.7.0 → 0.8.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 (80) hide show
  1. package/README.md +100 -15
  2. package/dist/autodetect.js +24 -9
  3. package/dist/autodetect.js.map +1 -1
  4. package/dist/cli.js +51 -147
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands.d.ts +4 -0
  7. package/dist/commands.js +130 -0
  8. package/dist/commands.js.map +1 -0
  9. package/dist/flags.d.ts +14 -0
  10. package/dist/flags.js +57 -0
  11. package/dist/flags.js.map +1 -0
  12. package/dist/loader.d.ts +2 -0
  13. package/dist/loader.js +64 -11
  14. package/dist/loader.js.map +1 -1
  15. package/dist/log.d.ts +19 -0
  16. package/dist/log.js +41 -0
  17. package/dist/log.js.map +1 -0
  18. package/dist/parser.js +33 -7
  19. package/dist/parser.js.map +1 -1
  20. package/dist/resolver.d.ts +2 -0
  21. package/dist/resolver.js +60 -30
  22. package/dist/resolver.js.map +1 -1
  23. package/dist/status.d.ts +1 -1
  24. package/dist/status.js +5 -4
  25. package/dist/status.js.map +1 -1
  26. package/dist/ui.html +18 -5
  27. package/dist/ui.js +36 -11
  28. package/dist/ui.js.map +1 -1
  29. package/package.json +13 -4
  30. package/dist/autodetect.test.d.ts +0 -1
  31. package/dist/autodetect.test.js +0 -207
  32. package/dist/autodetect.test.js.map +0 -1
  33. package/dist/cli.test.d.ts +0 -1
  34. package/dist/cli.test.js +0 -310
  35. package/dist/cli.test.js.map +0 -1
  36. package/dist/index.test.d.ts +0 -1
  37. package/dist/index.test.js +0 -59
  38. package/dist/index.test.js.map +0 -1
  39. package/dist/iterate.test.d.ts +0 -1
  40. package/dist/iterate.test.js +0 -20
  41. package/dist/iterate.test.js.map +0 -1
  42. package/dist/loader.test.d.ts +0 -1
  43. package/dist/loader.test.js +0 -65
  44. package/dist/loader.test.js.map +0 -1
  45. package/dist/parser.test.d.ts +0 -1
  46. package/dist/parser.test.js +0 -93
  47. package/dist/parser.test.js.map +0 -1
  48. package/dist/resolver.test.d.ts +0 -1
  49. package/dist/resolver.test.js +0 -184
  50. package/dist/resolver.test.js.map +0 -1
  51. package/dist/sanitize.test.d.ts +0 -1
  52. package/dist/sanitize.test.js +0 -38
  53. package/dist/sanitize.test.js.map +0 -1
  54. package/dist/status.test.d.ts +0 -1
  55. package/dist/status.test.js +0 -33
  56. package/dist/status.test.js.map +0 -1
  57. package/dist/ui-bootstrap.test.d.ts +0 -1
  58. package/dist/ui-bootstrap.test.js +0 -479
  59. package/dist/ui-bootstrap.test.js.map +0 -1
  60. package/dist/ui-builder.test.d.ts +0 -1
  61. package/dist/ui-builder.test.js +0 -272
  62. package/dist/ui-builder.test.js.map +0 -1
  63. package/dist/ui-command-quoting.test.d.ts +0 -1
  64. package/dist/ui-command-quoting.test.js +0 -95
  65. package/dist/ui-command-quoting.test.js.map +0 -1
  66. package/dist/ui-harness.d.ts +0 -20
  67. package/dist/ui-harness.js +0 -40
  68. package/dist/ui-harness.js.map +0 -1
  69. package/dist/ui-harness.test.d.ts +0 -1
  70. package/dist/ui-harness.test.js +0 -30
  71. package/dist/ui-harness.test.js.map +0 -1
  72. package/dist/ui-inline.test.d.ts +0 -1
  73. package/dist/ui-inline.test.js +0 -90
  74. package/dist/ui-inline.test.js.map +0 -1
  75. package/dist/ui-interactions.test.d.ts +0 -1
  76. package/dist/ui-interactions.test.js +0 -489
  77. package/dist/ui-interactions.test.js.map +0 -1
  78. package/dist/ui.test.d.ts +0 -1
  79. package/dist/ui.test.js +0 -283
  80. package/dist/ui.test.js.map +0 -1
@@ -1,479 +0,0 @@
1
- import test, { mock } from 'node:test';
2
- import assert from 'node:assert';
3
- import { readFileSync } from 'node:fs';
4
- import { join, dirname } from 'node:path';
5
- import { fileURLToPath } from 'node:url';
6
- import { expand, parseVars, VAR_PATTERN } from './parser.js';
7
- import { cartesian, zip } from './iterate.js';
8
- import { compileInlineScript } from './ui-harness.js';
9
- /**
10
- * Behavior tests for the top-level wiring of ui.html's inline script: the
11
- * code that runs once when the page loads and connects the DOM to the
12
- * functions covered by ui-builder.test.ts and ui-interactions.test.ts.
13
- *
14
- * That wiring is the only part of the page no other suite reaches:
15
- * - the init sequence (renderPresets + loadPreset(PRESETS[0]))
16
- * - the template `input`, "+ add variable", mode and cheatsheet handlers
17
- * - the Copy button (clipboard text, "Copied" feedback and its revert)
18
- * - the `window.__PROMPTARGS_ENV__` section: git chips, the lazy terminal
19
- * toggle and the hide/show decisions for each group
20
- *
21
- * The whole IIFE body is extracted verbatim and run against a stub DOM.
22
- * Timers are mocked so the 120ms debounce and the 1.5s "Copied" revert are
23
- * driven deterministically.
24
- */
25
- const __dirname = dirname(fileURLToPath(import.meta.url));
26
- const uiHtml = readFileSync(join(__dirname, 'ui.html'), 'utf-8');
27
- function extractIifeBody() {
28
- const open = '(function () {';
29
- const start = uiHtml.indexOf(open);
30
- assert.notEqual(start, -1, 'ui.html inline script IIFE not found');
31
- const close = '\n})();';
32
- const end = uiHtml.indexOf(close, start);
33
- assert.notEqual(end, -1, 'ui.html inline script IIFE is not terminated');
34
- return uiHtml.slice(start + open.length, end);
35
- }
36
- const iifeBody = extractIifeBody();
37
- class ClassList {
38
- set = new Set();
39
- add(c) { this.set.add(c); }
40
- remove(c) { this.set.delete(c); }
41
- contains(c) { return this.set.has(c); }
42
- toggle(c, force) {
43
- const on = force === undefined ? !this.set.has(c) : force;
44
- if (on)
45
- this.set.add(c);
46
- else
47
- this.set.delete(c);
48
- return on;
49
- }
50
- }
51
- function decodeEntities(s) {
52
- return s.replace(/&quot;/g, '"').replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&amp;/g, '&');
53
- }
54
- class FakeElement {
55
- tag;
56
- id;
57
- className = '';
58
- type = '';
59
- title = '';
60
- _html = '';
61
- _text = '';
62
- get innerHTML() { return this._html; }
63
- /** Like a browser, setting innerHTML also replaces textContent. */
64
- set innerHTML(html) {
65
- this._html = html;
66
- this._text = decodeEntities(html.replace(/<[^>]*>/g, ''));
67
- }
68
- get textContent() { return this._text; }
69
- set textContent(t) { this._text = t; this._html = t; }
70
- dataset = {};
71
- classList = new ClassList();
72
- style = {};
73
- children = [];
74
- handlers = new Map();
75
- constructor(tag, id = '') {
76
- this.tag = tag;
77
- this.id = id;
78
- }
79
- addEventListener(event, fn) {
80
- const list = this.handlers.get(event) ?? [];
81
- list.push(fn);
82
- this.handlers.set(event, list);
83
- }
84
- fire(event) {
85
- for (const fn of this.handlers.get(event) ?? [])
86
- fn();
87
- }
88
- appendChild(child) { this.children.push(child); }
89
- querySelectorAll(sel) {
90
- const cls = sel.replace(/^\./, '');
91
- return this.children.filter(c => c.className.split(/\s+/).includes(cls));
92
- }
93
- }
94
- /** Reads `value="..."` from the first element whose class list contains `cls`. */
95
- function attrValue(html, cls) {
96
- const re = new RegExp(`class="[^"]*\\b${cls}\\b[^"]*"\\s+value="([^"]*)"`);
97
- const m = html.match(re);
98
- assert.ok(m, `no .${cls} with a value attribute in: ${html}`);
99
- return decodeEntities(m[1]);
100
- }
101
- class FakeInput extends FakeElement {
102
- value;
103
- constructor(value) {
104
- super('input');
105
- this.value = value;
106
- }
107
- }
108
- class FakeRow extends FakeElement {
109
- nameInput;
110
- valuesInput;
111
- sourceSelect;
112
- rmBtn = new FakeElement('button');
113
- insertBtn = new FakeElement('button');
114
- parent = null;
115
- constructor() { super('tr'); }
116
- get innerHTML() { return this._html; }
117
- set innerHTML(html) {
118
- this._html = html;
119
- this.nameInput = new FakeInput(attrValue(html, 'var-name'));
120
- this.valuesInput = new FakeInput(attrValue(html, 'var-values'));
121
- const selected = html.match(/<option value="(\w+)" selected>/);
122
- this.sourceSelect = new FakeInput(selected ? selected[1] : 'manual');
123
- }
124
- querySelector(sel) {
125
- switch (sel) {
126
- case '.var-name': return this.nameInput;
127
- case '.var-values': return this.valuesInput;
128
- case '.var-source': return this.sourceSelect;
129
- case '.rm-btn': return this.rmBtn;
130
- case '.insert-btn': return this.insertBtn;
131
- default: assert.fail(`unexpected row selector ${sel}`);
132
- }
133
- }
134
- querySelectorAll(sel) {
135
- assert.equal(sel, 'input, select');
136
- return [this.nameInput, this.valuesInput, this.sourceSelect];
137
- }
138
- remove() { this.parent?.detach(this); }
139
- }
140
- class FakeTableBody extends FakeElement {
141
- rows = [];
142
- constructor() { super('tbody', 'var-body'); }
143
- get innerHTML() { return ''; }
144
- set innerHTML(html) {
145
- assert.equal(html, '', 'ui.html only ever clears var-body');
146
- this.rows = [];
147
- }
148
- appendChild(child) {
149
- assert.ok(child instanceof FakeRow);
150
- child.parent = this;
151
- this.rows.push(child);
152
- }
153
- querySelectorAll(sel) {
154
- assert.equal(sel, 'tr');
155
- return [...this.rows];
156
- }
157
- detach(row) { this.rows = this.rows.filter(r => r !== row); }
158
- }
159
- class FakeTextarea extends FakeElement {
160
- value = '';
161
- selectionStart = 0;
162
- selectionEnd = 0;
163
- focused = false;
164
- constructor() { super('textarea', 'tmpl'); }
165
- setSelectionRange(start, end) {
166
- this.selectionStart = start;
167
- this.selectionEnd = end;
168
- }
169
- focus() { this.focused = true; }
170
- }
171
- /** Builds the stub DOM with the same ids/classes/initial styles as ui.html and runs the page script. */
172
- function loadPage(env) {
173
- const tmpl = new FakeTextarea();
174
- const varBody = new FakeTableBody();
175
- const addBtn = new FakeElement('button', 'add-var');
176
- const presetGrid = new FakeElement('div', 'preset-grid');
177
- const previewBody = new FakeElement('div', 'preview-body');
178
- const previewCount = new FakeElement('span', 'preview-count');
179
- const cliText = new FakeElement('code', 'cli-text');
180
- const copyBtn = new FakeElement('button', 'copy-btn');
181
- copyBtn.textContent = 'Copy';
182
- const modeDesc = new FakeElement('span', 'mode-desc');
183
- const envSection = new FakeElement('div', 'env-section');
184
- envSection.style.display = 'none';
185
- const envGit = new FakeElement('div', 'env-git');
186
- const envTerminal = new FakeElement('div', 'env-terminal');
187
- const envGitGroup = new FakeElement('div', 'env-git-group');
188
- const envTerminalGroup = new FakeElement('div', 'env-terminal-group');
189
- envTerminalGroup.style.display = 'none';
190
- const envToggle = new FakeElement('button', 'env-toggle');
191
- envToggle.style.display = 'none';
192
- envToggle.textContent = 'Show terminal env';
193
- const cheatsheet = new FakeElement('div', 'cheatsheet');
194
- const cheatsheetToggle = new FakeElement('button', 'cheatsheet-toggle');
195
- const modeButtons = ['zip', 'cross'].map(m => {
196
- const b = new FakeElement('button');
197
- b.className = 'mode-btn';
198
- b.dataset.mode = m;
199
- if (m === 'zip')
200
- b.classList.add('active');
201
- return b;
202
- });
203
- const byId = {};
204
- for (const el of [
205
- tmpl, varBody, addBtn, presetGrid, previewBody, previewCount, cliText, copyBtn, modeDesc,
206
- envSection, envGit, envTerminal, envGitGroup, envTerminalGroup, envToggle, cheatsheet, cheatsheetToggle,
207
- ])
208
- byId[el.id] = el;
209
- const document = {
210
- getElementById(id) {
211
- const el = byId[id];
212
- assert.ok(el, `ui.html references unknown element #${id}`);
213
- return el;
214
- },
215
- createElement(tag) {
216
- return tag === 'tr' ? new FakeRow() : new FakeElement(tag);
217
- },
218
- querySelectorAll(sel) {
219
- assert.equal(sel, '.mode-btn');
220
- return modeButtons;
221
- },
222
- };
223
- const clipboard = [];
224
- const navigator = {
225
- clipboard: {
226
- writeText(text) { clipboard.push(text); return Promise.resolve(); },
227
- },
228
- };
229
- const window = env === undefined ? {} : { __PROMPTARGS_ENV__: env };
230
- const run = compileInlineScript('ui-bootstrap', [
231
- 'document', 'window', 'navigator',
232
- 'parseVars', 'sharedExpand', 'VAR_PATTERN', 'sharedCartesian', 'sharedZip',
233
- ], iifeBody);
234
- run(document, window, navigator, parseVars, expand, VAR_PATTERN, cartesian, zip);
235
- return {
236
- tmpl, varBody, addBtn, presetGrid, previewBody, previewCount, cliText, copyBtn, modeDesc, modeButtons,
237
- envSection, envGit, envTerminal, envGitGroup, envTerminalGroup, envToggle, cheatsheet, cheatsheetToggle,
238
- clipboard,
239
- rowData: () => varBody.rows.map(r => [r.nameInput.value, r.valuesInput.value, r.sourceSelect.value]),
240
- cli: () => cliText.innerHTML.replace(/^<span class="dollar">\$<\/span>/, ''),
241
- chips: () => presetGrid.children,
242
- activeChips: () => presetGrid.children.filter(c => c.classList.contains('active')).map(c => c.dataset.preset),
243
- };
244
- }
245
- const DEBOUNCE_MS = 120;
246
- const COPIED_REVERT_MS = 1500;
247
- test.beforeEach(() => { mock.timers.enable({ apis: ['setTimeout'] }); });
248
- test.afterEach(() => { mock.timers.reset(); });
249
- // --- init --------------------------------------------------------------------
250
- test('page load renders every preset chip and loads the first preset', () => {
251
- const p = loadPage();
252
- const presetsStart = uiHtml.indexOf('const PRESETS = [');
253
- const presetsEnd = uiHtml.indexOf('\n ];', presetsStart);
254
- const presetCount = (uiHtml.slice(presetsStart, presetsEnd).match(/^\s+name: '/gm) ?? []).length;
255
- assert.ok(presetCount > 1, 'ui.html defines several presets');
256
- assert.equal(p.chips().length, presetCount);
257
- assert.deepEqual(p.activeChips(), [p.chips()[0].dataset.preset]);
258
- assert.ok(p.tmpl.value.includes('{{'), 'first preset template is in the textarea');
259
- assert.ok(p.rowData().length > 0, 'first preset variables are in the table');
260
- assert.ok(p.rowData().every(([, v]) => v !== ''), 'first preset fills every variable');
261
- assert.ok(p.cli().startsWith('promptargs'));
262
- assert.ok(!p.previewBody.innerHTML.includes('class="unfilled"'));
263
- const firstMode = uiHtml.slice(presetsStart, presetsEnd).match(/mode: '(\w+)'/)[1];
264
- assert.equal(p.modeDesc.textContent, firstMode === 'zip' ? 'Arrays pair up 1:1' : 'Every combination of every value');
265
- assert.deepEqual(p.modeButtons.map(b => b.classList.contains('active')), [firstMode === 'zip', firstMode === 'cross']);
266
- });
267
- test('page load without __PROMPTARGS_ENV__ leaves the env section hidden and unwired', () => {
268
- const p = loadPage();
269
- assert.equal(p.envSection.style.display, 'none');
270
- assert.equal(p.envToggle.style.display, 'none');
271
- assert.equal(p.envGit.children.length, 0);
272
- assert.equal(p.envToggle.handlers.size, 0);
273
- });
274
- // --- template input ----------------------------------------------------------
275
- test('editing the template deactivates the preset chip and resyncs rows after the debounce', () => {
276
- const p = loadPage();
277
- assert.equal(p.activeChips().length, 1);
278
- p.tmpl.value += ' and {{extra}}';
279
- p.tmpl.fire('input');
280
- assert.deepEqual(p.activeChips(), []);
281
- assert.ok(!p.rowData().some(([n]) => n === 'extra'), 'rows sync on the debounce, not synchronously');
282
- mock.timers.tick(DEBOUNCE_MS - 1);
283
- assert.ok(!p.rowData().some(([n]) => n === 'extra'));
284
- mock.timers.tick(1);
285
- assert.ok(p.rowData().some(([n]) => n === 'extra'));
286
- assert.ok(p.previewBody.innerHTML.includes('<span class="unfilled">{{extra}}</span>'));
287
- });
288
- test('rapid template edits collapse into one debounced update', () => {
289
- const p = loadPage();
290
- p.tmpl.value = 'A {{one}}';
291
- p.tmpl.fire('input');
292
- mock.timers.tick(DEBOUNCE_MS / 2);
293
- p.tmpl.value = 'A {{one}} {{two}}';
294
- p.tmpl.fire('input');
295
- mock.timers.tick(DEBOUNCE_MS / 2);
296
- const before = p.rowData().map(([n]) => n);
297
- assert.ok(!before.includes('one') && !before.includes('two'), 'first timer was cancelled by the second edit');
298
- mock.timers.tick(DEBOUNCE_MS / 2);
299
- const after = p.rowData().map(([n]) => n);
300
- assert.ok(after.includes('one') && after.includes('two'));
301
- });
302
- // --- add variable ------------------------------------------------------------
303
- test('"+ add variable" appends an empty manual row without rendering', () => {
304
- const p = loadPage();
305
- const n = p.rowData().length;
306
- const cliBefore = p.cli();
307
- p.addBtn.fire('click');
308
- assert.equal(p.rowData().length, n + 1);
309
- assert.deepEqual(p.rowData()[n], ['', '', 'manual']);
310
- assert.equal(p.cli(), cliBefore, 'an unnamed row changes nothing until it is filled in');
311
- });
312
- test('a row\'s insert button inserts {{name}} at the caret; an unnamed row inserts nothing', () => {
313
- const p = loadPage();
314
- const [first] = p.rowData();
315
- const end = p.tmpl.value.length;
316
- p.tmpl.setSelectionRange(end, end);
317
- p.varBody.rows[0].insertBtn.fire('click');
318
- assert.ok(p.tmpl.value.endsWith(`{{${first[0]}}}`));
319
- assert.deepEqual(p.activeChips(), []);
320
- p.addBtn.fire('click');
321
- const after = p.tmpl.value;
322
- p.varBody.rows[p.varBody.rows.length - 1].insertBtn.fire('click');
323
- assert.equal(p.tmpl.value, after);
324
- });
325
- test('clearing the template renders the empty-state preview and a bare command', () => {
326
- const p = loadPage();
327
- p.tmpl.value = ' ';
328
- p.tmpl.fire('input');
329
- mock.timers.tick(DEBOUNCE_MS);
330
- assert.ok(p.previewBody.innerHTML.includes('Type a template above'));
331
- assert.equal(p.previewCount.textContent, '0 results');
332
- assert.equal(p.previewCount.className, 'preview-count empty');
333
- assert.equal(p.cli(), 'promptargs');
334
- });
335
- test('editing a row to a glob or @file source re-renders with the matching command syntax', () => {
336
- const p = loadPage();
337
- for (const r of [...p.varBody.rows])
338
- r.rmBtn.fire('click');
339
- p.tmpl.value = 'Review {{files}} against {{spec}}';
340
- p.tmpl.fire('input');
341
- mock.timers.tick(DEBOUNCE_MS);
342
- const rows = p.varBody.rows;
343
- assert.deepEqual(rows.map(r => r.nameInput.value), ['files', 'spec']);
344
- const files = rows.find(r => r.nameInput.value === 'files');
345
- const spec = rows.find(r => r.nameInput.value === 'spec');
346
- files.valuesInput.value = 'src/*.go';
347
- files.sourceSelect.value = 'glob';
348
- spec.valuesInput.value = 'docs/spec.md';
349
- spec.sourceSelect.value = 'file';
350
- files.sourceSelect.fire('input');
351
- spec.valuesInput.fire('input');
352
- mock.timers.tick(DEBOUNCE_MS);
353
- assert.equal(p.previewCount.textContent, '1 result');
354
- assert.ok(p.previewBody.innerHTML.includes('Review src/*.go against docs/spec.md'));
355
- assert.equal(p.cli(), 'promptargs "Review {{files}} against {{spec}}" --files="src/*.go" --spec=@docs/spec.md');
356
- });
357
- // --- mode buttons ------------------------------------------------------------
358
- test('mode buttons switch mode, active class, description and re-render immediately', () => {
359
- const p = loadPage();
360
- // Two array variables so that cross and zip produce different commands.
361
- p.tmpl.value = '{{a}} {{b}}';
362
- p.tmpl.fire('input');
363
- for (const row of [...p.varBody.rows])
364
- row.rmBtn.fire('click');
365
- mock.timers.tick(DEBOUNCE_MS);
366
- assert.deepEqual(p.rowData().map(([n]) => n), ['a', 'b']);
367
- for (const row of p.varBody.rows)
368
- row.valuesInput.value = row.nameInput.value === 'a' ? '1,2' : 'x,y';
369
- const [zipBtn, crossBtn] = p.modeButtons;
370
- crossBtn.fire('click');
371
- assert.deepEqual(p.modeButtons.map(b => b.classList.contains('active')), [false, true]);
372
- assert.equal(p.modeDesc.textContent, 'Every combination of every value');
373
- assert.ok(p.cli().endsWith(' --cross'), p.cli());
374
- assert.equal(p.previewCount.textContent, '4 results');
375
- zipBtn.fire('click');
376
- assert.deepEqual(p.modeButtons.map(b => b.classList.contains('active')), [true, false]);
377
- assert.equal(p.modeDesc.textContent, 'Arrays pair up 1:1');
378
- assert.ok(!p.cli().includes('--cross'));
379
- assert.equal(p.previewCount.textContent, '2 results');
380
- });
381
- // --- copy button -------------------------------------------------------------
382
- test('Copy writes the command without the "$ " prompt and shows "Copied" for 1.5s', async () => {
383
- const p = loadPage();
384
- p.copyBtn.fire('click');
385
- await Promise.resolve();
386
- assert.deepEqual(p.clipboard, [p.cliText.textContent.replace(/^\$\s*/, '')]);
387
- assert.ok(p.clipboard[0].startsWith('promptargs '));
388
- assert.ok(!p.clipboard[0].startsWith('$'));
389
- assert.equal(p.copyBtn.textContent, 'Copied');
390
- assert.ok(p.copyBtn.classList.contains('copied'));
391
- mock.timers.tick(COPIED_REVERT_MS - 1);
392
- assert.equal(p.copyBtn.textContent, 'Copied');
393
- mock.timers.tick(1);
394
- assert.equal(p.copyBtn.textContent, 'Copy');
395
- assert.ok(!p.copyBtn.classList.contains('copied'));
396
- });
397
- test('Copy yields the shell-quoted command, so multi-word preset values survive paste (#86)', async () => {
398
- const p = loadPage();
399
- const multiWord = p.chips().find(c => {
400
- p.tmpl.value = '';
401
- c.fire('click');
402
- return p.rowData().some(([, v]) => /\s/.test(v) && !v.includes(','));
403
- });
404
- assert.ok(multiWord, 'a preset with a multi-word scalar value exists');
405
- const [, value] = p.rowData().find(([, v]) => /\s/.test(v) && !v.includes(','));
406
- p.copyBtn.fire('click');
407
- await Promise.resolve();
408
- assert.ok(p.clipboard[0].includes(`='${value}'`), `${p.clipboard[0]} quotes ${value}`);
409
- assert.ok(!p.clipboard[0].includes('&quot;') && !p.clipboard[0].includes('&amp;'), 'clipboard text is not HTML');
410
- });
411
- // --- cheatsheet --------------------------------------------------------------
412
- test('cheatsheet toggle flips the open class on each click', () => {
413
- const p = loadPage();
414
- assert.ok(!p.cheatsheet.classList.contains('open'));
415
- p.cheatsheetToggle.fire('click');
416
- assert.ok(p.cheatsheet.classList.contains('open'));
417
- p.cheatsheetToggle.fire('click');
418
- assert.ok(!p.cheatsheet.classList.contains('open'));
419
- });
420
- // --- env section -------------------------------------------------------------
421
- test('env payload with only empty values keeps the whole section hidden', () => {
422
- const p = loadPage({ git: { branch: '' }, terminal: { USER: '' } });
423
- assert.equal(p.envSection.style.display, 'none');
424
- assert.equal(p.envGitGroup.style.display, 'none', 'empty git group is hidden');
425
- assert.equal(p.envToggle.style.display, 'none');
426
- assert.equal(p.envGit.children.length, 0);
427
- });
428
- test('git entries render as chips eagerly; without terminal entries the toggle stays hidden', () => {
429
- const p = loadPage({ git: { branch: 'main', repo: 'org/r', dirty: '' } });
430
- assert.equal(p.envSection.style.display, '');
431
- assert.notEqual(p.envGitGroup.style.display, 'none');
432
- assert.deepEqual(p.envGit.children.map(c => c.title), [
433
- 'Click to insert {{branch}} at cursor',
434
- 'Click to insert {{repo}} at cursor',
435
- ]);
436
- assert.equal(p.envToggle.style.display, 'none');
437
- assert.equal(p.envTerminalGroup.style.display, 'none');
438
- assert.equal(p.envTerminal.children.length, 0);
439
- });
440
- test('a git chip click inserts {{key}} into the template and deactivates the preset', () => {
441
- const p = loadPage({ git: { branch: 'main' } });
442
- const end = p.tmpl.value.length;
443
- p.tmpl.setSelectionRange(end, end);
444
- p.envGit.children[0].fire('click');
445
- assert.ok(p.tmpl.value.endsWith('{{branch}}'));
446
- assert.deepEqual(p.activeChips(), []);
447
- mock.timers.tick(DEBOUNCE_MS);
448
- assert.ok(p.rowData().some(([n]) => n === 'branch'));
449
- });
450
- test('terminal entries hide the git group, show a counted toggle and render chips lazily once', () => {
451
- const p = loadPage({ terminal: { USER: 'dev', SHELL: '/bin/zsh', EMPTY: '' } });
452
- assert.equal(p.envSection.style.display, '');
453
- assert.equal(p.envGitGroup.style.display, 'none');
454
- assert.equal(p.envToggle.style.display, '');
455
- assert.equal(p.envToggle.textContent, 'Show terminal env (2 vars)');
456
- assert.equal(p.envTerminal.children.length, 0, 'terminal chips are not rendered until requested');
457
- p.envToggle.fire('click');
458
- assert.equal(p.envTerminalGroup.style.display, '');
459
- assert.equal(p.envToggle.textContent, 'Hide terminal env');
460
- assert.equal(p.envTerminal.children.length, 2);
461
- const rendered = p.envTerminal.children;
462
- p.envToggle.fire('click');
463
- assert.equal(p.envTerminalGroup.style.display, 'none');
464
- assert.equal(p.envToggle.textContent, 'Show terminal env (2 vars)');
465
- p.envToggle.fire('click');
466
- assert.equal(p.envTerminalGroup.style.display, '');
467
- assert.deepEqual(p.envTerminal.children, rendered, 'chips are rendered once, not duplicated on re-show');
468
- });
469
- test('both git and terminal entries render independently', () => {
470
- const p = loadPage({ git: { branch: 'main' }, terminal: { USER: 'dev' } });
471
- assert.equal(p.envSection.style.display, '');
472
- assert.notEqual(p.envGitGroup.style.display, 'none');
473
- assert.equal(p.envGit.children.length, 1);
474
- assert.equal(p.envToggle.textContent, 'Show terminal env (1 vars)');
475
- p.envToggle.fire('click');
476
- assert.equal(p.envTerminal.children.length, 1);
477
- assert.ok(p.envTerminal.children[0].innerHTML.includes('<span class="env-val">dev</span>'));
478
- });
479
- //# sourceMappingURL=ui-bootstrap.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui-bootstrap.test.js","sourceRoot":"","sources":["../src/ui-bootstrap.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};