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

test(function() {
    assert_true('type' in screen.orientation);
    assert_true('angle' in screen.orientation);
}, "Test screen.orientation properties");

test(function() {
    assert_equals(screen.orientation.type, "portrait-primary");
    assert_equals(screen.orientation.angle, 0);
}, "Test screen.orientation default values.");

test(function() {
    var type = screen.orientation.type;
    var angle = screen.orientation.angle;

    screen.orientation.type = 'foo';
    screen.orientation.angle = 42;

    assert_equals(screen.orientation.type, type);
    assert_equals(screen.orientation.angle, angle);
}, "Test that screen.orientation properties are not writable");

test(function() {
    assert_equals(screen.orientation, screen.orientation);
}, "Test that screen.orientation is always the same object");

test(function() {
    var orientation = screen.orientation;
    var orientationType = screen.orientation.type;
    var orientationAngle = screen.orientation.angle;

    if (window.testRunner)
        window.testRunner.setMockScreenOrientation('landscape-primary');

    assert_equals(screen.orientation, orientation);
    assert_equals(screen.orientation.type, orientation.type);
    assert_equals(screen.orientation.angle, orientation.angle);
    assert_not_equals(screen.orientation.type, orientationType);
    assert_not_equals(screen.orientation.angle, orientationAngle);
}, "Test that screen.orientation values change if the orientation changes");

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