1
- import { afterEach , beforeEach , describe , test , expect } from 'vitest'
1
+ import { afterEach , beforeEach , describe , test , expect , vi } from 'vitest'
2
2
import { LiveRegionElement , compareMessages } from '../live-region-element'
3
3
import { Ordering } from '../order'
4
+ import { Deferred } from '../Deferred'
4
5
import '../define'
5
6
6
7
describe ( 'live-region-element' , ( ) => {
7
8
let liveRegion : LiveRegionElement
8
9
9
10
beforeEach ( ( ) => {
11
+ vi . useFakeTimers ( )
10
12
liveRegion = document . createElement ( 'live-region' ) as LiveRegionElement
11
13
document . body . appendChild ( liveRegion )
12
14
} )
13
15
14
16
afterEach ( ( ) => {
15
17
document . body . removeChild ( liveRegion )
18
+ vi . restoreAllMocks ( )
16
19
} )
17
20
18
21
test ( 'announce() message' , ( ) => {
@@ -33,6 +36,51 @@ describe('live-region-element', () => {
33
36
expect ( liveRegion . getMessage ( 'assertive' ) ) . toBe ( 'test' )
34
37
} )
35
38
39
+ test ( 'announce() with delayMs' , ( ) => {
40
+ liveRegion . announce ( 'test' , {
41
+ delayMs : 1000 ,
42
+ } )
43
+ expect ( liveRegion . getMessage ( 'polite' ) ) . toBe ( '' )
44
+ vi . runAllTimers ( )
45
+ expect ( liveRegion . getMessage ( 'polite' ) ) . toBe ( 'test' )
46
+ } )
47
+
48
+ test ( 'cancel announce() with delayMs' , ( ) => {
49
+ const { cancel} = liveRegion . announce ( 'test' , {
50
+ delayMs : 1000 ,
51
+ } )
52
+ expect ( liveRegion . getMessage ( 'polite' ) ) . toBe ( '' )
53
+
54
+ cancel ( )
55
+ vi . runAllTimers ( )
56
+
57
+ expect ( liveRegion . getMessage ( 'polite' ) ) . toBe ( '' )
58
+ } )
59
+
60
+ test ( 'await announce()' , async ( ) => {
61
+ const announcement = liveRegion . announce ( 'test' , {
62
+ delayMs : 1000 ,
63
+ } )
64
+ expect ( liveRegion . getMessage ( 'polite' ) ) . toBe ( '' )
65
+
66
+ vi . runAllTimers ( )
67
+ await announcement
68
+ expect ( liveRegion . getMessage ( 'polite' ) ) . toBe ( 'test' )
69
+ } )
70
+
71
+ test ( 'cancel await announce()' , async ( ) => {
72
+ const announcement = liveRegion . announce ( 'test' , {
73
+ delayMs : 1000 ,
74
+ } )
75
+ expect ( liveRegion . getMessage ( 'polite' ) ) . toBe ( '' )
76
+
77
+ vi . advanceTimersByTime ( 500 )
78
+ announcement . cancel ( )
79
+ vi . runAllTimers ( )
80
+ await announcement
81
+ expect ( liveRegion . getMessage ( 'polite' ) ) . toBe ( '' )
82
+ } )
83
+
36
84
test ( 'announceFromElement()' , ( ) => {
37
85
const element = document . createElement ( 'div' )
38
86
element . textContent = 'test'
@@ -59,11 +107,13 @@ describe('live-region-element', () => {
59
107
contents : 'test' ,
60
108
politeness : 'polite' ,
61
109
scheduled : now ,
110
+ deferred : new Deferred ( ) ,
62
111
} ,
63
112
{
64
113
contents : 'test' ,
65
114
politeness : 'polite' ,
66
115
scheduled : now ,
116
+ deferred : new Deferred ( ) ,
67
117
} ,
68
118
) ,
69
119
) . toBe ( Ordering . Equal )
@@ -77,11 +127,13 @@ describe('live-region-element', () => {
77
127
contents : 'test' ,
78
128
politeness : 'polite' ,
79
129
scheduled : now ,
130
+ deferred : new Deferred ( ) ,
80
131
} ,
81
132
{
82
133
contents : 'test' ,
83
134
politeness : 'polite' ,
84
135
scheduled : now + 1000 ,
136
+ deferred : new Deferred ( ) ,
85
137
} ,
86
138
) ,
87
139
) . toBe ( Ordering . Less )
@@ -95,11 +147,13 @@ describe('live-region-element', () => {
95
147
contents : 'test' ,
96
148
politeness : 'polite' ,
97
149
scheduled : now + 1000 ,
150
+ deferred : new Deferred ( ) ,
98
151
} ,
99
152
{
100
153
contents : 'test' ,
101
154
politeness : 'polite' ,
102
155
scheduled : now ,
156
+ deferred : new Deferred ( ) ,
103
157
} ,
104
158
) ,
105
159
) . toBe ( Ordering . Greater )
@@ -113,11 +167,13 @@ describe('live-region-element', () => {
113
167
contents : 'test' ,
114
168
politeness : 'assertive' ,
115
169
scheduled : now ,
170
+ deferred : new Deferred ( ) ,
116
171
} ,
117
172
{
118
173
contents : 'test' ,
119
174
politeness : 'polite' ,
120
175
scheduled : now ,
176
+ deferred : new Deferred ( ) ,
121
177
} ,
122
178
) ,
123
179
) . toBe ( Ordering . Less )
0 commit comments