mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-17 13:55:50 +00:00
98 lines
3.1 KiB
TypeScript
98 lines
3.1 KiB
TypeScript
import { describe, expect, test } from 'bun:test'
|
|
|
|
const { treeify } = await import('../treeify')
|
|
|
|
describe('treeify', () => {
|
|
test('renders flat tree with two keys', () => {
|
|
const result = treeify({ a: 'value-a', b: 'value-b' })
|
|
const lines = result.split('\n')
|
|
expect(lines.length).toBe(2)
|
|
expect(lines[0]).toContain('a')
|
|
expect(lines[0]).toContain('value-a')
|
|
expect(lines[1]).toContain('b')
|
|
expect(lines[1]).toContain('value-b')
|
|
})
|
|
|
|
test('uses branch character for non-last items', () => {
|
|
const result = treeify({ a: '1', b: '2' })
|
|
// First item uses ├ (branch), last uses └ (lastBranch)
|
|
expect(result).toContain('├')
|
|
expect(result).toContain('└')
|
|
})
|
|
|
|
test('uses lastBranch for single item', () => {
|
|
const result = treeify({ only: 'val' })
|
|
expect(result).toContain('└')
|
|
expect(result).not.toContain('├')
|
|
})
|
|
|
|
test('renders nested objects', () => {
|
|
const result = treeify({ parent: { child: 'val' } })
|
|
expect(result).toContain('parent')
|
|
expect(result).toContain('child')
|
|
expect(result).toContain('val')
|
|
})
|
|
|
|
test('renders arrays with length', () => {
|
|
const result = treeify({ items: ['1', '2', '3'] } as any)
|
|
expect(result).toContain('items')
|
|
expect(result).toContain('[Array(3)]')
|
|
})
|
|
|
|
test('detects circular references', () => {
|
|
const obj: Record<string, unknown> = { name: 'root' }
|
|
obj.self = obj
|
|
const result = treeify(obj as any)
|
|
expect(result).toContain('[Circular]')
|
|
})
|
|
|
|
test('returns (empty) for empty object', () => {
|
|
const result = treeify({})
|
|
expect(result).toBe('(empty)')
|
|
})
|
|
|
|
test('hideFunctions filters out function values', () => {
|
|
const obj = { name: 'test', fn: () => {} }
|
|
const result = treeify(obj as any, { hideFunctions: true })
|
|
expect(result).toContain('name')
|
|
expect(result).not.toContain('fn')
|
|
})
|
|
|
|
test('showValues false hides leaf values', () => {
|
|
const obj = { name: 'test' }
|
|
const result = treeify(obj, { showValues: false })
|
|
expect(result).toContain('name')
|
|
expect(result).not.toContain('test')
|
|
})
|
|
|
|
test('showValues true shows function as [Function]', () => {
|
|
const obj = { fn: () => {} }
|
|
const result = treeify(obj as any, { showValues: true })
|
|
expect(result).toContain('[Function]')
|
|
})
|
|
|
|
test('deep nesting produces correct indentation', () => {
|
|
const obj = { a: { b: { c: 'deep' } } }
|
|
const result = treeify(obj)
|
|
const lines = result.split('\n')
|
|
expect(lines.length).toBe(3)
|
|
// Each level adds indentation
|
|
expect(lines[2].length).toBeGreaterThan(lines[1].length)
|
|
})
|
|
|
|
test('handles empty string key with string value', () => {
|
|
const obj = { ' ': 'whitespace-key' }
|
|
const result = treeify(obj)
|
|
expect(result).toContain('whitespace-key')
|
|
})
|
|
|
|
test('handles mixed object and primitive values', () => {
|
|
const obj = { name: 'test', nested: { inner: 'val' }, count: 5 }
|
|
const result = treeify(obj as any)
|
|
expect(result).toContain('name')
|
|
expect(result).toContain('nested')
|
|
expect(result).toContain('inner')
|
|
expect(result).toContain('count')
|
|
})
|
|
})
|