@@ -3,6 +3,7 @@ import {ComponentFixture, TestBed} from '@angular/core/testing';
33import { By } from '@angular/platform-browser' ;
44import { provideFakeDirectionality , runAccessibilityChecks } from '@angular/cdk/testing/private' ;
55import { _IdGenerator } from '@angular/cdk/a11y' ;
6+ import { waitForMicrotasks } from '../private/testing/test-helpers' ;
67import { AccordionPanel } from './accordion-panel' ;
78import { AccordionTrigger } from './accordion-trigger' ;
89import { AccordionContent } from './accordion-content' ;
@@ -57,7 +58,6 @@ describe('AccordionGroup', () => {
5758
5859 const getTriggerAttribute = ( index : number , attribute : string ) =>
5960 triggerElements [ index ] . getAttribute ( attribute ) ;
60- const getTriggerText = ( index : number ) => triggerElements [ index ] . textContent ?. trim ( ) ;
6161
6262 const getPanelAttribute = ( index : number , attribute : string ) =>
6363 panelElements [ index ] . getAttribute ( attribute ) ;
@@ -292,68 +292,24 @@ describe('AccordionGroup', () => {
292292 expect ( isTriggerExpanded ( 0 ) ) . toBeFalse ( ) ;
293293 } ) ;
294294
295- describe ( 'with shuffled items' , ( ) => {
296- it ( 'should focus on new last trigger with End' , ( ) => {
297- const items = testComponent . items ( ) . reverse ( ) ;
298- testComponent . items . set ( [ ...items ] ) ;
299- fixture . detectChanges ( ) ;
300-
301- // Now reversed, End should move to the former first trigger.
302- endKey ( ) ;
303- expect ( isTriggerActive ( 0 ) ) . toBeTrue ( ) ;
304- } ) ;
305-
306- it ( 'should focus on newly prepended trigger with Begin' , ( ) => {
307- const items = testComponent . items ( ) ;
308- items . unshift ( {
309- panelId : 'item-0' ,
310- header : 'Item 0 Header' ,
311- content : 'Item 0 Content' ,
312- disabled : signal ( false ) ,
313- expanded : signal ( false ) ,
314- } ) ;
315- testComponent . items . set ( [ ...items ] ) ;
316- setupTriggerAndPanels ( ) ;
317-
318- homeKey ( ) ;
319- expect ( isTriggerActive ( 0 ) ) . toBeTrue ( ) ;
320- expect ( getTriggerText ( 0 ) ) . toBe ( 'Item 0 Header' ) ;
321- } ) ;
295+ it ( 'should update collection order when items are shuffled' , async ( ) => {
296+ const groupDebugElement = fixture . debugElement . query ( By . directive ( AccordionGroup ) ) ;
297+ const groupDirective = groupDebugElement . injector . get ( AccordionGroup ) ;
322298
323- it ( 'should focus on newly appended trigger with End' , ( ) => {
324- const items = testComponent . items ( ) ;
325- items . push ( {
326- panelId : 'item-4' ,
327- header : 'Item 4 Header' ,
328- content : 'Item 4 Content' ,
329- disabled : signal ( false ) ,
330- expanded : signal ( false ) ,
331- } ) ;
332- testComponent . items . set ( [ ...items ] ) ;
333- setupTriggerAndPanels ( ) ;
299+ let orderedItems = groupDirective . _collection . orderedItems ( ) ;
300+ expect ( orderedItems . length ) . toBe ( 3 ) ;
301+ expect ( orderedItems [ 0 ] . element . textContent ?. trim ( ) ) . toBe ( 'Item 1 Header' ) ;
302+ expect ( orderedItems [ 2 ] . element . textContent ?. trim ( ) ) . toBe ( 'Item 3 Header' ) ;
334303
335- endKey ( ) ;
336- expect ( isTriggerActive ( 3 ) ) . toBeTrue ( ) ;
337- expect ( getTriggerText ( 3 ) ) . toBe ( 'Item 4 Header' ) ;
338- } ) ;
339-
340- it ( 'should focus on inserted trigger with navigation' , ( ) => {
341- const items = testComponent . items ( ) ;
342- items . splice ( 2 , 0 , {
343- panelId : 'item-2a' ,
344- header : 'Item 2a Header' ,
345- content : 'Item 2a Content' ,
346- disabled : signal ( false ) ,
347- expanded : signal ( false ) ,
348- } ) ;
349- testComponent . items . set ( [ ...items ] ) ;
350- setupTriggerAndPanels ( ) ;
304+ const items = testComponent . items ( ) . reverse ( ) ;
305+ testComponent . items . set ( [ ...items ] ) ;
306+ fixture . detectChanges ( ) ;
307+ await waitForMicrotasks ( ) ;
351308
352- downArrowKey ( ) ;
353- downArrowKey ( ) ;
354- expect ( isTriggerActive ( 2 ) ) . toBeTrue ( ) ;
355- expect ( triggerElements [ 2 ] . textContent ?. trim ( ) ) . toBe ( 'Item 2a Header' ) ;
356- } ) ;
309+ orderedItems = groupDirective . _collection . orderedItems ( ) ;
310+ expect ( orderedItems . length ) . toBe ( 3 ) ;
311+ expect ( orderedItems [ 0 ] . element . textContent ?. trim ( ) ) . toBe ( 'Item 3 Header' ) ;
312+ expect ( orderedItems [ 2 ] . element . textContent ?. trim ( ) ) . toBe ( 'Item 1 Header' ) ;
357313 } ) ;
358314
359315 describe ( 'wrap behavior' , ( ) => {
@@ -539,7 +495,6 @@ describe('AccordionGroup', () => {
539495 <div>
540496 <button
541497 ngAccordionTrigger
542- [index]="$index"
543498 [panel]="panel"
544499 [disabled]="item.disabled()"
545500 [(expanded)]="item.expanded"
0 commit comments