Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Here's how waitForNotification works: | |
|
foolip
2017/01/11 11:42:33
Great documentation! :)
| |
| 2 // | |
| 3 // - myTestFunction0() | |
| 4 // - waitForNotification(myTestFunction1) | |
| 5 // - requestAnimationFrame() | |
| 6 // - Modify DOM in a way that should trigger an IntersectionObserver callback. | |
| 7 // - BeginFrame | |
| 8 // - requestAnimationFrame handler runs | |
| 9 // - First setTimeout() | |
| 10 // - Style, layout, paint | |
| 11 // - IntersectionObserver generates new notifications | |
| 12 // - Posts a task to deliver notifications | |
| 13 // - First setTimeout handler runs | |
| 14 // - Second setTimeout() | |
| 15 // - Task to deliver IntersectionObserver notifications runs | |
| 16 // - IntersectionObserver callbacks run | |
| 17 // - Second setTimeout handler runs | |
| 18 // - myTestFunction1() | |
| 19 // - waitForNotification(myTestFunction2) | |
|
foolip
2017/01/11 11:42:33
I guess that this part is optional, and that the o
szager1
2017/01/23 23:18:04
Done.
| |
| 20 // - requestAnimationFrame() | |
| 21 // - Verify newly-arrived IntersectionObserver notifications | |
| 22 // - Modify DOM to trigger new notifications | |
| 23 function waitForNotification(f, description) { | |
| 24 requestAnimationFrame(function() { | |
| 25 setTimeout(function() { | |
| 26 setTimeout(f); | |
| 27 }); | |
| 28 }); | |
| 29 } | |
| 30 | |
| 31 function runTestCycle(f, description) { | |
| 32 async_test(function(t) { | |
|
foolip
2017/01/11 11:42:33
Can you document that the timing of when runTestCy
szager1
2017/01/23 23:18:04
Done.
| |
| 33 waitForNotification(t.step_func(function() { | |
|
foolip
2017/01/11 11:42:33
Simplification nit: waitForNotification(t.step_fun
szager1
2017/01/23 23:18:04
Done.
| |
| 34 f(); | |
| 35 t.done(); | |
| 36 })); | |
| 37 }, description); | |
| 38 } | |
| 39 | |
| 40 // Root bounds for a root with an overflow clip as defined by: | |
| 41 // http://wicg.github.io/IntersectionObserver/#intersectionobserver-root-inter section-rectangle | |
| 42 function contentBounds(root) { | |
| 43 var left = root.offsetLeft + root.clientLeft; | |
| 44 var right = left + root.clientWidth; | |
| 45 var top = root.offsetTop + root.clientTop; | |
| 46 var bottom = top + root.clientHeight; | |
| 47 return [left, right, top, bottom]; | |
| 48 } | |
| 49 | |
| 50 // Root bounds for a root without an overflow clip as defined by: | |
| 51 // http://wicg.github.io/IntersectionObserver/#intersectionobserver-root-inter section-rectangle | |
| 52 function borderBoxBounds(root) { | |
| 53 var left = root.offsetLeft; | |
| 54 var right = left + root.offsetWidth; | |
| 55 var top = root.offsetTop; | |
| 56 var bottom = top + root.offsetHeight; | |
| 57 return [left, right, top, bottom]; | |
| 58 } | |
| 59 | |
| 60 function rectArea(rect) { | |
| 61 return (rect.left - rect.right) * (rect.bottom - rect.top); | |
| 62 } | |
| 63 | |
| 64 function checkRect(actual, expected, description) { | |
| 65 if (expected.length > 0) | |
|
foolip
2017/01/11 11:42:33
Just skimming the call sites I don't quite see whe
szager1
2017/01/23 23:18:04
Yes, there are cases where it's called with expect
| |
| 66 assert_equals(actual.left, expected[0], description + ".left == " + expected [0]); | |
|
foolip
2017/01/11 11:42:33
testharness.js style nit: the assertion descriptio
szager1
2017/01/23 23:18:04
Done.
| |
| 67 if (expected.length > 1) | |
| 68 assert_equals(actual.right, expected[1], description + ".right == " + expect ed[1]); | |
| 69 if (expected.length > 2) | |
| 70 assert_equals(actual.top, expected[2], description + ".top == " + expected[2 ]); | |
| 71 if (expected.length > 3) | |
| 72 assert_equals(actual.bottom, expected[3], description + ".bottom == " + expe cted[3]); | |
| 73 } | |
| 74 | |
| 75 function checkEntry(entries, i, expected) { | |
| 76 assert_equals(entries.length, i+1, String(i+1) + " notification(s)."); | |
|
foolip
2017/01/11 11:42:33
Nit: Here the description "number of notifications
foolip
2017/01/11 13:42:53
Actually, why can checkEntry only be used to check
szager1
2017/01/23 23:18:04
That's a good idea, changed to checkLastEntry.
| |
| 77 if (expected) { | |
| 78 checkRect(entries[i].boundingClientRect, expected.slice(0, 4), | |
| 79 "entries[" + i + "].boundingClientRect"); | |
| 80 checkRect(entries[i].intersectionRect, expected.slice(4, 8), | |
| 81 "entries[" + i + "].intersectionRect"); | |
| 82 checkRect(entries[i].rootBounds, expected.slice(8, 12), | |
| 83 "entries[" + i + "].rootBounds"); | |
| 84 } | |
| 85 } | |
| 86 | |
| 87 function coordinatesToClientRectJson(top, right, bottom, left) { | |
|
foolip
2017/01/11 11:42:33
This appears to be unused now.
szager1
2017/01/23 23:18:04
It's used in resources/cross-origin-subframe.html
| |
| 88 return { | |
| 89 top: top, | |
| 90 right: right, | |
| 91 bottom: bottom, | |
| 92 left: left | |
| 93 }; | |
| 94 } | |
| 95 | |
| 96 function clientRectToJson(rect) { | |
| 97 if (!rect) | |
| 98 return "null"; | |
| 99 return { | |
| 100 top: rect.top, | |
| 101 right: rect.right, | |
| 102 bottom: rect.bottom, | |
| 103 left: rect.left | |
| 104 }; | |
| 105 } | |
| 106 | |
| 107 function entryToJson(entry) { | |
| 108 return { | |
| 109 boundingClientRect: clientRectToJson(entry.boundingClientRect), | |
| 110 intersectionRect: clientRectToJson(entry.intersectionRect), | |
| 111 rootBounds: clientRectToJson(entry.rootBounds), | |
| 112 target: entry.target.id | |
| 113 }; | |
| 114 } | |
| 115 | |
| 116 function checkJsonEntry(actual, expected) { | |
| 117 checkRect(actual.boundingClientRect, expected.boundingClientRect, "entry.bound ingClientRect"); | |
| 118 checkRect(actual.intersectionRect, expected.intersectionRect, "entry.intersect ionRect"); | |
| 119 if (actual.rootBounds == "null") | |
|
foolip
2017/01/11 11:42:33
I've argued against requiring === everywhere on bl
szager1
2017/01/23 23:18:04
This value is encoded by clientRectToJson, which u
| |
| 120 assert_equals(expected.rootBounds, "null", "rootBounds is null"); | |
| 121 else | |
| 122 checkRect(actual.rootBounds, expected.rootBounds, "entry.rootBounds"); | |
| 123 assert_equals(actual.target, expected.target); | |
| 124 } | |
| 125 | |
| 126 function checkJsonEntries(actual, expected, description) { | |
| 127 test(function() { | |
|
foolip
2017/01/11 11:42:33
Shouldn't this already be inside a test? Will comm
szager1
2017/01/23 23:18:04
I addressed this in the test, but: this is a case
| |
| 128 assert_equals(actual.length, expected.length); | |
| 129 for (var i = 0; i < actual.length; i++) | |
| 130 checkJsonEntry(actual[i], expected[i]); | |
| 131 }, description); | |
| 132 } | |
| OLD | NEW |