OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 'use strict'; | 5 'use strict'; |
6 | 6 |
7 // This file provides | 7 // This file provides |
8 // |spellcheck_test(sample, tester, expectedText, opt_title)| asynchronous test | 8 // |spellcheck_test(sample, tester, expectedText, opt_title)| asynchronous test |
9 // to W3C test harness for easier writing of spellchecker test cases. | 9 // to W3C test harness for easier writing of spellchecker test cases. |
10 // | 10 // |
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
283 return internals.lastSpellCheckRequestSequence(document) !== | 283 return internals.lastSpellCheckRequestSequence(document) !== |
284 internals.lastSpellCheckProcessedSequence(document); | 284 internals.lastSpellCheckProcessedSequence(document); |
285 } | 285 } |
286 | 286 |
287 /** @type {string} */ | 287 /** @type {string} */ |
288 const kTitle = 'title'; | 288 const kTitle = 'title'; |
289 /** @type {string} */ | 289 /** @type {string} */ |
290 const kCallback = 'callback'; | 290 const kCallback = 'callback'; |
291 /** @type {string} */ | 291 /** @type {string} */ |
292 const kIsSpellcheckTest = 'isSpellcheckTest'; | 292 const kIsSpellcheckTest = 'isSpellcheckTest'; |
| 293 /** @type {string} */ |
| 294 const kNeedsFullCheck = 'needsFullCheck'; |
293 | 295 |
294 // Spellchecker gets triggered not only by text and selection change, but also | 296 // Spellchecker gets triggered not only by text and selection change, but also |
295 // by focus change. For example, misspelling markers in <INPUT> disappear when | 297 // by focus change. For example, misspelling markers in <INPUT> disappear when |
296 // the window loses focus, even though the selection does not change. | 298 // the window loses focus, even though the selection does not change. |
297 // Therefore, we disallow spellcheck tests from running simultaneously to | 299 // Therefore, we disallow spellcheck tests from running simultaneously to |
298 // prevent interference among them. If we call spellcheck_test while another | 300 // prevent interference among them. If we call spellcheck_test while another |
299 // test is running, the new test will be added into testQueue waiting for the | 301 // test is running, the new test will be added into testQueue waiting for the |
300 // completion of the previous test. | 302 // completion of the previous test. |
301 | 303 |
302 /** @type {boolean} */ | 304 /** @type {boolean} */ |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
350 /** @type {!MarkerSerializer} */ | 352 /** @type {!MarkerSerializer} */ |
351 const serializer = new MarkerSerializer({ | 353 const serializer = new MarkerSerializer({ |
352 spelling: '#', | 354 spelling: '#', |
353 grammar: '~'}); | 355 grammar: '~'}); |
354 | 356 |
355 assert_equals(serializer.serialize(sample.document), expectedText); | 357 assert_equals(serializer.serialize(sample.document), expectedText); |
356 testObject.done(); | 358 testObject.done(); |
357 }); | 359 }); |
358 }; | 360 }; |
359 | 361 |
360 if (internals.idleTimeSpellCheckerState !== undefined && | 362 if (internals.idleTimeSpellCheckerState !== undefined) { |
361 internals.idleTimeSpellCheckerState(sample.document) === 'HotModeRequest
ed') { | 363 if (internals.idleTimeSpellCheckerState(sample.document) === 'HotModeReque
sted') |
362 internals.runIdleTimeSpellChecker(sample.document); | 364 internals.runIdleTimeSpellChecker(sample.document); |
| 365 if (testObject.properties[kNeedsFullCheck]) { |
| 366 while (internals.idleTimeSpellCheckerState(sample.document) !== 'Inactiv
e') |
| 367 internals.runIdleTimeSpellChecker(sample.document); |
| 368 } |
363 } | 369 } |
364 | 370 |
365 // For a test that does not create new spell check request, a synchronous | 371 // For a test that does not create new spell check request, a synchronous |
366 // verification finishes everything. | 372 // verification finishes everything. |
367 verificationForCurrentTest(); | 373 verificationForCurrentTest(); |
368 }); | 374 }); |
369 } | 375 } |
370 | 376 |
371 add_result_callback(testObj => { | 377 add_result_callback(testObj => { |
372 if (!testObj.properties[kIsSpellcheckTest]) | 378 if (!testObj.properties[kIsSpellcheckTest]) |
(...skipping 27 matching lines...) Expand all Loading... |
400 next.tester, next.expectedText); | 406 next.tester, next.expectedText); |
401 }); | 407 }); |
402 | 408 |
403 /** | 409 /** |
404 * @param {Object=} passedArgs | 410 * @param {Object=} passedArgs |
405 * @return {!Object} | 411 * @return {!Object} |
406 */ | 412 */ |
407 function getTestArguments(passedArgs) { | 413 function getTestArguments(passedArgs) { |
408 const args = {}; | 414 const args = {}; |
409 args[kIsSpellcheckTest] = true; | 415 args[kIsSpellcheckTest] = true; |
410 [kTitle, kCallback].forEach(key => args[key] = undefined); | 416 [kTitle, kCallback, kNeedsFullCheck].forEach(key => args[key] = undefined); |
411 if (!passedArgs) | 417 if (!passedArgs) |
412 return args; | 418 return args; |
413 | 419 |
414 if (typeof(passedArgs) === 'string') { | 420 if (typeof(passedArgs) === 'string') { |
415 args[kTitle] = passedArgs; | 421 args[kTitle] = passedArgs; |
416 return args; | 422 return args; |
417 } | 423 } |
418 | 424 |
419 [kTitle, kCallback].forEach(key => args[key] = passedArgs[key]); | 425 [kTitle, kCallback, kNeedsFullCheck].forEach( |
| 426 key => args[key] = passedArgs[key]); |
420 return args; | 427 return args; |
421 } | 428 } |
422 | 429 |
423 /** | 430 /** |
424 * @param {!Sample|string} input | 431 * @param {!Sample|string} input |
425 * @param {function(!Document)|string} tester | 432 * @param {function(!Document)|string} tester |
426 * @param {string} expectedText | 433 * @param {string} expectedText |
427 * @param {Object=} opt_args | 434 * @param {Object=} opt_args |
428 */ | 435 */ |
429 function spellcheckTest(input, tester, expectedText, opt_args) { | 436 function spellcheckTest(input, tester, expectedText, opt_args) { |
(...skipping 16 matching lines...) Expand all Loading... |
446 window.testRunner.setMockSpellCheckerEnabled(true); | 453 window.testRunner.setMockSpellCheckerEnabled(true); |
447 window.testRunner.setSpellCheckResolvedCallback(() => { | 454 window.testRunner.setSpellCheckResolvedCallback(() => { |
448 if (verificationForCurrentTest) | 455 if (verificationForCurrentTest) |
449 verificationForCurrentTest(); | 456 verificationForCurrentTest(); |
450 }); | 457 }); |
451 } | 458 } |
452 | 459 |
453 // Export symbols | 460 // Export symbols |
454 window.spellcheck_test = spellcheckTest; | 461 window.spellcheck_test = spellcheckTest; |
455 })(); | 462 })(); |
OLD | NEW |