<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<script>
shouldBeEqualToString("new FontFace('family_name', 'url(\\'asdf\\')', {}).family", "family_name");
shouldBeEqualToString("new FontFace('family_name', 'url(\\'asdf\\')', {}).style", "normal");
shouldBeEqualToString("new FontFace('family_name', 'url(\\'asdf\\')', {}).weight", "normal");
shouldBeEqualToString("new FontFace('family_name', 'url(\\'asdf\\')', {}).stretch", "normal");
shouldBeEqualToString("new FontFace('family_name', 'url(\\'asdf\\')', {}).unicodeRange", "U+0-10ffff");
shouldBeEqualToString("new FontFace('family_name', 'url(\\'asdf\\')', {}).variant", "normal");
shouldBeEqualToString("new FontFace('family_name', 'url(\\'asdf\\')', {}).featureSettings", "normal");

shouldBeEqualToString("new FontFace('family_name', 'url(\\'asdf\\')', {'style': 'normal'}).style", "normal");
shouldThrow("new FontFace('family_name', 'url(\\'asdf\\')', {'style': 'inherit'}).style");
shouldBeEqualToString("new FontFace('family_name', 'url(\\'asdf\\')', {'style': 'italic'}).style", "italic");
shouldBeEqualToString("new FontFace('family_name', 'url(\\'asdf\\')', {'style': 'oblique'}).style", "italic");
shouldThrow("new FontFace('family_name', 'url(\\'asdf\\')', {'style': 'asdf'})");
shouldBeEqualToString("new FontFace('family_name', 'url(\\'asdf\\')', {'weight': 'normal'}).weight", "normal");
shouldBeEqualToString("new FontFace('family_name', 'url(\\'asdf\\')', {'weight': '200'}).weight", "200");
shouldBeEqualToString("new FontFace('family_name', 'url(\\'asdf\\')', {'weight': 'bold'}).weight", "bold");
shouldBeEqualToString("new FontFace('family_name', 'url(\\'asdf\\')', {'weight': 'bolder'}).weight", "bold");
shouldBeEqualToString("new FontFace('family_name', 'url(\\'asdf\\')', {'weight': 'lighter'}).weight", "200");
shouldThrow("new FontFace('family_name', 'url(\\'asdf\\')', {'weight': 'inherit'}).weight");
shouldBeEqualToString("new FontFace('family_name', 'url(\\'asdf\\')', {'stretch': 'ultra-expanded'}).stretch", "ultra-expanded");
shouldBeEqualToString("new FontFace('family_name', 'url(\\'asdf\\')', {'unicodeRange': 'U+26'}).unicodeRange", "U+26");
shouldBeEqualToString("new FontFace('family_name', 'url(\\'asdf\\')', {'unicodeRange': 'U+0-7F'}).unicodeRange", "U+0-7f");
shouldThrow("new FontFace('family_name', 'url(\\'asdf\\')', {'variant': 'variant_name'}).variant");
shouldBeEqualToString("new FontFace('family_name', 'url(\\'asdf\\')', {'variant': 'small-caps'}).variant", "small-caps");
shouldBeEqualToString("new FontFace('family_name', 'url(\\'asdf\\')', {'variant': 'small-caps common-ligatures'}).variant", "common-ligatures small-caps");
shouldBeEqualToString("new FontFace('family_name', 'url(\\'asdf\\')', {'featureSettings': '\\'titl\\''}).featureSettings", "\"titl\"");

var everything = new FontFace('family_name', 'url(\'asdf\')', {'style': 'italic', 'weight': 'bold', 'stretch': 'extra-expanded', 'unicodeRange': 'U+26', 'variant': 'small-caps', 'featureSettings': '\'titl\''});
shouldBeEqualToString("everything.style", "italic");
shouldBeEqualToString("everything.weight", "bold");
shouldBeEqualToString("everything.stretch", "extra-expanded");
shouldBeEqualToString("everything.unicodeRange", "U+26");
shouldBeEqualToString("everything.variant", "small-caps");
shouldBeEqualToString("everything.featureSettings", "\"titl\"");

