<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<style>
/* Test 1: Invalid font data */
@font-face {
    font-family: myfont1;
    src: url('resources/invalidfont.png') format(opentype);
}

/* Test 2: Download error */
@font-face {
    font-family: myfont2;
    src: url('resources/DownLoadErrorAhem.otf');
}

/* Test 3: Empty data url */
@font-face {
    font-family: myfont3;
    src: url(data:application/x-truetype-font,) format(truetype);
}

/* Test 4: Download error followed by existing local font */
@font-face {
    font-family: myfont4;
    src: url('resources/DownLoadErrorAhem.otf'), local('Courier New');
}

/* Test 5: Multiple errors */
@font-face {
    font-family: myfont5;
    src: url('resources/DownLoadErrorAhem.otf'), url(data:application/x-truetype-font,) format(truetype);
}
</style>
<script>
description('Test download error cases. "load" or "error" events should be fired exactly once for each @font-face rule.');

window.jsTestIsAsync = true;

var events = {};

function logEvent(e) {
    var family = e.fontface.style.getPropertyValue('font-family');
    if (!events[family])
        events[family] = [];
    events[family].push(e.type);
}

function runTests() {
    document.fontloader.addEventListener('loadstart', logEvent);
    document.fontloader.addEventListener('load', logEvent);
    document.fontloader.addEventListener('error', logEvent);

    document.fontloader.notifyWhenFontsReady(function() {
        shouldBe("events['myfont1']", "['loadstart', 'error']");
        shouldBe("events['myfont2']", "['loadstart', 'error']");
        shouldBe("events['myfont3']", "['loadstart', 'error']");
        shouldBe("events['myfont4']", "['loadstart', 'load']");
        shouldBe("events['myfont5']", "['loadstart', 'error']");
        finishJSTest();
    });
}

if (document.fontloader)
    runTests();
else {
    testFailed('document.fontloader does not exist');
    finishJSTest();
}
</script>
</head>
<body>
  <div style="font-family: myfont1">font1</div>
  <div style="font-family: myfont2">font2</div>
  <div style="font-family: myfont3">font3</div>
  <div style="font-family: myfont4">font4</div>
  <div style="font-family: myfont5">font5</div>
  <script src="../../resources/js-test-post.js"></script>
</body>
</html>
