@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,5 +1,5 @@
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
-
import { expect, fixture } from '@open-wc/testing';
|
2
|
+
import { expect, fixture, html } from '@open-wc/testing';
|
3
3
|
import { sendKeys } from '@web/test-runner-commands';
|
4
4
|
import GlideCoreTextarea from './textarea.js';
|
5
5
|
GlideCoreTextarea.shadowRootOptions.mode = 'open';
|
@@ -7,13 +7,17 @@ it('registers', async () => {
|
|
7
7
|
expect(window.customElements.get('glide-core-textarea')).to.equal(GlideCoreTextarea);
|
8
8
|
});
|
9
9
|
it('is accessible', async () => {
|
10
|
-
const
|
11
|
-
|
10
|
+
const element = await fixture(html `<glide-core-textarea
|
11
|
+
value="value"
|
12
|
+
label="label"
|
13
|
+
></glide-core-textarea>`);
|
12
14
|
await expect(element).to.be.accessible();
|
13
15
|
});
|
14
16
|
it('renders a textarea with two rows and value when attribute `value` is set ', async () => {
|
15
|
-
const
|
16
|
-
|
17
|
+
const element = await fixture(html `<glide-core-textarea
|
18
|
+
value="value"
|
19
|
+
label="label"
|
20
|
+
></glide-core-textarea>`);
|
17
21
|
const textarea = element.shadowRoot.querySelector('textarea');
|
18
22
|
expect(element);
|
19
23
|
expect(element).to.have.attribute('rows', '2');
|
@@ -21,119 +25,151 @@ it('renders a textarea with two rows and value when attribute `value` is set ',
|
|
21
25
|
expect(textarea).to.have.attribute('rows', '2');
|
22
26
|
});
|
23
27
|
it('renders the `rows` attribute on the textarea when set', async () => {
|
24
|
-
const
|
25
|
-
|
28
|
+
const element = await fixture(html `<glide-core-textarea
|
29
|
+
value="value"
|
30
|
+
label="label"
|
31
|
+
rows="5"
|
32
|
+
></glide-core-textarea>`);
|
26
33
|
const textarea = element.shadowRoot.querySelector('textarea');
|
27
34
|
expect(textarea).to.have.attribute('rows', '5');
|
28
35
|
});
|
29
36
|
it('renders a label when attribute `label` is set', async () => {
|
30
|
-
const
|
31
|
-
|
37
|
+
const element = await fixture(html `<glide-core-textarea
|
38
|
+
value="value"
|
39
|
+
label="label"
|
40
|
+
></glide-core-textarea>`);
|
32
41
|
const label = element.shadowRoot.querySelector('label');
|
33
42
|
expect(label).to.exist;
|
34
43
|
expect(label?.textContent?.trim()).to.be.equal('label');
|
35
44
|
});
|
36
45
|
it('renders the textarea as readonly when attribute `readonly` is set', async () => {
|
37
|
-
const
|
38
|
-
|
46
|
+
const element = await fixture(html `<glide-core-textarea
|
47
|
+
value="value"
|
48
|
+
label="label"
|
49
|
+
readonly
|
50
|
+
></glide-core-textarea>`);
|
39
51
|
const textarea = element.shadowRoot.querySelector('textarea');
|
40
52
|
expect(textarea).to.have.attribute('readonly');
|
41
53
|
});
|
42
54
|
it('renders the textarea as disabled when attribute `disabled` is set', async () => {
|
43
|
-
const
|
44
|
-
|
55
|
+
const element = await fixture(html `<glide-core-textarea
|
56
|
+
value="value"
|
57
|
+
label="label"
|
58
|
+
disabled
|
59
|
+
></glide-core-textarea>`);
|
45
60
|
const textarea = element.shadowRoot.querySelector('textarea');
|
46
61
|
expect(textarea).to.have.attribute('disabled');
|
47
62
|
});
|
48
63
|
it('renders the textarea with a placeholder when attribute `placeholder` is set', async () => {
|
49
|
-
const
|
50
|
-
|
64
|
+
const element = await fixture(html `<glide-core-textarea
|
65
|
+
value=""
|
66
|
+
label="label"
|
67
|
+
placeholder="placeholder"
|
68
|
+
></glide-core-textarea>`);
|
51
69
|
const textarea = element.shadowRoot.querySelector('textarea');
|
52
70
|
expect(textarea).to.have.attribute('placeholder', 'placeholder');
|
53
71
|
});
|
54
72
|
it('renders `required` on textarea when set', async () => {
|
55
|
-
const
|
56
|
-
|
73
|
+
const element = await fixture(html `<glide-core-textarea
|
74
|
+
value="value"
|
75
|
+
label="label"
|
76
|
+
required
|
77
|
+
></glide-core-textarea>`);
|
57
78
|
const textarea = element.shadowRoot.querySelector('textarea');
|
58
79
|
expect(textarea).to.have.attribute('required');
|
59
80
|
});
|
60
81
|
it('renders a `name` attribute on the textarea when set', async () => {
|
61
|
-
const
|
62
|
-
|
82
|
+
const element = await fixture(html `<glide-core-textarea
|
83
|
+
value="value"
|
84
|
+
label="label"
|
85
|
+
name="test-name"
|
86
|
+
></glide-core-textarea>`);
|
63
87
|
const textarea = element.shadowRoot.querySelector('textarea');
|
64
88
|
expect(textarea).to.have.attribute('name', 'test-name');
|
65
89
|
});
|
66
90
|
it('supports a "tooltip" slot', async () => {
|
67
|
-
const
|
91
|
+
const element = await fixture(html `
|
68
92
|
<glide-core-textarea value="value" label="label" required>
|
69
93
|
<div slot="tooltip">Tooltip</div>
|
70
94
|
</glide-core-textarea>
|
71
|
-
|
72
|
-
const element = await fixture(template);
|
95
|
+
`);
|
73
96
|
const assignedElements = element.shadowRoot
|
74
97
|
?.querySelector('slot[name="tooltip"]')
|
75
98
|
?.assignedElements();
|
76
99
|
expect(assignedElements?.at(0)?.textContent).to.equal('Tooltip');
|
77
100
|
});
|
78
101
|
it('renders a slot with description', async () => {
|
79
|
-
const
|
80
|
-
|
102
|
+
const element = await fixture(html `<glide-core-textarea value="value" label="label"
|
103
|
+
><span slot="description" data-test-content
|
104
|
+
>Description</span
|
105
|
+
></glide-core-textarea
|
106
|
+
>`);
|
81
107
|
expect(element).to.exist;
|
82
108
|
const contentRendered = element.querySelector('[data-test-content]');
|
83
109
|
expect(contentRendered).to.exist;
|
84
110
|
expect(contentRendered?.textContent).to.be.equal('Description');
|
85
111
|
});
|
112
|
+
it('displays visually hidden character count text for screenreaders', async () => {
|
113
|
+
const element = await fixture(html `<glide-core-textarea
|
114
|
+
label="label"
|
115
|
+
maxlength="10"
|
116
|
+
></glide-core-textarea>`);
|
117
|
+
const maxCharacterCountAnnouncement = element.shadowRoot?.querySelector('[data-test="character-count-announcement"]');
|
118
|
+
expect(maxCharacterCountAnnouncement?.textContent?.trim()).to.equal('Character count 0 of 10');
|
119
|
+
});
|
86
120
|
it('renders a character count when attribute `maxlength` is set greater than zero', async () => {
|
87
|
-
const
|
88
|
-
|
89
|
-
|
121
|
+
const element = await fixture(html `<glide-core-textarea value="value" label="label" maxlength="10"
|
122
|
+
><span slot="description">Description</span></glide-core-textarea
|
123
|
+
>`);
|
124
|
+
const container = element.shadowRoot.querySelector('[data-test="character-count-text"]');
|
90
125
|
expect(container?.textContent?.trim()).to.be.equal('5/10');
|
91
126
|
});
|
92
127
|
it('does not render a character count when attribute `maxlength` is set less than than zero', async () => {
|
93
|
-
const
|
94
|
-
|
95
|
-
|
96
|
-
|
128
|
+
const element = await fixture(html `<glide-core-textarea value="value" label="label" maxlength="0"
|
129
|
+
><span slot="description">Description</span></glide-core-textarea
|
130
|
+
>`);
|
131
|
+
const container = element.shadowRoot?.querySelector('[data-test="character-count-container"]');
|
132
|
+
expect(container).to.be.null;
|
97
133
|
});
|
98
134
|
it('focuses the textarea when the label is clicked', async () => {
|
99
|
-
const
|
100
|
-
|
135
|
+
const element = await fixture(html `<glide-core-textarea
|
136
|
+
value="value"
|
137
|
+
label="label"
|
138
|
+
></glide-core-textarea>`);
|
101
139
|
const label = element.shadowRoot.querySelector('label');
|
102
140
|
label?.click();
|
103
141
|
expect(element).to.have.focus;
|
104
142
|
await expect(element.shadowRoot?.activeElement?.tagName.toLocaleLowerCase()).to.be.equal('textarea');
|
105
143
|
});
|
106
144
|
it('has tabbable textarea', async () => {
|
107
|
-
const
|
108
|
-
|
145
|
+
const element = await fixture(html `<glide-core-textarea
|
146
|
+
value="value"
|
147
|
+
label="label"
|
148
|
+
></glide-core-textarea>`);
|
109
149
|
await sendKeys({ press: 'Tab' });
|
110
150
|
expect(element).to.have.focus;
|
111
151
|
await expect(element.shadowRoot?.activeElement?.tagName.toLocaleLowerCase()).to.be.equal('textarea');
|
112
152
|
});
|
113
153
|
it('renders text when typed into text area', async () => {
|
114
|
-
const
|
115
|
-
const element = await fixture(template);
|
154
|
+
const element = await fixture(html `<glide-core-textarea value="" label="label"></glide-core-textarea>`);
|
116
155
|
const textarea = element.shadowRoot.querySelector('textarea');
|
117
156
|
element.focus();
|
118
157
|
await sendKeys({ type: 'test text' });
|
119
158
|
expect(textarea?.value).to.equal('test text');
|
120
159
|
});
|
121
160
|
it('returns the content of the textarea when getting the `value` property', async () => {
|
122
|
-
const
|
123
|
-
const element = await fixture(template);
|
161
|
+
const element = await fixture(html `<glide-core-textarea value="" label="label"></glide-core-textarea>`);
|
124
162
|
element.focus();
|
125
163
|
await sendKeys({ type: 'test text' });
|
126
164
|
expect(element.value).to.equal('test text');
|
127
165
|
});
|
128
|
-
it('focuses the textarea when `focus` is called', async () => {
|
129
|
-
const
|
130
|
-
const element = await fixture(template);
|
166
|
+
it('focuses the textarea when `focus()` is called', async () => {
|
167
|
+
const element = await fixture(html `<glide-core-textarea value="" label="label"></glide-core-textarea>`);
|
131
168
|
element.focus();
|
132
169
|
await expect(element.shadowRoot?.activeElement?.tagName.toLocaleLowerCase()).to.be.equal('textarea');
|
133
170
|
});
|
134
171
|
it('blurs the textarea when `blur` is called', async () => {
|
135
|
-
const
|
136
|
-
const element = await fixture(template);
|
172
|
+
const element = await fixture(html `<glide-core-textarea value="" label="label"></glide-core-textarea>`);
|
137
173
|
element.focus();
|
138
174
|
await expect(element.shadowRoot?.activeElement?.tagName.toLocaleLowerCase()).to.be.equal('textarea');
|
139
175
|
element.blur();
|
@@ -1,11 +1,10 @@
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
2
|
import './textarea.js';
|
3
3
|
import * as sinon from 'sinon';
|
4
|
-
import { aTimeout, expect, fixture, oneEvent } from '@open-wc/testing';
|
4
|
+
import { aTimeout, expect, fixture, html, oneEvent } from '@open-wc/testing';
|
5
5
|
import { sendKeys } from '@web/test-runner-commands';
|
6
6
|
it('dispatches a `input` event when typed in', async () => {
|
7
|
-
const
|
8
|
-
const textarea = await fixture(template);
|
7
|
+
const textarea = await fixture(html `<glide-core-textarea label="label"></glide-core-textarea>`);
|
9
8
|
setTimeout(async () => {
|
10
9
|
textarea.focus();
|
11
10
|
await sendKeys({ type: 'testing' });
|
@@ -16,8 +15,7 @@ it('dispatches a `input` event when typed in', async () => {
|
|
16
15
|
expect(event.bubbles).to.be.true;
|
17
16
|
});
|
18
17
|
it('dispatches an `change` event when typed in', async () => {
|
19
|
-
const
|
20
|
-
const textarea = await fixture(template);
|
18
|
+
const textarea = await fixture(html `<glide-core-textarea label="label"></glide-core-textarea>`);
|
21
19
|
setTimeout(async () => {
|
22
20
|
textarea.focus();
|
23
21
|
await sendKeys({ type: 'testing' });
|
@@ -29,8 +27,7 @@ it('dispatches an `change` event when typed in', async () => {
|
|
29
27
|
});
|
30
28
|
it('dispatches an `invalid` event on submit when required and no value', async () => {
|
31
29
|
const form = document.createElement('form');
|
32
|
-
const
|
33
|
-
const textarea = await fixture(template, {
|
30
|
+
const textarea = await fixture(html `<glide-core-textarea label="label" required></glide-core-textarea>`, {
|
34
31
|
parentNode: form,
|
35
32
|
});
|
36
33
|
setTimeout(() => form.requestSubmit());
|
@@ -39,8 +36,7 @@ it('dispatches an `invalid` event on submit when required and no value', async (
|
|
39
36
|
});
|
40
37
|
it('dispatches an `invalid` event after `checkValidity` is called when required and no value', async () => {
|
41
38
|
const form = document.createElement('form');
|
42
|
-
const
|
43
|
-
const textarea = await fixture(template, {
|
39
|
+
const textarea = await fixture(html `<glide-core-textarea label="label" required></glide-core-textarea>`, {
|
44
40
|
parentNode: form,
|
45
41
|
});
|
46
42
|
setTimeout(() => textarea.checkValidity());
|
@@ -49,8 +45,7 @@ it('dispatches an `invalid` event after `checkValidity` is called when required
|
|
49
45
|
});
|
50
46
|
it('dispatches an `invalid` event after `reportValidity` is called when required and no value', async () => {
|
51
47
|
const form = document.createElement('form');
|
52
|
-
const
|
53
|
-
const textarea = await fixture(template, {
|
48
|
+
const textarea = await fixture(html `<glide-core-textarea label="label" required></glide-core-textarea>`, {
|
54
49
|
parentNode: form,
|
55
50
|
});
|
56
51
|
setTimeout(() => textarea.reportValidity());
|
@@ -59,56 +54,62 @@ it('dispatches an `invalid` event after `reportValidity` is called when required
|
|
59
54
|
});
|
60
55
|
it('does not dispatch an `invalid` event after `checkValidity` is called when not required', async () => {
|
61
56
|
const form = document.createElement('form');
|
62
|
-
const
|
63
|
-
const textarea = await fixture(template, {
|
57
|
+
const textarea = await fixture(html `<glide-core-textarea label="label"></glide-core-textarea>`, {
|
64
58
|
parentNode: form,
|
65
59
|
});
|
66
60
|
const spy = sinon.spy();
|
67
61
|
textarea.addEventListener('invalid', spy);
|
68
62
|
textarea.checkValidity();
|
69
63
|
await aTimeout(0);
|
70
|
-
expect(spy.
|
64
|
+
expect(spy.callCount).to.equal(0);
|
71
65
|
});
|
72
66
|
it('does not dispatch an `invalid` event after `checkValidity` is called when required, no value, and disabled', async () => {
|
73
67
|
const form = document.createElement('form');
|
74
|
-
const
|
75
|
-
|
68
|
+
const textarea = await fixture(html `<glide-core-textarea
|
69
|
+
label="label"
|
70
|
+
required
|
71
|
+
disabled
|
72
|
+
></glide-core-textarea>`, {
|
76
73
|
parentNode: form,
|
77
74
|
});
|
78
75
|
const spy = sinon.spy();
|
79
76
|
textarea.addEventListener('invalid', spy);
|
80
77
|
textarea.checkValidity();
|
81
78
|
await aTimeout(0);
|
82
|
-
expect(spy.
|
79
|
+
expect(spy.callCount).to.equal(0);
|
83
80
|
});
|
84
81
|
it('does not dispatch an `invalid` event when `reportValidity` is called when not required,', async () => {
|
85
82
|
const form = document.createElement('form');
|
86
|
-
const
|
87
|
-
const textarea = await fixture(template, {
|
83
|
+
const textarea = await fixture(html `<glide-core-textarea label="label"></glide-core-textarea>`, {
|
88
84
|
parentNode: form,
|
89
85
|
});
|
90
86
|
const spy = sinon.spy();
|
91
87
|
textarea.addEventListener('invalid', spy);
|
92
88
|
textarea.reportValidity();
|
93
89
|
await aTimeout(0);
|
94
|
-
expect(spy.
|
90
|
+
expect(spy.callCount).to.equal(0);
|
95
91
|
});
|
96
92
|
it('does not dispatch an `invalid` event when `reportValidity` is called when required, no value, and disabled', async () => {
|
97
93
|
const form = document.createElement('form');
|
98
|
-
const
|
99
|
-
|
94
|
+
const textarea = await fixture(html `<glide-core-textarea
|
95
|
+
label="label"
|
96
|
+
required
|
97
|
+
disabled
|
98
|
+
></glide-core-textarea>`, {
|
100
99
|
parentNode: form,
|
101
100
|
});
|
102
101
|
const spy = sinon.spy();
|
103
102
|
textarea.addEventListener('invalid', spy);
|
104
103
|
textarea.reportValidity();
|
105
104
|
await aTimeout(0);
|
106
|
-
expect(spy.
|
105
|
+
expect(spy.callCount).to.equal(0);
|
107
106
|
});
|
108
107
|
it('dispatches an `invalid` event after `requestSubmit` is called when `maxlength` exceeded', async () => {
|
109
108
|
const form = document.createElement('form');
|
110
|
-
const
|
111
|
-
|
109
|
+
const textarea = await fixture(html `<glide-core-textarea
|
110
|
+
label="label"
|
111
|
+
maxlength="3"
|
112
|
+
></glide-core-textarea>`, {
|
112
113
|
parentNode: form,
|
113
114
|
});
|
114
115
|
setTimeout(async () => {
|
@@ -121,8 +122,10 @@ it('dispatches an `invalid` event after `requestSubmit` is called when `maxlengt
|
|
121
122
|
});
|
122
123
|
it('dispatches an `invalid` event after `checkValidity` is called when `maxlength` exceeded', async () => {
|
123
124
|
const form = document.createElement('form');
|
124
|
-
const
|
125
|
-
|
125
|
+
const textarea = await fixture(html `<glide-core-textarea
|
126
|
+
label="label"
|
127
|
+
maxlength="3"
|
128
|
+
></glide-core-textarea>`, {
|
126
129
|
parentNode: form,
|
127
130
|
});
|
128
131
|
setTimeout(async () => {
|
@@ -135,8 +138,10 @@ it('dispatches an `invalid` event after `checkValidity` is called when `maxlengt
|
|
135
138
|
});
|
136
139
|
it('dispatches an `invalid` event after `reportValidity` is called when `maxlength` exceeded', async () => {
|
137
140
|
const form = document.createElement('form');
|
138
|
-
const
|
139
|
-
|
141
|
+
const textarea = await fixture(html `<glide-core-textarea
|
142
|
+
label="label"
|
143
|
+
maxlength="3"
|
144
|
+
></glide-core-textarea>`, {
|
140
145
|
parentNode: form,
|
141
146
|
});
|
142
147
|
setTimeout(async () => {
|
@@ -149,8 +154,10 @@ it('dispatches an `invalid` event after `reportValidity` is called when `maxleng
|
|
149
154
|
});
|
150
155
|
it('does not dispatch an `invalid` event after `checkValidity` is called when `maxlength` not exceeded', async () => {
|
151
156
|
const form = document.createElement('form');
|
152
|
-
const
|
153
|
-
|
157
|
+
const textarea = await fixture(html `<glide-core-textarea
|
158
|
+
label="label"
|
159
|
+
maxlength="3"
|
160
|
+
></glide-core-textarea>`, {
|
154
161
|
parentNode: form,
|
155
162
|
});
|
156
163
|
const spy = sinon.spy();
|
@@ -159,12 +166,15 @@ it('does not dispatch an `invalid` event after `checkValidity` is called when `m
|
|
159
166
|
await sendKeys({ type: 'ab' });
|
160
167
|
textarea.checkValidity();
|
161
168
|
await aTimeout(0);
|
162
|
-
expect(spy.
|
169
|
+
expect(spy.callCount).to.equal(0);
|
163
170
|
});
|
164
171
|
it('does not dispatch an `invalid` event after `checkValidity` is called when `maxlength` exceeded and disabled', async () => {
|
165
172
|
const form = document.createElement('form');
|
166
|
-
const
|
167
|
-
|
173
|
+
const textarea = await fixture(html `<glide-core-textarea
|
174
|
+
label="label"
|
175
|
+
maxlength="3"
|
176
|
+
disabled
|
177
|
+
></glide-core-textarea>`, {
|
168
178
|
parentNode: form,
|
169
179
|
});
|
170
180
|
const spy = sinon.spy();
|
@@ -173,12 +183,14 @@ it('does not dispatch an `invalid` event after `checkValidity` is called when `m
|
|
173
183
|
await sendKeys({ type: 'test' });
|
174
184
|
textarea.checkValidity();
|
175
185
|
await aTimeout(0);
|
176
|
-
expect(spy.
|
186
|
+
expect(spy.callCount).to.equal(0);
|
177
187
|
});
|
178
188
|
it('does not dispatch an `invalid` event when `reportValidity` is called and `maxlength` is not exceeded,', async () => {
|
179
189
|
const form = document.createElement('form');
|
180
|
-
const
|
181
|
-
|
190
|
+
const textarea = await fixture(html `<glide-core-textarea
|
191
|
+
label="label"
|
192
|
+
maxlength="3"
|
193
|
+
></glide-core-textarea>`, {
|
182
194
|
parentNode: form,
|
183
195
|
});
|
184
196
|
const spy = sinon.spy();
|
@@ -187,12 +199,15 @@ it('does not dispatch an `invalid` event when `reportValidity` is called and `ma
|
|
187
199
|
await sendKeys({ type: 'ab' });
|
188
200
|
textarea.reportValidity();
|
189
201
|
await aTimeout(0);
|
190
|
-
expect(spy.
|
202
|
+
expect(spy.callCount).to.equal(0);
|
191
203
|
});
|
192
204
|
it('does not dispatch an `invalid` event when `reportValidity` is called `maxlength` exceeded and disabled,', async () => {
|
193
205
|
const form = document.createElement('form');
|
194
|
-
const
|
195
|
-
|
206
|
+
const textarea = await fixture(html `<glide-core-textarea
|
207
|
+
label="label"
|
208
|
+
maxlength="3"
|
209
|
+
disabled
|
210
|
+
></glide-core-textarea>`, {
|
196
211
|
parentNode: form,
|
197
212
|
});
|
198
213
|
const spy = sinon.spy();
|
@@ -201,5 +216,5 @@ it('does not dispatch an `invalid` event when `reportValidity` is called `maxlen
|
|
201
216
|
await sendKeys({ type: 'test' });
|
202
217
|
textarea.reportValidity();
|
203
218
|
await aTimeout(0);
|
204
|
-
expect(spy.
|
219
|
+
expect(spy.callCount).to.equal(0);
|
205
220
|
});
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,34 @@
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
+
import { elementUpdated, expect, fixture, html } from '@open-wc/testing';
|
3
|
+
import GlideCoreTextarea from './textarea.js';
|
4
|
+
GlideCoreTextarea.shadowRootOptions.mode = 'open';
|
5
|
+
it('renders dynamic strings in Japanese', async () => {
|
6
|
+
const element = await fixture(html `
|
7
|
+
<glide-core-textarea
|
8
|
+
label="Test"
|
9
|
+
value="lorem"
|
10
|
+
maxlength="40"
|
11
|
+
></glide-core-textarea>
|
12
|
+
`);
|
13
|
+
document.documentElement.setAttribute('lang', 'ja');
|
14
|
+
await elementUpdated(element);
|
15
|
+
const maxCharacterCountText = element.shadowRoot?.querySelector('[data-test="character-count-text"]');
|
16
|
+
expect(maxCharacterCountText?.textContent?.trim()).to.equal('5/40');
|
17
|
+
const maxCharacterCountAnnouncement = element.shadowRoot?.querySelector('[data-test="character-count-announcement"]');
|
18
|
+
expect(maxCharacterCountAnnouncement?.textContent?.trim()).to.equal('Character count 5 of 40');
|
19
|
+
});
|
20
|
+
it('renders dynamic strings in French', async () => {
|
21
|
+
const element = await fixture(html `
|
22
|
+
<glide-core-textarea
|
23
|
+
label="Test"
|
24
|
+
value="lorem"
|
25
|
+
maxlength="40"
|
26
|
+
></glide-core-textarea>
|
27
|
+
`);
|
28
|
+
document.documentElement.setAttribute('lang', 'fr');
|
29
|
+
await elementUpdated(element);
|
30
|
+
const maxCharacterCountText = element.shadowRoot?.querySelector('[data-test="character-count-text"]');
|
31
|
+
expect(maxCharacterCountText?.textContent?.trim()).to.equal('5/40');
|
32
|
+
const maxCharacterCountAnnouncement = element.shadowRoot?.querySelector('[data-test="character-count-announcement"]');
|
33
|
+
expect(maxCharacterCountAnnouncement?.textContent?.trim()).to.equal('Character count 5 of 40');
|
34
|
+
});
|