Chromium Code Reviews| Index: LayoutTests/fast/scroll-behavior/resources/scroll-behavior-test.js | 
| diff --git a/LayoutTests/fast/scroll-behavior/resources/scroll-behavior-test.js b/LayoutTests/fast/scroll-behavior/resources/scroll-behavior-test.js | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..699dad4109886fbfd737857df540d5da68a5e3ca | 
| --- /dev/null | 
| +++ b/LayoutTests/fast/scroll-behavior/resources/scroll-behavior-test.js | 
| @@ -0,0 +1,92 @@ | 
| +(function() { | 
| 
 
Ian Vollick
2014/02/06 16:02:31
Please add a comment describing what a scroll beha
 
 | 
| + var instantTest = async_test('instant scrolls'); | 
| + var smoothTest = async_test('smooth scrolls'); | 
| + var testElement; | 
| + var testEventTarget; | 
| + var instantScrolls; | 
| + var smoothScrolls; | 
| + var runSingleTestCase; | 
| + var computeEndX; | 
| + var computeEndY; | 
| + var currentSmoothTest = 0; | 
| + var startX; | 
| + var startY; | 
| + var endX; | 
| + var endY; | 
| + | 
| + function smoothScrollListener() | 
| + { | 
| + if (smoothScrolls[currentSmoothTest].waitForEnd) { | 
| 
 
Ian Vollick
2014/02/06 16:02:31
This is a bit nitty, but I find the bucket of glob
 
 | 
| + if (testElement.scrollLeft == endX && testElement.scrollTop == endY) | 
| + endSmoothTestCase(); | 
| + return; | 
| + } | 
| + // Wait for an intermediate frame. | 
| + if ((testElement.scrollLeft != startX || testElement.scrollTop != startY) && | 
| + (testElement.scrollLeft != endX || testElement.scrollTop != endY)) { | 
| + testElement.scrollLeft = {x: endX, behavior: "instant"}; | 
| + testElement.scrollTop = {y: endY, behavior: "instant"}; | 
| + endSmoothTestCase(); | 
| + } | 
| + } | 
| + | 
| + function runInstantTestCases() | 
| + { | 
| + for (var i = 0; i < instantScrolls.length; i++) { | 
| + startX = testElement.scrollLeft; | 
| + startY = testElement.scrollTop; | 
| + endX = computeEndX(instantScrolls[i], startX); | 
| + endY = computeEndY(instantScrolls[i], startY); | 
| + testElement.style.scrollBehavior = instantScrolls[i].css; | 
| 
 
Ian Vollick
2014/02/06 16:02:31
A comment here would be helpful (that explains thi
 
 | 
| + runSingleTestCase(instantScrolls[i]); | 
| + instantTest.step(function() { | 
| + assert_equals(testElement.scrollLeft + ", " + testElement.scrollTop, endX + ", " + endY); | 
| + }); | 
| + } | 
| + instantTest.done(); | 
| + } | 
| + | 
| + function startNextSmoothTestCase() | 
| + { | 
| + if (currentSmoothTest >= smoothScrolls.length) { | 
| + smoothTest.done(); | 
| + testEventTarget.removeEventListener("scroll", smoothScrollListener); | 
| + return; | 
| + } | 
| + | 
| + startX = testElement.scrollLeft; | 
| + startY = testElement.scrollTop; | 
| + endX = computeEndX(smoothScrolls[currentSmoothTest], startX); | 
| + endY = computeEndY(smoothScrolls[currentSmoothTest], startY); | 
| + testElement.style.scrollBehavior = smoothScrolls[currentSmoothTest].css; | 
| 
 
Ian Vollick
2014/02/06 16:02:31
Ditto.
 
 | 
| + runSingleTestCase(smoothScrolls[currentSmoothTest]); | 
| + smoothTest.step(function() { | 
| + assert_equals(testElement.scrollLeft + ", " + testElement.scrollTop, startX + ", " + startY); | 
| + }); | 
| + } | 
| + | 
| + function endSmoothTestCase() | 
| + { | 
| + currentSmoothTest++; | 
| + startNextSmoothTestCase(); | 
| + } | 
| + | 
| + runScrollBehaviorTests = function runScrollBehaviorTests(element, | 
| 
 
Ian Vollick
2014/02/06 16:02:31
Does this function need to be named?
Please expla
 
 | 
| + eventTarget, | 
| + instantTestCases, | 
| + smoothTestCases, | 
| + runTestCase, | 
| + endX, | 
| + endY) { | 
| + testElement = element; | 
| + testEventTarget = eventTarget; | 
| + instantScrolls = instantTestCases; | 
| + smoothScrolls = smoothTestCases; | 
| + runSingleTestCase = runTestCase; | 
| + computeEndX = endX; | 
| + computeEndY = endY; | 
| + runInstantTestCases(); | 
| 
 
Ian Vollick
2014/02/06 16:02:31
I'm hoping you go the OO route as I described earl
 
 | 
| + testEventTarget.addEventListener("scroll", smoothScrollListener); | 
| + startNextSmoothTestCase(); | 
| + } | 
| +})(); |