@@ -5,7 +5,9 @@ import SideNavigationSubItem from "../../src/SideNavigationSubItem.js";
55import group from "@ui5/webcomponents-icons/dist/group.js" ;
66import home from "@ui5/webcomponents-icons/dist/home.js" ;
77import employeeApprovals from "@ui5/webcomponents-icons/dist/employee-approvals.js" ;
8+ import { SIDE_NAVIGATION_OVERFLOW_ITEM_LABEL } from "../../src/generated/i18n/i18n-defaults.js" ;
89import { NAVIGATION_MENU_POPOVER_HIDDEN_TEXT } from "../../src/generated/i18n/i18n-defaults.js" ;
10+ import { NAVIGATION_MENU_SELECTABLE_ITEM_HIDDEN_TEXT } from "../../src/generated/i18n/i18n-defaults.js" ;
911import Title from "@ui5/webcomponents/dist/Title.js" ;
1012import Label from "@ui5/webcomponents/dist/Label.js" ;
1113import ResponsivePopover from "@ui5/webcomponents/dist/ResponsivePopover.js" ;
@@ -208,7 +210,7 @@ describe("Side Navigation interaction", () => {
208210 cy . get ( "#item1" ) . should ( "not.have.attr" , "expanded" ) ;
209211 } ) ;
210212
211- it ( "Tests expanding and collapsing of unselectable items with Space and Enter" , ( ) => {
213+ it ( "Tests not expanding and collapsing of unselectable items with Space and Enter" , ( ) => {
212214 cy . mount (
213215 < SideNavigation >
214216 < SideNavigationItem id = "focusStart" text = "focus start" > </ SideNavigationItem >
@@ -221,10 +223,9 @@ describe("Side Navigation interaction", () => {
221223 // act
222224 cy . get ( "#focusStart" ) . realClick ( ) ;
223225 cy . realPress ( "ArrowDown" ) ;
224- cy . realPress ( "Space" ) ;
225226
226227 // assert
227- cy . get ( "#unselectableItem" ) . should ( "be.focused" ) . and ( "have.attr" , "expanded" ) ;
228+ cy . get ( "#unselectableItem" ) . should ( "be.focused" ) . and ( "not. have.attr" , "expanded" ) ;
228229
229230 // act
230231 cy . realPress ( "Space" ) ;
@@ -235,12 +236,6 @@ describe("Side Navigation interaction", () => {
235236 // act
236237 cy . realPress ( "Enter" ) ;
237238
238- // assert
239- cy . get ( "#unselectableItem" ) . should ( "be.focused" ) . and ( "have.attr" , "expanded" ) ;
240-
241- // act
242- cy . realPress ( "Enter" ) ;
243-
244239 // assert
245240 cy . get ( "#unselectableItem" ) . should ( "be.focused" ) . and ( "not.have.attr" , "expanded" ) ;
246241 } ) ;
@@ -643,10 +638,10 @@ describe("Side Navigation interaction", () => {
643638
644639 [
645640 { selector : "#item" , expectedCallCount : 2 } ,
646- { selector : "#unselectableItem" , expectedCallCount : 2 } ,
641+ { selector : "#unselectableItem" , expectedCallCount : 1 } ,
647642 { selector : "#parentItem" , expectedCallCount : 2 } ,
648643 { selector : "#childItem" , expectedCallCount : 2 } ,
649- { selector : "#unselectableParentItem" , expectedCallCount : 2 } ,
644+ { selector : "#unselectableParentItem" , expectedCallCount : 1 } ,
650645 ] . forEach ( ( { selector, expectedCallCount } ) => {
651646 cy . get ( "#sideNav" )
652647 . then ( sideNav => {
@@ -697,7 +692,7 @@ describe("Side Navigation interaction", () => {
697692 cy . mount (
698693 < SideNavigation >
699694 < SideNavigationItem id = "focusStart" text = "focus start" />
700- < SideNavigationItem text = "external link" unselectable = { true } href = "#test" />
695+ < SideNavigationItem text = "link" href = "#test" />
701696 </ SideNavigation >
702697 ) ;
703698
@@ -1210,21 +1205,65 @@ describe("Side Navigation Accessibility", () => {
12101205
12111206 // assert
12121207 cy . get ( "@overflowMenu" )
1213- . find ( "[ui5-navigation-menu-item][text='1 ']" )
1208+ . find ( "[ui5-navigation-menu-item][text='2 ']" )
12141209 . shadow ( )
12151210 . find ( ".ui5-navigation-menu-item-root" )
1211+ . should ( "have.attr" , "aria-haspopup" , "menu" ) ;
1212+ } ) ;
1213+
1214+ it ( "SideNavigationItem description" , ( ) => {
1215+ cy . mount (
1216+ < SideNavigation >
1217+ < SideNavigationItem id = "item1" text = "1" selected = { true } />
1218+ < SideNavigationItem id = "item2" text = "2" expanded = { true } >
1219+ < SideNavigationSubItem id = "childItem" text = "2.1" />
1220+ </ SideNavigationItem >
1221+ </ SideNavigation >
1222+ ) ;
1223+
1224+ cy . get ( "#item1" )
1225+ . shadow ( )
1226+ . find ( ".ui5-sn-item" )
1227+ . should ( "not.have.attr" , "aria-describedby" ) ;
1228+
1229+ cy . get ( "#item2" )
1230+ . shadow ( )
1231+ . find ( ".ui5-sn-item" )
1232+ . should ( "have.attr" , "aria-describedby" , "To navigate to navigation item 2, press Spacebar or Enter." ) ;
1233+
1234+ cy . get ( "#item1" )
1235+ . shadow ( )
1236+ . find ( ".ui5-sn-item" )
1237+ . should ( "not.have.attr" , "aria-expanded" ) ;
1238+
1239+ cy . get ( "#item2" )
1240+ . shadow ( )
1241+ . find ( ".ui5-sn-item" )
1242+ . should ( "have.attr" , "aria-expanded" , "true" ) ;
1243+
1244+ cy . get ( "#item1" )
1245+ . invoke ( "prop" , "accessibilityAttributes" , {
1246+ hasPopup : "dialog" ,
1247+ } ) ;
1248+
1249+ cy . get ( "#item1" )
1250+ . shadow ( )
1251+ . find ( ".ui5-sn-item" )
12161252 . should ( "have.attr" , "aria-haspopup" , "dialog" ) ;
12171253
1218- cy . get ( "@overflowMenu" )
1219- . find ( "[ui5-navigation-menu-item][text='2']" )
1254+ cy . get ( "#childItem" )
12201255 . shadow ( )
1221- . find ( ".ui5-navigation-menu- item-root " )
1222- . should ( "have.attr" , "aria-haspopup" , "menu ") ;
1256+ . find ( ".ui5-sn- item" )
1257+ . should ( "not. have.attr" , "aria-haspopup" ) ;
12231258
1224- cy . get ( "@overflowMenu" )
1225- . find ( "[ui5-navigation-menu-item][text='2.1']" )
1259+ cy . get ( "#childItem" )
1260+ . invoke ( "prop" , "accessibilityAttributes" , {
1261+ hasPopup : "dialog" ,
1262+ } ) ;
1263+
1264+ cy . get ( "#childItem" )
12261265 . shadow ( )
1227- . find ( ".ui5-navigation-menu- item-root " )
1266+ . find ( ".ui5-sn- item" )
12281267 . should ( "have.attr" , "aria-haspopup" , "dialog" ) ;
12291268 } ) ;
12301269
@@ -1265,7 +1304,7 @@ describe("Side Navigation Accessibility", () => {
12651304 . find ( "[ui5-side-navigation-item][is-overflow]" )
12661305 . shadow ( )
12671306 . find ( ".ui5-sn-item" )
1268- . should ( "have.attr" , "aria-label" , "Displays remaining navigation items" ) ;
1307+ . should ( "have.attr" , "aria-label" , SIDE_NAVIGATION_OVERFLOW_ITEM_LABEL . defaultText ) ;
12691308 } ) ;
12701309
12711310 it ( "SideNavigationItem aria-checked in collapsed SideNavigation" , ( ) => {
@@ -1291,10 +1330,13 @@ describe("Side Navigation Accessibility", () => {
12911330 it ( "Tests accessible-name of overflow menu and sub menu" , ( ) => {
12921331 cy . mount (
12931332 < SideNavigation id = "sideNav" collapsed = { true } >
1294- < SideNavigationItem text = "dummy item " > </ SideNavigationItem >
1295- < SideNavigationItem text = "1" >
1333+ < SideNavigationItem text = "No children " > </ SideNavigationItem >
1334+ < SideNavigationItem text = "Parent 1" >
12961335 < SideNavigationSubItem text = "1.1" />
12971336 </ SideNavigationItem >
1337+ < SideNavigationItem text = "Parent 2 unselectable" unselectable = { true } >
1338+ < SideNavigationSubItem text = "2.1" />
1339+ </ SideNavigationItem >
12981340 </ SideNavigation >
12991341 ) ;
13001342
@@ -1305,7 +1347,8 @@ describe("Side Navigation Accessibility", () => {
13051347 . shadow ( )
13061348 . find ( ".ui5-sn-item-overflow" )
13071349 . realClick ( ) ;
1308-
1350+
1351+ // Assert
13091352 cy . get ( "#sideNav" )
13101353 . shadow ( )
13111354 . find ( ".ui5-side-navigation-overflow-menu" )
@@ -1314,20 +1357,88 @@ describe("Side Navigation Accessibility", () => {
13141357 . invoke ( "attr" , "accessible-name-ref" )
13151358 . should ( "match" , / n a v i g a t i o n M e n u P o p o v e r T e x t $ / ) ;
13161359
1360+
13171361 cy . get ( "#sideNav" )
13181362 . shadow ( )
1319- . find ( ".ui5-side-navigation-overflow-menu [ui5-navigation-menu-item][text='1']" )
1363+ . find ( ".ui5-side-navigation-overflow-menu" )
1364+ . shadow ( )
1365+ . find ( ".ui5-menu-rp" )
1366+ . find ( ".ui5-hidden-text" )
1367+ . should ( "have.text" , NAVIGATION_MENU_POPOVER_HIDDEN_TEXT . defaultText ) ;
1368+
1369+ cy . get ( "#sideNav" )
1370+ . shadow ( )
1371+ . find ( ".ui5-side-navigation-overflow-menu" )
1372+ . shadow ( )
1373+ . find ( ".ui5-menu-rp" )
1374+ . should ( "have.attr" , "accessible-role" , "Dialog" ) ;
1375+
1376+ cy . get ( "#sideNav" )
1377+ . shadow ( )
1378+ . find ( ".ui5-side-navigation-overflow-menu [ui5-navigation-menu-item][text='No children']" )
1379+ . shadow ( )
1380+ . find ( ".ui5-navigation-menu-item-root" )
1381+ . should ( "not.have.attr" , "aria-haspopup" ) ;
1382+
1383+ cy . get ( "#sideNav" )
1384+ . shadow ( )
1385+ . find ( ".ui5-side-navigation-overflow-menu [ui5-navigation-menu-item][text='Parent 1']" )
1386+ . shadow ( )
1387+ . find ( ".ui5-navigation-menu-item-root" )
1388+ . should ( "have.attr" , "aria-haspopup" , "menu" ) ;
1389+
1390+ cy . get ( "#sideNav" )
1391+ . shadow ( )
1392+ . find ( ".ui5-side-navigation-overflow-menu [ui5-navigation-menu-item][text='Parent 2 unselectable']" )
1393+ . shadow ( )
1394+ . find ( ".ui5-navigation-menu-item-root" )
1395+ . should ( "have.attr" , "aria-haspopup" , "menu" ) ;
1396+
1397+ cy . get ( "#sideNav" )
1398+ . shadow ( )
1399+ . find ( ".ui5-side-navigation-overflow-menu [ui5-navigation-menu-item][text='Parent 1']" )
1400+ . shadow ( )
1401+ . find ( ".ui5-navigation-menu-item-root" )
1402+ . invoke ( "attr" , "aria-describedby" )
1403+ . should ( "match" , / i n v i s i b l e T e x t - d e s c r i b e d b y $ / ) ;
1404+
1405+ cy . get ( "#sideNav" )
1406+ . shadow ( )
1407+ . find ( ".ui5-side-navigation-overflow-menu [ui5-navigation-menu-item][text='Parent 1']" )
1408+ . shadow ( )
1409+ . find ( ".ui5-navigation-menu-item-root .ui5-hidden-text" )
1410+ . next ( )
1411+ . should ( "have.text" , NAVIGATION_MENU_SELECTABLE_ITEM_HIDDEN_TEXT . defaultText ) ;
1412+
1413+ // Act - open sub menu
1414+ cy . get ( "#sideNav" )
1415+ . shadow ( )
1416+ . find ( ".ui5-side-navigation-overflow-menu [ui5-navigation-menu-item][text='Parent 1']" )
13201417 . realClick ( ) ;
13211418
1419+ // Assert
13221420 cy . get ( "#sideNav" )
13231421 . shadow ( )
1324- . find ( ".ui5-side-navigation-overflow-menu [ui5-navigation-menu-item][text='1']" )
1422+ . find ( ".ui5-side-navigation-overflow-menu [ui5-navigation-menu-item][text='Parent 1']" )
1423+ . shadow ( )
1424+ . find ( ".ui5-menu-rp" )
1425+ . should ( "have.attr" , "accessible-name" , "Parent 1" ) ;
1426+
1427+ cy . get ( "#sideNav" )
1428+ . shadow ( )
1429+ . find ( ".ui5-side-navigation-overflow-menu [ui5-navigation-menu-item][text='Parent 2 unselectable']" )
13251430 . shadow ( )
13261431 . find ( ".ui5-menu-rp" )
1327- . should ( "have.attr" , "accessible-name" , NAVIGATION_MENU_POPOVER_HIDDEN_TEXT . defaultText ) ;
1432+ . should ( "have.attr" , "accessible-name" , "Parent 2 unselectable" ) ;
1433+
1434+ cy . get ( "#sideNav" )
1435+ . shadow ( )
1436+ . find ( ".ui5-side-navigation-overflow-menu [ui5-navigation-menu-item][text='Parent 1']" )
1437+ . find ( "[ui5-navigation-menu-item][text='Parent 1']" )
1438+ . should ( "exist" ) ;
13281439 } ) ;
13291440
1330- it ( "Tests SideNavigationGroup accessibility" , ( ) => {
1441+ it ( "Tests SideNavigationGroup group accessibility attributes " , ( ) => {
13311442 cy . mount (
13321443 < SideNavigation >
13331444 < SideNavigationItem text = "Home" > </ SideNavigationItem >
0 commit comments