🐛 fix(vscode): 代码阅读预览记住浏览位置,编辑 / 预览互切位置对齐

This commit is contained in:
cruldra committed 2026-09-25 03:21:14 +08:00
1 parent 6897954644
commit 37306bd23e
13 files changed
+409 -37

No files matched your search

@@ -0,0 +1,37 @@
import type { ViewState, ViewStateStorage } from './viewState'
import { describe, expect, it } from 'vitest'
import { createViewStateStore } from './viewState'
/** 模拟 VS Code 的 webview 状态:存进去的要能序列化,页面重新加载后原样取回 */
function memoryStorage(): ViewStateStorage {
let saved: string | undefined
return {
getState: () => saved === undefined ? undefined : JSON.parse(saved) as ViewState,
setState: (state) => {
saved = JSON.stringify(state)
},
}
}
describe('webview 状态', () => {
it('第一次打开:没有编辑中、折叠的块,也没有滚动位置', () => {
expect(createViewStateStore(memoryStorage()).get()).toEqual({ editing: [], collapsed: [] })
})
it('块状态和滚动位置各自更新,互不覆盖', () => {
const storage = memoryStorage()
const store = createViewStateStore(storage)
store.update({ editing: ['2'], collapsed: ['6.1'] })
store.update({ scroll: { line: 12, offset: 30, scrollTop: 480 } })
store.update({ editing: [], collapsed: ['6.1'] })
expect(storage.getState()).toEqual({ editing: [], collapsed: ['6.1'], scroll: { line: 12, offset: 30, scrollTop: 480 } })
})
it('页面重新加载后取回上次存的全部状态', () => {
const storage = memoryStorage()
const store = createViewStateStore(storage)
store.update({ collapsed: ['3'] })
store.update({ scroll: { line: 40, offset: -6, scrollTop: 1210 } })
expect(createViewStateStore(storage).get()).toEqual({ editing: [], collapsed: ['3'], scroll: { line: 40, offset: -6, scrollTop: 1210 } })
})
})