diff options
Diffstat (limited to 'testing/web-platform/tests/screen-orientation/onchange-event.html')
-rw-r--r-- | testing/web-platform/tests/screen-orientation/onchange-event.html | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/testing/web-platform/tests/screen-orientation/onchange-event.html b/testing/web-platform/tests/screen-orientation/onchange-event.html new file mode 100644 index 000000000..be39efc32 --- /dev/null +++ b/testing/web-platform/tests/screen-orientation/onchange-event.html @@ -0,0 +1,80 @@ +<!DOCTYPE html> +<html> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + +var changeTest = async_test("Test that orientationchange event is fired when the orientation changes."); +var noChangeTest = async_test("Test that orientationchange event is not fired when the orientation does not change."); + +var orientations = [ + 'portrait-primary', + 'portrait-secondary', + 'landscape-primary', + 'landscape-secondary' +]; + +var currentIndex = orientations.indexOf(window.screen.orientation.type); +// Count the number of calls received from the EventHandler set on screen.orientation.onchange. +var orientationChangeEventHandlerCalls = 0; +// Count the number of calls received from the listener set with screen.orientation.addEventListene(). +var orientationChangeEventListenerCalls = 0; + +var orientationChangeContinuation = null; + +function getNextIndex() { + return (currentIndex + 1) % orientations.length; +} + +window.screen.orientation.onchange = function() { + orientationChangeEventHandlerCalls++; + if (orientationChangeEventContinuation) { + setTimeout(orientationChangeEventContinuation); + orientationChangeEventContinuation = null; + } +}; + +window.screen.orientation.addEventListener('change', function() { + orientationChangeEventListenerCalls++; +}); + +function runNoChangeTest() { + screen.orientation.lock(orientations[currentIndex]).then(function() {}, function() {}); + + noChangeTest.step(function() { + assert_equals(screen.orientation.type, orientations[currentIndex]); + assert_equals(orientationChangeEventHandlerCalls, orientations.length); + assert_equals(orientationChangeEventListenerCalls, orientations.length); + }); + + noChangeTest.done(); +} + +var i = 0; +function runChangeTest() { + screen.orientation.lock(orientations[getNextIndex()]).then(function() {}, function() {}); + currentIndex = getNextIndex(); + + orientationChangeEventContinuation = function() { + changeTest.step(function() { + assert_equals(screen.orientation.type, orientations[currentIndex]); + assert_equals(orientationChangeEventHandlerCalls, i + 1); + assert_equals(orientationChangeEventListenerCalls, i + 1); + }); + + ++i; + if (i == orientations.length) { + changeTest.done(); + runNoChangeTest(); + } else { + runChangeTest(); + } + }; +} + +runChangeTest(); + +</script> +</body> +</html> |