11import { describe , test , expect } from 'vitest'
2- import { CSSDataArena , STYLESHEET , DECLARATION , FLAG_IMPORTANT , FLAG_HAS_ERROR } from './arena'
2+ import { CSSDataArena , STYLESHEET , STYLE_RULE , DECLARATION , FLAG_IMPORTANT , FLAG_HAS_ERROR } from './arena'
33
44describe ( 'CSSDataArena' , ( ) => {
55 describe ( 'initialization' , ( ) => {
@@ -20,24 +20,24 @@ describe('CSSDataArena', () => {
2020 test ( 'should create nodes and increment count' , ( ) => {
2121 const arena = new CSSDataArena ( 10 )
2222
23- const node1 = arena . create_node ( )
23+ const node1 = arena . create_node ( STYLESHEET , 0 , 0 , 1 , 1 )
2424 expect ( node1 ) . toBe ( 1 ) // First node index is 1 (0 is reserved for "no node")
2525 expect ( arena . get_count ( ) ) . toBe ( 2 )
2626
27- const node2 = arena . create_node ( )
27+ const node2 = arena . create_node ( STYLESHEET , 0 , 0 , 1 , 1 )
2828 expect ( node2 ) . toBe ( 2 )
2929 expect ( arena . get_count ( ) ) . toBe ( 3 )
3030 } )
3131
3232 test ( 'should automatically grow when capacity is exceeded' , ( ) => {
3333 const arena = new CSSDataArena ( 3 )
3434
35- arena . create_node ( ) // 1
36- arena . create_node ( ) // 2
35+ arena . create_node ( STYLESHEET , 0 , 0 , 1 , 1 ) // 1
36+ arena . create_node ( STYLESHEET , 0 , 0 , 1 , 1 ) // 2
3737 expect ( arena . get_capacity ( ) ) . toBe ( 3 )
3838
3939 // This should trigger growth (count is now 3, capacity is 3)
40- const node3 = arena . create_node ( ) // 3
40+ const node3 = arena . create_node ( STYLESHEET , 0 , 0 , 1 , 1 ) // 3
4141 expect ( node3 ) . toBe ( 3 )
4242 expect ( arena . get_count ( ) ) . toBe ( 4 )
4343 // Capacity should be ceil(3 * 1.3) = 4
@@ -47,17 +47,11 @@ describe('CSSDataArena', () => {
4747 test ( 'should preserve existing data when growing' , ( ) => {
4848 const arena = new CSSDataArena ( 2 )
4949
50- const node1 = arena . create_node ( )
51- const node2 = arena . create_node ( )
52-
53- // Set data on existing nodes
54- arena . set_type ( node1 , STYLESHEET )
55- arena . set_start_offset ( node1 , 100 )
56- arena . set_type ( node2 , DECLARATION )
57- arena . set_start_offset ( node2 , 200 )
50+ const node1 = arena . create_node ( STYLESHEET , 100 , 0 , 1 , 1 )
51+ const node2 = arena . create_node ( DECLARATION , 200 , 0 , 1 , 1 )
5852
5953 // Trigger growth
60- const node3 = arena . create_node ( )
54+ const node3 = arena . create_node ( STYLESHEET , 0 , 0 , 1 , 1 )
6155
6256 // Verify old data is preserved
6357 expect ( arena . get_type ( node1 ) ) . toBe ( STYLESHEET )
@@ -74,41 +68,37 @@ describe('CSSDataArena', () => {
7468 describe ( 'node reading and writing' , ( ) => {
7569 test ( 'should read default values for uninitialized nodes' , ( ) => {
7670 const arena = new CSSDataArena ( 10 )
77- const node = arena . create_node ( )
71+ const node = arena . create_node ( STYLESHEET , 0 , 0 , 1 , 1 )
7872
79- expect ( arena . get_type ( node ) ) . toBe ( 0 )
73+ expect ( arena . get_type ( node ) ) . toBe ( STYLESHEET )
8074 expect ( arena . get_flags ( node ) ) . toBe ( 0 )
8175 expect ( arena . get_start_offset ( node ) ) . toBe ( 0 )
8276 expect ( arena . get_length ( node ) ) . toBe ( 0 )
8377 } )
8478
8579 test ( 'should write and read node type' , ( ) => {
8680 const arena = new CSSDataArena ( 10 )
87- const node = arena . create_node ( )
81+ const node = arena . create_node ( DECLARATION , 0 , 0 , 1 , 1 )
8882
8983 arena . set_type ( node , STYLESHEET )
9084 expect ( arena . get_type ( node ) ) . toBe ( STYLESHEET )
9185 } )
9286
9387 test ( 'should write and read node flags' , ( ) => {
9488 const arena = new CSSDataArena ( 10 )
95- const node = arena . create_node ( )
89+ const node = arena . create_node ( DECLARATION , 0 , 0 , 1 , 1 )
9690
9791 arena . set_flags ( node , FLAG_IMPORTANT )
9892 expect ( arena . get_flags ( node ) ) . toBe ( FLAG_IMPORTANT )
9993 } )
10094
10195 test ( 'should write and read all node properties' , ( ) => {
10296 const arena = new CSSDataArena ( 10 )
103- const node = arena . create_node ( )
97+ const node = arena . create_node ( DECLARATION , 100 , 50 , 5 , 1 )
10498
105- arena . set_type ( node , DECLARATION )
10699 arena . set_flags ( node , FLAG_IMPORTANT )
107- arena . set_start_offset ( node , 100 )
108- arena . set_length ( node , 50 )
109- arena . set_content_start ( node , 110 )
100+ arena . set_content_start_delta ( node , 10 )
110101 arena . set_content_length ( node , 30 )
111- arena . set_start_line ( node , 5 )
112102
113103 expect ( arena . get_type ( node ) ) . toBe ( DECLARATION )
114104 expect ( arena . get_flags ( node ) ) . toBe ( FLAG_IMPORTANT )
@@ -121,14 +111,8 @@ describe('CSSDataArena', () => {
121111
122112 test ( 'should handle multiple nodes independently' , ( ) => {
123113 const arena = new CSSDataArena ( 10 )
124- const node1 = arena . create_node ( )
125- const node2 = arena . create_node ( )
126-
127- arena . set_type ( node1 , STYLESHEET )
128- arena . set_start_offset ( node1 , 0 )
129-
130- arena . set_type ( node2 , DECLARATION )
131- arena . set_start_offset ( node2 , 100 )
114+ const node1 = arena . create_node ( STYLESHEET , 0 , 0 , 1 , 1 )
115+ const node2 = arena . create_node ( DECLARATION , 100 , 0 , 1 , 1 )
132116
133117 expect ( arena . get_type ( node1 ) ) . toBe ( STYLESHEET )
134118 expect ( arena . get_start_offset ( node1 ) ) . toBe ( 0 )
@@ -140,10 +124,10 @@ describe('CSSDataArena', () => {
140124 describe ( 'tree linking' , ( ) => {
141125 test ( 'should append first child to parent' , ( ) => {
142126 const arena = new CSSDataArena ( 10 )
143- const parent = arena . create_node ( )
144- const child = arena . create_node ( )
127+ const parent = arena . create_node ( STYLESHEET , 0 , 0 , 1 , 1 )
128+ const child = arena . create_node ( STYLE_RULE , 0 , 0 , 1 , 1 )
145129
146- arena . append_child ( parent , child )
130+ arena . append_children ( parent , [ child ] )
147131
148132 expect ( arena . get_first_child ( parent ) ) . toBe ( child )
149133 expect ( arena . has_children ( parent ) ) . toBe ( true )
@@ -152,14 +136,12 @@ describe('CSSDataArena', () => {
152136
153137 test ( 'should append multiple children as siblings' , ( ) => {
154138 const arena = new CSSDataArena ( 10 )
155- const parent = arena . create_node ( )
156- const child1 = arena . create_node ( )
157- const child2 = arena . create_node ( )
158- const child3 = arena . create_node ( )
139+ const parent = arena . create_node ( STYLESHEET , 0 , 0 , 1 , 1 )
140+ const child1 = arena . create_node ( STYLE_RULE , 0 , 0 , 1 , 1 )
141+ const child2 = arena . create_node ( STYLE_RULE , 0 , 0 , 1 , 1 )
142+ const child3 = arena . create_node ( STYLE_RULE , 0 , 0 , 1 , 1 )
159143
160- arena . append_child ( parent , child1 )
161- arena . append_child ( parent , child2 )
162- arena . append_child ( parent , child3 )
144+ arena . append_children ( parent , [ child1 , child2 , child3 ] )
163145
164146 expect ( arena . get_first_child ( parent ) ) . toBe ( child1 )
165147 expect ( arena . get_next_sibling ( child1 ) ) . toBe ( child2 )
@@ -169,18 +151,16 @@ describe('CSSDataArena', () => {
169151
170152 test ( 'should build complex tree structure' , ( ) => {
171153 const arena = new CSSDataArena ( 10 )
172- const root = arena . create_node ( )
173- const rule1 = arena . create_node ( )
174- const rule2 = arena . create_node ( )
175- const decl1 = arena . create_node ( )
176- const decl2 = arena . create_node ( )
154+ const root = arena . create_node ( STYLESHEET , 0 , 0 , 1 , 1 )
155+ const rule1 = arena . create_node ( STYLE_RULE , 0 , 0 , 1 , 1 )
156+ const rule2 = arena . create_node ( STYLE_RULE , 0 , 0 , 1 , 1 )
157+ const decl1 = arena . create_node ( DECLARATION , 0 , 0 , 1 , 1 )
158+ const decl2 = arena . create_node ( DECLARATION , 0 , 0 , 1 , 1 )
177159
178160 // Build tree: root -> [rule1, rule2]
179161 // rule1 -> [decl1, decl2]
180- arena . append_child ( root , rule1 )
181- arena . append_child ( root , rule2 )
182- arena . append_child ( rule1 , decl1 )
183- arena . append_child ( rule1 , decl2 )
162+ arena . append_children ( root , [ rule1 , rule2 ] )
163+ arena . append_children ( rule1 , [ decl1 , decl2 ] )
184164
185165 // Verify root level
186166 expect ( arena . get_first_child ( root ) ) . toBe ( rule1 )
@@ -198,7 +178,7 @@ describe('CSSDataArena', () => {
198178
199179 test ( 'should handle nodes with no children or siblings' , ( ) => {
200180 const arena = new CSSDataArena ( 10 )
201- const node = arena . create_node ( )
181+ const node = arena . create_node ( STYLESHEET , 0 , 0 , 1 , 1 )
202182
203183 expect ( arena . has_children ( node ) ) . toBe ( false )
204184 expect ( arena . has_next_sibling ( node ) ) . toBe ( false )
@@ -210,7 +190,7 @@ describe('CSSDataArena', () => {
210190 describe ( 'flag management' , ( ) => {
211191 test ( 'should set and check individual flags' , ( ) => {
212192 const arena = new CSSDataArena ( 10 )
213- const node = arena . create_node ( )
193+ const node = arena . create_node ( STYLESHEET , 0 , 0 , 1 , 1 )
214194
215195 expect ( arena . has_flag ( node , FLAG_IMPORTANT ) ) . toBe ( false )
216196
@@ -220,7 +200,7 @@ describe('CSSDataArena', () => {
220200
221201 test ( 'should set multiple flags independently' , ( ) => {
222202 const arena = new CSSDataArena ( 10 )
223- const node = arena . create_node ( )
203+ const node = arena . create_node ( STYLESHEET , 0 , 0 , 1 , 1 )
224204
225205 arena . set_flag ( node , FLAG_IMPORTANT )
226206
@@ -230,7 +210,7 @@ describe('CSSDataArena', () => {
230210
231211 test ( 'should clear individual flags without affecting others' , ( ) => {
232212 const arena = new CSSDataArena ( 10 )
233- const node = arena . create_node ( )
213+ const node = arena . create_node ( STYLESHEET , 0 , 0 , 1 , 1 )
234214
235215 arena . set_flag ( node , FLAG_IMPORTANT )
236216 arena . set_flag ( node , FLAG_HAS_ERROR )
@@ -241,7 +221,7 @@ describe('CSSDataArena', () => {
241221
242222 test ( 'should handle all flag combinations' , ( ) => {
243223 const arena = new CSSDataArena ( 10 )
244- const node = arena . create_node ( )
224+ const node = arena . create_node ( STYLESHEET , 0 , 0 , 1 , 1 )
245225
246226 // Set all flags at once using setFlags
247227 const allFlags = FLAG_IMPORTANT | FLAG_HAS_ERROR
0 commit comments