<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<script>
description("Test that canvas elements can't have negative height and/or width.");

canvas = document.createElement('canvas');

function createFromMarkup(markup)
{
    var fragmentContainer = document.createElement("div");
    fragmentContainer.innerHTML = markup;
    return fragmentContainer.firstChild;
}

function trySettingWidth(value) {
    canvas.width = 6;
    canvas.width = value;
    return canvas.width;
}

function trySettingHeight(value) {
    canvas.height = 6;
    canvas.height = value;
    return canvas.height;
}

function trySettingWidthAttribute(value) {
    canvas.width = 6;
    canvas.setAttribute('width', value);
    return canvas.width;
}

function trySettingHeightAttribute(value) {
    canvas.height = 6;
    canvas.setAttribute('height', value);
    return canvas.height;
}

function tryCreatingCanvasWithWidth(value) {
    return createFromMarkup("<canvas width=" + value + "></canvas>").width;
}

function tryCreatingCanvasWithHeight(value) {
    return createFromMarkup("<canvas height='" + value + "'></canvas>").height;
}

function tryWidth(value, expected) {
    shouldBe("trySettingWidth(" + value + ")", expected);
    shouldBe("trySettingWidthAttribute(" + value + ")", expected);
    shouldBe("tryCreatingCanvasWithWidth(" + value + ")", expected);
}

function tryHeight(value, expected) {
    shouldBe("trySettingHeight(" + value + ")", expected);
    shouldBe("trySettingHeightAttribute(" + value + ")", expected);
    shouldBe("tryCreatingCanvasWithHeight(" + value + ")", expected);
}

function checkDefaultWidth() {
    return document.createElement("canvas").width;
}

function checkDefaultHeight() {
    return document.createElement("canvas").height;
}

shouldBe("checkDefaultWidth()", "300");
shouldBe("checkDefaultHeight()", "150");

shouldBe("trySettingWidth('abc')", "300");
shouldBe("trySettingWidth('200')", "200");
shouldBe("trySettingWidth('300')", "300");
shouldBe("trySettingWidth(NaN)", "300");
shouldBe("trySettingWidth(Infinity)", "300");
shouldBe("trySettingWidth(null)", "300");
shouldBe("trySettingWidth(true)", "1");
shouldBe("trySettingWidth(false)", "0");

shouldBe("trySettingHeight('abc')", "150");
shouldBe("trySettingHeight('200')", "200");
shouldBe("trySettingHeight('150')", "150");
shouldBe("trySettingHeight(NaN)", "150");
shouldBe("trySettingHeight(Infinity)", "150");
shouldBe("trySettingHeight(null)", "150");
shouldBe("trySettingHeight(true)", "1");
shouldBe("trySettingHeight(false)", "0");

tryWidth("'foo'", "300");
tryWidth("-1", "300");
tryWidth("0", "0");
tryWidth("1", "1");
tryWidth("'+7'", "7");
tryWidth("'-7'", "300");
tryWidth("'123'", "123");

tryHeight("'foo'", "150");
tryHeight("-1", "150");
tryHeight("0", "0");
tryHeight("1", "1");
tryHeight("'+7'", "7");
tryHeight("'-7'", "150");
tryHeight("'123'", "123");
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
