<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
    <link rel="stylesheet" href="../../js/resources/js-test-style.css">
    <script src="../../js/resources/js-test-pre.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script language="JavaScript" type="text/javascript">
    if (window.layoutTestController)
        layoutTestController.dumpAsText();

    window.moveTo(0,0);

    description("This test makes sure that we have similar behavior as other\
    browsers when resizing and moving a window outside of the screen.  This test\
    will fail in some dimensions when run manually because of inconsistencies of\
    when the window can and cannot go behind the doc.");
    
    var result;
    var testName;
    var x;
    var y;

    // resizeTo /////////////////////////
    debug('');
    debug('window.resizeTo Tests');
    debug('');

    x = screen.width*2;
    y = screen.height*2;
    window.resizeTo(x, y);
    debug("Testing - resizeTo: Too Big");
    shouldBe('window.outerWidth', 'screen.width');

    debug('');

    x = 50;
    y = 50;
    window.resizeTo(x, y);
    debug("Testing - resizeTo: Too Small");
    shouldBe('window.outerWidth', '100');

    debug('');
    x = screen.width/10;
    y = screen.height/10;
    window.moveTo(x, y);
    x = screen.width;
    y = screen.height;
    window.resizeTo(x, y);
    debug("Testing - resizeTo: Full Screen Out of Bounds");
    shouldBe('window.screenY', 'screen.availTop');
    shouldBe('window.outerHeight', 'screen.availHeight');
    shouldBe('window.screenX', 'screen.availLeft');
    shouldBe('window.outerWidth', 'screen.width');

    debug('');
    x = 100;
    y = 100;
    window.resizeTo(x, y);
    x = screen.width/2;
    y = screen.height/2;
    window.moveTo(x, y);
    x += 10;
    y += 10;
    window.resizeTo(x, y);
    debug("Testing - resizeTo: Not Full Screen Out of Bounds");
    shouldBe('window.outerHeight + window.screenY - screen.availTop', 'screen.availHeight');
    shouldBe('window.outerWidth + window.screenX - screen.availLeft', 'screen.width');

    // resizeBy /////////////////////////
    debug('');
    debug('window.resizeBy Tests');
    debug('');

    x = 150;
    y = 150;
    window.resizeTo(x, y);
    x = -100;
    y = -100;
    window.resizeBy(x, y);
    debug("Testing - resizeBy: Too Small");
    shouldBe('window.outerWidth', '100');

    debug('');

    x = screen.width*2;
    y = screen.height*2;
    window.resizeBy(x, y);
    debug("Testing - resizeBy: Too Big");
    shouldBe('window.outerWidth', 'screen.width');

    window.moveTo(0,0);
    window.resizeTo(screen.width, screen.height);

    // moveTo /////////////////////////
    debug('');
    debug('window.moveTo Tests');
    debug('');

    x = -100;
    y = -100;
    window.moveTo(x, y);
    debug("Testing - moveTo: Top Left");
    shouldBe('window.screenY', 'screen.availTop');
    shouldBe('window.screenX', 'screen.availLeft');

    debug('');

    x = 0;
    y = -100;
    window.moveTo(x, y);
    debug("Testing - moveTo: Top");
    shouldBe('window.screenY', 'screen.availTop');
    shouldBe('window.screenX', 'screen.availLeft');

    debug('');

    x = 100;
    y = -100;
    window.moveTo(x, y);
    debug("Testing - moveTo: Top Right");
    shouldBe('window.screenY', 'screen.availTop');
    shouldBe('window.outerWidth', 'screen.width');

    debug('');

    x = 100;
    y = 0;
    window.moveTo(x, y);
    debug("Testing - moveTo: Right");
    shouldBe('window.screenY', 'screen.availTop');
    shouldBe('window.outerWidth', 'screen.width');

    debug('');

    x = 100;
    y = 100;
    window.moveTo(x, y);
    debug("Testing - moveTo: Bottom Right");
    shouldBe('window.outerHeight', 'screen.availHeight');
    shouldBe('window.outerWidth', 'screen.width');

    debug('');

    x = 0;
    y = 100;
    window.moveTo(x, y);
    debug("Testing - moveTo: Bottom");
    shouldBe('window.outerHeight', 'screen.availHeight');
    shouldBe('window.screenX', 'screen.availLeft');

    debug('');

    x = -100;
    y = 100;
    window.moveTo(x, y);
    debug("Testing - moveTo: Bottom Left");
    shouldBe('window.outerHeight', 'screen.availHeight');
    shouldBe('window.screenX', 'screen.availLeft');

    debug('');

    x = -100;
    y = 0;
    window.moveTo(x, y);
    debug("Testing - moveTo: Left");
    shouldBe('window.screenY', 'screen.availTop');
    shouldBe('window.screenX', 'screen.availLeft');

    window.moveTo(0,0);
    window.resizeTo(screen.width, screen.height);

    // moveBy /////////////////////////
    debug('');
    debug('window.moveBy Tests');
    debug('');

    x = 100;
    y = 100;
    window.resizeTo(x, y);

    x = 200;
    y = 200;
    window.moveTo(x, y);

    var previousScreenX = window.screenX;
    var previousScreenY = window.screenY;

    x = 0;
    y = 0;
    window.moveBy(x, y);
    debug("Testing - moveBy: Zero Zero");
    shouldBe('window.screenY', previousScreenY.toString());
    shouldBe('window.screenX', previousScreenX.toString());

    debug('');

    previousScreenX += 1;

    x = 1;
    y = 0;
    window.moveBy(x, y);
    debug("Testing - moveBy: One Zero");
    shouldBe('window.screenY', previousScreenY.toString());
    shouldBe('window.screenX', previousScreenX.toString());

    debug('');

    previousScreenY += 1;

    x = 0;
    y = 1;
    window.moveBy(x, y);
    debug("Testing - moveBy: Zero One");
    shouldBe('window.screenY', previousScreenY.toString());
    shouldBe('window.screenX', previousScreenX.toString());

    debug('');

    window.moveTo(0,0);
    window.resizeTo(screen.width, screen.height);

    x = -100;
    y = -100;
    window.moveBy(x, y);
    debug("Testing - moveBy: Top Left");
    shouldBe('window.screenY', 'screen.availTop');
    shouldBe('window.screenX', 'screen.availLeft');

    debug('');

    x = 0;
    y = -100;
    window.moveBy(x, y);
    debug("Testing - moveBy: Top");
    shouldBe('window.screenY', 'screen.availTop');
    shouldBe('window.screenX', 'screen.availLeft');

    debug('');

    x = 100;
    y = -100;
    window.moveBy(x, y);
    debug("Testing - moveBy: Top Right");
    shouldBe('window.screenY', 'screen.availTop');
    shouldBe('window.outerWidth', 'screen.width');

    debug('');

    x = 100;
    y = 0;
    window.moveBy(x, y);
    debug("Testing - moveBy: Right");
    shouldBe('window.screenY', 'screen.availTop');
    shouldBe('window.outerWidth', 'screen.width');

    debug('');

    x = 100;
    y = 100;
    window.moveBy(x, y);
    debug("Testing - moveBy: Bottom Right");
    shouldBe('window.outerHeight', 'screen.availHeight');
    shouldBe('window.outerWidth', 'screen.width');

    debug('');

    x = 0;
    y = 100;
    window.moveBy(x, y);
    debug("Testing - moveBy: Bottom");
    shouldBe('window.outerHeight', 'screen.availHeight');

    debug('');

    x = -1000;
    y = 100;
    window.moveBy(x, y);
    debug("Testing - moveBy: Bottom Left");
    shouldBe('window.outerHeight', 'screen.availHeight');
    shouldBe('window.screenX', 'screen.availLeft');

    debug('');

    x = -100;
    y = 0;
    window.moveBy(x, y);
    debug("Testing - moveBy: Left");
    shouldBe('window.screenX', 'screen.availLeft');

    debug('');

    window.moveTo(0,0);
    window.resizeTo(800,600);

    var successfullyParsed = true;
</script>
<script src="../../js/resources/js-test-post.js"></script>
</body>
</html>
