@@ -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,137 @@ 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 focus subsequent items when tab is pressed' , ( ) => {
100
+ page . pressKey ( protractor . Key . ENTER ) ;
101
+ page . pressKey ( protractor . Key . TAB ) ;
102
+ page . expectFocusOn ( page . items ( 1 ) ) ;
103
+ } ) ;
104
+
105
+ it ( 'should focus previous items when shift-tab is pressed' , ( ) => {
106
+ page . pressKey ( protractor . Key . ENTER ) ;
107
+ page . pressKey ( protractor . Key . TAB ) ;
108
+ // need a protractor "chord" to hit shift-tab simultaneously
109
+ page . pressKey ( protractor . Key . chord ( protractor . Key . SHIFT , protractor . Key . TAB ) ) ;
110
+ page . expectFocusOn ( page . items ( 0 ) ) ;
111
+ } ) ;
112
+
113
+ it ( 'should handle a mix of tabs and arrow presses' , ( ) => {
114
+ page . pressKey ( protractor . Key . ENTER ) ;
115
+ page . pressKey ( protractor . Key . TAB ) ;
116
+ page . pressKey ( protractor . Key . UP ) ;
117
+ page . expectFocusOn ( page . items ( 0 ) ) ;
118
+
119
+ page . pressKey ( protractor . Key . DOWN ) ;
120
+ page . pressKey ( protractor . Key . chord ( protractor . Key . SHIFT , protractor . Key . TAB ) ) ;
121
+ page . expectFocusOn ( page . items ( 0 ) ) ;
122
+ } ) ;
123
+
124
+ it ( 'should skip disabled items using arrow keys' , ( ) => {
125
+ page . pressKey ( protractor . Key . ENTER ) ;
126
+ page . pressKey ( protractor . Key . DOWN ) ;
127
+ page . pressKey ( protractor . Key . DOWN ) ;
128
+ page . expectFocusOn ( page . items ( 3 ) ) ;
129
+
130
+ page . pressKey ( protractor . Key . UP ) ;
131
+ page . expectFocusOn ( page . items ( 1 ) ) ;
132
+ } ) ;
133
+
134
+ it ( 'should skip disabled items using tabs' , ( ) => {
135
+ page . pressKey ( protractor . Key . ENTER ) ;
136
+ page . pressKey ( protractor . Key . TAB ) ;
137
+ page . pressKey ( protractor . Key . TAB ) ;
138
+ page . expectFocusOn ( page . items ( 3 ) ) ;
139
+
140
+ page . pressKey ( protractor . Key . chord ( protractor . Key . SHIFT , protractor . Key . TAB ) ) ;
141
+ page . expectFocusOn ( page . items ( 1 ) ) ;
142
+ } ) ;
143
+
144
+ it ( 'should close the menu when tabbing past items' , ( ) => {
145
+ page . pressKey ( protractor . Key . ENTER ) ;
146
+ page . pressKey ( protractor . Key . TAB ) ;
147
+ page . pressKey ( protractor . Key . TAB ) ;
148
+ page . pressKey ( protractor . Key . TAB ) ;
149
+ page . expectMenuPresent ( false ) ;
150
+
151
+ page . start ( ) . click ( ) ;
152
+ page . pressKey ( protractor . Key . TAB ) ;
153
+ page . pressKey ( protractor . Key . ENTER ) ;
154
+ page . pressKey ( protractor . Key . chord ( protractor . Key . SHIFT , protractor . Key . TAB ) ) ;
155
+ page . expectMenuPresent ( false ) ;
156
+ } ) ;
157
+
158
+ it ( 'should close the menu when arrow keying past items' , ( ) => {
159
+ page . pressKey ( protractor . Key . ENTER ) ;
160
+ page . pressKey ( protractor . Key . DOWN ) ;
161
+ page . pressKey ( protractor . Key . DOWN ) ;
162
+ page . pressKey ( protractor . Key . DOWN ) ;
163
+ page . expectMenuPresent ( false ) ;
164
+
165
+ page . start ( ) . click ( ) ;
166
+ page . pressKey ( protractor . Key . TAB ) ;
167
+ page . pressKey ( protractor . Key . ENTER ) ;
168
+ page . pressKey ( protractor . Key . UP ) ;
169
+ page . expectMenuPresent ( false ) ;
170
+ } ) ;
171
+
172
+ it ( 'should focus before and after trigger when tabbing past items' , ( ) => {
173
+ page . pressKey ( protractor . Key . ENTER ) ;
174
+ page . pressKey ( protractor . Key . TAB ) ;
175
+ page . pressKey ( protractor . Key . TAB ) ;
176
+ page . pressKey ( protractor . Key . TAB ) ;
177
+ page . expectFocusOn ( page . triggerTwo ( ) ) ;
178
+
179
+ // navigate back to trigger
180
+ page . pressKey ( protractor . Key . chord ( protractor . Key . SHIFT , protractor . Key . TAB ) ) ;
181
+ page . pressKey ( protractor . Key . ENTER ) ;
182
+
183
+ page . pressKey ( protractor . Key . chord ( protractor . Key . SHIFT , protractor . Key . TAB ) ) ;
184
+ page . expectFocusOn ( page . start ( ) ) ;
185
+ } ) ;
186
+
187
+ it ( 'should focus on trigger when arrow keying past items' , ( ) => {
188
+ page . pressKey ( protractor . Key . ENTER ) ;
189
+ page . pressKey ( protractor . Key . DOWN ) ;
190
+ page . pressKey ( protractor . Key . DOWN ) ;
191
+ page . pressKey ( protractor . Key . DOWN ) ;
192
+ page . expectFocusOn ( page . trigger ( ) ) ;
193
+
194
+ page . pressKey ( protractor . Key . ENTER ) ;
195
+ page . pressKey ( protractor . Key . UP ) ;
196
+ page . expectFocusOn ( page . trigger ( ) ) ;
197
+ } ) ;
198
+ } ) ;
199
+
69
200
describe ( 'position - ' , ( ) => {
70
201
71
202
it ( 'should default menu alignment to "after below" when not set' , ( ) => {
0 commit comments