/** @vitest-environment jsdom */ import { beforeEach, describe, expect, it } from 'vitest'; import { normalizeProjectCreationDirectory, readProjectCreationDirectory, writeProjectCreationDirectory, } from '../src/features/app-shell/model'; const STORAGE_KEY = 'genarrative-ai-game-creator.project-creation-directory.v1'; describe('项目创建目录偏好', () => { beforeEach(() => { window.localStorage.clear(); }); it('去掉首尾空白与多余分隔符,并保留盘根', () => { expect(normalizeProjectCreationDirectory(' ')).toBe(''); expect(normalizeProjectCreationDirectory(' F:\\Projects\\游戏\\ ')).toBe( 'F:\\Projects\\游戏', ); expect(normalizeProjectCreationDirectory('F:/Projects/游戏/')).toBe( 'F:/Projects/游戏', ); expect(normalizeProjectCreationDirectory('C:\\')).toBe('C:\\'); // 首尾空白按 trim 处理;目录中间的控制字符必须整条拒绝。 expect(normalizeProjectCreationDirectory('F:\\游戏\n')).toBe('F:\\游戏'); expect(normalizeProjectCreationDirectory('F:\\游\n戏')).toBe(''); }); it('保存选中的目录,并在恢复默认位置时清空', () => { expect(readProjectCreationDirectory()).toBe(''); expect(writeProjectCreationDirectory(' F:\\Projects\\游戏 ')).toBe( 'F:\\Projects\\游戏', ); expect(readProjectCreationDirectory()).toBe('F:\\Projects\\游戏'); expect(writeProjectCreationDirectory(' ')).toBe(''); expect(readProjectCreationDirectory()).toBe(''); }); it('忽略存储里不可用的值,退回默认位置', () => { window.localStorage.setItem(STORAGE_KEY, JSON.stringify('relative/games')); expect(readProjectCreationDirectory()).toBe(''); window.localStorage.setItem(STORAGE_KEY, JSON.stringify(42)); expect(readProjectCreationDirectory()).toBe(''); window.localStorage.setItem(STORAGE_KEY, '{not json'); expect(readProjectCreationDirectory()).toBe(''); }); });