<!DOCTYPE html>
<style>
#box {
position: absolute;
}
</style>
<div id=box></div>
<script src="../../../resources/js-test.js"></script>
<script>
description("Check which type of events trigger layout when it's dirty. Events that do a hit-test must update layout, but all other events shouldn't need to.");
var counter = 10;
function triggersLayout(action) {
// Dirty layout
box.style.height = counter + 'px';
counter++;
internals.updateStyleAndReturnAffectedElementCount();
shouldNotBe('internals.needsLayoutCount()', '0', true);
// Run the action under test
action();
return (internals.needsLayoutCount() == 0);
}
var triggeredLayout;
var jsTestIsAsync = true;
onload = function() {
var targetX = 5;
var targetY = 5;
setPrintTestResultsLazily();
eventSender.forceLayoutOnEvents = false;
// EventHandler::hitTestResultAtPoint exits early when the first layout has not yet occurred.
debug('Forcing initial layout');
document.body.offsetTop;
shouldBeZero('internals.needsLayoutCount()');
debug('Sending touchstart');
triggeredLayout = triggersLayout(function() {
eventSender.addTouchPoint(targetX, targetY);
eventSender.touchStart();
});
shouldBeTrue('triggeredLayout');
debug('Sending touchmove');
triggeredLayout = triggersLayout(function() {
eventSender.updateTouchPoint(0, targetX + 1, targetY);
eventSender.touchStart();
});
shouldBeFalse('triggeredLayout');
debug('Sending touchend');
triggeredLayout = triggersLayout(function() {
eventSender.releaseTouchPoint(0);
eventSender.touchEnd();
});
shouldBeFalse('triggeredLayout');
debug('Sending GestureTapDown');
triggeredLayout = triggersLayout(function() {
eventSender.gestureTapDown(targetX, targetY);
});
shouldBeTrue('triggeredLayout');
debug('Sending GestureShowPress');
triggeredLayout = triggersLayout(function() {
eventSender.gestureShowPress(targetX, targetY);
});
shouldBeTrue('triggeredLayout');
finishJSTest();
}
</script>