@crowdstrike/glide-core 0.8.0 → 0.9.1
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/dist/accordion.d.ts +7 -3
- package/dist/button-group.button.d.ts +12 -16
- package/dist/button-group.button.js +1 -1
- package/dist/button-group.button.styles.js +76 -52
- package/dist/button-group.button.test.basics.d.ts +1 -1
- package/dist/button-group.button.test.basics.js +83 -147
- package/dist/button-group.button.test.events.js +8 -67
- package/dist/button-group.button.test.focus.js +13 -0
- package/dist/button-group.button.test.interactions.d.ts +1 -0
- package/dist/button-group.button.test.interactions.js +42 -0
- package/dist/button-group.d.ts +10 -10
- package/dist/button-group.js +1 -1
- package/dist/button-group.stories.d.ts +1 -5
- package/dist/button-group.styles.js +18 -6
- package/dist/button-group.test.basics.js +113 -234
- package/dist/button-group.test.events.js +210 -263
- package/dist/button-group.test.focus.d.ts +1 -0
- package/dist/button-group.test.focus.js +39 -0
- package/dist/button-group.test.interactions.d.ts +1 -0
- package/dist/button-group.test.interactions.js +91 -0
- package/dist/button.d.ts +3 -0
- package/dist/button.test.basics.js +1 -1
- package/dist/checkbox-group.d.ts +6 -2
- package/dist/checkbox-group.js +1 -1
- package/dist/checkbox-group.stories.d.ts +1 -1
- package/dist/checkbox-group.styles.js +1 -1
- package/dist/checkbox-group.test.basics.js +1 -1
- package/dist/checkbox-group.test.events.js +4 -4
- package/dist/checkbox-group.test.focus.js +4 -3
- package/dist/checkbox.d.ts +12 -5
- package/dist/checkbox.js +1 -1
- package/dist/checkbox.stories.d.ts +1 -1
- package/dist/checkbox.styles.js +10 -0
- package/dist/checkbox.test.basics.js +15 -6
- package/dist/checkbox.test.events.js +16 -8
- package/dist/checkbox.test.focus.js +3 -3
- package/dist/checkbox.test.form.js +1 -0
- package/dist/checkbox.test.interactions.js +123 -0
- package/dist/drawer.d.ts +5 -5
- package/dist/drawer.js +1 -1
- package/dist/drawer.stories.d.ts +0 -1
- package/dist/dropdown.d.ts +9 -6
- package/dist/dropdown.js +1 -1
- package/dist/dropdown.option.d.ts +6 -2
- package/dist/dropdown.option.js +1 -1
- package/dist/dropdown.option.styles.js +13 -0
- package/dist/dropdown.option.test.basics.js +6 -3
- package/dist/dropdown.option.test.events.js +1 -1
- package/dist/dropdown.option.test.focus.js +1 -1
- package/dist/dropdown.option.test.interactions.multiple.js +1 -54
- package/dist/dropdown.option.test.interactions.single.js +51 -9
- package/dist/dropdown.styles.js +20 -19
- package/dist/dropdown.test.basics.js +143 -2
- package/dist/dropdown.test.basics.multiple.js +5 -2
- package/dist/dropdown.test.events.filterable.js +74 -0
- package/dist/dropdown.test.events.js +49 -160
- package/dist/dropdown.test.events.multiple.js +265 -8
- package/dist/dropdown.test.events.single.js +199 -2
- package/dist/dropdown.test.focus.filterable.js +9 -5
- package/dist/dropdown.test.focus.js +1 -1
- package/dist/dropdown.test.focus.multiple.js +1 -1
- package/dist/dropdown.test.focus.single.js +1 -1
- package/dist/dropdown.test.interactions.filterable.js +68 -11
- package/dist/dropdown.test.interactions.js +94 -5
- package/dist/dropdown.test.interactions.multiple.js +202 -5
- package/dist/dropdown.test.interactions.single.js +68 -6
- package/dist/form-controls-layout.test.basics.js +1 -1
- package/dist/icon-button.d.ts +2 -0
- package/dist/icon-button.test.basics.js +1 -1
- package/dist/icons/checked.d.ts +1 -1
- package/dist/icons/checked.js +1 -1
- package/dist/icons/magnifying-glass.js +1 -1
- package/dist/input.d.ts +4 -9
- package/dist/input.js +1 -1
- package/dist/input.styles.js +7 -2
- package/dist/input.test.basics.js +19 -5
- package/dist/input.test.events.js +4 -4
- package/dist/input.test.focus.js +4 -4
- package/dist/input.test.translations.d.ts +1 -0
- package/dist/input.test.translations.js +38 -0
- package/dist/input.test.validity.js +133 -4
- package/dist/label.d.ts +1 -1
- package/dist/label.js +1 -1
- package/dist/label.styles.js +25 -13
- package/dist/label.test.basics.js +26 -24
- package/dist/library/expect-argument-error.js +1 -1
- package/dist/library/localize.d.ts +4 -1
- package/dist/menu.d.ts +3 -5
- package/dist/menu.js +1 -1
- package/dist/menu.options.test.basics.js +2 -2
- package/dist/menu.styles.js +1 -15
- package/dist/menu.test.basics.d.ts +1 -2
- package/dist/menu.test.basics.js +22 -6
- package/dist/menu.test.events.js +197 -7
- package/dist/menu.test.focus.d.ts +1 -0
- package/dist/menu.test.focus.js +13 -6
- package/dist/menu.test.interactions.js +214 -58
- package/dist/modal.icon-button.test.basics.js +1 -1
- package/dist/modal.js +1 -1
- package/dist/modal.stories.d.ts +1 -0
- package/dist/modal.styles.js +18 -13
- package/dist/modal.tertiary-icon.d.ts +0 -1
- package/dist/modal.tertiary-icon.js +1 -1
- package/dist/modal.tertiary-icon.test.basics.js +3 -3
- package/dist/modal.test.basics.js +1 -1
- package/dist/modal.test.events.js +10 -10
- package/dist/radio-group.d.ts +4 -3
- package/dist/radio-group.js +1 -1
- package/dist/radio-group.stories.d.ts +1 -1
- package/dist/radio-group.styles.js +1 -1
- package/dist/radio-group.test.focus.js +3 -3
- package/dist/radio.d.ts +2 -2
- package/dist/radio.js +1 -1
- package/dist/radio.styles.js +33 -0
- package/dist/split-container.d.ts +1 -1
- package/dist/split-container.test.basics.js +4 -0
- package/dist/split-link.test.interactions.js +1 -1
- package/dist/status-indicator.d.ts +1 -1
- package/dist/styles/variables.css +1 -1
- package/dist/tab.d.ts +1 -1
- package/dist/tab.group.js +1 -1
- package/dist/tab.group.test.basics.js +1 -1
- package/dist/tab.group.test.interactions.js +198 -2
- package/dist/tab.js +1 -1
- package/dist/tab.panel.d.ts +1 -0
- package/dist/tab.panel.js +1 -1
- package/dist/tab.panel.styles.js +11 -1
- package/dist/tabs.stories.d.ts +1 -0
- package/dist/tag.d.ts +3 -6
- package/dist/tag.test.basics.js +2 -2
- package/dist/textarea.d.ts +4 -4
- package/dist/textarea.js +2 -2
- package/dist/textarea.stories.d.ts +3 -4
- package/dist/textarea.styles.js +14 -3
- package/dist/textarea.test.basics.js +80 -44
- package/dist/textarea.test.events.js +56 -41
- package/dist/textarea.test.translations.d.ts +1 -0
- package/dist/textarea.test.translations.js +34 -0
- package/dist/textarea.test.validity.js +104 -20
- package/dist/toasts.js +1 -1
- package/dist/toasts.styles.js +8 -1
- package/dist/toasts.test.basics.js +20 -0
- package/dist/toggle.d.ts +3 -3
- package/dist/toggle.js +1 -1
- package/dist/toggle.stories.d.ts +1 -1
- package/dist/toggle.test.focus.js +1 -1
- package/dist/toggle.test.interactions.d.ts +1 -0
- package/dist/{toggle.test.states.js → toggle.test.interactions.js} +26 -0
- package/dist/tooltip.d.ts +9 -7
- package/dist/tooltip.js +1 -1
- package/dist/tooltip.styles.js +90 -25
- package/dist/tooltip.test.basics.js +38 -3
- package/dist/tooltip.test.interactions.js +136 -34
- package/dist/translations/en.js +1 -1
- package/dist/translations/fr.js +1 -1
- package/dist/translations/ja.js +1 -1
- package/dist/tree.d.ts +1 -2
- package/dist/tree.item.d.ts +1 -5
- package/dist/tree.item.icon-button.d.ts +1 -0
- package/dist/tree.item.icon-button.js +1 -1
- package/dist/tree.item.icon-button.test.basics.js +9 -0
- package/dist/tree.item.js +1 -1
- package/dist/tree.item.menu.d.ts +2 -1
- package/dist/tree.item.menu.js +1 -1
- package/dist/tree.item.menu.test.basics.js +15 -0
- package/dist/tree.item.styles.js +2 -0
- package/dist/tree.item.test.basics.d.ts +2 -1
- package/dist/tree.item.test.basics.js +46 -4
- package/dist/tree.js +1 -1
- package/dist/tree.test.basics.js +1 -1
- package/dist/tree.test.focus.js +91 -4
- package/package.json +3 -4
- package/dist/checkbox.test.states.js +0 -63
- package/dist/drawer.test.floating-components.d.ts +0 -1
- package/dist/drawer.test.floating-components.js +0 -52
- package/dist/library/set-containing-block.d.ts +0 -15
- package/dist/library/set-containing-block.js +0 -1
- package/dist/modal.test.floating-components.js +0 -63
- /package/dist/{checkbox.test.states.d.ts → button-group.button.test.focus.d.ts} +0 -0
- /package/dist/{modal.test.floating-components.d.ts → checkbox.test.interactions.d.ts} +0 -0
- /package/dist/{toggle.test.states.d.ts → dropdown.test.events.filterable.d.ts} +0 -0
@@ -1,7 +1,7 @@
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
2
|
import './dropdown.option.js';
|
3
3
|
import { ArgumentError } from 'ow';
|
4
|
-
import { expect, fixture, html } from '@open-wc/testing';
|
4
|
+
import { aTimeout, assert, expect, fixture, html } from '@open-wc/testing';
|
5
5
|
import { repeat } from 'lit/directives/repeat.js';
|
6
6
|
import GlideCoreDropdown from './dropdown.js';
|
7
7
|
import expectArgumentError from './library/expect-argument-error.js';
|
@@ -42,6 +42,36 @@ it('has defaults', async () => {
|
|
42
42
|
// Not reflected, so no attribute assertion is necessary.
|
43
43
|
expect(component.value).to.deep.equal([]);
|
44
44
|
});
|
45
|
+
it('can be open', async () => {
|
46
|
+
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
47
|
+
<glide-core-dropdown-option
|
48
|
+
label="Label"
|
49
|
+
value="value"
|
50
|
+
selected
|
51
|
+
></glide-core-dropdown-option>
|
52
|
+
</glide-core-dropdown>`);
|
53
|
+
// Wait for it to open.
|
54
|
+
await aTimeout(0);
|
55
|
+
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
56
|
+
expect(component.open).to.be.true;
|
57
|
+
expect(component.hasAttribute('open')).to.be.true;
|
58
|
+
expect(options?.checkVisibility()).to.be.true;
|
59
|
+
});
|
60
|
+
it('cannot be open when disabled', async () => {
|
61
|
+
const component = await fixture(html `<glide-core-dropdown
|
62
|
+
label="Label"
|
63
|
+
placeholder="Placeholder"
|
64
|
+
open
|
65
|
+
disabled
|
66
|
+
>
|
67
|
+
<glide-core-dropdown-option
|
68
|
+
label="Label"
|
69
|
+
value="value"
|
70
|
+
></glide-core-dropdown-option>
|
71
|
+
</glide-core-dropdown>`);
|
72
|
+
const options = component?.shadowRoot?.querySelector('[data-test="options"]');
|
73
|
+
expect(options?.checkVisibility()).to.be.false;
|
74
|
+
});
|
45
75
|
it('can have a label', async () => {
|
46
76
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
47
77
|
<glide-core-dropdown-option
|
@@ -208,6 +238,117 @@ it('activates the last selected option when options are initially selected', asy
|
|
208
238
|
expect(options[1]?.privateActive).to.be.false;
|
209
239
|
expect(options[2]?.privateActive).to.be.true;
|
210
240
|
});
|
241
|
+
it('is scrollable', async () => {
|
242
|
+
const component = await fixture(html `<glide-core-dropdown open>
|
243
|
+
<glide-core-dropdown-option
|
244
|
+
label="One"
|
245
|
+
value="one"
|
246
|
+
></glide-core-dropdown-option>
|
247
|
+
|
248
|
+
<glide-core-dropdown-option
|
249
|
+
label="Two"
|
250
|
+
value="two"
|
251
|
+
></glide-core-dropdown-option>
|
252
|
+
|
253
|
+
<glide-core-dropdown-option
|
254
|
+
label="Three"
|
255
|
+
value="three"
|
256
|
+
></glide-core-dropdown-option>
|
257
|
+
|
258
|
+
<glide-core-dropdown-option
|
259
|
+
label="Four"
|
260
|
+
value="four"
|
261
|
+
></glide-core-dropdown-option>
|
262
|
+
|
263
|
+
<glide-core-dropdown-option
|
264
|
+
label="Five"
|
265
|
+
value="five"
|
266
|
+
></glide-core-dropdown-option>
|
267
|
+
|
268
|
+
<glide-core-dropdown-option
|
269
|
+
label="Six"
|
270
|
+
value="six"
|
271
|
+
></glide-core-dropdown-option>
|
272
|
+
|
273
|
+
<glide-core-dropdown-option
|
274
|
+
label="Seven"
|
275
|
+
value="seven"
|
276
|
+
></glide-core-dropdown-option>
|
277
|
+
|
278
|
+
<glide-core-dropdown-option
|
279
|
+
label="Eight"
|
280
|
+
value="eight"
|
281
|
+
></glide-core-dropdown-option>
|
282
|
+
|
283
|
+
<glide-core-dropdown-option
|
284
|
+
label="Nine"
|
285
|
+
value="nine"
|
286
|
+
></glide-core-dropdown-option>
|
287
|
+
|
288
|
+
<glide-core-dropdown-option
|
289
|
+
label="Ten"
|
290
|
+
value="ten"
|
291
|
+
></glide-core-dropdown-option>
|
292
|
+
</glide-core-dropdown>`);
|
293
|
+
// Wait for it to open.
|
294
|
+
await aTimeout(0);
|
295
|
+
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
296
|
+
assert(options);
|
297
|
+
expect(options.scrollHeight).to.be.greaterThan(options.clientHeight);
|
298
|
+
});
|
299
|
+
it('is not scrollable', async () => {
|
300
|
+
const component = await fixture(html `<glide-core-dropdown open>
|
301
|
+
<glide-core-dropdown-option
|
302
|
+
label="One"
|
303
|
+
value="one"
|
304
|
+
></glide-core-dropdown-option>
|
305
|
+
|
306
|
+
<glide-core-dropdown-option
|
307
|
+
label="Two"
|
308
|
+
value="two"
|
309
|
+
></glide-core-dropdown-option>
|
310
|
+
|
311
|
+
<glide-core-dropdown-option
|
312
|
+
label="Three"
|
313
|
+
value="three"
|
314
|
+
></glide-core-dropdown-option>
|
315
|
+
|
316
|
+
<glide-core-dropdown-option
|
317
|
+
label="Four"
|
318
|
+
value="four"
|
319
|
+
></glide-core-dropdown-option>
|
320
|
+
|
321
|
+
<glide-core-dropdown-option
|
322
|
+
label="Five"
|
323
|
+
value="five"
|
324
|
+
></glide-core-dropdown-option>
|
325
|
+
|
326
|
+
<glide-core-dropdown-option
|
327
|
+
label="Six"
|
328
|
+
value="six"
|
329
|
+
></glide-core-dropdown-option>
|
330
|
+
|
331
|
+
<glide-core-dropdown-option
|
332
|
+
label="Seven"
|
333
|
+
value="seven"
|
334
|
+
></glide-core-dropdown-option>
|
335
|
+
|
336
|
+
<glide-core-dropdown-option
|
337
|
+
label="Eight"
|
338
|
+
value="eight"
|
339
|
+
></glide-core-dropdown-option>
|
340
|
+
|
341
|
+
<glide-core-dropdown-option
|
342
|
+
label="Nine"
|
343
|
+
value="nine"
|
344
|
+
></glide-core-dropdown-option>
|
345
|
+
</glide-core-dropdown>`);
|
346
|
+
// Wait for it to open.
|
347
|
+
await aTimeout(0);
|
348
|
+
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
349
|
+
assert(options);
|
350
|
+
expect(options.scrollHeight).to.equal(options.clientHeight);
|
351
|
+
});
|
211
352
|
it('throws if the default slot is the incorrect type', async () => {
|
212
353
|
await expectArgumentError(() => {
|
213
354
|
return fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
@@ -230,5 +371,5 @@ it('does not throw if the default slot only contains whitespace', async () => {
|
|
230
371
|
spy();
|
231
372
|
}
|
232
373
|
}
|
233
|
-
expect(spy.
|
374
|
+
expect(spy.callCount).to.equal(0);
|
234
375
|
});
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
2
|
import './dropdown.option.js';
|
3
|
-
import { expect, fixture, html } from '@open-wc/testing';
|
3
|
+
import { aTimeout, expect, fixture, html } from '@open-wc/testing';
|
4
4
|
import GlideCoreDropdown from './dropdown.js';
|
5
5
|
GlideCoreDropdown.shadowRootOptions.mode = 'open';
|
6
6
|
it('is accessible', async () => {
|
@@ -112,6 +112,7 @@ it('shows Select All', async () => {
|
|
112
112
|
placeholder="Placeholder"
|
113
113
|
multiple
|
114
114
|
select-all
|
115
|
+
open
|
115
116
|
>
|
116
117
|
<glide-core-dropdown-option
|
117
118
|
label="One"
|
@@ -124,8 +125,10 @@ it('shows Select All', async () => {
|
|
124
125
|
value="two"
|
125
126
|
></glide-core-dropdown-option>
|
126
127
|
</glide-core-dropdown>`);
|
128
|
+
// Wait for it to open.
|
129
|
+
await aTimeout(0);
|
127
130
|
const selectAll = component.shadowRoot?.querySelector('[data-test="select-all"]');
|
128
|
-
expect(selectAll?.checkVisibility()).to.be.
|
131
|
+
expect(selectAll?.checkVisibility()).to.be.true;
|
129
132
|
});
|
130
133
|
it('sets Select All as selected when all options are initially selected', async () => {
|
131
134
|
const component = await fixture(html `<glide-core-dropdown
|
@@ -0,0 +1,74 @@
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
+
import * as sinon from 'sinon';
|
3
|
+
import { expect, fixture, html } from '@open-wc/testing';
|
4
|
+
import { sendKeys } from '@web/test-runner-commands';
|
5
|
+
import GlideCoreDropdown from './dropdown.js';
|
6
|
+
import GlideCoreDropdownOption from './dropdown.option.js';
|
7
|
+
GlideCoreDropdown.shadowRootOptions.mode = 'open';
|
8
|
+
GlideCoreDropdownOption.shadowRootOptions.mode = 'open';
|
9
|
+
const defaultSlot = html `
|
10
|
+
<glide-core-dropdown-option
|
11
|
+
label="One"
|
12
|
+
value="one"
|
13
|
+
></glide-core-dropdown-option>
|
14
|
+
|
15
|
+
<glide-core-dropdown-option
|
16
|
+
label="Two"
|
17
|
+
value="two"
|
18
|
+
></glide-core-dropdown-option>
|
19
|
+
|
20
|
+
<glide-core-dropdown-option
|
21
|
+
label="Three"
|
22
|
+
value="three"
|
23
|
+
></glide-core-dropdown-option>
|
24
|
+
|
25
|
+
<glide-core-dropdown-option
|
26
|
+
label="Four"
|
27
|
+
value="four"
|
28
|
+
></glide-core-dropdown-option>
|
29
|
+
|
30
|
+
<glide-core-dropdown-option
|
31
|
+
label="Five"
|
32
|
+
value="five"
|
33
|
+
></glide-core-dropdown-option>
|
34
|
+
|
35
|
+
<glide-core-dropdown-option
|
36
|
+
label="Six"
|
37
|
+
value="six"
|
38
|
+
></glide-core-dropdown-option>
|
39
|
+
|
40
|
+
<glide-core-dropdown-option
|
41
|
+
label="Seven"
|
42
|
+
value="seven"
|
43
|
+
></glide-core-dropdown-option>
|
44
|
+
|
45
|
+
<glide-core-dropdown-option
|
46
|
+
label="Eight"
|
47
|
+
value="eight"
|
48
|
+
></glide-core-dropdown-option>
|
49
|
+
|
50
|
+
<glide-core-dropdown-option
|
51
|
+
label="Nine"
|
52
|
+
value="nine"
|
53
|
+
></glide-core-dropdown-option>
|
54
|
+
|
55
|
+
<glide-core-dropdown-option
|
56
|
+
label="Ten"
|
57
|
+
value="ten"
|
58
|
+
></glide-core-dropdown-option>
|
59
|
+
|
60
|
+
<glide-core-dropdown-option
|
61
|
+
label="Eleven"
|
62
|
+
value="eleven"
|
63
|
+
></glide-core-dropdown-option>
|
64
|
+
`;
|
65
|
+
it('does not dispatch "input" events on input', async () => {
|
66
|
+
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
67
|
+
${defaultSlot}
|
68
|
+
</glide-core-dropdown>`);
|
69
|
+
const spy = sinon.spy();
|
70
|
+
component.addEventListener('input', spy);
|
71
|
+
component.focus();
|
72
|
+
await sendKeys({ type: ' one ' });
|
73
|
+
expect(spy.callCount).to.equal(0);
|
74
|
+
});
|
@@ -1,7 +1,6 @@
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
2
|
import * as sinon from 'sinon';
|
3
|
-
import { aTimeout, expect, fixture, html, oneEvent } from '@open-wc/testing';
|
4
|
-
import { sendKeys } from '@web/test-runner-commands';
|
3
|
+
import { aTimeout, assert, expect, fixture, html, oneEvent, } from '@open-wc/testing';
|
5
4
|
import GlideCoreDropdown from './dropdown.js';
|
6
5
|
import GlideCoreDropdownOption from './dropdown.option.js';
|
7
6
|
GlideCoreDropdown.shadowRootOptions.mode = 'open';
|
@@ -11,160 +10,6 @@ GlideCoreDropdownOption.shadowRootOptions.mode = 'open';
|
|
11
10
|
// timeout, which would make for a slow test. Its timeout can likely be
|
12
11
|
// configured. But waiting a turn of the event loop, when which the event
|
13
12
|
// will have been dispatched, gets the job done as well.
|
14
|
-
it('dispatches a "change" event when an option is selected via click', async () => {
|
15
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
16
|
-
<glide-core-dropdown-option
|
17
|
-
label="One"
|
18
|
-
value="one"
|
19
|
-
></glide-core-dropdown-option>
|
20
|
-
|
21
|
-
<glide-core-dropdown-option
|
22
|
-
label="Two"
|
23
|
-
value="two"
|
24
|
-
selected
|
25
|
-
></glide-core-dropdown-option>
|
26
|
-
</glide-core-dropdown>`);
|
27
|
-
const spy = sinon.spy();
|
28
|
-
component.addEventListener('change', spy);
|
29
|
-
setTimeout(() => {
|
30
|
-
component.querySelector('glide-core-dropdown-option')?.click();
|
31
|
-
});
|
32
|
-
const event = await oneEvent(component, 'change');
|
33
|
-
expect(event instanceof Event).to.be.true;
|
34
|
-
expect(event.bubbles).to.be.true;
|
35
|
-
expect(spy.calledOnce).to.be.true;
|
36
|
-
});
|
37
|
-
it('dispatches a "change" event when an option is selected via Enter', async () => {
|
38
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
39
|
-
<glide-core-dropdown-option
|
40
|
-
label="One"
|
41
|
-
value="one"
|
42
|
-
></glide-core-dropdown-option>
|
43
|
-
|
44
|
-
<glide-core-dropdown-option
|
45
|
-
label="Two"
|
46
|
-
value="two"
|
47
|
-
selected
|
48
|
-
></glide-core-dropdown-option>
|
49
|
-
</glide-core-dropdown>`);
|
50
|
-
const spy = sinon.spy();
|
51
|
-
component.addEventListener('change', spy);
|
52
|
-
// Activate the first option before selecting it. The second option is
|
53
|
-
// currently active because it's selected.
|
54
|
-
component
|
55
|
-
.querySelector('glide-core-dropdown-option')
|
56
|
-
?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
57
|
-
component.focus();
|
58
|
-
sendKeys({ press: 'Enter' });
|
59
|
-
const event = await oneEvent(component, 'change');
|
60
|
-
expect(event instanceof Event).to.be.true;
|
61
|
-
expect(event.bubbles).to.be.true;
|
62
|
-
expect(spy.calledOnce).to.be.true;
|
63
|
-
});
|
64
|
-
it('dispatches a "change" event when an option is selected via Space', async () => {
|
65
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
66
|
-
<glide-core-dropdown-option
|
67
|
-
label="One"
|
68
|
-
value="one"
|
69
|
-
></glide-core-dropdown-option>
|
70
|
-
|
71
|
-
<glide-core-dropdown-option
|
72
|
-
label="Two"
|
73
|
-
value="two"
|
74
|
-
selected
|
75
|
-
></glide-core-dropdown-option>
|
76
|
-
</glide-core-dropdown>`);
|
77
|
-
const spy = sinon.spy();
|
78
|
-
component.addEventListener('change', spy);
|
79
|
-
// Activate the first option before selecting it. The second option is
|
80
|
-
// currently active because it's selected.
|
81
|
-
component
|
82
|
-
.querySelector('glide-core-dropdown-option')
|
83
|
-
?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
84
|
-
component.focus();
|
85
|
-
sendKeys({ press: ' ' });
|
86
|
-
const event = await oneEvent(component, 'change');
|
87
|
-
expect(event instanceof Event).to.be.true;
|
88
|
-
expect(event.bubbles).to.be.true;
|
89
|
-
expect(spy.calledOnce).to.be.true;
|
90
|
-
});
|
91
|
-
it('dispatches an "input" event when an option is selected via click', async () => {
|
92
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
93
|
-
<glide-core-dropdown-option
|
94
|
-
label="One"
|
95
|
-
value="one"
|
96
|
-
></glide-core-dropdown-option>
|
97
|
-
|
98
|
-
<glide-core-dropdown-option
|
99
|
-
label="Two"
|
100
|
-
value="two"
|
101
|
-
selected
|
102
|
-
></glide-core-dropdown-option>
|
103
|
-
</glide-core-dropdown>`);
|
104
|
-
const spy = sinon.spy();
|
105
|
-
component.addEventListener('input', spy);
|
106
|
-
setTimeout(() => {
|
107
|
-
component.querySelector('glide-core-dropdown-option')?.click();
|
108
|
-
});
|
109
|
-
const event = await oneEvent(component, 'input');
|
110
|
-
expect(event instanceof Event).to.be.true;
|
111
|
-
expect(event.bubbles).to.be.true;
|
112
|
-
expect(spy.calledOnce).to.be.true;
|
113
|
-
});
|
114
|
-
it('dispatches an "input" event when an option is selected via Enter', async () => {
|
115
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
116
|
-
<glide-core-dropdown-option
|
117
|
-
label="One"
|
118
|
-
value="one"
|
119
|
-
></glide-core-dropdown-option>
|
120
|
-
|
121
|
-
<glide-core-dropdown-option
|
122
|
-
label="Two"
|
123
|
-
value="two"
|
124
|
-
selected
|
125
|
-
></glide-core-dropdown-option>
|
126
|
-
</glide-core-dropdown>`);
|
127
|
-
const spy = sinon.spy();
|
128
|
-
component.addEventListener('input', spy);
|
129
|
-
// Activate the first option before selecting it. The second option is
|
130
|
-
// currently active because it's selected.
|
131
|
-
component
|
132
|
-
.querySelector('glide-core-dropdown-option')
|
133
|
-
?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
134
|
-
component.focus();
|
135
|
-
sendKeys({ press: 'Enter' });
|
136
|
-
const event = await oneEvent(component, 'input');
|
137
|
-
expect(event instanceof Event).to.be.true;
|
138
|
-
expect(event.bubbles).to.be.true;
|
139
|
-
expect(spy.calledOnce).to.be.true;
|
140
|
-
});
|
141
|
-
it('dispatches an "input" event when an option is selected via Space', async () => {
|
142
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
143
|
-
<glide-core-dropdown-option
|
144
|
-
label="One"
|
145
|
-
value="one"
|
146
|
-
></glide-core-dropdown-option>
|
147
|
-
|
148
|
-
<glide-core-dropdown-option
|
149
|
-
label="Two"
|
150
|
-
value="two"
|
151
|
-
selected
|
152
|
-
></glide-core-dropdown-option>
|
153
|
-
</glide-core-dropdown>`);
|
154
|
-
const spy = sinon.spy();
|
155
|
-
component.addEventListener('input', spy);
|
156
|
-
// Activate the first option before selecting it. The second option is
|
157
|
-
// currently active because it's selected.
|
158
|
-
component
|
159
|
-
.querySelector('glide-core-dropdown-option')
|
160
|
-
?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
161
|
-
component.focus();
|
162
|
-
sendKeys({ press: ' ' });
|
163
|
-
const event = await oneEvent(component, 'input');
|
164
|
-
expect(event instanceof Event).to.be.true;
|
165
|
-
expect(event.bubbles).to.be.true;
|
166
|
-
expect(spy.calledOnce).to.be.true;
|
167
|
-
});
|
168
13
|
it('dispatches an "invalid" event on submit when required and no option is selected', async () => {
|
169
14
|
const form = document.createElement('form');
|
170
15
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" required>
|
@@ -213,7 +58,7 @@ it('does not dispatch an "invalid" event when `checkValidity` is called when not
|
|
213
58
|
component.addEventListener('invalid', spy);
|
214
59
|
component.checkValidity();
|
215
60
|
await aTimeout(0);
|
216
|
-
expect(spy.
|
61
|
+
expect(spy.callCount).to.equal(0);
|
217
62
|
});
|
218
63
|
it('does not dispatch an "invalid" event when `checkValidity` is called when required, disabled, and no option is selected', async () => {
|
219
64
|
const form = document.createElement('form');
|
@@ -232,7 +77,7 @@ it('does not dispatch an "invalid" event when `checkValidity` is called when req
|
|
232
77
|
component.addEventListener('invalid', spy);
|
233
78
|
component.checkValidity();
|
234
79
|
await aTimeout(0);
|
235
|
-
expect(spy.
|
80
|
+
expect(spy.callCount).to.equal(0);
|
236
81
|
});
|
237
82
|
it('does not dispatch an "invalid" event when `reportValidity` is called when not required,', async () => {
|
238
83
|
const form = document.createElement('form');
|
@@ -246,7 +91,7 @@ it('does not dispatch an "invalid" event when `reportValidity` is called when no
|
|
246
91
|
component.addEventListener('invalid', spy);
|
247
92
|
component.reportValidity();
|
248
93
|
await aTimeout(0);
|
249
|
-
expect(spy.
|
94
|
+
expect(spy.callCount).to.equal(0);
|
250
95
|
});
|
251
96
|
it('does not dispatch an "invalid" event when `reportValidity` is called when required, disabled, and no option is selected', async () => {
|
252
97
|
const form = document.createElement('form');
|
@@ -265,5 +110,49 @@ it('does not dispatch an "invalid" event when `reportValidity` is called when re
|
|
265
110
|
component.addEventListener('invalid', spy);
|
266
111
|
component.reportValidity();
|
267
112
|
await aTimeout(0);
|
268
|
-
expect(spy.
|
113
|
+
expect(spy.callCount).to.equal(0);
|
114
|
+
});
|
115
|
+
it('does not dispatch a "change" event when an option is selected programmatically', async () => {
|
116
|
+
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
117
|
+
<glide-core-dropdown-option
|
118
|
+
label="One"
|
119
|
+
value="one"
|
120
|
+
></glide-core-dropdown-option>
|
121
|
+
|
122
|
+
<glide-core-dropdown-option
|
123
|
+
label="Two"
|
124
|
+
value="two"
|
125
|
+
></glide-core-dropdown-option>
|
126
|
+
</glide-core-dropdown>`);
|
127
|
+
const spy = sinon.spy();
|
128
|
+
component.addEventListener('change', spy);
|
129
|
+
setTimeout(() => {
|
130
|
+
const option = component?.querySelector('glide-core-dropdown-option');
|
131
|
+
assert(option);
|
132
|
+
option.selected = true;
|
133
|
+
});
|
134
|
+
await aTimeout(0);
|
135
|
+
expect(spy.callCount).to.equal(0);
|
136
|
+
});
|
137
|
+
it('does not dispatch a "input" event when an option is selected programmatically', async () => {
|
138
|
+
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
139
|
+
<glide-core-dropdown-option
|
140
|
+
label="One"
|
141
|
+
value="one"
|
142
|
+
></glide-core-dropdown-option>
|
143
|
+
|
144
|
+
<glide-core-dropdown-option
|
145
|
+
label="Two"
|
146
|
+
value="two"
|
147
|
+
></glide-core-dropdown-option>
|
148
|
+
</glide-core-dropdown>`);
|
149
|
+
const spy = sinon.spy();
|
150
|
+
component.addEventListener('input', spy);
|
151
|
+
setTimeout(() => {
|
152
|
+
const option = component?.querySelector('glide-core-dropdown-option');
|
153
|
+
assert(option);
|
154
|
+
option.selected = true;
|
155
|
+
});
|
156
|
+
await aTimeout(0);
|
157
|
+
expect(spy.callCount).to.equal(0);
|
269
158
|
});
|