Index: third_party/WebKit/LayoutTests/intersection-observer/helper-functions.js |
diff --git a/third_party/WebKit/LayoutTests/intersection-observer/helper-functions.js b/third_party/WebKit/LayoutTests/intersection-observer/helper-functions.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9b7cf243fbe894f5cfb6936d17f537df31a9bc34 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/intersection-observer/helper-functions.js |
@@ -0,0 +1,66 @@ |
+// Some of the js-test.js boilerplate will add stuff to the top of the document early |
+// enough to screw with frame offsets that are measured by the test. Delay all that |
esprehn
2015/12/12 00:14:12
hmmm...
|
+// jazz until the actual test code is finished. |
+setPrintTestResultsLazily(); |
+var delayDescription = description; |
+var descriptionString = ""; |
+var delayIsSuccessfullyParsed = isSuccessfullyParsed; |
+var isSuccessfullyParsed = function() {} |
+var description = function(msg) { descriptionString = msg } |
+ |
+if (window.testRunner) |
+ testRunner.waitUntilDone(); |
+ |
+function rectToString(rect) { |
+ return "[" + rect.left + ", " + rect.right + ", " + rect.top + ", " + rect.bottom + "]"; |
+} |
+ |
+function entryToString(entry) { |
+ var ratio = ((entry.intersectionRect.width * entry.intersectionRect.height) / |
+ (entry.boundingClientRect.width * entry.boundingClientRect.height)); |
+ return ( |
+ "boundingClientRect=" + rectToString(entry.boundingClientRect) + |
+ "\nintersectionRect=" + rectToString(entry.intersectionRect) + |
esprehn
2015/12/12 00:14:12
I'd put each of these on a line, and put a separat
szager1
2015/12/16 19:15:33
Done.
|
+ "\nvisibleRatio=" + ratio + |
+ "\nrootBounds=" + rectToString(entry.rootBounds) + |
+ "\ntarget=" + entry.target + |
+ "\ntime=" + entry.time); |
+} |
+ |
+function finishTest() { |
+ if (descriptionString) |
+ delayDescription(descriptionString); |
+ delayIsSuccessfullyParsed(); |
+ finishJSTest(); |
+ if (window.testRunner) |
+ testRunner.notifyDone(); |
+} |
+ |
+function rectToString(rect) { |
esprehn
2015/12/12 00:14:12
defined twice in this file
szager1
2015/12/16 19:15:33
Fixed.
|
+ return "[" + rect.left + ", " + rect.right + ", " + rect.top + ", " + rect.bottom + "]"; |
+} |
+ |
+function checkRect(expected, actual) { |
+ shouldBeEqualToNumber(actual + ".left", expected[0]); |
+ shouldBeEqualToNumber(actual + ".right", expected[1]); |
+ shouldBeEqualToNumber(actual + ".top", expected[2]); |
+ shouldBeEqualToNumber(actual + ".bottom", expected[3]); |
+} |
+ |
+function checkEntry(expected, actual) { |
+ checkRect(expected['boundingClientRect'], actual + ".boundingClientRect"); |
esprehn
2015/12/12 00:14:12
.boundingClientRect, why the backets?
szager1
2015/12/16 19:15:33
Fixed.
|
+ checkRect(expected['intersectionRect'], actual + ".intersectionRect"); |
esprehn
2015/12/12 00:14:12
ditto, why the brackets?
szager1
2015/12/16 19:15:33
Fixed.
|
+ checkRect(expected['rootBounds'], actual + ".rootBounds"); |
+ var actual_target = eval(actual + ".target"); |
esprehn
2015/12/12 00:14:12
can we avoid this eval and just list all the right
szager1
2015/12/16 19:15:33
Added a method to js-test.js to avoid doing the ev
|
+ if (isResultCorrect(actual_target, expected['target'])) |
+ testPassed(actual + ".target is " + expected); |
+ else |
+ testFailed(actual + ".target should be " + stringify(expected) + ". Was " + actual_target + "."); |
+} |
+ |
+function checkResults(expected, actual, startFrom = 0) { |
+ shouldBeEqualToNumber(actual + ".length", expected.length); |
+ var max = Math.min(eval(actual + ".length"), expected.length); |
esprehn
2015/12/12 00:14:12
don't eval, the test should contain the statements
szager1
2015/12/16 19:15:33
Done.
|
+ for (var i = startFrom; i < max; i++) |
+ checkEntry(expected[i], actual + "[" + i + "]"); |
+} |