import { LionButton } from '@lion/button'; import { defineCE, expect, fixture, html } from '@open-wc/testing'; import '../lion-select-invoker.js'; import { LionSelectInvoker } from '../src/LionSelectInvoker.js'; describe('lion-select-invoker', () => { it('should behave as a button', async () => { const el = await fixture(html``); expect(el instanceof LionButton).to.be.true; }); it('renders invoker info based on selectedElement child elements', async () => { const el = await fixture(html``); el.selectedElement = await fixture( `
Textnode

I am

2 lines

`, ); await el.updateComplete; expect(el._contentWrapperNode).lightDom.to.equal( ` Textnode

I am

2 lines

`, { ignoreAttributes: ['class'], // ShadyCss automatically adds classes }, ); }); it('renders invoker info based on selectedElement textContent', async () => { const el = await fixture(html``); el.selectedElement = await fixture(`
just textContent
`); await el.updateComplete; expect(el._contentWrapperNode).lightDom.to.equal('just textContent'); }); it('has tabindex="0"', async () => { const el = await fixture(html``); expect(el.tabIndex).to.equal(0); expect(el.getAttribute('tabindex')).to.equal('0'); }); it('should not render after slot when singleOption is true', async () => { const el = await fixture(html` `); expect(el.shadowRoot.querySelector('slot[name="after"]')).to.not.exist; }); it('should render after slot when singleOption is not true', async () => { const el = await fixture(html``); expect(el.shadowRoot.querySelector('slot[name="after"]')).to.exist; }); describe('Subclassers', () => { it('supports a custom _contentTemplate', async () => { const myTag = defineCE( class extends LionSelectInvoker { _contentTemplate() { if (this.selectedElement && this.selectedElement.textContent === 'cat') { return html`cat selected `; } return `no valid selection`; } }, ); const el = await fixture(`<${myTag}>`); el.selectedElement = await fixture(`
cat
`); await el.updateComplete; expect(el._contentWrapperNode).lightDom.to.equal('cat selected'); el.selectedElement = await fixture(`
dog
`); await el.updateComplete; expect(el._contentWrapperNode).lightDom.to.equal('no valid selection'); }); }); });