<html>
<head>
<script src="../../resources/js-test.js"></script>
<style>
@font-face {
font-family: 'Ahem';
src: url(../../resources/Ahem.ttf);
font-style: italic;
font-weight: 300;
unicode-range: U+0-3FF;
font-variant: small-caps;
-webkit-font-feature-settings: "dlig" 1;
font-display: block;
/* font-stretch property is not supported */
}
</style>
<script>
description('Test getting/setting FontFace properties.');
function getDocumentFontFaces() {
var faces = [];
document.fonts.forEach(function(face) { faces.push(face); });
return faces;
}
function runTests() {
window.jsTestIsAsync = true;
ahemFace = getDocumentFontFaces()[0];
shouldBeEqualToString('ahemFace.family', 'Ahem');
shouldBeEqualToString('ahemFace.style', 'italic');
shouldBeEqualToString('ahemFace.weight', '300');
shouldBeEqualToString('ahemFace.unicodeRange', 'U+0-3FF');
shouldBeEqualToString('ahemFace.variant', 'small-caps');
shouldBeEqualToString('ahemFace.featureSettings', '"dlig"');
shouldBeEqualToString('ahemFace.display', 'block');
debug('');
defaultFace = new FontFace('defaultFace', 'local(foo)');
shouldBeEqualToString('defaultFace.family', 'defaultFace');
shouldBeEqualToString('defaultFace.style', 'normal');
shouldBeEqualToString('defaultFace.weight', 'normal');
shouldBeEqualToString('defaultFace.stretch', 'normal');
shouldBeEqualToString('defaultFace.unicodeRange', 'U+0-10FFFF');
shouldBeEqualToString('defaultFace.variant', 'normal');
shouldBeEqualToString('defaultFace.featureSettings', 'normal');
shouldBeEqualToString('defaultFace.display', 'auto');
debug('');
constructedFace = new FontFace('constructedFace', 'local(bar)', {
'style': 'oblique',
'weight': 'bold',
'unicodeRange': 'U+100-1FF, U+ABCD',
'variant': 'small-caps',
'featureSettings': "'liga' 0",
'display': 'optional'
});
shouldBeEqualToString('constructedFace.family', 'constructedFace');
shouldBeEqualToString('constructedFace.style', 'oblique');
shouldBeEqualToString('constructedFace.weight', 'bold');
shouldBeEqualToString('constructedFace.unicodeRange', 'U+100-1FF, U+ABCD');
shouldBeEqualToString('constructedFace.variant', 'small-caps');
shouldBeEqualToString('constructedFace.featureSettings', '"liga" 0');
shouldBeEqualToString('constructedFace.display', 'optional');
debug('');
modifiedFace = new FontFace('unmodified', 'local(baz)');
modifiedFace.family = 'modified';
modifiedFace.style = 'italic';
modifiedFace.weight = 900;
modifiedFace.unicodeRange = 'U+0-3FF';
modifiedFace.variant = 'small-caps';
modifiedFace.featureSettings = "'dlig' 1, 'liga' 0";
modifiedFace.display = 'fallback';
shouldBeEqualToString('modifiedFace.family', 'modified');
shouldBeEqualToString('modifiedFace.style', 'italic');
shouldBeEqualToString('modifiedFace.weight', '900');
shouldBeEqualToString('modifiedFace.unicodeRange', 'U+0-3FF');
shouldBeEqualToString('modifiedFace.variant', 'small-caps');
shouldBeEqualToString('modifiedFace.featureSettings', '"dlig", "liga" 0');
shouldBeEqualToString('modifiedFace.display', 'fallback');
debug('');
face = new FontFace('test', 'local(foo)');
shouldThrow("face.style = ''");
shouldThrow("face.weight = 'a'");
shouldThrow("face.unicodeRange = 'U+'");
shouldThrow("face.variant = '???'");
shouldThrow("face.featureSettings = null");
shouldThrow("face.display = 123");
promise1 = face.loaded;
promise2 = face.load();
promise3 = face.loaded;
shouldBeTrue('promise1 === promise2');
shouldBeTrue('promise1 === promise3');
promise1.then(
function() {
debug('FAIL: Expected NetworkError');
}).catch(function(err) {
shouldBeEqualToString('"' + err.message + '"' , 'A network error occurred.');
}).then(finishJSTest);
}
if (document.fonts)
runTests();
else {
testFailed('document.fonts does not exist');
}
</script>
</head>
<body>
</body>
</html>