@@ -2,7 +2,7 @@ import { newE2EPage } from "@stencil/core/testing";
2
2
import { accessible , defaults , focusable , hidden , renders , t9n } from "../../tests/commonTests" ;
3
3
import { formatTimePart } from "../../utils/time" ;
4
4
import { CSS } from "./resources" ;
5
- import { getElementXY } from "../../tests/utils" ;
5
+ import { getElementXY , getFocusedElementProp } from "../../tests/utils" ;
6
6
7
7
const letterKeys = [
8
8
"a" ,
@@ -59,6 +59,106 @@ describe("calcite-time-picker", () => {
59
59
] ) ;
60
60
} ) ;
61
61
62
+ describe ( "focusing" , ( ) => {
63
+ it ( "should focus input when corresponding nudge up button is clicked" , async ( ) => {
64
+ const page = await newE2EPage ( ) ;
65
+ await page . setContent ( `<calcite-time-picker step=".001"></calcite-time-picker>` ) ;
66
+
67
+ const minuteElAriaLabel = ( await page . find ( `calcite-time-picker >>> .${ CSS . minute } ` ) ) . getAttribute ( "aria-label" ) ;
68
+ const minuteUpEl = await page . find ( `calcite-time-picker >>> .${ CSS . buttonMinuteUp } ` ) ;
69
+
70
+ await minuteUpEl . click ( ) ;
71
+ await page . waitForChanges ( ) ;
72
+
73
+ expect ( await getFocusedElementProp ( page , "ariaLabel" , { shadow : true } ) ) . toEqual ( minuteElAriaLabel ) ;
74
+
75
+ const secondElAriaLabel = ( await page . find ( `calcite-time-picker >>> .${ CSS . second } ` ) ) . getAttribute ( "aria-label" ) ;
76
+ const secondUpEl = await page . find ( `calcite-time-picker >>> .${ CSS . buttonSecondUp } ` ) ;
77
+
78
+ await secondUpEl . click ( ) ;
79
+ await page . waitForChanges ( ) ;
80
+
81
+ expect ( await getFocusedElementProp ( page , "ariaLabel" , { shadow : true } ) ) . toEqual ( secondElAriaLabel ) ;
82
+
83
+ const fractionalSecondElAriaLabel = (
84
+ await page . find ( `calcite-time-picker >>> .${ CSS . fractionalSecond } ` )
85
+ ) . getAttribute ( "aria-label" ) ;
86
+ const fractionalSecondUpEl = await page . find ( `calcite-time-picker >>> .${ CSS . buttonFractionalSecondUp } ` ) ;
87
+
88
+ await fractionalSecondUpEl . click ( ) ;
89
+ await page . waitForChanges ( ) ;
90
+
91
+ expect ( await getFocusedElementProp ( page , "ariaLabel" , { shadow : true } ) ) . toEqual ( fractionalSecondElAriaLabel ) ;
92
+
93
+ const meridiemElAriaLabel = ( await page . find ( `calcite-time-picker >>> .${ CSS . meridiem } ` ) ) . getAttribute (
94
+ "aria-label"
95
+ ) ;
96
+ const meridiemUpEl = await page . find ( `calcite-time-picker >>> .${ CSS . buttonMeridiemUp } ` ) ;
97
+
98
+ await meridiemUpEl . click ( ) ;
99
+ await page . waitForChanges ( ) ;
100
+
101
+ expect ( await getFocusedElementProp ( page , "ariaLabel" , { shadow : true } ) ) . toEqual ( meridiemElAriaLabel ) ;
102
+
103
+ const hourElAriaLabel = ( await page . find ( `calcite-time-picker >>> .${ CSS . hour } ` ) ) . getAttribute ( "aria-label" ) ;
104
+ const hourUpEl = await page . find ( `calcite-time-picker >>> .${ CSS . buttonHourUp } ` ) ;
105
+
106
+ await hourUpEl . click ( ) ;
107
+ await page . waitForChanges ( ) ;
108
+
109
+ expect ( await getFocusedElementProp ( page , "ariaLabel" , { shadow : true } ) ) . toEqual ( hourElAriaLabel ) ;
110
+ } ) ;
111
+
112
+ it ( "should focus input when corresponding nudge down button is clicked" , async ( ) => {
113
+ const page = await newE2EPage ( ) ;
114
+ await page . setContent ( `<calcite-time-picker step=".001"></calcite-time-picker>` ) ;
115
+
116
+ const minuteElAriaLabel = ( await page . find ( `calcite-time-picker >>> .${ CSS . minute } ` ) ) . getAttribute ( "aria-label" ) ;
117
+ const minuteDownEl = await page . find ( `calcite-time-picker >>> .${ CSS . buttonMinuteDown } ` ) ;
118
+
119
+ await minuteDownEl . click ( ) ;
120
+ await page . waitForChanges ( ) ;
121
+
122
+ expect ( await getFocusedElementProp ( page , "ariaLabel" , { shadow : true } ) ) . toEqual ( minuteElAriaLabel ) ;
123
+
124
+ const secondElAriaLabel = ( await page . find ( `calcite-time-picker >>> .${ CSS . second } ` ) ) . getAttribute ( "aria-label" ) ;
125
+ const secondDownEl = await page . find ( `calcite-time-picker >>> .${ CSS . buttonSecondDown } ` ) ;
126
+
127
+ await secondDownEl . click ( ) ;
128
+ await page . waitForChanges ( ) ;
129
+
130
+ expect ( await getFocusedElementProp ( page , "ariaLabel" , { shadow : true } ) ) . toEqual ( secondElAriaLabel ) ;
131
+
132
+ const fractionalSecondElAriaLabel = (
133
+ await page . find ( `calcite-time-picker >>> .${ CSS . fractionalSecond } ` )
134
+ ) . getAttribute ( "aria-label" ) ;
135
+ const fractionalSecondDownEl = await page . find ( `calcite-time-picker >>> .${ CSS . buttonFractionalSecondDown } ` ) ;
136
+
137
+ await fractionalSecondDownEl . click ( ) ;
138
+ await page . waitForChanges ( ) ;
139
+
140
+ expect ( await getFocusedElementProp ( page , "ariaLabel" , { shadow : true } ) ) . toEqual ( fractionalSecondElAriaLabel ) ;
141
+
142
+ const meridiemElAriaLabel = ( await page . find ( `calcite-time-picker >>> .${ CSS . meridiem } ` ) ) . getAttribute (
143
+ "aria-label"
144
+ ) ;
145
+ const meridiemDownEl = await page . find ( `calcite-time-picker >>> .${ CSS . buttonMeridiemDown } ` ) ;
146
+
147
+ await meridiemDownEl . click ( ) ;
148
+ await page . waitForChanges ( ) ;
149
+
150
+ expect ( await getFocusedElementProp ( page , "ariaLabel" , { shadow : true } ) ) . toEqual ( meridiemElAriaLabel ) ;
151
+
152
+ const hourElAriaLabel = ( await page . find ( `calcite-time-picker >>> .${ CSS . hour } ` ) ) . getAttribute ( "aria-label" ) ;
153
+ const hourDownEl = await page . find ( `calcite-time-picker >>> .${ CSS . buttonHourDown } ` ) ;
154
+
155
+ await hourDownEl . click ( ) ;
156
+ await page . waitForChanges ( ) ;
157
+
158
+ expect ( await getFocusedElementProp ( page , "ariaLabel" , { shadow : true } ) ) . toEqual ( hourElAriaLabel ) ;
159
+ } ) ;
160
+ } ) ;
161
+
62
162
describe ( "should focus the first focusable element when setFocus is called (ltr)" , ( ) => {
63
163
focusable ( `calcite-time-picker` , {
64
164
shadowFocusTargetSelector : `.${ CSS . input } .${ CSS . hour } ` ,
0 commit comments