Files
Mujoco_WASM/web_platform/src/app/hooks/useWorkbenchChrome.test.tsx
T
chenlin 26bb5634bd
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
refactor: release v1.0.5 安全精简与网站发布
2026-09-29 09:55:08 +08:00

46 lines
2.3 KiB
TypeScript

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();
});
});