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 | 5 |
6 /** | 6 /** |
7 * @fileOverview WebAudio layout test utility library. Built around W3C's | 7 * @fileOverview WebAudio layout test utility library. Built around W3C's |
8 * testharness.js. Includes asynchronous test task manager, | 8 * testharness.js. Includes asynchronous test task manager, |
9 * assertion utilities. | 9 * assertion utilities. |
10 * @dependency testharness.js | 10 * @dependency testharness.js |
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
295 */ | 295 */ |
296 notThrow () { | 296 notThrow () { |
297 let didThrowCorrectly = false; | 297 let didThrowCorrectly = false; |
298 let passDetail, failDetail; | 298 let passDetail, failDetail; |
299 | 299 |
300 try { | 300 try { |
301 this._actual(); | 301 this._actual(); |
302 passDetail = '${actual} did not throw an exception.'; | 302 passDetail = '${actual} did not throw an exception.'; |
303 } catch (error) { | 303 } catch (error) { |
304 didThrowCorrectly = true; | 304 didThrowCorrectly = true; |
305 failDetail = '${actual} threw ' + error.name + ': ' | 305 failDetail = '${actual} *INCORRECTLY* threw ' + error.name + ': "' |
Raymond Toy
2016/12/09 22:10:26
Do these really need to be highlighted? The "FAIL
hongchan
2016/12/19 22:14:05
Then do we remove all the *HIGHLIGHT*? I felt PASS
| |
306 + error.message + '.'; | 306 + error.message + '".'; |
307 } | 307 } |
308 | 308 |
309 return this._assert(!didThrowCorrectly, passDetail, failDetail); | 309 return this._assert(!didThrowCorrectly, passDetail, failDetail); |
310 } | 310 } |
311 | 311 |
312 /** | 312 /** |
313 * Check if |actual| promise is resolved correctly. | 313 * Check if |actual| promise is resolved correctly. |
314 * | 314 * |
315 * @example | 315 * @example |
316 * should('My promise', promise).beResolve().then(nextStuff); | 316 * should('My promise', promise).beResolve().then(nextStuff); |
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
607 } | 607 } |
608 } | 608 } |
609 | 609 |
610 passed = !(indexActual < this._actual.length - 1 | 610 passed = !(indexActual < this._actual.length - 1 |
611 || indexExpected < this._expected.length - 1); | 611 || indexExpected < this._expected.length - 1); |
612 | 612 |
613 return this._assert( | 613 return this._assert( |
614 passed, | 614 passed, |
615 '${actual} contains all the expected values in the correct order: ' | 615 '${actual} contains all the expected values in the correct order: ' |
616 + '${expected}.', | 616 + '${expected}.', |
617 '${actual} contains an unexpected value of ' | 617 '${actual} contains an *UNEXPECTED* value of ' |
618 + this._actual[indexActual] + ' at index ' + indexActual + '.'); | 618 + this._actual[indexActual] + ' at index ' + indexActual + '.'); |
619 } | 619 } |
620 | 620 |
621 /** | 621 /** |
622 * Check if |actual| array does not have any glitches. Note that |threshold| | 622 * Check if |actual| array does not have any glitches. Note that |threshold| |
623 * is not optional and is to define the desired threshold value. | 623 * is not optional and is to define the desired threshold value. |
624 * | 624 * |
625 * @example | 625 * @example |
626 * should([0.5, 0.5, 0.55, 0.5, 0.45, 0.5]).notGlitch(0.06); | 626 * should([0.5, 0.5, 0.55, 0.5, 0.45, 0.5]).notGlitch(0.06); |
627 * | 627 * |
628 * @result | 628 * @result |
629 * "PASS [0.5,0.5,0.55,0.5,0.45,0.5] has no glitch above the threshold | 629 * "PASS [0.5,0.5,0.55,0.5,0.45,0.5] has no glitch above the threshold |
630 * of 0.06." | 630 * of 0.06." |
631 * | 631 * |
632 */ | 632 */ |
633 notGlitch () { | 633 notGlitch () { |
634 this._processArguments(arguments); | 634 this._processArguments(arguments); |
635 | 635 |
636 let passed = true; | 636 let passed = true; |
637 let passDetail, failDetail; | 637 let passDetail, failDetail; |
638 | 638 |
639 for (let index in this._actual) { | 639 for (let index in this._actual) { |
640 let diff = Math.abs(this._actual[index - 1] - this._actual[index]); | 640 let diff = Math.abs(this._actual[index - 1] - this._actual[index]); |
641 if (diff >= this._expected) { | 641 if (diff >= this._expected) { |
642 passed = false; | 642 passed = false; |
643 failDetail = '${actual} has a glitch at index ' + index + ' of size ' | 643 failDetail = '${actual} has a *GLITCH* at index ' + index + ' of size ' |
644 + diff + '.'; | 644 + diff + '.'; |
645 } | 645 } |
646 } | 646 } |
647 | 647 |
648 passDetail = | 648 passDetail = |
649 '${actual} has no glitch above the threshold of ${expected}.'; | 649 '${actual} has no glitch above the threshold of ${expected}.'; |
650 | 650 |
651 return this._assert(passed, passDetail, failDetail); | 651 return this._assert(passed, passDetail, failDetail); |
652 } | 652 } |
653 | 653 |
(...skipping 13 matching lines...) Expand all Loading... | |
667 this._processArguments(arguments); | 667 this._processArguments(arguments); |
668 | 668 |
669 // The threshold is relative except when |expected| is zero, in which case | 669 // The threshold is relative except when |expected| is zero, in which case |
670 // it is absolute. | 670 // it is absolute. |
671 let absExpected = this._expected ? Math.abs(this._expected) : 1; | 671 let absExpected = this._expected ? Math.abs(this._expected) : 1; |
672 let error = Math.abs(this._actual - this._expected) / absExpected; | 672 let error = Math.abs(this._actual - this._expected) / absExpected; |
673 | 673 |
674 return this._assert( | 674 return this._assert( |
675 error <= this._options.threshold, | 675 error <= this._options.threshold, |
676 '${actual} is ${expected} within an error of ${threshold}.', | 676 '${actual} is ${expected} within an error of ${threshold}.', |
677 '${actual} is not ${expected} within an error of ${threshold}: ' + | 677 '${actual} is *NOT* ${expected} within an error of ${threshold}: ' + |
678 '${actual} with error of ${threshold}.'); | 678 '${actual} with error of ${threshold}.'); |
679 } | 679 } |
680 | 680 |
681 /** | 681 /** |
682 * Check if |target| array is close to |expected| array element-wise within | 682 * Check if |target| array is close to |expected| array element-wise within |
683 * a certain error bound given by the |options|. | 683 * a certain error bound given by the |options|. |
684 * | 684 * |
685 * The error criterion is: | 685 * The error criterion is: |
686 * abs(actual[k] - expected[k]) < max(absErr, relErr * abs(expected)) | 686 * abs(actual[k] - expected[k]) < max(absErr, relErr * abs(expected)) |
687 * | 687 * |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
744 relativeThreshold: relErrorThreshold | 744 relativeThreshold: relErrorThreshold |
745 }); | 745 }); |
746 | 746 |
747 if (numberOfErrors === 0) { | 747 if (numberOfErrors === 0) { |
748 // The assertion was successful. | 748 // The assertion was successful. |
749 passDetail = '${actual} equals ${expected} with an element-wise ' | 749 passDetail = '${actual} equals ${expected} with an element-wise ' |
750 + 'tolerance of ' + maxAllowedErrorDetail + '.'; | 750 + 'tolerance of ' + maxAllowedErrorDetail + '.'; |
751 } else { | 751 } else { |
752 // Failed. Prepare the detailed failure log. | 752 // Failed. Prepare the detailed failure log. |
753 passed = false; | 753 passed = false; |
754 failDetail = '${actual} does not equal ${expected} with an ' | 754 failDetail = '${actual} does *NOT* equal ${expected} with an ' |
755 + 'element-wise tolerance of ' + maxAllowedErrorDetail + '.\n'; | 755 + 'element-wise tolerance of ' + maxAllowedErrorDetail + '.\n'; |
756 | 756 |
757 // Print out actual, expected, absolute error, and relative error. | 757 // Print out actual, expected, absolute error, and relative error. |
758 let counter = 0; | 758 let counter = 0; |
759 failDetail += '\tIndex\tActual\t\t\tExpected\t\tAbsError' | 759 failDetail += '\tIndex\tActual\t\t\tExpected\t\tAbsError' |
760 + '\t\tRelError\t\tTest threshold'; | 760 + '\t\tRelError\t\tTest threshold'; |
761 for (let index in errors) { | 761 for (let index in errors) { |
762 failDetail += '\n\t[' + index + ']\t' | 762 failDetail += '\n\t[' + index + ']\t' |
763 + this._actual[index].toExponential(16) + '\t' | 763 + this._actual[index].toExponential(16) + '\t' |
764 + this._expected[index].toExponential(16) + '\t' | 764 + this._expected[index].toExponential(16) + '\t' |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
982 /** | 982 /** |
983 * Creates an instance of Audit task runner. | 983 * Creates an instance of Audit task runner. |
984 */ | 984 */ |
985 createTaskRunner: function () { | 985 createTaskRunner: function () { |
986 return new TaskRunner(); | 986 return new TaskRunner(); |
987 } | 987 } |
988 | 988 |
989 }; | 989 }; |
990 | 990 |
991 })(); | 991 })(); |
OLD | NEW |