⚡ perf(vscode): 切走的预览文件改了不在后台生成文档,切回来再补一次
This commit is contained in:
1 parent
50672c70d1
commit
7d6e7592c9
2 files changed
+88
-9
No files matched your search
@@ -253,6 +253,13 @@ function tab() {
|
||||
}
|
||||
}
|
||||
|
||||
/** 别处改了这份文件,文档变成 version 版:交给最近打开的预览听着的那个回调 */
|
||||
function edit(document: { version: number }, version: number): void {
|
||||
document.version = version
|
||||
const changed = vi.mocked(workspace.onDidChangeTextDocument).mock.calls.at(-1)![0]
|
||||
changed({ document, contentChanges: [{ rangeOffset: 0, rangeLength: 0, text: '// ' }] } as never)
|
||||
}
|
||||
|
||||
const comparedWithHead = expect.objectContaining({ type: 'diff', diff: expect.objectContaining({ base: '上一次提交' }) })
|
||||
|
||||
describe('预览对比什么看这个标签页是从哪儿打开的', () => {
|
||||
@@ -365,7 +372,7 @@ describe('标签页切走时页面留着', () => {
|
||||
expect(commands.executeCommand).not.toHaveBeenCalledWith('setContext', OCCURRENCES_CONTEXT, false)
|
||||
})
|
||||
|
||||
it('切走期间文件在别处改了:照常把新的文档发给留着的页面', async () => {
|
||||
it('切走期间文件在别处改了:不生成、不发文档,切回来生成一次发出去', async () => {
|
||||
const { provider, document } = opening()
|
||||
const page = tab()
|
||||
provider.resolveCustomTextEditor(document as never, page.panel)
|
||||
@@ -373,9 +380,65 @@ describe('标签页切走时页面留着', () => {
|
||||
|
||||
page.hide()
|
||||
page.clear()
|
||||
document.version = 2
|
||||
const edited = vi.mocked(workspace.onDidChangeTextDocument).mock.calls.at(-1)![0]
|
||||
edited({ document, contentChanges: [{ rangeOffset: 0, rangeLength: 0, text: '// ' }] } as never)
|
||||
vi.mocked(documentMessage).mockClear()
|
||||
edit(document, 2)
|
||||
edit(document, 3)
|
||||
await new Promise(resolve => setTimeout(resolve, 200))
|
||||
expect(documentMessage).not.toHaveBeenCalled()
|
||||
expect(page.posted()).toEqual([])
|
||||
|
||||
page.show()
|
||||
await vi.waitFor(() => expect(page.posted()).toContainEqual(expect.objectContaining({ type: 'document', version: 3 })))
|
||||
expect(documentMessage).toHaveBeenCalledTimes(1)
|
||||
})
|
||||
|
||||
it('改完还没来得及生成就切走了:排着的那次不在后台跑,切回来再生成', async () => {
|
||||
const { provider, document } = opening()
|
||||
const page = tab()
|
||||
provider.resolveCustomTextEditor(document as never, page.panel)
|
||||
await page.send({ type: 'ready' })
|
||||
|
||||
page.clear()
|
||||
vi.mocked(documentMessage).mockClear()
|
||||
edit(document, 2)
|
||||
page.hide()
|
||||
await new Promise(resolve => setTimeout(resolve, 200))
|
||||
expect(documentMessage).not.toHaveBeenCalled()
|
||||
|
||||
page.show()
|
||||
await vi.waitFor(() => expect(page.posted()).toContainEqual(expect.objectContaining({ type: 'document', version: 2 })))
|
||||
expect(documentMessage).toHaveBeenCalledTimes(1)
|
||||
})
|
||||
|
||||
it('切回来时还要滚到别处(跳定义打到它):等补发的文档一起带过去,不先滚旧的', async () => {
|
||||
const { provider, document } = opening()
|
||||
const page = tab()
|
||||
provider.resolveCustomTextEditor(document as never, page.panel)
|
||||
await page.send({ type: 'ready' })
|
||||
|
||||
page.hide()
|
||||
edit(document, 2)
|
||||
await new Promise(resolve => setTimeout(resolve, 200))
|
||||
page.clear()
|
||||
// 补生成要一会儿:跳过来的位置在生成完之前就到了
|
||||
const generate = vi.mocked(documentMessage).getMockImplementation()!
|
||||
vi.mocked(documentMessage).mockImplementationOnce(async (...args) => {
|
||||
await new Promise(resolve => setTimeout(resolve, 50))
|
||||
return generate(...args)
|
||||
})
|
||||
await provider.open(document.uri as never, { reveal: { line: 1 } }, async () => page.show())
|
||||
await vi.waitFor(() => expect(page.posted()).toContainEqual(expect.objectContaining({ type: 'document', version: 2, reveal: { line: 1 } })))
|
||||
expect(page.posted()).not.toContainEqual(expect.objectContaining({ type: 'reveal' }))
|
||||
})
|
||||
|
||||
it('分屏同时看着:文件改了照常马上更新', async () => {
|
||||
const { provider, document } = opening()
|
||||
const page = tab()
|
||||
provider.resolveCustomTextEditor(document as never, page.panel)
|
||||
await page.send({ type: 'ready' })
|
||||
|
||||
page.clear()
|
||||
edit(document, 2)
|
||||
await vi.waitFor(() => expect(page.posted()).toContainEqual(expect.objectContaining({ type: 'document', version: 2 })))
|
||||
})
|
||||
|
||||
|
||||
Reference in new issue
Block a user