| Index: third_party/WebKit/LayoutTests/resize-observer/resources/resizeTestHelper.js
|
| diff --git a/third_party/WebKit/LayoutTests/resize-observer/resources/resizeTestHelper.js b/third_party/WebKit/LayoutTests/resize-observer/resources/resizeTestHelper.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..83b21ad86fc084d9c2084cd8f6e39ad43545588d
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/resize-observer/resources/resizeTestHelper.js
|
| @@ -0,0 +1,90 @@
|
| +'use strict';
|
| +
|
| +/**
|
| + ResizeTestHelper is a framework to test ResizeObserver
|
| + notifications. Use it to make assertions about ResizeObserverEntries.
|
| +
|
| + It handles timeouts, and queueing of multiple steps in a test.
|
| +
|
| +*/
|
| +function ResizeTestHelper() {
|
| + this._pendingTests = [];
|
| + this._observer = new ResizeObserver(this._handleNotification.bind(this));
|
| +}
|
| +
|
| +ResizeTestHelper.prototype = {
|
| +
|
| + TIMEOUT: 2000,
|
| +
|
| + // @return ResizeObserver
|
| + get observer() {
|
| + return this._observer;
|
| + },
|
| +
|
| + _handleNotification: function(entries) {
|
| + if (this._currentTest) {
|
| + // console.log("notification");
|
| + let current = this._currentTest;
|
| + delete this._currentTest;
|
| + window.clearTimeout(current.timeoutId);
|
| + current.test.step(_ => {
|
| + // console.log("step");
|
| + let caughtEx = false;
|
| + try {
|
| + current.completion(entries);
|
| + current.test.done();
|
| + }
|
| + catch(ex) {
|
| + caughtEx = ex;
|
| + }
|
| + this.startTests();
|
| + if (caughtEx)
|
| + throw caughtEx;
|
| + });
|
| + }
|
| + },
|
| + _handleTimeout: function() {
|
| + if (this._currentTest) {
|
| + let current = this._currentTest;
|
| + delete this._currentTest;
|
| + if (current.timeout) { // timeout is not an error
|
| + current.timeout();
|
| + current.test.done();
|
| + this.startTests();
|
| + }
|
| + else {
|
| + current.test.step(_ => {
|
| + assert_unreached("Timed out waiting for notification. (" + this.TIMEOUT + "ms)");
|
| + current.test.done();
|
| + this.startTests();
|
| + });
|
| + }
|
| + }
|
| + },
|
| +
|
| + /*
|
| + Kicks off tests. Processes all the tests in order, until
|
| + _pendingTests is empty
|
| + */
|
| + startTests: function() {
|
| + if (this._currentTest) // only one test at a time
|
| + return;
|
| + if (this._pendingTests.length > 0) {
|
| + this._currentTest = this._pendingTests.shift();
|
| + this._currentTest.setup();
|
| + this._currentTest.timeoutId = this._currentTest.test.step_timeout(this._handleTimeout.bind(this), this.TIMEOUT);
|
| + }
|
| + },
|
| +
|
| + /**
|
| + Adds new test to _pendingTests.
|
| + */
|
| + createTest: function(name, setup, completion, timeoutCb) {
|
| + this._pendingTests.push( {
|
| + test: async_test(name),
|
| + setup: setup,
|
| + completion: completion,
|
| + timeout: timeoutCb });
|
| + }
|
| +
|
| +}
|
|
|