@knowark/componarkjs 1.13.4 → 1.14.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 (35) hide show
  1. package/lib/base/component/component.js +17 -1
  2. package/lib/base/component/component.test.js +475 -389
  3. package/lib/base/utils/define.js +28 -6
  4. package/lib/base/utils/define.test.js +129 -42
  5. package/lib/base/utils/format.test.js +16 -16
  6. package/lib/base/utils/helpers.js +11 -4
  7. package/lib/base/utils/helpers.test.js +134 -115
  8. package/lib/base/utils/slots.test.js +38 -38
  9. package/lib/base/utils/uuid.test.js +13 -13
  10. package/lib/components/audio/components/audio.js +19 -1
  11. package/lib/components/audio/components/audio.test.js +120 -90
  12. package/lib/components/camera/components/camera.js +5 -0
  13. package/lib/components/camera/components/camera.test.js +96 -91
  14. package/lib/components/capture/components/capture.js +30 -2
  15. package/lib/components/capture/components/capture.test.js +165 -97
  16. package/lib/components/droparea/components/droparea-preview.js +58 -8
  17. package/lib/components/droparea/components/droparea-preview.test.js +262 -80
  18. package/lib/components/droparea/components/droparea.js +41 -4
  19. package/lib/components/droparea/components/droparea.test.js +309 -299
  20. package/lib/components/emit/components/emit.js +23 -3
  21. package/lib/components/emit/components/emit.test.js +192 -134
  22. package/lib/components/list/components/item.test.js +69 -68
  23. package/lib/components/list/components/list.js +33 -3
  24. package/lib/components/list/components/list.test.js +358 -227
  25. package/lib/components/paginator/components/paginator.test.js +146 -143
  26. package/lib/components/spinner/components/spinner.test.js +36 -41
  27. package/lib/components/splitview/components/splitview.detail.test.js +75 -73
  28. package/lib/components/splitview/components/splitview.js +36 -8
  29. package/lib/components/splitview/components/splitview.master.js +27 -2
  30. package/lib/components/splitview/components/splitview.master.test.js +52 -52
  31. package/lib/components/splitview/components/splitview.test.js +135 -31
  32. package/lib/components/translate/components/translate.js +28 -8
  33. package/lib/components/translate/components/translate.test.js +492 -133
  34. package/package.json +3 -27
  35. package/scripts/node-test-setup.js +94 -0
@@ -1,264 +1,395 @@
1
+ import { it } from 'node:test';
2
+ import assert from 'node:assert/strict';
1
3
  import './list.js'
2
4
 
