refactor: release v1.0.5 安全精简与网站发布
web-platform-ci / Standalone decision service (no cloud credentials) (push) Has been cancelled
web-platform-ci / TypeScript, lint, unit, build (push) Has been cancelled
web-platform-ci / Playwright E2E (push) Has been cancelled
lekiwi-compatibility / cpu-compatibility (push) Has been cancelled
web-platform-ci / Standalone decision service (no cloud credentials) (pull_request) Has been cancelled
web-platform-ci / TypeScript, lint, unit, build (pull_request) Has been cancelled
web-platform-ci / Playwright E2E (pull_request) Has been cancelled
lekiwi-compatibility / cpu-compatibility (pull_request) Has been cancelled

This commit is contained in:
2026-09-29 09:55:08 +08:00
parent 7ebe9092ba
commit 26bb5634bd
64 changed files with 9048 additions and 3688 deletions
@@ -0,0 +1,45 @@
import { act, renderHook } from '@testing-library/react';
import { beforeEach, describe, expect, it, vi } from 'vitest';
import { useWorkbenchChrome } from './useWorkbenchChrome';
beforeEach(() => localStorage.clear());
describe('工作台界面状态组合', () => {
it('布局预设保持侧栏状态,控制预设打开控制工具', () => {
const root = { current: document.createElement('div') };
const { result } = renderHook(() => useWorkbenchChrome(root));
act(() => result.current.applyLayoutPreset('viewport'));
expect([result.current.leftOpen, result.current.rightOpen]).toEqual([false, false]);
act(() => result.current.applyLayoutPreset('project'));
expect([result.current.leftOpen, result.current.rightOpen]).toEqual([true, false]);
act(() => result.current.applyLayoutPreset('control'));
expect([result.current.leftOpen, result.current.rightOpen]).toEqual([false, true]);
expect(result.current.workspaceTool).toBe('controls');
act(() => result.current.applyLayoutPreset('default'));
expect([result.current.leftOpen, result.current.rightOpen]).toEqual([true, true]);
});
it('显示工具自动打开右栏,沿用传感器相机、力与角度的初始值', () => {
const root = { current: document.createElement('div') };
const { result } = renderHook(() => useWorkbenchChrome(root));
act(() => result.current.applyLayoutPreset('viewport'));
act(() => result.current.showWorkspaceTool('data'));
expect(result.current.workspaceTool).toBe('data');
expect(result.current.rightOpen).toBe(true);
expect(result.current.showSensorCamera).toBe(true);
expect(result.current.forceScale).toBe(50);
expect(result.current.angleUnit).toBe('rad');
});
it('全屏请求失败不冒泡,卸载移除全屏监听', async () => {
const root = { current: document.createElement('div') };
root.current.requestFullscreen = vi.fn(() => Promise.reject(new Error('浏览器拒绝')));
const remove = vi.spyOn(document, 'removeEventListener');
const { result, unmount } = renderHook(() => useWorkbenchChrome(root));
await act(async () => result.current.toggleFullscreen());
expect(root.current.requestFullscreen).toHaveBeenCalledOnce();
unmount();
expect(remove).toHaveBeenCalledWith('fullscreenchange', expect.any(Function));
remove.mockRestore();
});
});