| <!DOCTYPE html> |
| <html> |
| <head> |
| <title> |
| audit.js: basic tests |
| </title> |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <script src="../resources/audit.js"></script> |
| </head> |
| <body> |
| <script id="layout-test-code"> |
| let audit = Audit.createTaskRunner({requireResultFile: true}); |
| |
| |
| // Basic assertion testing. |
| audit.define( |
| { |
| label: 'basic', |
| description: 'Simple unit tests for basic assertions.' |
| }, |
| function(task, should) { |
| should(OfflineAudioContext, 'OfflineAudioContext').exist(); |
| should(function() { |
| let foo1 = 0; |
| }, 'Setting foo1 to 0').notThrow(); |
| should(function() { |
| let foo2 = bar; |
| }).throw(); |
| should(function() { |
| let foo3 = bar; |
| }).throw(ReferenceError); |
| should(function() { |
| let foo4 = bar; |
| }).throw(null); |
| should(function() { |
| let foo5 = bar; |
| }).throw(undefined); |
| should(() => { |
| should(); |
| }, 'Calling should() with no argument').throw(Error); |
| should(3 < 5, '3 < 5').beTrue(); |
| should(false).beFalse(); |
| should(1).beEqualTo(1) |
| should(1).notBeEqualTo(2) |
| should(NaN).beNaN(); |
| should(1).notBeNaN(); |
| should(typeof AudioContext.prototype).beEqualTo('object'); |
| should(2).beGreaterThan(1); |
| should(2).beGreaterThanOrEqualTo(2); |
| should(1).beLessThan(2); |
| should(1).beLessThanOrEqualTo(1); |
| should(should(1).beEqualTo(1), 'should(1).beEqualTo(1)').beTrue(); |
| should(true, 'The message is').message('truthful!', 'false!'); |
| |
| should(BaseAudioContext.prototype, 'BaseAudioContext.prototype') |
| .haveOwnProperty('createGain'); |
| should(BaseAudioContext.prototype, 'BaseAudioContext.prototype') |
| .notHaveOwnProperty('startRendering'); |
| |
| let ac = new AudioContext(); |
| let sourceNode = new AudioBufferSourceNode(ac); |
| should(sourceNode, 'An AudioBufferSourceNode') |
| .inheritFrom('AudioScheduledSourceNode'); |
| should(sourceNode, 'An AudioBufferSourceNode') |
| .inheritFrom('AudioNode'); |
| |
| let oac = new OfflineAudioContext(1, 128, 44100); |
| Promise |
| .all([ |
| should(oac.startRendering(), 'Start OAC rendering') |
| .beResolved(), |
| should( |
| oac.decodeAudioData(), |
| 'Decoding audio data with no argument') |
| .beRejected(), |
| should(oac.suspend(), 'Suspending OAC with no argument') |
| .beRejectedWith('TypeError') |
| ]) |
| .then(task.done.bind(task)); |
| }); |
| |
| |
| // Advanced, mostly array-based numerical testing. Note that some codes |
| // are commented out to avoid the trybot failure. These failures are |
| // intentional, to demonstrate how the detailed failure report works. |
| audit.define( |
| {label: 'numerical', description: 'Numerical assertion unit test.'}, |
| function(task, should) { |
| should(2.3).beCloseTo(2, {threshold: 0.3}); |
| should([1, 1, 1]).beConstantValueOf(1); |
| should([1, 0, 1]).notBeConstantValueOf(1); |
| should([1, 0, 0, 1]).notBeConstantValueOf(1); |
| should([1, 1, 1]).beEqualToArray([1, 1, 1]); |
| should([ |
| 1, 1, 1, 1, 2, 2, 3, 3, 3 |
| ]).containValues([1, 2, 3], 'one, two, three'); |
| should([0.5, 0.5, 0.55, 0.5, 0.45, 0.5]).notGlitch(0.06); |
| task.done(); |
| }); |
| |
| audit.define( |
| { |
| label: 'numerical typed arrays', |
| description: 'Numerical assertion unit test with typed arrays.' |
| }, |
| function(task, should) { |
| let testValues = [1, 2, 3]; |
| should(Uint8Array.from(testValues), 'Uint8Array') |
| .beEqualToArray(testValues); |
| should(Float32Array.from(testValues), 'Float32Array') |
| .beEqualToArray(testValues); |
| should(Float64Array.from(testValues), 'Float64Array') |
| .beEqualToArray(testValues); |
| task.done(); |
| }); |
| |
| // Test Audit.loadFileFromUrl() within |should| assertion. |
| // See: crbug.com/701813 |
| audit.define( |
| { |
| label: 'load-file-in-should', |
| description: |
| 'Test Audit.loadFileFromUrl() within |should| assertion.' |
| }, |
| (task, should) => { |
| let url = '../resources/hyper-reality/laughter.wav'; |
| let promise = should( |
| Audit.loadFileFromUrl(url), |
| 'Loading file within should().beResolved()') |
| .beResolved(); |
| promise.then(() => {task.done()}); |
| }); |
| |
| |
| // The task headline needs to be printed even if there is no description |
| // is given. |
| audit.define('dummy-label-string', function(task) { |
| task.done(); |
| }); |
| |
| |
| // Test the same thing in a differen way. |
| audit.define({label: 'dummy-label-object'}, function(task) { |
| task.done(); |
| }); |
| |
| |
| // This task is defined, but you can selectively opt it out when the task |
| // runs. If you would like to see how failure cases get printed, include |
| // this task and launch the task runner. |
| audit.define('empty', function(task, should) { |
| task.done(); |
| }); |
| |
| |
| // You can enumerate tasks you want to execute in the order, or simply |
| // pass no argument to run all the defined tasks. |
| audit.run( |
| 'numerical', 'numerical typed arrays', 'basic', 'load-file-in-should', |
| 'dummy-label-string', 'dummy-label-object'); |
| </script> |
| </body> |
| </html> |