@@ -12,7 +12,7 @@ describe('menu', () => {
12
12
page . trigger ( ) . click ( ) ;
13
13
14
14
page . expectMenuPresent ( true ) ;
15
- expect ( page . menu ( ) . getText ( ) ) . toEqual ( "One\nTwo\nThree" ) ;
15
+ expect ( page . menu ( ) . getText ( ) ) . toEqual ( "One\nTwo\nThree\nFour " ) ;
16
16
} ) ;
17
17
18
18
it ( 'should close menu when area outside menu is clicked' , ( ) => {
@@ -45,14 +45,14 @@ describe('menu', () => {
45
45
46
46
it ( 'should support multiple triggers opening the same menu' , ( ) => {
47
47
page . triggerTwo ( ) . click ( ) ;
48
- expect ( page . menu ( ) . getText ( ) ) . toEqual ( "One\nTwo\nThree" ) ;
48
+ expect ( page . menu ( ) . getText ( ) ) . toEqual ( "One\nTwo\nThree\nFour " ) ;
49
49
page . expectMenuAlignedWith ( page . menu ( ) , 'trigger-two' ) ;
50
50
51
51
page . body ( ) . click ( ) ;
52
52
page . expectMenuPresent ( false ) ;
53
53
54
54
page . trigger ( ) . click ( ) ;
55
- expect ( page . menu ( ) . getText ( ) ) . toEqual ( "One\nTwo\nThree" ) ;
55
+ expect ( page . menu ( ) . getText ( ) ) . toEqual ( "One\nTwo\nThree\nFour " ) ;
56
56
page . expectMenuAlignedWith ( page . menu ( ) , 'trigger' ) ;
57
57
58
58
page . body ( ) . click ( ) ;
@@ -66,6 +66,84 @@ describe('menu', () => {
66
66
} ) ;
67
67
} ) ;
68
68
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
+
69
147
describe ( 'position - ' , ( ) => {
70
148
71
149
it ( 'should default menu alignment to "after below" when not set' , ( ) => {
0 commit comments