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
46 lines
2.3 KiB
TypeScript
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();
|
|
});
|
|
});
|