This commit is contained in:
2026-09-12 14:15:26 +08:00
commit 9c06d3f4be
99 changed files with 41853 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
// src/focus-trap.js 单测Phase O-L14 audit
//
// 覆盖:
// - IME 合成期间isComposing=true按 Tab 不抢焦点
// - keyCode=229Firefox / 旧 Chromium fallback按 Tab 不抢焦点
// - 普通 Tab 行为不变(首尾循环 / 容器内跳转)
/* @vitest-environment jsdom */
import { describe, it, expect, beforeEach } from 'vitest';
import { createFocusTrap } from '../../src/focus-trap.js';
let container;
let firstBtn;
let middleBtn;
let lastBtn;
beforeEach(() => {
document.body.innerHTML = '';
container = document.createElement('div');
container.tabIndex = -1;
firstBtn = document.createElement('button');
firstBtn.textContent = 'first';
middleBtn = document.createElement('button');
middleBtn.textContent = 'middle';
lastBtn = document.createElement('button');
lastBtn.textContent = 'last';
container.appendChild(firstBtn);
container.appendChild(middleBtn);
container.appendChild(lastBtn);
document.body.appendChild(container);
});
function fireKey(target, opts) {
const ev = new KeyboardEvent('keydown', { bubbles: true, cancelable: true, ...opts });
target.dispatchEvent(ev);
return ev;
}
describe('focus-trap IME 合成守门Phase O-L14', () => {
it('isComposing=true 时 Tab 不抢焦点preventDefault 不触发)', () => {
const trap = createFocusTrap(container);
// 模拟 IME 合成期间按 Tab
const ev = fireKey(middleBtn, { key: 'Tab', isComposing: true });
// IME 期间不拦 Tab让浏览器处理候选词
expect(ev.defaultPrevented).toBe(false);
trap.dispose();
});
it('keyCode=229Firefox / 旧 Chromium fallback时 Tab 不抢焦点', () => {
const trap = createFocusTrap(container);
const ev = fireKey(middleBtn, { key: 'Tab', keyCode: 229 });
expect(ev.defaultPrevented).toBe(false);
trap.dispose();
});
});