import test from 'node:test' import assert from 'node:assert/strict' import { loadModule } from './load.mjs' const { isRowActivation } = await loadModule('src/lib/rowClick.js') const TAGS = ['a', 'button', 'select', 'input', 'textarea', 'label'] // Ereignis ohne DOM: closest liefert nur dann einen Treffer, wenn der Selektor das Tag nennt function click({ target = 'td', outside = false, ...over } = {}) { const row = { contains: (el) => el?.inRow === true } const hit = TAGS.includes(target) ? { inRow: !outside } : null return { target: { closest: (sel) => (hit && sel.split(',').map((s) => s.trim()).includes(target) ? hit : null) }, currentTarget: row, button: 0, defaultPrevented: false, metaKey: false, ctrlKey: false, shiftKey: false, altKey: false, ...over, } } test('Linksklick auf Zelle oder Zeile aktiviert die Zeile', () => { assert.equal(isRowActivation(click()), true) assert.equal(isRowActivation(click({ target: 'tr' })), true) }) test('Klick auf a, button, select, input, textarea oder label aktiviert nicht', () => { for (const tag of TAGS) assert.equal(isRowActivation(click({ target: tag })), false, tag) }) test('Mittelklick, Modifikatortasten und behandelte Klicks aktivieren nicht', () => { assert.equal(isRowActivation(click({ button: 1 })), false) for (const key of ['metaKey', 'ctrlKey', 'shiftKey', 'altKey']) assert.equal(isRowActivation(click({ [key]: true })), false, key) assert.equal(isRowActivation(click({ defaultPrevented: true })), false) }) test('ein interaktiver Vorfahre außerhalb der Zeile zählt nicht', () => { assert.equal(isRowActivation(click({ target: 'label', outside: true })), true) })