@@ -68,16 +68,16 @@ module.exports = {
68
68
assert . ok ( ! editor . container . querySelector ( "style" ) ) ;
69
69
70
70
sendKey ( "a" ) ;
71
- checkInnerHTML ( '<d "ace_line ace_selected" id="suggest-aria-id:0" role="option" aria-roledescription="item" aria-label="arraysort" aria-setsize="2" aria-posinset="1 " aria-describedby="doc-tooltip " aria-selected="true"><s "ace_completion-highlight">a</s><s "ace_">rraysort</s><s "ace_completion-spacer"> </s><s "ace_completion-meta">local</s></d><d "ace_line"><s "ace_completion-highlight">a</s><s "ace_">looooooooooooooooooooooooooooong_word</s><s "ace_completion-spacer"> </s><s "ace_completion-meta">local</s></d>' , function ( ) {
71
+ checkInnerHTML ( '<d "ace_line ace_selected" role="option" aria-roledescription="item" aria-label="arraysort, local " aria-setsize="2" aria-describedby="doc-tooltip " aria-posinset="1" id="suggest-aria-id:0 " aria-selected="true"><s "ace_completion-highlight" role="mark" >a</s><s "ace_">rraysort</s><s "ace_completion-spacer"> </s><s "ace_completion-meta">local</s></d><d "ace_line" role="option" aria-roledescription="item" aria-label="alooooooooooooooooooooooooooooong_word, local" aria-setsize="2" aria-describedby="doc-tooltip" aria-posinset="2" ><s "ace_completion-highlight" role="mark ">a</s><s "ace_">looooooooooooooooooooooooooooong_word</s><s "ace_completion-spacer"> </s><s "ace_completion-meta">local</s></d>' , function ( ) {
72
72
sendKey ( "rr" ) ;
73
- checkInnerHTML ( '<d "ace_line ace_selected" id="suggest-aria-id:0" role="option" aria-roledescription="item" aria-label="arraysort" aria-setsize="1" aria-posinset="1 " aria-describedby="doc-tooltip " aria-selected="true"><s "ace_completion-highlight">arr</s><s "ace_">aysort</s><s "ace_completion-spacer"> </s><s "ace_completion-meta">local</s></d>' , function ( ) {
73
+ checkInnerHTML ( '<d "ace_line ace_selected" role="option" aria-roledescription="item" aria-label="arraysort, local " aria-setsize="1" aria-describedby="doc-tooltip " aria-posinset="1" id="suggest-aria-id:0 " aria-selected="true"><s "ace_completion-highlight" role="mark ">arr</s><s "ace_">aysort</s><s "ace_completion-spacer"> </s><s "ace_completion-meta">local</s></d>' , function ( ) {
74
74
sendKey ( "r" ) ;
75
- checkInnerHTML ( '<d "ace_line ace_selected" id="suggest-aria-id:0" role="option" aria-roledescription="item" aria-label="arraysort" aria-setsize="1" aria-posinset="1 " aria-describedby="doc-tooltip " aria-selected="true"><s "ace_completion-highlight">arr</s><s "ace_">ayso</s><s "ace_completion-highlight">r</s><s "ace_">t</s><s "ace_completion-spacer"> </s><s "ace_completion-meta">local</s></d>' , function ( ) {
75
+ checkInnerHTML ( '<d "ace_line ace_selected" role="option" aria-roledescription="item" aria-label="arraysort, local " aria-setsize="1" aria-describedby="doc-tooltip " aria-posinset="1" id="suggest-aria-id:0 " aria-selected="true"><s "ace_completion-highlight" role="mark" >arr</s><s "ace_">ayso</s><s "ace_completion-highlight" role="mark ">r</s><s "ace_">t</s><s "ace_completion-spacer"> </s><s "ace_completion-meta">local</s></d>' , function ( ) {
76
76
77
77
sendKey ( "Return" ) ;
78
78
assert . equal ( editor . getValue ( ) , "arraysort\narraysort alooooooooooooooooooooooooooooong_word" ) ;
79
79
editor . execCommand ( "insertstring" , " looooooooooooooooooooooooooooong_" ) ;
80
- checkInnerHTML ( '<d "ace_line ace_selected" id="suggest-aria-id:0" role="option" aria-roledescription="item" aria-label="alooooooooooooooooooooooooooooong_word" aria-setsize="1" aria-posinset="1 " aria-describedby="doc-tooltip " aria-selected="true"><s "ace_">a</s><s "ace_completion-highlight">looooooooooooooooooooooooooooong_</s><s "ace_">word</s><s "ace_completion-spacer"> </s><s "ace_completion-meta">local</s></d>' , function ( ) {
80
+ checkInnerHTML ( '<d "ace_line ace_selected" role="option" aria-roledescription="item" aria-label="alooooooooooooooooooooooooooooong_word, local " aria-setsize="1" aria-describedby="doc-tooltip " aria-posinset="1" id="suggest-aria-id:0 " aria-selected="true"><s "ace_">a</s><s "ace_completion-highlight" role="mark ">looooooooooooooooooooooooooooong_</s><s "ace_">word</s><s "ace_completion-spacer"> </s><s "ace_completion-meta">local</s></d>' , function ( ) {
81
81
sendKey ( "Return" ) ;
82
82
editor . destroy ( ) ;
83
83
editor . container . remove ( ) ;
@@ -217,7 +217,7 @@ module.exports = {
217
217
done ( ) ;
218
218
} ) ;
219
219
} ,
220
- "test: should set aria labels for currently selected item " : function ( done ) {
220
+ "test: should set correct aria attributes for popup items " : function ( done ) {
221
221
var editor = initEditor ( "" ) ;
222
222
var newLineCharacter = editor . session . doc . getNewLineCharacter ( ) ;
223
223
editor . completers = [
@@ -233,22 +233,26 @@ module.exports = {
233
233
var popup = editor . completer . popup ;
234
234
check ( function ( ) {
235
235
assert . equal ( popup . data . length , 10 ) ;
236
- assert . ok ( checkAria ( '<d id="suggest-aria-id:0" role="option" aria-roledescription="item" aria-label="0" aria-setsize="10" aria-posinset="1" aria-describedby="doc-tooltip" aria-selected="true"><s >0</s><s > </s></d><d ><s >1</s><s > </s></d><d ><s >2</s><s > </s></d><d ><s >3</s><s > </s></d><d ><s >4</s><s > </s></d><d ><s >5</s><s > </s></d><d ><s >6</s><s > </s></d><d ><s >7</s><s > </s></d><d ><s >8</s><s > </s></d>' ) ) ;
236
+ // check that the aria attributes have been set on all the elements of the popup and that aria selected attributes are set on the first item
237
+ assert . ok ( checkAria ( popup . renderer . $textLayer . element . innerHTML , '<d role="option" aria-roledescription="item" aria-label="0" aria-setsize="10" aria-describedby="doc-tooltip" aria-posinset="1" id="suggest-aria-id:0" aria-selected="true"><s >0</s><s > </s></d>' +
238
+ '<d role="option" aria-roledescription="item" aria-label="1" aria-setsize="10" aria-describedby="doc-tooltip" aria-posinset="2"><s >1</s><s > </s></d>' +
239
+ '<d role="option" aria-roledescription="item" aria-label="2" aria-setsize="10" aria-describedby="doc-tooltip" aria-posinset="3"><s >2</s><s > </s></d>' +
240
+ '<d role="option" aria-roledescription="item" aria-label="3" aria-setsize="10" aria-describedby="doc-tooltip" aria-posinset="4"><s >3</s><s > </s></d>' +
241
+ '<d role="option" aria-roledescription="item" aria-label="4" aria-setsize="10" aria-describedby="doc-tooltip" aria-posinset="5"><s >4</s><s > </s></d>' +
242
+ '<d role="option" aria-roledescription="item" aria-label="5" aria-setsize="10" aria-describedby="doc-tooltip" aria-posinset="6"><s >5</s><s > </s></d>' +
243
+ '<d role="option" aria-roledescription="item" aria-label="6" aria-setsize="10" aria-describedby="doc-tooltip" aria-posinset="7"><s >6</s><s > </s></d>' +
244
+ '<d role="option" aria-roledescription="item" aria-label="7" aria-setsize="10" aria-describedby="doc-tooltip" aria-posinset="8"><s >7</s><s > </s></d>' +
245
+ '<d role="option" aria-roledescription="item" aria-label="8" aria-setsize="10" aria-describedby="doc-tooltip" aria-posinset="9"><s >8</s><s > </s></d>' ) ) ;
246
+ const prevSelected = popup . selectedNode ;
237
247
sendKey ( 'Down' ) ;
238
248
check ( function ( ) {
239
- assert . ok ( checkAria ( '<d role="option" aria-roledescription="item" aria-label="0" aria-setsize="10" aria-describedby="doc-tooltip"><s >0</s><s > </s></d><d id="suggest-aria-id:1" role="option" aria-roledescription="item" aria-label="1" aria-setsize="10" aria-posinset="2" aria-describedby="doc-tooltip" aria-selected="true"><s >1</s><s > </s></d><d ><s >2</s><s > </s></d><d ><s >3</s><s > </s></d><d ><s >4</s><s > </s></d><d ><s >5</s><s > </s></d><d ><s >6</s><s > </s></d><d ><s >7</s><s > </s></d><d ><s >8</s><s > </s></d>' ) ) ;
249
+ assert . ok ( checkAria ( popup . selectedNode . outerHTML , '<d role="option" aria-roledescription="item" aria-label="1" aria-setsize="10" aria-describedby="doc-tooltip" aria-posinset="2" id="suggest-aria-id:1" aria-selected="true"><s >1</s><s > </s></d>' ) ) ;
250
+ // check that the aria selected attributes have been removed from the previously selected element
251
+ assert . ok ( checkAria ( prevSelected . outerHTML , '<d role="option" aria-roledescription="item" aria-label="0" aria-setsize="10" aria-describedby="doc-tooltip" aria-posinset="1"><s >0</s><s > </s></d>' ) ) ;
240
252
sendKey ( 'Down' ) ;
241
253
check ( function ( ) {
242
- assert . ok ( checkAria ( '<d role="option" aria-roledescription="item" aria-label="0" aria-setsize="10" aria-describedby="doc-tooltip"><s >0</s><s > </s></d><d role="option" aria-roledescription="item" aria-label="1" aria-setsize="10" aria-describedby="doc-tooltip"><s >1</s><s > </s></d><d id="suggest-aria-id:2" role="option" aria-roledescription="item" aria-label="2" aria-setsize="10" aria-posinset="3" aria-describedby="doc-tooltip" aria-selected="true"><s >2</s><s > </s></d><d ><s >3</s><s > </s></d><d ><s >4</s><s > </s></d><d ><s >5</s><s > </s></d><d ><s >6</s><s > </s></d><d ><s >7</s><s > </s></d><d ><s >8</s><s > </s></d>' ) ) ;
243
- sendKey ( 'Down' ) ;
244
- check ( function ( ) {
245
- sendKey ( 'Down' ) ;
246
- assert . ok ( checkAria ( '<d role="option" aria-roledescription="item" aria-label="0" aria-setsize="10" aria-describedby="doc-tooltip"><s >0</s><s > </s></d><d role="option" aria-roledescription="item" aria-label="1" aria-setsize="10" aria-describedby="doc-tooltip"><s >1</s><s > </s></d><d role="option" aria-roledescription="item" aria-label="2" aria-setsize="10" aria-describedby="doc-tooltip"><s >2</s><s > </s></d><d id="suggest-aria-id:3" role="option" aria-roledescription="item" aria-label="3" aria-setsize="10" aria-posinset="4" aria-describedby="doc-tooltip" aria-selected="true"><s >3</s><s > </s></d><d ><s >4</s><s > </s></d><d ><s >5</s><s > </s></d><d ><s >6</s><s > </s></d><d ><s >7</s><s > </s></d><d ><s >8</s><s > </s></d>' ) ) ;
247
- check ( function ( ) {
248
- assert . ok ( checkAria ( '<d role="option" aria-roledescription="item" aria-label="0" aria-setsize="10" aria-describedby="doc-tooltip"><s >0</s><s > </s></d><d role="option" aria-roledescription="item" aria-label="1" aria-setsize="10" aria-describedby="doc-tooltip"><s >1</s><s > </s></d><d role="option" aria-roledescription="item" aria-label="2" aria-setsize="10" aria-describedby="doc-tooltip"><s >2</s><s > </s></d><d role="option" aria-roledescription="item" aria-label="3" aria-setsize="10" aria-describedby="doc-tooltip"><s >3</s><s > </s></d><d id="suggest-aria-id:4" role="option" aria-roledescription="item" aria-label="4" aria-setsize="10" aria-posinset="5" aria-describedby="doc-tooltip" aria-selected="true"><s >4</s><s > </s></d><d ><s >5</s><s > </s></d><d ><s >6</s><s > </s></d><d ><s >7</s><s > </s></d><d ><s >8</s><s > </s></d>' ) ) ;
254
+ assert . ok ( checkAria ( popup . selectedNode . outerHTML , '<d role="option" aria-roledescription="item" aria-label="2" aria-setsize="10" aria-describedby="doc-tooltip" aria-posinset="3" id="suggest-aria-id:2" aria-selected="true"><s >2</s><s > </s></d>' ) ) ;
249
255
done ( ) ;
250
- } ) ;
251
- } ) ;
252
256
} ) ;
253
257
} ) ;
254
258
} ) ;
@@ -259,11 +263,9 @@ module.exports = {
259
263
callback ( ) ;
260
264
} ) ;
261
265
}
262
- function checkAria ( expected ) {
263
- var popup = editor . completer . popup ;
264
- var innerHTML = popup . renderer . $textLayer . element . innerHTML
265
- . replace ( / \s * s t y l e = " [ ^ " ] + " | c l a s s = " [ ^ " ] + " | ( d ) i v | ( s ) p a n / g, "$1$2" ) ;
266
- return innerHTML === expected ;
266
+ function checkAria ( htmlElement , expected ) {
267
+ var actual = htmlElement . replace ( / \s * s t y l e = " [ ^ " ] + " | c l a s s = " [ ^ " ] + " | ( d ) i v | ( s ) p a n / g, "$1$2" ) ;
268
+ return actual === expected ;
267
269
}
268
270
} ,
269
271
"test: different completers tooltips" : function ( done ) {
0 commit comments