| OLD | NEW | 
 | (Empty) | 
|    1 'use strict'; |  | 
|    2  |  | 
|    3 /** |  | 
|    4   ResizeTestHelper is a framework to test ResizeObserver |  | 
|    5   notifications. Use it to make assertions about ResizeObserverEntries. |  | 
|    6   This framework is needed because ResizeObservations are |  | 
|    7   delivered asynchronously inside the event loop. |  | 
|    8  |  | 
|    9   It handles timeouts, and queueing of multiple steps in a test. |  | 
|   10  |  | 
|   11   Usage: |  | 
|   12  |  | 
|   13   Use createTest() to create tests. |  | 
|   14   Make assertions inside entries, timeout callbacks. |  | 
|   15   Every test should clean up after itself by calling helper.observer.disconnect(
     ); |  | 
|   16   Chain tests together with nextTest(), or nextTestRaf() |  | 
|   17  |  | 
|   18   Example: |  | 
|   19  |  | 
|   20   var helper = new ResizeTestHelper(); |  | 
|   21  |  | 
|   22   function test0() { |  | 
|   23     helper.createTest( |  | 
|   24       "test0: test name here", |  | 
|   25       setup => { // setup gets called when test starts |  | 
|   26         helper.observer.observe(t3); |  | 
|   27       }, |  | 
|   28       entries => { // This is ResizeObserver callback |  | 
|   29         // kick off next test by calling nextTestRaf |  | 
|   30         helper.nextTestRaf(); |  | 
|   31       }, |  | 
|   32       timeout => { // timeout gets called on timeout |  | 
|   33         // if timeout happens, and timeout is not defined, test will fail |  | 
|   34       } |  | 
|   35     ); |  | 
|   36 */ |  | 
|   37  |  | 
|   38 function ResizeTestHelper() { |  | 
|   39   this._pendingTests = []; |  | 
|   40   this._observer = new ResizeObserver(this._handleNotification.bind(this)); |  | 
|   41 } |  | 
|   42 ResizeTestHelper.TIMEOUT = 500; |  | 
|   43  |  | 
|   44 ResizeTestHelper.prototype = { |  | 
|   45  |  | 
|   46   // @return ResizeObserver |  | 
|   47   get observer() { |  | 
|   48     return this._observer; |  | 
|   49   }, |  | 
|   50  |  | 
|   51   _handleNotification: function(entries) { |  | 
|   52     if (this._currentTest) { |  | 
|   53       // console.log("notification"); |  | 
|   54       let current = this._currentTest; |  | 
|   55       delete this._currentTest; |  | 
|   56       window.clearTimeout(current.timeoutId); |  | 
|   57       current.test.step(_ => { |  | 
|   58         // console.log("step"); |  | 
|   59         let caughtEx = false; |  | 
|   60         try { |  | 
|   61           current.completion(entries); |  | 
|   62           current.test.done(); |  | 
|   63         } |  | 
|   64         catch(ex) { |  | 
|   65           caughtEx = ex; |  | 
|   66         } |  | 
|   67         if (caughtEx) |  | 
|   68           throw caughtEx; |  | 
|   69       }); |  | 
|   70     } |  | 
|   71   }, |  | 
|   72   _handleTimeout: function() { |  | 
|   73     if (this._currentTest) { |  | 
|   74       let current  = this._currentTest; |  | 
|   75       delete this._currentTest; |  | 
|   76       if (current.timeout) { // timeout is not an error |  | 
|   77         current.timeout(); |  | 
|   78         current.test.done(); |  | 
|   79       } |  | 
|   80       else { |  | 
|   81         current.test.step(_ => { |  | 
|   82           assert_unreached("Timed out waiting for notification. (" + ResizeTestH
     elper.TIMEOUT + "ms)"); |  | 
|   83           current.test.done(); |  | 
|   84         }); |  | 
|   85       } |  | 
|   86     } |  | 
|   87   }, |  | 
|   88  |  | 
|   89   // Start the next test |  | 
|   90   nextTest: function() { |  | 
|   91     if (this._currentTest) // only one test at a time |  | 
|   92       return; |  | 
|   93     if (this._pendingTests.length > 0) { |  | 
|   94       this._currentTest = this._pendingTests.shift(); |  | 
|   95       // console.log("executing ", this._currentTest.name); |  | 
|   96       this._currentTest.setup(); |  | 
|   97       this._currentTest.timeoutId = this._currentTest.test.step_timeout(this._ha
     ndleTimeout.bind(this), ResizeTestHelper.TIMEOUT); |  | 
|   98     } |  | 
|   99   }, |  | 
|  100  |  | 
|  101   // Fires nextTest on rAF. Use it to trigger next test. |  | 
|  102   nextTestRaf: function() { |  | 
|  103     window.requestAnimationFrame( () => this.nextTest() ); |  | 
|  104   }, |  | 
|  105  |  | 
|  106   // Adds new test to _pendingTests. |  | 
|  107   createTest: function(name, setup, completion, timeoutCb) { |  | 
|  108     // console.log('setup ', name); |  | 
|  109     this._pendingTests.push( { |  | 
|  110       name: name, |  | 
|  111       test: async_test(name), |  | 
|  112       setup: setup, |  | 
|  113       completion: completion, |  | 
|  114       timeout: timeoutCb }); |  | 
|  115   } |  | 
|  116  |  | 
|  117 } |  | 
| OLD | NEW |