everything.family = "other_family_name";
shouldBeEqualToString("everything.family", "other_family_name");
everything.style = "normal";
shouldBeEqualToString("everything.style", "normal");
everything.weight = "300";
shouldBeEqualToString("everything.weight", "300");
everything.stretch = "condensed";
shouldBeEqualToString("everything.stretch", "condensed");
everything.unicodeRange = "U+0-7F";
shouldBeEqualToString("everything.unicodeRange", "U+0-7f");
everything.variant = "stacked-fractions";
shouldBeEqualToString("everything.variant", "stacked-fractions");
everything.featureSettings = "'smcp'";
shouldBeEqualToString("everything.featureSettings", "\"smcp\"");

shouldNotThrow("new FontFace('family_name', 'url(\\'asdf\\')', {})");
var newArrayBuffer = new ArrayBuffer(100);
shouldNotThrow("new FontFace('family_name', newArrayBuffer, {})");
shouldNotThrow("new FontFace('family_name', new DataView(newArrayBuffer), {})");
shouldNotThrow("new FontFace('family_name', new Uint8Array(newArrayBuffer), {})");
shouldThrow("new FontFace('family_name', 5, {})");
shouldThrow("new FontFace('family_name', {}, {})");
shouldThrow("new FontFace('family_name', new Array(), {})");
shouldThrow("new FontFace('family_name', { toString: function() { return 5; } }, {})");
shouldThrow("new FontFace('family_name', { toString: function() { throw \"Error\"; } }, {})");
shouldBeEqualToString("new FontFace('family_name', { toString: function() { return \"url(\'asdf\')\"; } }, {}).family", "family_name");

shouldBeEqualToString("new FontFace('family_name', 'url(\\'asdf\\')', {}).status", "unloaded");

var promiseEqualityCheck = new FontFace('family_name', 'url(\'asdf\')', {});
var promise1 = promiseEqualityCheck.loaded;
var promise2 = promiseEqualityCheck.loaded;
var promise3 = promiseEqualityCheck.load();
var promise4 = promiseEqualityCheck.loaded;
var promise5 = promiseEqualityCheck.load();
shouldBe("promise1", "promise2");
shouldBe("promise1", "promise3");
shouldBe("promise1", "promise4");
shouldBe("promise1", "promise5");
shouldBeEqualToString("promiseEqualityCheck.status", "loading");

var oldFontFace;
var newFontFace;
self.jsTestIsAsync = true;
promiseEqualityCheck.loaded.then(function(x) {
    testFailed("Bogus URL should not load");
    finishJSTest();
}, function(y) {
    oldFontFace = y;
    shouldBe("oldFontFace.code", "oldFontFace.NETWORK_ERR");
    shouldBeEqualToString("promiseEqualityCheck.status", "error");
    oldFontFace = new FontFace('family_name', 'url(\'../../resources/Ahem.ttf\')', {});
    return oldFontFace.load();
}).then(function(x) {
    newFontFace = x;
    shouldBe("newFontFace", "oldFontFace");
    shouldBeEqualToString("newFontFace.status", "loaded");
    // Test behavior when the font is in the cache.
    oldFontFace = new FontFace('family_name', 'url(\'../../resources/Ahem.ttf\')', {});
    return oldFontFace.load();
}, function(y) {
    testFailed("Legit URL should load");
    finishJSTest();
}).then(function(x) {
    newFontFace = x;
    shouldBe("newFontFace", "oldFontFace");
    shouldBeEqualToString("newFontFace.status", "loaded");
    return (new FontFace('family_name2', 'url(\'../../resources/Ahem.ttf\') format(\'garbage\')', {})).load()
}, function(y) {
    testFailed("Legit URL should load");
    finishJSTest();
}).then(function() {
    testFailed("Unknown format should not load successfully.");
    finishJSTest();
}, function(y) {
    oldFontFace = y;
    shouldBe("oldFontFace.code", "oldFontFace.NETWORK_ERR");
    finishJSTest();
});

</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
