Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(295)

Side by Side Diff: third_party/WebKit/LayoutTests/resize-observer/resources/resizeTestHelper.js

Issue 2242773003: Revert of ResizeObserver pt6: integration (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698