OLD | NEW |
1 <html> | 1 <html> |
2 <head> | 2 <head> |
3 <script src="../../resources/js-test.js"></script> | 3 <script src="../../resources/js-test.js"></script> |
4 <style> | 4 <style> |
5 @font-face { | 5 @font-face { |
6 font-family: Font1; | 6 font-family: Font1; |
7 src: local(Arial); | 7 src: local(Arial); |
8 } | 8 } |
9 | 9 |
10 @font-face { | 10 @font-face { |
11 font-family: Font2; | 11 font-family: Font2; |
12 src: local(Arial); | 12 src: local(Arial); |
13 } | 13 } |
14 | 14 |
15 @font-face { | 15 @font-face { |
16 font-family: Font3; | 16 font-family: Font3; |
17 src: local(Arial); | 17 src: local(Arial); |
18 } | 18 } |
19 </style> | 19 </style> |
20 <script> | 20 <script> |
21 description('Tests Set operations of FontFaceSet.'); | 21 description('Tests Set operations of FontFaceSet.'); |
22 | 22 |
23 function runTests() { | 23 thisArg = {}; |
24 nonCssConnectedFace = new FontFace("MyFont", "local(Arial)", {}); | 24 faces = [] |
25 | 25 |
26 shouldBe('document.fonts.size', '3'); | 26 function checkResults() { |
27 | |
28 thisArg = {}; | |
29 faces = []; | |
30 document.fonts.forEach(function(face, faceAgain, set) { | |
31 if (faces.length == 0) { | |
32 callbackArgs = arguments; | |
33 thisValue = this; | |
34 shouldBeTrue('callbackArgs[0] === callbackArgs[1]'); | |
35 shouldBeTrue('callbackArgs[2] === document.fonts'); | |
36 shouldBeTrue('thisValue === thisArg'); | |
37 } | |
38 faces.push(face); | |
39 }, thisArg); | |
40 shouldBe('faces.length', '3'); | 27 shouldBe('faces.length', '3'); |
41 | 28 |
42 shouldBeEqualToString('faces[0].family', 'Font1'); | 29 shouldBeEqualToString('faces[0].family', 'Font1'); |
43 shouldBeEqualToString('faces[1].family', 'Font2'); | 30 shouldBeEqualToString('faces[1].family', 'Font2'); |
44 shouldBeEqualToString('faces[2].family', 'Font3'); | 31 shouldBeEqualToString('faces[2].family', 'Font3'); |
45 | 32 |
46 shouldBeTrue('document.fonts.has(faces[0])'); | 33 shouldBeTrue('document.fonts.has(faces[0])'); |
47 shouldBeTrue('document.fonts.has(faces[1])'); | 34 shouldBeTrue('document.fonts.has(faces[1])'); |
48 shouldBeTrue('document.fonts.has(faces[2])'); | 35 shouldBeTrue('document.fonts.has(faces[2])'); |
49 shouldBeFalse('document.fonts.has(nonCssConnectedFace)'); | 36 shouldBeFalse('document.fonts.has(nonCssConnectedFace)'); |
50 shouldThrow('document.fonts.has("Font1")', '"TypeError: Failed to execute \'
has\' on \'FontFaceSet\': The argument is not a FontFace."'); | 37 shouldThrow('document.fonts.has("Font1")', '"TypeError: Failed to execute \'
has\' on \'FontFaceSet\': The argument is not a FontFace."'); |
51 | 38 |
52 shouldThrow('document.fonts.add(faces[0])', '"InvalidModificationError: Fail
ed to execute \'add\' on \'FontFaceSet\': Cannot add a CSS-connected FontFace."'
); | 39 shouldThrow('document.fonts.add(faces[0])', '"InvalidModificationError: Fail
ed to execute \'add\' on \'FontFaceSet\': Cannot add a CSS-connected FontFace."'
); |
53 shouldThrow('document.fonts.delete(faces[0])', '"InvalidModificationError: F
ailed to execute \'delete\' on \'FontFaceSet\': Cannot delete a CSS-connected Fo
ntFace."'); | 40 shouldThrow('document.fonts.delete(faces[0])', '"InvalidModificationError: F
ailed to execute \'delete\' on \'FontFaceSet\': Cannot delete a CSS-connected Fo
ntFace."'); |
| 41 } |
| 42 |
| 43 function callback(face, index, set) { |
| 44 if (faces.length == 0) { |
| 45 callbackArgs = arguments; |
| 46 thisValue = this; |
| 47 shouldBeType('callbackArgs[0]', 'FontFace'); |
| 48 shouldBeTrue('callbackArgs[1] === faces.length'); |
| 49 shouldBeTrue('callbackArgs[2] === document.fonts'); |
| 50 shouldBeTrue('thisValue === thisArg'); |
| 51 } |
| 52 faces.push(face); |
| 53 } |
| 54 |
| 55 function runTests() { |
| 56 nonCssConnectedFace = new FontFace("MyFont", "local(Arial)", {}); |
| 57 |
| 58 shouldBe('document.fonts.size', '3'); |
| 59 |
| 60 debug('check forEach'); |
| 61 document.fonts.forEach(callback, thisArg); |
| 62 checkResults(); |
| 63 |
| 64 debug('check keys'); |
| 65 faces = []; |
| 66 for (face of document.fonts.keys()) |
| 67 faces.push(face); |
| 68 checkResults(); |
| 69 |
| 70 debug('check values'); |
| 71 faces = []; |
| 72 for (face of document.fonts.values()) |
| 73 faces.push(face); |
| 74 checkResults(); |
| 75 |
| 76 debug('check entries'); |
| 77 faces = []; |
| 78 for (entry of document.fonts.entries()) { |
| 79 shouldBeTrue('entry[0] === entry[1]'); |
| 80 faces.push(entry[1]); |
| 81 } |
| 82 checkResults(); |
54 | 83 |
55 document.fonts.add(nonCssConnectedFace); | 84 document.fonts.add(nonCssConnectedFace); |
56 shouldBe('document.fonts.size', '4'); | 85 shouldBe('document.fonts.size', '4'); |
57 shouldBeTrue('document.fonts.has(nonCssConnectedFace)'); | 86 shouldBeTrue('document.fonts.has(nonCssConnectedFace)'); |
58 document.fonts.add(nonCssConnectedFace); | 87 document.fonts.add(nonCssConnectedFace); |
59 shouldBe('document.fonts.size', '4'); | 88 shouldBe('document.fonts.size', '4'); |
60 document.fonts.delete(nonCssConnectedFace); | 89 document.fonts.delete(nonCssConnectedFace); |
61 shouldBe('document.fonts.size', '3'); | 90 shouldBe('document.fonts.size', '3'); |
62 shouldBeFalse('document.fonts.has(nonCssConnectedFace)'); | 91 shouldBeFalse('document.fonts.has(nonCssConnectedFace)'); |
63 document.fonts.delete(nonCssConnectedFace); | 92 document.fonts.delete(nonCssConnectedFace); |
64 shouldBe('document.fonts.size', '3'); | 93 shouldBe('document.fonts.size', '3'); |
65 | 94 |
66 document.fonts.add(nonCssConnectedFace); | 95 document.fonts.add(nonCssConnectedFace); |
67 shouldBe('document.fonts.size', '4'); | 96 shouldBe('document.fonts.size', '4'); |
68 document.fonts.clear(); | 97 document.fonts.clear(); |
69 shouldBe('document.fonts.size', '3'); | 98 shouldBe('document.fonts.size', '3'); |
70 } | 99 } |
71 | 100 |
72 if (document.fonts) | 101 if (document.fonts) |
73 runTests(); | 102 runTests(); |
74 else | 103 else |
75 testFailed('document.fonts does not exist'); | 104 testFailed('document.fonts does not exist'); |
76 | 105 |
77 </script> | 106 </script> |
78 </head> | 107 </head> |
79 <body> | 108 <body> |
80 </body> | 109 </body> |
81 </html> | 110 </html> |
OLD | NEW |