1
1
import { A11yModule , CDK_DESCRIBEDBY_HOST_ATTRIBUTE } from '../index' ;
2
2
import { AriaDescriber , MESSAGES_CONTAINER_ID } from './aria-describer' ;
3
- import { async , ComponentFixture , TestBed } from '@angular/core/testing' ;
4
- import { Component , ElementRef , ViewChild } from '@angular/core' ;
3
+ import { ComponentFixture , TestBed } from '@angular/core/testing' ;
4
+ import { Component , ElementRef , ViewChild , Provider } from '@angular/core' ;
5
+ import { Platform } from '@angular/cdk/platform' ;
5
6
6
7
describe ( 'AriaDescriber' , ( ) => {
7
8
let ariaDescriber : AriaDescriber ;
8
9
let component : TestApp ;
9
10
let fixture : ComponentFixture < TestApp > ;
10
11
11
- beforeEach ( async ( ( ) => {
12
+ function createFixture ( providers : Provider [ ] = [ ] ) {
12
13
TestBed . configureTestingModule ( {
13
14
imports : [ A11yModule ] ,
14
15
declarations : [ TestApp ] ,
15
- providers : [ AriaDescriber ] ,
16
+ providers : [ AriaDescriber , ... providers ] ,
16
17
} ) . compileComponents ( ) ;
17
- } ) ) ;
18
18
19
- beforeEach ( ( ) => {
20
19
fixture = TestBed . createComponent ( TestApp ) ;
21
20
component = fixture . componentInstance ;
22
21
ariaDescriber = component . ariaDescriber ;
23
- } ) ;
22
+ }
24
23
25
24
afterEach ( ( ) => {
26
25
ariaDescriber . ngOnDestroy ( ) ;
27
26
} ) ;
28
27
29
28
it ( 'should initialize without the message container' , ( ) => {
29
+ createFixture ( ) ;
30
30
expect ( getMessagesContainer ( ) ) . toBeNull ( ) ;
31
31
} ) ;
32
32
33
33
it ( 'should be able to create a message element' , ( ) => {
34
+ createFixture ( ) ;
34
35
ariaDescriber . describe ( component . element1 , 'My Message' ) ;
35
36
expectMessages ( [ 'My Message' ] ) ;
36
37
} ) ;
37
38
39
+ it ( 'should hide the message container' , ( ) => {
40
+ createFixture ( ) ;
41
+ ariaDescriber . describe ( component . element1 , 'My Message' ) ;
42
+ expect ( getMessagesContainer ( ) . classList ) . toContain ( 'cdk-visually-hidden' ) ;
43
+ } ) ;
44
+
38
45
it ( 'should not register empty strings' , ( ) => {
46
+ createFixture ( ) ;
39
47
ariaDescriber . describe ( component . element1 , '' ) ;
40
48
expect ( getMessageElements ( ) ) . toBe ( null ) ;
41
49
} ) ;
42
50
43
51
it ( 'should not register non-string values' , ( ) => {
52
+ createFixture ( ) ;
44
53
expect ( ( ) => ariaDescriber . describe ( component . element1 , null ! ) ) . not . toThrow ( ) ;
45
54
expect ( getMessageElements ( ) ) . toBe ( null ) ;
46
55
} ) ;
47
56
48
57
it ( 'should not throw when trying to remove non-string value' , ( ) => {
58
+ createFixture ( ) ;
49
59
expect ( ( ) => ariaDescriber . removeDescription ( component . element1 , null ! ) ) . not . toThrow ( ) ;
50
60
} ) ;
51
61
52
62
it ( 'should de-dupe a message registered multiple times' , ( ) => {
63
+ createFixture ( ) ;
53
64
ariaDescriber . describe ( component . element1 , 'My Message' ) ;
54
65
ariaDescriber . describe ( component . element2 , 'My Message' ) ;
55
66
ariaDescriber . describe ( component . element3 , 'My Message' ) ;
@@ -60,6 +71,7 @@ describe('AriaDescriber', () => {
60
71
} ) ;
61
72
62
73
it ( 'should be able to register multiple messages' , ( ) => {
74
+ createFixture ( ) ;
63
75
ariaDescriber . describe ( component . element1 , 'First Message' ) ;
64
76
ariaDescriber . describe ( component . element2 , 'Second Message' ) ;
65
77
expectMessages ( [ 'First Message' , 'Second Message' ] ) ;
@@ -68,6 +80,7 @@ describe('AriaDescriber', () => {
68
80
} ) ;
69
81
70
82
it ( 'should be able to unregister messages' , ( ) => {
83
+ createFixture ( ) ;
71
84
ariaDescriber . describe ( component . element1 , 'My Message' ) ;
72
85
expectMessages ( [ 'My Message' ] ) ;
73
86
@@ -87,6 +100,7 @@ describe('AriaDescriber', () => {
87
100
} ) ;
88
101
89
102
it ( 'should be able to unregister messages while having others registered' , ( ) => {
103
+ createFixture ( ) ;
90
104
ariaDescriber . describe ( component . element1 , 'Persistent Message' ) ;
91
105
ariaDescriber . describe ( component . element2 , 'My Message' ) ;
92
106
expectMessages ( [ 'Persistent Message' , 'My Message' ] ) ;
@@ -105,24 +119,28 @@ describe('AriaDescriber', () => {
105
119
} ) ;
106
120
107
121
it ( 'should be able to append to an existing list of aria describedby' , ( ) => {
122
+ createFixture ( ) ;
108
123
ariaDescriber . describe ( component . element4 , 'My Message' ) ;
109
124
expectMessages ( [ 'My Message' ] ) ;
110
125
expectMessage ( component . element4 , 'My Message' ) ;
111
126
} ) ;
112
127
113
128
it ( 'should be able to handle multiple regisitrations of the same message to an element' , ( ) => {
129
+ createFixture ( ) ;
114
130
ariaDescriber . describe ( component . element1 , 'My Message' ) ;
115
131
ariaDescriber . describe ( component . element1 , 'My Message' ) ;
116
132
expectMessages ( [ 'My Message' ] ) ;
117
133
expectMessage ( component . element1 , 'My Message' ) ;
118
134
} ) ;
119
135
120
136
it ( 'should not throw when attempting to describe a non-element node' , ( ) => {
137
+ createFixture ( ) ;
121
138
const node : any = document . createComment ( 'Not an element node' ) ;
122
139
expect ( ( ) => ariaDescriber . describe ( node , 'This looks like an element' ) ) . not . toThrow ( ) ;
123
140
} ) ;
124
141
125
142
it ( 'should clear any pre-existing containers' , ( ) => {
143
+ createFixture ( ) ;
126
144
const extraContainer = document . createElement ( 'div' ) ;
127
145
extraContainer . id = MESSAGES_CONTAINER_ID ;
128
146
document . body . appendChild ( extraContainer ) ;
@@ -139,10 +157,28 @@ describe('AriaDescriber', () => {
139
157
ariaDescriber . describe ( component . element1 , 'Hi' ) ;
140
158
expectMessages ( [ 'Hi' ] ) ;
141
159
} ) ;
160
+
161
+ it ( 'should set `aria-hidden` on the container by default' , ( ) => {
162
+ createFixture ( [ { provide : Platform , useValue : { BLINK : true } } ] ) ;
163
+ ariaDescriber . describe ( component . element1 , 'My Message' ) ;
164
+ expect ( getMessagesContainer ( ) . getAttribute ( 'aria-hidden' ) ) . toBe ( 'true' ) ;
165
+ } ) ;
166
+
167
+ it ( 'should disable `aria-hidden` on the container in IE' , ( ) => {
168
+ createFixture ( [ { provide : Platform , useValue : { TRIDENT : true } } ] ) ;
169
+ ariaDescriber . describe ( component . element1 , 'My Message' ) ;
170
+ expect ( getMessagesContainer ( ) . getAttribute ( 'aria-hidden' ) ) . toBe ( 'false' ) ;
171
+ } ) ;
172
+
173
+ it ( 'should disable `aria-hidden` on the container in Edge' , ( ) => {
174
+ createFixture ( [ { provide : Platform , useValue : { EDGE : true } } ] ) ;
175
+ ariaDescriber . describe ( component . element1 , 'My Message' ) ;
176
+ expect ( getMessagesContainer ( ) . getAttribute ( 'aria-hidden' ) ) . toBe ( 'false' ) ;
177
+ } ) ;
142
178
} ) ;
143
179
144
180
function getMessagesContainer ( ) {
145
- return document . querySelector ( `#${ MESSAGES_CONTAINER_ID } ` ) ;
181
+ return document . querySelector ( `#${ MESSAGES_CONTAINER_ID } ` ) ! ;
146
182
}
147
183
148
184
function getMessageElements ( ) : Node [ ] | null {
0 commit comments