import '../../../dist/shoelace.js'; import { expect, fixture, html } from '@open-wc/testing'; import sinon from 'sinon'; import type SlImageComparer from './image-comparer.js'; describe('', () => { it('should render a basic before/after', async () => { const el = await fixture(html`
`); const afterPart = el.shadowRoot!.querySelector('[part~="after"]')!; const iconContainer = el.shadowRoot!.querySelector('slot[name="handle"]')!; const handle = el.shadowRoot!.querySelector('[part~="handle"]')!; expect(el.position).to.equal(50); expect(afterPart.getAttribute('style')).to.equal('clip-path:inset(0 50% 0 0);'); expect(iconContainer.assignedElements().length).to.equal(0); expect(handle.getAttribute('role')).to.equal('scrollbar'); expect(handle.getAttribute('aria-valuenow')).to.equal('50'); expect(handle.getAttribute('aria-valuemin')).to.equal('0'); expect(handle.getAttribute('aria-valuemax')).to.equal('100'); }); it('should emit change event when position changed manually', async () => { const el = await fixture(html`
`); const handler = sinon.spy(); el.addEventListener('sl-change', handler, { once: true }); el.position = 40; await el.updateComplete; expect(handler.called).to.equal(true); }); it('should increment position on arrow right', async () => { const el = await fixture(html`
`); const base = el.shadowRoot!.querySelector('[part~="base"]')!; base.dispatchEvent( new KeyboardEvent('keydown', { key: 'ArrowRight' }) ); await el.updateComplete; expect(el.position).to.equal(51); }); it('should decrement position on arrow left', async () => { const el = await fixture(html`
`); const base = el.shadowRoot!.querySelector('[part~="base"]')!; base.dispatchEvent( new KeyboardEvent('keydown', { key: 'ArrowLeft' }) ); await el.updateComplete; expect(el.position).to.equal(49); }); it('should set position to 0 on home key', async () => { const el = await fixture(html`
`); const base = el.shadowRoot!.querySelector('[part~="base"]')!; base.dispatchEvent( new KeyboardEvent('keydown', { key: 'Home' }) ); await el.updateComplete; expect(el.position).to.equal(0); }); it('should set position to 100 on end key', async () => { const el = await fixture(html`
`); const base = el.shadowRoot!.querySelector('[part~="base"]')!; base.dispatchEvent( new KeyboardEvent('keydown', { key: 'End' }) ); await el.updateComplete; expect(el.position).to.equal(100); }); it('should clamp to 100 on arrow right', async () => { const el = await fixture(html`
`); el.position = 0; await el.updateComplete; const base = el.shadowRoot!.querySelector('[part~="base"]')!; base.dispatchEvent( new KeyboardEvent('keydown', { key: 'ArrowLeft' }) ); await el.updateComplete; expect(el.position).to.equal(0); }); it('should clamp to 0 on arrow left', async () => { const el = await fixture(html`
`); el.position = 100; await el.updateComplete; const base = el.shadowRoot!.querySelector('[part~="base"]')!; base.dispatchEvent( new KeyboardEvent('keydown', { key: 'ArrowRight' }) ); await el.updateComplete; expect(el.position).to.equal(100); }); it('should increment position by 10 on arrow right + shift', async () => { const el = await fixture(html`
`); const base = el.shadowRoot!.querySelector('[part~="base"]')!; base.dispatchEvent( new KeyboardEvent('keydown', { key: 'ArrowRight', shiftKey: true }) ); await el.updateComplete; expect(el.position).to.equal(60); }); it('should decrement position by 10 on arrow left + shift', async () => { const el = await fixture(html`
`); const base = el.shadowRoot!.querySelector('[part~="base"]')!; base.dispatchEvent( new KeyboardEvent('keydown', { key: 'ArrowLeft', shiftKey: true }) ); await el.updateComplete; expect(el.position).to.equal(40); }); it('should set position by attribute', async () => { const el = await fixture(html`
`); expect(el.position).to.equal(10); }); it('should move position on drag', async () => { const el = await fixture(html`
`); const handle = el.shadowRoot!.querySelector('[part~="handle"]')!; const base = el.shadowRoot!.querySelector('[part~="base"]')!; const rect = base.getBoundingClientRect(); const offsetX = rect.left + window.scrollX; const offsetY = rect.top + window.scrollY; handle.dispatchEvent(new MouseEvent('mousedown', { bubbles: true })); document.dispatchEvent( new PointerEvent('pointermove', { clientX: offsetX + 20, clientY: offsetY }) ); document.dispatchEvent(new PointerEvent('pointerup')); await el.updateComplete; expect(el.position).to.equal(40); }); });