@@ -345,4 +345,74 @@ describe('SSR', () => {
345345 const pureStyle = extractStyle ( cache , true ) ;
346346 expect ( pureStyle ) . toMatchSnapshot ( ) ;
347347 } ) ;
348+
349+ it ( 'extract with order' , ( ) => {
350+ // Create 3 components without specified order: A, C, B
351+ const A = ( ) => {
352+ const [ token ] = useCacheToken < DerivativeToken > ( theme , [ baseToken ] , {
353+ cssVar : { key : 'css-var-test' } ,
354+ } ) ;
355+ useStyleRegister ( { theme, token, path : [ 'a' ] } , ( ) => ( {
356+ '.a' : { backgroundColor : token . primaryColor } ,
357+ } ) ) ;
358+ return < div className = "a" /> ;
359+ } ;
360+ const C = ( ) => {
361+ const [ token ] = useCacheToken < DerivativeToken > ( theme , [ baseToken ] , {
362+ cssVar : { key : 'css-var-test' } ,
363+ } ) ;
364+ useStyleRegister ( { theme, token, path : [ 'c' ] } , ( ) => ( {
365+ '.c' : { backgroundColor : token . primaryColor } ,
366+ } ) ) ;
367+ return < div className = "c" /> ;
368+ } ;
369+ const B = ( ) => {
370+ const [ token ] = useCacheToken < DerivativeToken > ( theme , [ baseToken ] , {
371+ cssVar : { key : 'css-var-test' } ,
372+ } ) ;
373+ useStyleRegister ( { theme, token, path : [ 'b' ] } , ( ) => ( {
374+ '.b' : { backgroundColor : token . primaryColor } ,
375+ } ) ) ;
376+ return < div className = "b" /> ;
377+ } ;
378+
379+ function testOrder (
380+ node1 : React . ReactElement ,
381+ node2 : React . ReactElement ,
382+ node3 : React . ReactElement ,
383+ componentMarks : string [ ] ,
384+ ) {
385+ const cache = createCache ( ) ;
386+
387+ renderToString (
388+ < StyleProvider cache = { cache } >
389+ { node1 }
390+ { node2 }
391+ { node3 }
392+ </ StyleProvider > ,
393+ ) ;
394+
395+ const plainStyle = extractStyle ( cache , true ) ;
396+ const index1 = plainStyle . indexOf ( `.${ componentMarks [ 0 ] } {` ) ;
397+ const index2 = plainStyle . indexOf ( `.${ componentMarks [ 1 ] } {` ) ;
398+ const index3 = plainStyle . indexOf ( `.${ componentMarks [ 2 ] } {` ) ;
399+
400+ expect ( index1 ) . toBeGreaterThanOrEqual ( 0 ) ;
401+ expect ( index2 ) . toBeGreaterThan ( index1 ) ;
402+ expect ( index3 ) . toBeGreaterThan ( index2 ) ;
403+ }
404+
405+ // A B C
406+ testOrder ( < A /> , < B /> , < C /> , [ 'a' , 'b' , 'c' ] ) ;
407+ // A C B
408+ testOrder ( < A /> , < C /> , < B /> , [ 'a' , 'c' , 'b' ] ) ;
409+ // B A C
410+ testOrder ( < B /> , < A /> , < C /> , [ 'b' , 'a' , 'c' ] ) ;
411+ // B C A
412+ testOrder ( < B /> , < C /> , < A /> , [ 'b' , 'c' , 'a' ] ) ;
413+ // C A B
414+ testOrder ( < C /> , < A /> , < B /> , [ 'c' , 'a' , 'b' ] ) ;
415+ // C B A
416+ testOrder ( < C /> , < B /> , < A /> , [ 'c' , 'b' , 'a' ] ) ;
417+ } ) ;
348418} ) ;
0 commit comments