Skip to content

Commit 166aca1

Browse files
Artur-claude
andcommitted
fix(select): update itemLabelGenerator tests to query listBox correctly
The tests were failing because they were querying for items directly in the overlay instead of first getting the listBox element. This fix ensures tests properly navigate the DOM structure to find the rendered items. Also adds an example of itemLabelGenerator usage to dev/select.html 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent f9b536a commit 166aca1

File tree

3 files changed

+40
-123
lines changed

3 files changed

+40
-123
lines changed

dev/select.html

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ <h2 class="heading">States</h2>
6464
</vaadin-select>
6565
</section>
6666

67+
<section class="section">
68+
<h2 class="heading">Item Label Generator</h2>
69+
<vaadin-select id="country-select" label="Country (with itemLabelGenerator)">
70+
<vaadin-tooltip slot="tooltip" text="Using itemLabelGenerator to show custom labels"></vaadin-tooltip>
71+
</vaadin-select>
72+
</section>
73+
6774
<script type="module">
6875
import { html, render } from 'lit';
6976

@@ -85,6 +92,17 @@ <h2 class="heading">States</h2>
8592
root,
8693
);
8794
};
95+
} else if (select.id === 'country-select') {
96+
// Example with itemLabelGenerator
97+
select.items = [
98+
{ code: 'US', name: 'United States', value: 'us' },
99+
{ code: 'GB', name: 'United Kingdom', value: 'gb' },
100+
{ code: 'FR', name: 'France', value: 'fr' },
101+
{ code: 'DE', name: 'Germany', value: 'de' },
102+
{ code: 'JP', name: 'Japan', value: 'jp' }
103+
];
104+
// Generate labels showing both code and name
105+
select.itemLabelGenerator = (item) => `${item.code} - ${item.name}`;
88106
} else {
89107
select.items = [
90108
{ label: 'Show all', value: 'all' },
@@ -99,4 +117,4 @@ <h2 class="heading">States</h2>
99117
});
100118
</script>
101119
</body>
102-
</html>
120+
</html>

packages/select/demo/item-label-generator-example.html

Lines changed: 0 additions & 115 deletions
This file was deleted.

packages/select/test/item-label-generator.test.js

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ describe('item-label-generator', () => {
2525
await oneEvent(select._overlayElement, 'vaadin-overlay-open');
2626
await nextRender();
2727

28-
const items = select._overlayElement.querySelectorAll('vaadin-select-item');
28+
const listBox = select._overlayElement.querySelector('vaadin-select-list-box');
29+
expect(listBox).to.be.ok;
30+
const items = listBox.querySelectorAll('vaadin-select-item');
31+
expect(items).to.have.lengthOf(3);
2932
expect(items[0].textContent).to.equal('Option 1');
3033
expect(items[1].textContent).to.equal('Option 2');
3134
expect(items[2].textContent).to.equal('Option 3');
@@ -39,7 +42,10 @@ describe('item-label-generator', () => {
3942
await oneEvent(select._overlayElement, 'vaadin-overlay-open');
4043
await nextRender();
4144

42-
const items = select._overlayElement.querySelectorAll('vaadin-select-item');
45+
const listBox = select._overlayElement.querySelector('vaadin-select-list-box');
46+
expect(listBox).to.be.ok;
47+
const items = listBox.querySelectorAll('vaadin-select-item');
48+
expect(items).to.have.lengthOf(3);
4349
expect(items[0].textContent).to.equal('Custom 1 - 1');
4450
expect(items[1].textContent).to.equal('Custom 2 - 2');
4551
expect(items[2].textContent).to.equal('Custom 3 - 3');
@@ -53,13 +59,15 @@ describe('item-label-generator', () => {
5359
await oneEvent(select._overlayElement, 'vaadin-overlay-open');
5460
await nextRender();
5561

56-
let items = select._overlayElement.querySelectorAll('vaadin-select-item');
62+
const listBox = select._overlayElement.querySelector('vaadin-select-list-box');
63+
expect(listBox).to.be.ok;
64+
let items = listBox.querySelectorAll('vaadin-select-item');
5765
expect(items[0].textContent).to.equal('1');
5866

5967
select.itemLabelGenerator = (item) => `Value: ${item.value}`;
6068
await nextFrame();
6169

62-
items = select._overlayElement.querySelectorAll('vaadin-select-item');
70+
items = listBox.querySelectorAll('vaadin-select-item');
6371
expect(items[0].textContent).to.equal('Value: 1');
6472
});
6573

@@ -71,7 +79,9 @@ describe('item-label-generator', () => {
7179
await oneEvent(select._overlayElement, 'vaadin-overlay-open');
7280
await nextRender();
7381

74-
const items = select._overlayElement.querySelectorAll('vaadin-select-item');
82+
const listBox = select._overlayElement.querySelector('vaadin-select-list-box');
83+
expect(listBox).to.be.ok;
84+
const items = listBox.querySelectorAll('vaadin-select-item');
7585
expect(items[0].textContent).to.equal('');
7686
});
7787

@@ -83,7 +93,9 @@ describe('item-label-generator', () => {
8393
await oneEvent(select._overlayElement, 'vaadin-overlay-open');
8494
await nextRender();
8595

86-
const items = select._overlayElement.querySelectorAll('vaadin-select-item');
96+
const listBox = select._overlayElement.querySelector('vaadin-select-list-box');
97+
expect(listBox).to.be.ok;
98+
const items = listBox.querySelectorAll('vaadin-select-item');
8799
expect(items[0].textContent).to.equal('');
88100
});
89101
});
@@ -102,7 +114,9 @@ describe('item-label-generator', () => {
102114
await oneEvent(select._overlayElement, 'vaadin-overlay-open');
103115
await nextRender();
104116

105-
const items = select._overlayElement.querySelectorAll('vaadin-select-item');
117+
const listBox = select._overlayElement.querySelector('vaadin-select-list-box');
118+
expect(listBox).to.be.ok;
119+
const items = listBox.querySelectorAll('vaadin-select-item');
106120
expect(items[0].textContent).to.equal('John (30)');
107121
expect(items[1].textContent).to.equal('Jane (25)');
108122
});

0 commit comments

Comments
 (0)