✨ feat(vscode): 代码阅读把字典、对象字面量的值展开成键值树
This commit is contained in:
1 parent
51f2ef7bfa
commit
4930dc0d42
20 files changed
+578
-103
No files matched your search
@@ -1,7 +1,7 @@
|
||||
import type { BlockKind, BlockView } from './types'
|
||||
import type { ViewStateStorage } from './viewState'
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { collapsedIds, createViewStateStore, propertyRowId } from './viewState'
|
||||
import { collapsedIds, createViewStateStore, propertyItemId, propertyRowId } from './viewState'
|
||||
|
||||
/** 模拟 VS Code 的 webview 状态:存进去的要能序列化,页面重新加载后原样取回;也能塞进旧版本存的东西 */
|
||||
function memoryStorage(initial?: unknown): ViewStateStorage {
|
||||
@@ -73,6 +73,32 @@ describe('webview 状态', () => {
|
||||
createViewStateStore(storage).update({ folds: { 6.1: false, [propertyRowId('6.1.0', 3)]: true } })
|
||||
expect(createViewStateStore(storage).get().folds).toEqual({ '6.1': false, '6.1.0/p3': true })
|
||||
})
|
||||
|
||||
it('子行 id 是上一层的 id 加子行序号,一层层往后接;不同位置的不会撞上,也不会和块 id、属性行 id 撞上', () => {
|
||||
const row = propertyRowId('6.1.0', 3)
|
||||
expect(propertyItemId(row, 1)).toBe('6.1.0/p3/1')
|
||||
expect(propertyItemId(propertyItemId(row, 1), 0)).toBe('6.1.0/p3/1/0')
|
||||
const ids = [
|
||||
'6',
|
||||
'6.1',
|
||||
propertyRowId('6', 1),
|
||||
propertyRowId('6', 11),
|
||||
propertyItemId(propertyRowId('6', 1), 1),
|
||||
propertyItemId(propertyRowId('6', 11), 1),
|
||||
propertyItemId(propertyItemId(propertyRowId('6', 1), 1), 1),
|
||||
propertyItemId(propertyItemId(propertyRowId('6', 1), 11), 1),
|
||||
propertyItemId(propertyItemId(propertyRowId('6', 1), 1), 11),
|
||||
propertyItemId(propertyRowId('6.1', 1), 1),
|
||||
]
|
||||
expect(new Set(ids).size).toBe(ids.length)
|
||||
})
|
||||
|
||||
it('嵌套子行的折叠选择也存在 folds 里,页面重新加载后还在', () => {
|
||||
const storage = memoryStorage()
|
||||
const nested = propertyItemId(propertyItemId(propertyRowId('2', 2), 0), 1)
|
||||
createViewStateStore(storage).update({ folds: { [nested]: true, [propertyItemId(propertyRowId('2', 2), 0)]: false } })
|
||||
expect(createViewStateStore(storage).get().folds).toEqual({ '2/p2/0/1': true, '2/p2/0': false })
|
||||
})
|
||||
})
|
||||
|
||||
describe('眼下折叠着哪些', () => {
|
||||
@@ -84,4 +110,11 @@ describe('眼下折叠着哪些', () => {
|
||||
const folds = { '1': false, '2': false, '1.0': true, '1.0.0': false, [propertyRowId('0', 2)]: true, [propertyRowId('2.0', 1)]: false }
|
||||
expect([...collapsedIds(BLOCKS, folds)].sort()).toEqual(['0/p2', '1.0', '2.0'])
|
||||
})
|
||||
|
||||
it('带下一层的子行默认展开,用户折叠过的按他的', () => {
|
||||
const outer = propertyItemId(propertyRowId('0', 2), 0)
|
||||
const inner = propertyItemId(outer, 3)
|
||||
expect(collapsedIds(BLOCKS, {}).has(outer)).toBe(false)
|
||||
expect([...collapsedIds(BLOCKS, { [outer]: false, [inner]: true })].sort()).toEqual(['0/p2/0/3', '1', '1.0.0', '2', '2.0'])
|
||||
})
|
||||
})
|
||||
Reference in new issue
Block a user