<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../../resources/js-test-pre.js"></script>
</head>
<body>
<script>
description("HTMLTableElement cellpadding attribute test");

function cellPaddingAttributeEffect(value)
{
    var table = document.createElement("table");
    table.setAttribute("cellpadding", value);
    var cell = document.createElement("td");
    table.appendChild(cell);
    document.body.appendChild(table);
    var computedStyle = getComputedStyle(cell, "");
    var result = computedStyle.paddingTop;
    document.body.removeChild(table);
    return result;
}

shouldBe('cellPaddingAttributeEffect("")', '"1px"');

shouldBe('cellPaddingAttributeEffect("1")', '"1px"');
shouldBe('cellPaddingAttributeEffect("2")', '"2px"');
shouldBe('cellPaddingAttributeEffect("10")', '"10px"');

shouldBe('cellPaddingAttributeEffect("0")', '"0px"');

shouldBe('cellPaddingAttributeEffect("-1")', '"0px"');

shouldBe('cellPaddingAttributeEffect("1x")', '"1px"');
shouldBe('cellPaddingAttributeEffect("1.")', '"1px"');
shouldBe('cellPaddingAttributeEffect("1.9")', '"1px"');
shouldBe('cellPaddingAttributeEffect("2x")', '"2px"');
shouldBe('cellPaddingAttributeEffect("2.")', '"2px"');
shouldBe('cellPaddingAttributeEffect("2.9")', '"2px"');

shouldBe('cellPaddingAttributeEffect("a")', '"0px"');

var arabicIndicDigitOne = String.fromCharCode(0x661);
shouldBe('cellPaddingAttributeEffect(arabicIndicDigitOne)', '"0px"');
shouldBe('cellPaddingAttributeEffect("2" + arabicIndicDigitOne)', '"2px"');
</script>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>
