-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathindex.test.ts
More file actions
69 lines (62 loc) · 2 KB
/
index.test.ts
File metadata and controls
69 lines (62 loc) · 2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import { describe, expect, it } from 'bun:test'
import {
getBreakpointByWidth,
groupChildrenByBreakpoint,
groupNodesByName,
optimizeResponsiveValue,
} from '../index'
describe('responsive index helpers', () => {
it('maps width to breakpoint boundaries', () => {
expect(getBreakpointByWidth(320)).toBe('mobile')
expect(getBreakpointByWidth(768)).toBe('sm')
expect(getBreakpointByWidth(991)).toBe('tablet')
expect(getBreakpointByWidth(1280)).toBe('lg')
expect(getBreakpointByWidth(1600)).toBe('pc')
})
it('groups children by breakpoint', () => {
const mobileNode = { width: 320 } as unknown as SceneNode
const tabletNode = { width: 900 } as unknown as SceneNode
const groups = groupChildrenByBreakpoint([mobileNode, tabletNode])
expect(groups.get('mobile')).toEqual([mobileNode])
expect(groups.get('tablet')).toEqual([tabletNode])
})
it('optimizes responsive values by collapsing duplicates and trimming', () => {
expect(optimizeResponsiveValue(['200px', '200px', '100px', null])).toEqual([
'200px',
null,
'100px',
])
expect(optimizeResponsiveValue([null, null, null])).toBeNull()
expect(optimizeResponsiveValue(['80px', null, null])).toBe('80px')
})
it('groups nodes by name for responsive matching', () => {
const mobile = { name: 'Header' } as unknown as SceneNode
const tablet = { name: 'Header' } as unknown as SceneNode
const groups = groupNodesByName(
new Map([
['mobile', [mobile]],
['tablet', [tablet]],
]),
)
expect(groups.get('Header')).toEqual([
{ breakpoint: 'mobile', node: mobile, props: {} },
{ breakpoint: 'tablet', node: tablet, props: {} },
])
})
it('handles object equality and empty optimized array', () => {
const obj = { a: 1 }
const optimized = optimizeResponsiveValue([
obj,
{ a: 1 },
null,
null,
null,
null,
null,
null,
null,
null,
])
expect(optimized).toEqual(obj)
})
})