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