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(); |
+ } |
+})(); |