@@ -12,7 +12,7 @@ describe('menu', () => {
1212 page . trigger ( ) . click ( ) ;
1313
1414 page . expectMenuPresent ( true ) ;
15- expect ( page . menu ( ) . getText ( ) ) . toEqual ( "One\nTwo\nThree" ) ;
15+ expect ( page . menu ( ) . getText ( ) ) . toEqual ( "One\nTwo\nThree\nFour " ) ;
1616 } ) ;
1717
1818 it ( 'should close menu when area outside menu is clicked' , ( ) => {
@@ -45,14 +45,14 @@ describe('menu', () => {
4545
4646 it ( 'should support multiple triggers opening the same menu' , ( ) => {
4747 page . triggerTwo ( ) . click ( ) ;
48- expect ( page . menu ( ) . getText ( ) ) . toEqual ( "One\nTwo\nThree" ) ;
48+ expect ( page . menu ( ) . getText ( ) ) . toEqual ( "One\nTwo\nThree\nFour " ) ;
4949 page . expectMenuAlignedWith ( page . menu ( ) , 'trigger-two' ) ;
5050
5151 page . body ( ) . click ( ) ;
5252 page . expectMenuPresent ( false ) ;
5353
5454 page . trigger ( ) . click ( ) ;
55- expect ( page . menu ( ) . getText ( ) ) . toEqual ( "One\nTwo\nThree" ) ;
55+ expect ( page . menu ( ) . getText ( ) ) . toEqual ( "One\nTwo\nThree\nFour " ) ;
5656 page . expectMenuAlignedWith ( page . menu ( ) , 'trigger' ) ;
5757
5858 page . body ( ) . click ( ) ;
@@ -66,6 +66,84 @@ describe('menu', () => {
6666 } ) ;
6767 } ) ;
6868
69+ describe ( 'keyboard events' , ( ) => {
70+ beforeEach ( ( ) => {
71+ // click start button to avoid tabbing past navigation
72+ page . start ( ) . click ( ) ;
73+ page . pressKey ( protractor . Key . TAB ) ;
74+ } ) ;
75+
76+ it ( 'should auto-focus the first item when opened with keyboard' , ( ) => {
77+ page . pressKey ( protractor . Key . ENTER ) ;
78+ page . expectFocusOn ( page . items ( 0 ) ) ;
79+ } ) ;
80+
81+ it ( 'should not focus the first item when opened with mouse' , ( ) => {
82+ page . trigger ( ) . click ( ) ;
83+ page . expectFocusOn ( page . trigger ( ) ) ;
84+ } ) ;
85+
86+ it ( 'should focus subsequent items when down arrow is pressed' , ( ) => {
87+ page . pressKey ( protractor . Key . ENTER ) ;
88+ page . pressKey ( protractor . Key . DOWN ) ;
89+ page . expectFocusOn ( page . items ( 1 ) ) ;
90+ } ) ;
91+
92+ it ( 'should focus previous items when up arrow is pressed' , ( ) => {
93+ page . pressKey ( protractor . Key . ENTER ) ;
94+ page . pressKey ( protractor . Key . DOWN ) ;
95+ page . pressKey ( protractor . Key . UP ) ;
96+ page . expectFocusOn ( page . items ( 0 ) ) ;
97+ } ) ;
98+
99+ it ( 'should skip disabled items using arrow keys' , ( ) => {
100+ page . pressKey ( protractor . Key . ENTER ) ;
101+ page . pressKey ( protractor . Key . DOWN ) ;
102+ page . pressKey ( protractor . Key . DOWN ) ;
103+ page . expectFocusOn ( page . items ( 3 ) ) ;
104+
105+ page . pressKey ( protractor . Key . UP ) ;
106+ page . expectFocusOn ( page . items ( 1 ) ) ;
107+ } ) ;
108+
109+ it ( 'should close the menu when tabbing past items' , ( ) => {
110+ page . pressKey ( protractor . Key . ENTER ) ;
111+ page . pressKey ( protractor . Key . TAB ) ;
112+ page . expectMenuPresent ( false ) ;
113+
114+ page . start ( ) . click ( ) ;
115+ page . pressKey ( protractor . Key . TAB ) ;
116+ page . pressKey ( protractor . Key . ENTER ) ;
117+ page . pressKey ( protractor . Key . chord ( protractor . Key . SHIFT , protractor . Key . TAB ) ) ;
118+ page . expectMenuPresent ( false ) ;
119+ } ) ;
120+
121+ it ( 'should wrap back to menu when arrow keying past items' , ( ) => {
122+ page . pressKey ( protractor . Key . ENTER ) ;
123+ page . pressKey ( protractor . Key . DOWN ) ;
124+ page . pressKey ( protractor . Key . DOWN ) ;
125+ page . pressKey ( protractor . Key . DOWN ) ;
126+ page . expectFocusOn ( page . items ( 0 ) ) ;
127+
128+ page . pressKey ( protractor . Key . UP ) ;
129+ page . expectFocusOn ( page . items ( 3 ) ) ;
130+ } ) ;
131+
132+ it ( 'should focus before and after trigger when tabbing past items' , ( ) => {
133+ page . pressKey ( protractor . Key . ENTER ) ;
134+ page . pressKey ( protractor . Key . TAB ) ;
135+ page . expectFocusOn ( page . triggerTwo ( ) ) ;
136+
137+ // navigate back to trigger
138+ page . pressKey ( protractor . Key . chord ( protractor . Key . SHIFT , protractor . Key . TAB ) ) ;
139+ page . pressKey ( protractor . Key . ENTER ) ;
140+
141+ page . pressKey ( protractor . Key . chord ( protractor . Key . SHIFT , protractor . Key . TAB ) ) ;
142+ page . expectFocusOn ( page . start ( ) ) ;
143+ } ) ;
144+
145+ } ) ;
146+
69147 describe ( 'position - ' , ( ) => {
70148
71149 it ( 'should default menu alignment to "after below" when not set' , ( ) => {
0 commit comments