<!DOCTYPE HTML>
<html>
<style>
canvas {
    border: 1px solid black;
}
.pass {
    color: green;
    font-weight: bold;
}

.fail {
    color: red;
    font-weight: bold;
}
</style>
<body onload="runTest();">
<div>
<span>Tests that setting font of Canvas 2d context always uses up-to-date style: <span id="result"></span></span><br>
<canvas id="expected"></canvas>
<canvas id="actual"></canvas>
</div>
<script type="text/javascript">
if (window.testRunner)
    testRunner.dumpAsText();

function drawCanvasText(id, text, forceStyleUpdate)
{
    var canvasElement = document.getElementById(id);
    var context = canvasElement.getContext('2d');
    context.font = '20px Arial';
    context.fillText(id, 0, 20);
    canvasElement.offsetTop;
    canvasElement.style.fontSize = '64px';

    if (forceStyleUpdate)
        canvasElement.offsetTop;
    context.font = '1em Calibri';
    context.fillText(text, 0, 100);
    return context.font;
}

function runTest()
{
    var expectedFontSize = drawCanvasText('expected', 'Some Text', true);
    var actualFontSize = drawCanvasText('actual', 'Some Text');
    var resultElement = document.getElementById('result');
    var result = expectedFontSize === actualFontSize ? 'PASS' : 'FAIL';
    resultElement.textContent = result;
    resultElement.className = (result === 'PASS') ? 'pass' : 'fail';
}
</script>
</body>
</html>
