<html>
<head>
<script src="../../resources/js-test.js"></script>
<style>
@font-face {
font-family: Font1;
src: local(Arial);
}
@font-face {
font-family: Font2;
src: local(Arial);
}
@font-face {
font-family: Font3;
src: local(Arial);
}
</style>
<script>
description('Tests Set operations of FontFaceSet.');
thisArg = {};
faces = []
function checkResults() {
shouldBe('faces.length', '3');
shouldBeEqualToString('faces[0].family', 'Font1');
shouldBeEqualToString('faces[1].family', 'Font2');
shouldBeEqualToString('faces[2].family', 'Font3');
shouldBeTrue('document.fonts.has(faces[0])');
shouldBeTrue('document.fonts.has(faces[1])');
shouldBeTrue('document.fonts.has(faces[2])');
}
function callback(face, faceAgain, set) {
if (faces.length == 0) {
callbackArgs = arguments;
thisValue = this;
shouldBeType('callbackArgs[0]', 'FontFace');
shouldBeTrue('callbackArgs[0] === callbackArgs[1]');
shouldBeTrue('callbackArgs[2] === document.fonts');
shouldBeTrue('thisValue === thisArg');
}
faces.push(face);
}
function runTests() {
nonCssConnectedFace = new FontFace("MyFont", "local(Arial)", {});
shouldBe('document.fonts.size', '3');
debug('check forEach');
document.fonts.forEach(callback, thisArg);
checkResults();
debug('check keys');
faces = [];
for (face of document.fonts.keys())
faces.push(face);
checkResults();
debug('check values');
faces = [];
for (face of document.fonts.values())
faces.push(face);
checkResults();
debug('check entries');
faces = [];
for (entry of document.fonts.entries()) {
shouldBeTrue('entry[0] === entry[1]');
faces.push(entry[1]);
}
checkResults();
shouldThrow('document.fonts.has(null)');
shouldThrow('document.fonts.has("Font1")');
shouldThrow('document.fonts.add(null)');
shouldThrow('document.fonts.add("Font1")');
shouldThrow('document.fonts.delete(null)');
shouldThrow('document.fonts.delete("Font1")');
shouldBeFalse('document.fonts.has(nonCssConnectedFace)');
shouldNotThrow('document.fonts.add(faces[0])');
shouldBe('document.fonts.size', '3');
shouldBeFalse('document.fonts.delete(faces[0])');
shouldBe('document.fonts.size', '3');
document.fonts.add(nonCssConnectedFace);
shouldBe('document.fonts.size', '4');
shouldBeTrue('document.fonts.has(nonCssConnectedFace)');
document.fonts.add(nonCssConnectedFace);
shouldBe('document.fonts.size', '4');
document.fonts.delete(nonCssConnectedFace);
shouldBe('document.fonts.size', '3');
shouldBeFalse('document.fonts.has(nonCssConnectedFace)');
document.fonts.delete(nonCssConnectedFace);
shouldBe('document.fonts.size', '3');
document.fonts.add(nonCssConnectedFace);
shouldBe('document.fonts.size', '4');
document.fonts.clear();
shouldBe('document.fonts.size', '3');
}
if (document.fonts)
runTests();
else
testFailed('document.fonts does not exist');
</script>
</head>
<body>
</body>
</html>