901530ae41
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
81 lines
2.8 KiB
TypeScript
81 lines
2.8 KiB
TypeScript
import { describe, it, expect, beforeEach } from 'vitest';
|
|
import { useDevIndices } from '../../resources/js/composables/useDevIndices';
|
|
|
|
describe('useDevIndices', () => {
|
|
beforeEach(() => {
|
|
// Composable uses module-level singleton — reset for test isolation
|
|
useDevIndices().reset();
|
|
});
|
|
|
|
it('initial state: no target, overlay off', () => {
|
|
const dx = useDevIndices();
|
|
expect(dx.currentId.value).toBeNull();
|
|
expect(dx.currentTarget.value).toBeNull();
|
|
expect(dx.overlayMode.value).toBe(false);
|
|
});
|
|
|
|
it('setTarget extracts data-dx attribute', () => {
|
|
const dx = useDevIndices();
|
|
const el = document.createElement('div');
|
|
el.setAttribute('data-dx', '1030');
|
|
dx.setTarget(el);
|
|
expect(dx.currentTarget.value).toBe(el);
|
|
expect(dx.currentId.value).toBe(1030);
|
|
});
|
|
|
|
it('setTarget(null) clears state', () => {
|
|
const dx = useDevIndices();
|
|
const el = document.createElement('div');
|
|
el.setAttribute('data-dx', '5');
|
|
dx.setTarget(el);
|
|
dx.setTarget(null);
|
|
expect(dx.currentId.value).toBeNull();
|
|
});
|
|
|
|
it('toggleOverlay flips overlayMode', () => {
|
|
const dx = useDevIndices();
|
|
expect(dx.overlayMode.value).toBe(false);
|
|
dx.toggleOverlay();
|
|
expect(dx.overlayMode.value).toBe(true);
|
|
dx.toggleOverlay();
|
|
expect(dx.overlayMode.value).toBe(false);
|
|
});
|
|
|
|
it('walkToParent finds nearest ancestor with data-dx', () => {
|
|
const dx = useDevIndices();
|
|
const grand = document.createElement('div');
|
|
grand.setAttribute('data-dx', '100');
|
|
const parent = document.createElement('span');
|
|
// parent has NO data-dx — should skip
|
|
const child = document.createElement('button');
|
|
child.setAttribute('data-dx', '200');
|
|
parent.appendChild(child);
|
|
grand.appendChild(parent);
|
|
dx.setTarget(child);
|
|
dx.walkToParent();
|
|
expect(dx.currentId.value).toBe(100);
|
|
expect(dx.currentTarget.value).toBe(grand);
|
|
});
|
|
|
|
it('walkToChild finds first descendant with data-dx (DFS/BFS)', () => {
|
|
const dx = useDevIndices();
|
|
const root = document.createElement('div');
|
|
root.setAttribute('data-dx', '1');
|
|
const inner = document.createElement('span');
|
|
inner.setAttribute('data-dx', '2');
|
|
root.appendChild(inner);
|
|
dx.setTarget(root);
|
|
dx.walkToChild();
|
|
expect(dx.currentId.value).toBe(2);
|
|
});
|
|
|
|
it('walkToParent at root does nothing', () => {
|
|
const dx = useDevIndices();
|
|
const el = document.createElement('div');
|
|
el.setAttribute('data-dx', '1');
|
|
dx.setTarget(el);
|
|
dx.walkToParent();
|
|
expect(dx.currentId.value).toBe(1);
|
|
});
|
|
});
|