@@ -524,6 +524,28 @@ describe('Standalone Menu Pattern', () => {
524524 } ) ;
525525 } ) ;
526526
527+ describe ( 'role override' , ( ) => {
528+ it ( 'should allow overriding the default menuitem role' , ( ) => {
529+ TestBed . resetTestingModule ( ) ;
530+ TestBed . configureTestingModule ( {
531+ imports : [ MenuItemRoleOverrideExample ] ,
532+ } ) ;
533+ const roleFixture = TestBed . createComponent ( MenuItemRoleOverrideExample ) ;
534+ roleFixture . detectChanges ( ) ;
535+
536+ const items = roleFixture . debugElement
537+ . queryAll ( By . directive ( MenuItem ) )
538+ . map ( debugEl => debugEl . nativeElement as HTMLElement ) ;
539+
540+ expect ( items [ 0 ] . getAttribute ( 'role' ) ) . toBe ( 'menuitemradio' ) ;
541+ expect ( items [ 1 ] . getAttribute ( 'role' ) ) . toBe ( 'menuitemcheckbox' ) ;
542+
543+ roleFixture . componentInstance . customRole . set ( 'menuitem' ) ;
544+ roleFixture . detectChanges ( ) ;
545+ expect ( items [ 1 ] . getAttribute ( 'role' ) ) . toBe ( 'menuitem' ) ;
546+ } ) ;
547+ } ) ;
548+
527549 describe ( 'structural validations' , ( ) => {
528550 let consoleSpy : jasmine . Spy ;
529551
@@ -1254,3 +1276,17 @@ class MenuWithDuplicateValues {}
12541276 changeDetection : ChangeDetectionStrategy . Eager ,
12551277} )
12561278class MenuItemOutsideMenu { }
1279+
1280+ @Component ( {
1281+ template : `
1282+ <div ngMenu>
1283+ <div ngMenuItem value="item0" role="menuitemradio">Item 0</div>
1284+ <div ngMenuItem value="item1" [role]="customRole()">Item 1</div>
1285+ </div>
1286+ ` ,
1287+ imports : [ Menu , MenuItem ] ,
1288+ changeDetection : ChangeDetectionStrategy . Eager ,
1289+ } )
1290+ class MenuItemRoleOverrideExample {
1291+ customRole = signal < 'menuitem' | 'menuitemradio' | 'menuitemcheckbox' > ( 'menuitemcheckbox' ) ;
1292+ }
0 commit comments