summaryrefslogtreecommitdiffstats
path: root/third_party/WebKit/LayoutTests/fast/css/fontfaceset-set-operations.html
blob: 9d6db69c78d57c44f25e85e4030760d3654e0f0d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<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>