3
- describe('List', () => {
4
- let container = null
5
+ let container = null
5
6
 
6
- beforeEach(() => {
7
- container = document.createElement('div')
8
- document.body.appendChild(container)
9
- })
7
+ const setup = () => {
8
+ document.body.innerHTML = '';
9
+ container = document.createElement('div')
10
+ document.body.appendChild(container)
11
+ };
10
12
 
11
- afterEach(() => {
12
- container.remove()
13
- container = null
14
- })
13
+ it('can be instantiated', () => {
14
+ setup();
15
+ container.innerHTML = `
16
+ <ark-list></ark-list>
17
+ `
15
18
 
16
- it('can be instantiated', () => {
17
- container.innerHTML = `
18
- <ark-list></ark-list>
19
- `
19
+ const list = container.querySelector('ark-list')
20
+ assert.deepStrictEqual(list, list.init())
21
+ })
20
22
 
21
- const list = container.querySelector('ark-list')
22
- expect(list).toEqual(list.init())
23
- })
23
+ it('can be instantiated with items', async () => {
24
+ setup();
25
+ container.innerHTML = `
26
+ <ark-list></ark-list>
27
+ `
24
28
 
25
- it('can be instantiated with items', async () => {
26
- container.innerHTML = `
27
- <ark-list></ark-list>
28
- `
29
+ const list = container.querySelector('ark-list')
30
+ list.source = ['Colombia', 'Uruguay', 'Brasil', 'Perú']
31
+ list.render()
29
32
 
30
- const list = container.querySelector('ark-list')
31
- list.source = ['Colombia', 'Uruguay', 'Brasil', 'Perú']
32
- list.render()
33
+ const items = list.selectAll('ark-list-item')
33
34
 
34
- const items = list.selectAll('ark-list-item')
35
+ assert.deepStrictEqual(items.length, 4)
36
+ assert.deepStrictEqual(items[0].textContent.trim(), 'Colombia')
37
+ assert.deepStrictEqual(items[1].textContent.trim(), 'Uruguay')
38
+ assert.deepStrictEqual(items[2].textContent.trim(), 'Brasil')
39
+ assert.deepStrictEqual(items[3].textContent.trim(), 'Perú')
40
+ })
35
41
 
36
- expect(items.length).toEqual(4)
37
- expect(items[0].textContent.trim()).toEqual('Colombia')
38
- expect(items[1].textContent.trim()).toEqual('Uruguay')
39
- expect(items[2].textContent.trim()).toEqual('Brasil')
40
- expect(items[3].textContent.trim()).toEqual('Perú')
42
+ it('can be instantiated with items click-disabled', () => {
43
+ setup();
44
+ container.innerHTML = `
45
+ <ark-list click-disabled></ark-list
46
+ `
47
+
48
+ const list = container.querySelector('ark-list')
49
+ list.source = ['Colombia', 'Uruguay', 'Brasil', 'Perú']
50
+ list.render()
51
+ const items = list.selectAll('ark-list-item')
52
+
53
+ assert.deepStrictEqual(items.length, 4)
54
+ assert.deepStrictEqual(items[0].textContent.trim(), 'Colombia')
55
+ assert.deepStrictEqual(items[1].textContent.trim(), 'Uruguay')
56
+ assert.deepStrictEqual(items[2].textContent.trim(), 'Brasil')
57
+ assert.deepStrictEqual(items[3].textContent.trim(), 'Perú')
58
+
59
+ list.addEventListener('list-selected', event => {
60
+ assert.strictEqual(true, false) // never reached
41
61
  })
62
+ items[0].click()
63
+ })
42
64
 
43
- it('can be instantiated with items click-disabled', () => {
44
- expect.assertions(5)
45
- container.innerHTML = `
46
- <ark-list click-disabled></ark-list
47
- `
48
-
49
- const list = container.querySelector('ark-list')
50
- list.source = ['Colombia', 'Uruguay', 'Brasil', 'Perú']
51
- list.render()
52
- const items = list.selectAll('ark-list-item')
53
-
54
- expect(items.length).toEqual(4)
55
- expect(items[0].textContent.trim()).toEqual('Colombia')
56
- expect(items[1].textContent.trim()).toEqual('Uruguay')
57
- expect(items[2].textContent.trim()).toEqual('Brasil')
58
- expect(items[3].textContent.trim()).toEqual('Perú')
59
-
60
- list.addEventListener('list-selected', event => {
61
- expect(true).toBe(false) // never reached
62
- })
63
- items[0].click()
64
- })
65
+ it('can delete', async () => {
66
+ setup();
67
+ container.innerHTML = `
68
+ <ark-list click-disabled></ark-list
69
+ `
70
+
71
+ const list = container.querySelector('ark-list')
72
+ list.source = ['Colombia', 'Uruguay', 'Brasil', 'Perú']
73
+ list.render()
74
+
75
+ list.delete(1)
76
+ let items = list.selectAll('ark-list-item')
77
+ assert.deepStrictEqual(items.length, 3)
78
+ assert.deepStrictEqual(items[1].textContent.trim(), 'Brasil')
79
+
80
+ list.delete(0, 2)
81
+ items = list.selectAll('ark-list-item')
82
+ assert.deepStrictEqual(items.length, 1)
83
+ assert.deepStrictEqual(items[0].textContent.trim(), 'Perú')
84
+ })
65
85
 
66
- it('can delete', async () => {
67
- container.innerHTML = `
68
- <ark-list click-disabled></ark-list
69
- `
86
+ it('can select an item when it is clicked', async () => {
87
+ setup()
88
+ container.innerHTML = `
89
+ <ark-list></ark-list
90
+ `
70
91
 
71
- const list = container.querySelector('ark-list')
72
- list.source = ['Colombia', 'Uruguay', 'Brasil', 'Perú']
73
- list.render()
92
+ const list = container.querySelector('ark-list')
93
+ list.source = ['Colombia', 'Uruguay', 'Brasil', 'Perú']
94
+ list.render()
74
95
 
75
- list.delete(1)
76
- let items = list.selectAll('ark-list-item')
77
- expect(items.length).toEqual(3)
78
- expect(items[1].textContent.trim()).toEqual('Brasil')
96
+ const items = list.selectAll('ark-list-item')
97
+ assert.deepStrictEqual(items.length, 4)
79
98
 
80
- list.delete(0, 2)
81
- items = list.selectAll('ark-list-item')
82
- expect(items.length).toEqual(1)
83
- expect(items[0].textContent.trim()).toEqual('Perú')
99
+ const selected = new Promise((resolve) => {
100
+ list.addEventListener('list-selected', resolve, { once: true })
84
101
  })
85
102
 
86
- it('can select an item when it is clicked', (done) => {
87
- expect.assertions(2)
88
- container.innerHTML = `
89
- <ark-list></ark-list
90
- `
103
+ items[2].click()
104
+ const event = await selected
105
+ assert.deepStrictEqual(event.detail.data, 'Brasil')
106
+ })
91
107
 
92
- const list = container.querySelector('ark-list')
93
- list.source = ['Colombia', 'Uruguay', 'Brasil', 'Perú']
94
- list.render()
108
+ it('can be declaratively instantiated with JSON source', async () => {
109
+ setup();
110
+ const source = ['Colombia', 'Uruguay', 'Brasil', 'Perú']
95
111
 
96
- const items = list.selectAll('ark-list-item')
97
- expect(items.length).toEqual(4)
112
+ container.innerHTML = `
113
+ <ark-list>
114
+ <data>${JSON.stringify(source)}</data>
115
+ </ark-list>
116
+ `
98
117
 
99
- list.addEventListener('list-selected', event => {
100
- expect(event.detail.data).toEqual('Brasil')
101
- done()
102
- })
118
+ const list = container.querySelector('ark-list')
103
119
 
104
- items[2].click()
105
- })
120
+ const items = list.selectAll('ark-list-item')
106
121
 
107
- it('can be declaratively instantiated with JSON source', async () => {
108
- const source = ['Colombia', 'Uruguay', 'Brasil', 'Perú']
122
+ assert.deepStrictEqual(items.length, 4)
123
+ assert.deepStrictEqual(items[0].textContent.trim(), 'Colombia')
124
+ assert.deepStrictEqual(items[1].textContent.trim(), 'Uruguay')
125
+ assert.deepStrictEqual(items[2].textContent.trim(), 'Brasil')
126
+ assert.deepStrictEqual(items[3].textContent.trim(), 'Perú')
127
+ })
109
128
 
110
- container.innerHTML = `
111
- <ark-list>
112
- <data>${JSON.stringify(source)}</data>
113
- </ark-list>
114
- `
129
+ it('can be provided with a list item template', async () => {
130
+ setup();
131
+ const source = [
132
+ { name: 'Colombia', code: 'CO' },
133
+ { name: 'Uruguay', code: 'UY' },
134
+ { name: 'Brasil', code: 'BR' },
135
+ { name: 'Perú', code: 'PE' }
136
+ ]
137
+
138
+ container.innerHTML = `
139
+ <ark-list>
140
+ <data hidden>${JSON.stringify(source)}</data>
141
+ <template>
142
+ <dl>
143
+ <div>
144
+ <dt>Name</dt>
145
+ <dd>\${this.name}</dd>
146
+ </div>
147
+ <div>
148
+ <dt>Code</dt>
149
+ <dd>\${this.code}</dd>
150
+ </div>
151
+ </dl>
152
+ </template>
153
+ </ark-list>
154
+ `
155
+
156
+ const list = container.querySelector('ark-list')
157
+
158
+ const items = list.selectAll('ark-list-item')
159
+
160
+ assert.deepStrictEqual(items.length, 4)
161
+ assert.deepStrictEqual(
162
+ items[0].innerHTML.replace(/\s/g, ''),
163
+ '<dl><div><dt>Name</dt><dd>Colombia</dd></div>' +
164
+ '<div><dt>Code</dt><dd>CO</dd></div></dl>'
165
+ )
166
+ assert.deepStrictEqual(
167
+ items[1].innerHTML.replace(/\s/g, ''),
168
+ '<dl><div><dt>Name</dt><dd>Uruguay</dd></div>' +
169
+ '<div><dt>Code</dt><dd>UY</dd></div></dl>'
170
+ )
171
+ assert.deepStrictEqual(
172
+ items[2].innerHTML.replace(/\s/g, ''),
173
+ '<dl><div><dt>Name</dt><dd>Brasil</dd></div>' +
174
+ '<div><dt>Code</dt><dd>BR</dd></div></dl>'
175
+ )
176
+ assert.deepStrictEqual(
177
+ items[3].innerHTML.replace(/\s/g, ''),
178
+ '<dl><div><dt>Name</dt><dd>Perú</dd></div>' +
179
+ '<div><dt>Code</dt><dd>PE</dd></div></dl>'
180
+ )
181
+ })
115
182
 
116
- const list = container.querySelector('ark-list')
183
+ it('can be render simple lists with an item template', async () => {
184
+ setup();
185
+ const source = ['Colombia', 'Uruguay', 'Brasil', 'Perú']
186
+
187
+ container.innerHTML = `
188
+ <ark-list>
189
+ <data hidden>${JSON.stringify(source)}</data>
190
+ <template>
191
+ <span><strong>\${this}</strong></span>
192
+ </template>
193
+ </ark-list>
194
+ `
195
+
196
+ const list = container.querySelector('ark-list')
197
+
198
+ const items = list.selectAll('ark-list-item')
199
+
200
+ assert.deepStrictEqual(items.length, 4)
201
+ assert.deepStrictEqual(
202
+ items[0].innerHTML.replace(/\s/g, ''),
203
+ '<span><strong>Colombia</strong></span>'
204
+ )
205
+ assert.deepStrictEqual(
206
+ items[1].innerHTML.replace(/\s/g, ''),
207
+ '<span><strong>Uruguay</strong></span>'
208
+ )
209
+ assert.deepStrictEqual(
210
+ items[2].innerHTML.replace(/\s/g, ''),
211
+ '<span><strong>Brasil</strong></span>'
212
+ )
213
+ assert.deepStrictEqual(
214
+ items[3].innerHTML.replace(/\s/g, ''),
215
+ '<span><strong>Perú</strong></span>'
216
+ )
217
+ })
117
218
 
118
- const items = list.selectAll('ark-list-item')
219
+ it('can be rendered again given a new array through init', async () => {
220
+ setup();
221
+ let source = ['Colombia', 'Uruguay', 'Brasil', 'Perú']
222
+ container.innerHTML = `
223
+ <ark-list>
224
+ <data hidden>${JSON.stringify(source)}</data>
225
+ <template>
226
+ <span><strong>\${this}</strong></span>
227
+ </template>
228
+ </ark-list>
229
+ `
230
+ const list = container.querySelector('ark-list')
231
+ let items = list.selectAll('ark-list-item')
232
+ assert.deepStrictEqual(items.length, 4)
233
+ assert.deepStrictEqual(
234
+ items[0].innerHTML.replace(/\s/g, ''),
235
+ '<span><strong>Colombia</strong></span>'
236
+ )
237
+ assert.deepStrictEqual(
238
+ items[1].innerHTML.replace(/\s/g, ''),
239
+ '<span><strong>Uruguay</strong></span>'
240
+ )
241
+ assert.deepStrictEqual(
242
+ items[2].innerHTML.replace(/\s/g, ''),
243
+ '<span><strong>Brasil</strong></span>'
244
+ )
245
+ assert.deepStrictEqual(
246
+ items[3].innerHTML.replace(/\s/g, ''),
247
+ '<span><strong>Perú</strong></span>'
248
+ )
249
+
250
+ source = ['Ecuador', 'Panama', 'Venezuela', 'USA']
251
+ list.init({ source }).render()
252
+ items = list.selectAll('ark-list-item')
253
+
254
+ assert.deepStrictEqual(items.length, 4)
255
+ assert.deepStrictEqual(
256
+ items[0].innerHTML.replace(/\s/g, ''),
257
+ '<span><strong>Ecuador</strong></span>'
258
+ )
259
+ assert.deepStrictEqual(
260
+ items[1].innerHTML.replace(/\s/g, ''),
261
+ '<span><strong>Panama</strong></span>'
262
+ )
263
+ assert.deepStrictEqual(
264
+ items[2].innerHTML.replace(/\s/g, ''),
265
+ '<span><strong>Venezuela</strong></span>'
266
+ )
267
+ assert.deepStrictEqual(items[3].innerHTML.replace(/\s/g, ''), '<span><strong>USA</strong></span>')
268
+ })
119
269
 
120
- expect(items.length).toEqual(4)
121
- expect(items[0].textContent.trim()).toEqual('Colombia')
122
- expect(items[1].textContent.trim()).toEqual('Uruguay')
123
- expect(items[2].textContent.trim()).toEqual('Brasil')
124
- expect(items[3].textContent.trim()).toEqual('Perú')
270
+ it('listens to delete events to remove its items', () => {
271
+ setup();
272
+ const source = ['Colombia', 'Uruguay', 'Brasil', 'Perú']
273
+ container.innerHTML = `
274
+ <ark-list>
275
+ <data hidden>${JSON.stringify(source)}</data>
276
+ <template>
277
+ <span>
278
+ <strong>\${this}</strong></span>
279
+ <button data-\${this}>
280
+ DELETE
281
+ </button>
282
+ </template>
283
+ </ark-list>
284
+ `
285
+ const list = container.querySelector('ark-list')
286
+ let button = list.querySelector('[data-colombia]')
287
+
288
+ let items = list.selectAll('ark-list-item')
289
+ assert.deepStrictEqual(items.length, 4)
290
+
291
+ button.dispatchEvent(new CustomEvent('delete', { bubbles: true }))
292
+
293
+ button = list.querySelector('[data-colombia]')
294
+ items = list.selectAll('ark-list-item')
295
+
296
+ assert.deepStrictEqual(items.length, 3)
297
+ assert.strictEqual(button, null)
298
+ })
299
+
300
+ it('emits error when declarative source JSON is invalid', () => {
301
+ setup()
302
+ const list = document.createElement('ark-list')
303
+ list.innerHTML = `
304
+ <data>{ invalid json }</data>
305
+ `
306
+ let errorEvent = null
307
+ list.addEventListener('error', (event) => {
308
+ errorEvent = event
125
309
  })
126
310
 
127
- it('can be provided with a list item template', async () => {
128
- const source = [
129
- { name: 'Colombia', code: 'CO' },
130
- { name: 'Uruguay', code: 'UY' },
131
- { name: 'Brasil', code: 'BR' },
132
- { name: 'Perú', code: 'PE' }
133
- ]
134
-
135
- container.innerHTML = `
136
- <ark-list>
137
- <data hidden>${JSON.stringify(source)}</data>
138
- <template>
139
- <dl>
140
- <div>
141
- <dt>Name</dt>
142
- <dd>\${this.name}</dd>
143
- </div>
144
- <div>
145
- <dt>Code</dt>
146
- <dd>\${this.code}</dd>
147
- </div>
148
- </dl>
149
- </template>
150
- </ark-list>
151
- `
152
-
153
- const list = container.querySelector('ark-list')
154
-
155
- const items = list.selectAll('ark-list-item')
156
-
157
- expect(items.length).toEqual(4)
158
- expect(items[0].innerHTML.replace(/\s/g, '')).toEqual(
159
- '<dl><div><dt>Name</dt><dd>Colombia</dd></div>' +
160
- '<div><dt>Code</dt><dd>CO</dd></div></dl>')
161
- expect(items[1].innerHTML.replace(/\s/g, '')).toEqual(
162
- '<dl><div><dt>Name</dt><dd>Uruguay</dd></div>' +
163
- '<div><dt>Code</dt><dd>UY</dd></div></dl>')
164
- expect(items[2].innerHTML.replace(/\s/g, '')).toEqual(
165
- '<dl><div><dt>Name</dt><dd>Brasil</dd></div>' +
166
- '<div><dt>Code</dt><dd>BR</dd></div></dl>')
167
- expect(items[3].innerHTML.replace(/\s/g, '')).toEqual(
168
- '<dl><div><dt>Name</dt><dd>Perú</dd></div>' +
169
- '<div><dt>Code</dt><dd>PE</dd></div></dl>')
311
+ list.render()
312
+
313
+ assert.ok(errorEvent)
314
+ assert.deepStrictEqual(list.selectAll('ark-list-item').length, 0)
315
+ })
316
+
317
+ it('emits error when template compilation fails', () => {
318
+ setup()
319
+ const list = document.createElement('ark-list')
320
+ list.innerHTML = `
321
+ <data>${JSON.stringify(['Colombia'])}</data>
322
+ <template>\${this</template>
323
+ `
324
+ let errorEvent = null
325
+ list.addEventListener('error', (event) => {
326
+ errorEvent = event
327
+ })
328
+
329
+ list.render()
330
+
331
+ assert.ok(errorEvent)
332
+ assert.deepStrictEqual(list.select('ark-list-item').innerHTML, '')
333
+ })
334
+
335
+ it('emits error when template evaluation fails', () => {
336
+ setup()
337
+ const list = document.createElement('ark-list')
338
+ list.innerHTML = `
339
+ <data>${JSON.stringify([{ name: 'Colombia' }])}</data>
340
+ <template>\${this.missing.name}</template>
341
+ `
342
+ let errorEvent = null
343
+ list.addEventListener('error', (event) => {
344
+ errorEvent = event
170
345
  })
171
346
 
172
- it('can be render simple lists with an item template', async () => {
173
- const source = ['Colombia', 'Uruguay', 'Brasil', 'Perú']
174
-
175
- container.innerHTML = `
176
- <ark-list>
177
- <data hidden>${JSON.stringify(source)}</data>
178
- <template>
179
- <span><strong>\${this}</strong></span>
180
- </template>
181
- </ark-list>
182
- `
183
-
184
- const list = container.querySelector('ark-list')
185
-
186
- const items = list.selectAll('ark-list-item')
187
-
188
- expect(items.length).toEqual(4)
189
- expect(items[0].innerHTML.replace(/\s/g, '')).toEqual(
190
- '<span><strong>Colombia</strong></span>')
191
- expect(items[1].innerHTML.replace(/\s/g, '')).toEqual(
192
- '<span><strong>Uruguay</strong></span>')
193
- expect(items[2].innerHTML.replace(/\s/g, '')).toEqual(
194
- '<span><strong>Brasil</strong></span>')
195
- expect(items[3].innerHTML.replace(/\s/g, '')).toEqual(
196
- '<span><strong>Perú</strong></span>')
347
+ list.render()
348
+
349
+ assert.ok(errorEvent)
350
+ assert.deepStrictEqual(list.select('ark-list-item').innerHTML, '')
351
+ })
352
+
353
+ it('ignores selection events outside list items', () => {
354
+ setup()
355
+ container.innerHTML = `
356
+ <ark-list></ark-list>
357
+ `
358
+ const list = container.querySelector('ark-list')
359
+ list.source = ['Colombia']
360
+ list.render()
361
+
362
+ assert.doesNotThrow(() => {
363
+ list.dispatchEvent(new Event('click', { bubbles: true }))
197
364
  })
365
+ })
198
366
 
199
- it('can be rendered again given a new array through init', async () => {
200
- let source = ['Colombia', 'Uruguay', 'Brasil', 'Perú']
201
- container.innerHTML = `
202
- <ark-list>
203
- <data hidden>${JSON.stringify(source)}</data>
204
- <template>
205
- <span><strong>\${this}</strong></span>
206
- </template>
207
- </ark-list>
208
- `
209
- const list = container.querySelector('ark-list')
210
- let items = list.selectAll('ark-list-item')
211
- expect(items.length).toEqual(4)
212
- expect(items[0].innerHTML.replace(/\s/g, '')).toEqual(
213
- '<span><strong>Colombia</strong></span>')
214
- expect(items[1].innerHTML.replace(/\s/g, '')).toEqual(
215
- '<span><strong>Uruguay</strong></span>')
216
- expect(items[2].innerHTML.replace(/\s/g, '')).toEqual(
217
- '<span><strong>Brasil</strong></span>')
218
- expect(items[3].innerHTML.replace(/\s/g, '')).toEqual(
219
- '<span><strong>Perú</strong></span>')
220
-
221
- source = ['Ecuador', 'Panama', 'Venezuela', 'USA']
222
- list.init({ source }).render()
223
- items = list.selectAll('ark-list-item')
224
-
225
- expect(items.length).toEqual(4)
226
- expect(items[0].innerHTML.replace(/\s/g, '')).toEqual(
227
- '<span><strong>Ecuador</strong></span>')
228
- expect(items[1].innerHTML.replace(/\s/g, '')).toEqual(
229
- '<span><strong>Panama</strong></span>')
230
- expect(items[2].innerHTML.replace(/\s/g, '')).toEqual(
231
- '<span><strong>Venezuela</strong></span>')
232
- expect(items[3].innerHTML.replace(/\s/g, '')).toEqual(
233
- '<span><strong>USA</strong></span>')
367
+ it('ignores delete events outside list items', () => {
368
+ setup()
369
+ container.innerHTML = `
370
+ <ark-list></ark-list>
371
+ `
372
+ const list = container.querySelector('ark-list')
373
+ list.source = ['Colombia']
374
+ list.render()
375
+
376
+ assert.doesNotThrow(() => {
377
+ list.dispatchEvent(new CustomEvent('delete', { bubbles: true }))
234
378
  })
379
+ assert.deepStrictEqual(list.selectAll('ark-list-item').length, 1)
380
+ })
235
381
 
236
- it('listens to delete events to remove its items', () => {
237
- const source = ['Colombia', 'Uruguay', 'Brasil', 'Perú']
238
- container.innerHTML = `
239
- <ark-list>
240
- <data hidden>${JSON.stringify(source)}</data>
241
- <template>
242
- <span>
243
- <strong>\${this}</strong></span>
244
- <button data-\${this}>
245
- DELETE
246
- </button>
247
- </template>
248
- </ark-list>
249
- `
250
- const list = container.querySelector('ark-list')
251
- let button = list.querySelector('[data-colombia]')
252
-
253
- let items = list.selectAll('ark-list-item')
254
- expect(items.length).toEqual(4)
255
-
256
- button.dispatchEvent(new CustomEvent('delete', { bubbles: true }))
257
-
258
- button = list.querySelector('[data-colombia]')
259
- items = list.selectAll('ark-list-item')
260
-
261
- expect(items.length).toEqual(3)
262
- expect(button).toBeNull()
382
+ it('ignores deletions that are out of range', () => {
383
+ setup()
384
+ container.innerHTML = `
385
+ <ark-list></ark-list>
386
+ `
387
+ const list = container.querySelector('ark-list')
388
+ list.source = ['Colombia']
389
+ list.render()
390
+
391
+ assert.doesNotThrow(() => {
392
+ list.delete(10)
263
393
  })
394
+ assert.deepStrictEqual(list.selectAll('ark-list-item').length, 1)
264
395
  })