| <!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> |