<!DOCTYPE html>
<html>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>

var test = async_test("Test that screen.orientation.lock() throws when the input isn't valid.");

function onOrientationChangeEvent(ev) {
    assert_unreached('Unexpected orientation change');
}

window.screen.orientation.addEventListener('change', test.step_func(onOrientationChangeEvent));

test.step(function() {
    assert_equals(screen.orientation.type, 'portrait-primary');
    assert_throws(new TypeError(), function() {
        screen.orientation.lock('invalid-orientation');
    });

    assert_equals(screen.orientation.type, 'portrait-primary');
    assert_throws(new TypeError(), function() {
        screen.orientation.lock(null);
    });

    assert_equals(screen.orientation.type, 'portrait-primary');
    assert_throws(new TypeError(), function() {
        screen.orientation.lock(undefined);
    });

    assert_equals(screen.orientation.type, 'portrait-primary');
    assert_throws(new TypeError(), function() {
        screen.orientation.lock(undefined);
    });

    assert_equals(screen.orientation.type, 'portrait-primary');
    assert_throws(new TypeError(), function() {
        screen.orientation.lock(123);
    });

    assert_equals(screen.orientation.type, 'portrait-primary');
    assert_throws(new TypeError(), function() {
        screen.orientation.lock(window);
    });

    assert_equals(screen.orientation.type, 'portrait-primary');
    assert_throws(new TypeError(), function() {
        screen.orientation.lock(['portrait-primary']);
    });

    assert_equals(screen.orientation.type, 'portrait-primary');
    assert_throws(new TypeError(), function() {
        screen.orientation.lock(['portrait-primary', 'landscape-primary']);
    });

    assert_equals(screen.orientation.type, 'portrait-primary');
    assert_throws(new TypeError(), function() {
        screen.orientation.lock();
    });
});

// Finish asynchronously to give events a chance to fire.
setTimeout(test.step_func(function() {
    assert_equals(screen.orientation.type, 'portrait-primary');
    screen.orientation.unlock();
    test.done();
}));

</script>
</body>
</html>

