// @vitest-environment happy-dom import { describe, expect, it, beforeEach } from 'vitest'; import { resolveSelector } from './selectors.js'; beforeEach(() => { document.body.innerHTML = `
Link component target
`; }); describe('resolveSelector', () => { it('resolves by css', () => { const r = resolveSelector({ css: 'button.primary' }); expect(r.via).toBe('css'); expect((r.element as HTMLElement).textContent).toBe('Submit'); }); it('resolves by aria-label', () => { const r = resolveSelector({ ariaLabel: 'submit' }); expect(r.via).toBe('aria'); expect((r.element as HTMLElement).tagName.toLowerCase()).toBe('button'); }); it('resolves by role + text', () => { const r = resolveSelector({ role: 'button', text: 'Submit' }); expect(r.via).toBe('role-text'); }); it('resolves by component data attribute', () => { const r = resolveSelector({ component: 'SubmitButton' }); expect(r.via).toBe('component-attr'); expect((r.element as HTMLElement).textContent).toBe('component target'); }); it('resolves by file:line', () => { const r = resolveSelector({ file: 'src/Login.tsx', line: 42 }); expect(r.via).toBe('file'); }); it('returns null for no match', () => { const r = resolveSelector({ css: '.does-not-exist' }); expect(r.element).toBeNull(); expect(r.via).toBe('none'); }); });