<!DOCTYPE html>
<html>
<head>
<title>Test for per-character selection with SVG font</title>
<style>

@font-face {
    font-family: 'ABCFont';
    src: local('☺'), url('../custom/resources/ABCFont.svg#ABCFont') format('svg');
    font-weight: normal;
    font-style: normal;
}

.svgfont {
    font-family: 'ABCFont';
}

.pass {
    background: #0f0;
}

.fail { 
    background: #f00;
}

</style>
</head>
<body>
This test checks that individual characters can be selected correctly when using an SVG font.
<div>
	<span id="text" class="svgfont">aaaaaaaaaa</span>
</div>
<div id="passfail">
</div>
<script type="text/javascript">
function runTest() {
    var text = document.getElementById('text');

    if (!window.testRunner)
        return;

    var textWidth = text.offsetWidth;
    var estCharWidth = textWidth / 10;
    eventSender.mouseMoveTo(text.offsetLeft + (estCharWidth * 3) + 2, text.offsetTop + text.offsetHeight / 2);
    eventSender.leapForward(200);
    eventSender.mouseDown();
    eventSender.mouseMoveTo(text.offsetLeft + (estCharWidth * 3) + 2, text.offsetTop + text.offsetHeight / 2);
    eventSender.leapForward(200);
    eventSender.mouseMoveTo(text.offsetLeft + (estCharWidth * 6) + 2, text.offsetTop + text.offsetHeight / 2);
    eventSender.leapForward(200);
    eventSender.mouseUp();
    verify();
}

function verify() {
    var text = document.getElementById('text');

    if (!window.testRunner)
        return;

    var range = window.getSelection().getRangeAt(0);
    if (range.startOffset === 3 && range.endOffset === 6)
	return pass("PASS");

    return fail("FAIL: range was [" + range.startOffset + ", " + range.endOffset + "]; expected [3, 6]");
}

function pass(message) {
    log(true, message);
}

function fail(message) {
    log(false, message);
}

function log(passed, message) {
    var passfail = document.getElementById('passfail');
    passfail.innerHTML = message;
    passfail.className = (passed ? "pass" : "fail");
    testRunner.dumpAsText();
}

runTest();
</script>
</body>
</html>
