webfontloader 1.0.15 → 1.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +3 -0
- data/lib/webfontloader/demo/public/fontwatchrunner-default-fonts.html +86 -0
- data/lib/webfontloader/demo/public/index.html +1 -0
- data/lib/webfontloader/demo/public/jquery.min.js +166 -0
- data/lib/webfontloader/demo/server.rb +9 -0
- data/lib/webfontloader.rb +1 -1
- data/src/core/fontwatcher.js +30 -88
- data/src/core/fontwatchrunner.js +136 -0
- data/src/core/namespace.js +1 -1
- data/src/modules.yml +1 -0
- data/src-test/core/fontwatchertest.js +185 -496
- data/src-test/core/fontwatchrunnertest.js +190 -0
- data/webfontloader.gemspec +6 -2
- metadata +19 -4
@@ -3,555 +3,244 @@ var FontWatcherTest = TestCase('FontWatcherTest');
|
|
3
3
|
FontWatcherTest.prototype.setUp = function() {
|
4
4
|
var self = this;
|
5
5
|
|
6
|
-
this.
|
7
|
-
this.
|
8
|
-
this.
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
6
|
+
this.fontLoadingEventCalled_ = 0;
|
7
|
+
this.fontLoading_ = {};
|
8
|
+
this.fontActiveEventCalled_ = 0;
|
9
|
+
this.fontActive_ = {};
|
10
|
+
this.fontInactiveEventCalled_ = 0;
|
11
|
+
this.fontInactive_ = {};
|
12
|
+
this.activeEventCalled_ = 0;
|
13
|
+
this.inactiveEventCalled_ = 0;
|
14
|
+
this.fakeEventDispatcher_ = {
|
15
|
+
dispatchLoading: function() {
|
16
|
+
fail('dispatchLoading should not be called by FontWatcher.');
|
17
|
+
},
|
18
|
+
dispatchFontLoading: function(fontFamily, fontDescription) {
|
19
|
+
self.fontLoadingEventCalled_++;
|
20
|
+
self.fontLoading_[fontFamily + ' ' + fontDescription] = true;
|
21
|
+
},
|
22
|
+
dispatchFontActive: function(fontFamily, fontDescription) {
|
23
|
+
self.fontActiveEventCalled_++;
|
24
|
+
self.fontActive_[fontFamily + ' ' + fontDescription] = true;
|
18
25
|
},
|
19
|
-
|
20
|
-
|
21
|
-
self.
|
22
|
-
self.classNamesCount_++;
|
26
|
+
dispatchFontInactive: function(fontFamily, fontDescription) {
|
27
|
+
self.fontInactiveEventCalled_++;
|
28
|
+
self.fontInactive_[fontFamily + ' ' + fontDescription] = true;
|
23
29
|
},
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
}
|
30
|
+
dispatchActive: function() {
|
31
|
+
self.activeEventCalled_++;
|
32
|
+
},
|
33
|
+
dispatchInactive: function() {
|
34
|
+
self.inactiveEventCalled_++;
|
30
35
|
}
|
31
36
|
};
|
32
|
-
this.fakeHtmlElement_ = { className: '' };
|
33
|
-
this.loadingEventCalled_ = false;
|
34
|
-
this.fontLoadingEventCalled_ = 0;
|
35
|
-
this.fontLoading_ = [];
|
36
|
-
this.fontActiveEventCalled_ = 0;
|
37
|
-
this.fontActive_ = [];
|
38
|
-
this.fontInactvieEventCalled_ = 0;
|
39
|
-
this.fontInactive_ = [];
|
40
|
-
this.activeEventCalled_ = 0;
|
41
37
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
self.loadingEventCalled_ = true;
|
47
|
-
},
|
48
|
-
active: function() {
|
49
|
-
self.activeEventCalled_++;
|
50
|
-
},
|
51
|
-
fontloading: function(fontFamily, fontDescription) {
|
52
|
-
self.fontLoadingEventCalled_++;
|
53
|
-
self.fontLoading_.push(fontFamily + ' ' + fontDescription);
|
54
|
-
},
|
55
|
-
fontactive: function(fontFamily, fontDescription) {
|
56
|
-
self.fontActiveEventCalled_++;
|
57
|
-
self.fontActive_.push(fontFamily + ' ' + fontDescription);
|
58
|
-
},
|
59
|
-
fontinactive: function(fontFamily, fontDescription) {
|
60
|
-
self.fontInactvieEventCalled_++;
|
61
|
-
self.fontInactive_.push(fontFamily + ' ' + fontDescription);
|
62
|
-
}
|
38
|
+
this.fakeFontSizer_ = {
|
39
|
+
getWidth: function() {
|
40
|
+
fail('Fake getWidth should not be called.');
|
41
|
+
}
|
63
42
|
};
|
64
|
-
this.eventDispatcher_ = new webfont.EventDispatcher(this.fakeDomHelper_,
|
65
|
-
this.fakeHtmlElement_, this.callbacks_, namespace);
|
66
|
-
};
|
67
43
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
getWidth: function(element) {
|
72
|
-
var fontFamily = element.style.fontFamily;
|
73
|
-
var fonts = fontFamily.split(',');
|
74
|
-
var size = fonts.length;
|
75
|
-
|
76
|
-
if (size == 6) {
|
77
|
-
return 1;
|
78
|
-
} else {
|
79
|
-
return 2;
|
80
|
-
}
|
81
|
-
}
|
82
|
-
}, function() {}, function() { return 0; });
|
83
|
-
var fontFamilies = [ 'fontFamily1' ];
|
44
|
+
this.fakeAsyncCall_ = function() {
|
45
|
+
fail('Fake asyncCall should not be called.');
|
46
|
+
};
|
84
47
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
assertEquals('fontFamily1 n4', this.fontLoading_[0]);
|
89
|
-
assertEquals(1, this.fontActiveEventCalled_);
|
90
|
-
assertEquals(1, this.fontActive_.length);
|
91
|
-
assertEquals('fontFamily1 n4', this.fontActive_[0]);
|
92
|
-
};
|
48
|
+
this.fakeGetTime_ = function() {
|
49
|
+
fail('Fake getTime should not be called.');
|
50
|
+
};
|
93
51
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
52
|
+
// Mock out FontWatchRunner to return active/inactive for families we give it
|
53
|
+
this.originalFontWatchRunner_ = webfont.FontWatchRunner;
|
54
|
+
this.fontWatchRunnerActiveFamilies_ = [];
|
55
|
+
this.testStringCount_ = 0;
|
56
|
+
this.testStrings_ = {};
|
57
|
+
webfont.FontWatchRunner = function(activeCallback, inactiveCallback, domHelper,
|
58
|
+
fontSizer, asyncCall, getTime, fontFamily, fontDescription, opt_fontTestString) {
|
59
|
+
if (opt_fontTestString) {
|
60
|
+
self.testStringCount_++;
|
61
|
+
self.testStrings_[fontFamily] = opt_fontTestString;
|
62
|
+
}
|
63
|
+
|
64
|
+
if (self.fontWatchRunnerActiveFamilies_.indexOf(fontFamily) > -1) {
|
65
|
+
activeCallback(fontFamily, fontDescription);
|
66
|
+
} else {
|
67
|
+
inactiveCallback(fontFamily, fontDescription);
|
68
|
+
}
|
69
|
+
|
70
|
+
};
|
109
71
|
|
110
|
-
fontWatcher.watch(fontFamilies, {}, {}, false);
|
111
|
-
assertEquals(3, this.fontLoadingEventCalled_);
|
112
|
-
assertEquals(3, this.fontLoading_.length);
|
113
|
-
assertEquals('fontFamily1 n4', this.fontLoading_[0]);
|
114
|
-
assertEquals('fontFamily2 n4', this.fontLoading_[1]);
|
115
|
-
assertEquals('fontFamily3 n4', this.fontLoading_[2]);
|
116
|
-
assertEquals(3, this.fontActiveEventCalled_);
|
117
|
-
assertEquals(3, this.fontActive_.length);
|
118
|
-
assertEquals('fontFamily1 n4', this.fontActive_[0]);
|
119
|
-
assertEquals('fontFamily2 n4', this.fontActive_[1]);
|
120
|
-
assertEquals('fontFamily3 n4', this.fontActive_[2]);
|
121
72
|
};
|
122
73
|
|
123
|
-
FontWatcherTest.prototype.
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
getWidth: function(element) {
|
131
|
-
var fontFamily = element.style.fontFamily;
|
132
|
-
var fonts = fontFamily.split(',');
|
133
|
-
var size = fonts.length;
|
134
|
-
|
135
|
-
if (size == 6) {
|
136
|
-
return 1;
|
137
|
-
} else if (this.count_ == 0) {
|
138
|
-
this.count_++;
|
139
|
-
return 1;
|
140
|
-
} else if (this.count_ == 1) {
|
141
|
-
return 2;
|
142
|
-
}
|
143
|
-
}
|
144
|
-
}, function(func, timeout) {
|
145
|
-
async = true;
|
146
|
-
func();
|
147
|
-
}, function() { return 0; });
|
74
|
+
FontWatcherTest.prototype.tearDown = function() {
|
75
|
+
// Replace the original FontWatchRunner implementation
|
76
|
+
webfont.FontWatchRunner = this.originalFontWatchRunner_;
|
77
|
+
};
|
78
|
+
|
79
|
+
FontWatcherTest.prototype.testWatchOneFontNotLast = function() {
|
148
80
|
var fontFamilies = [ 'fontFamily1' ];
|
81
|
+
this.fontWatchRunnerActiveFamilies_ = [ 'fontFamily1' ];
|
82
|
+
|
83
|
+
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
|
84
|
+
this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
|
149
85
|
|
150
86
|
fontWatcher.watch(fontFamilies, {}, {}, false);
|
151
|
-
|
152
|
-
assertEquals(
|
153
|
-
assertEquals(
|
154
|
-
assertEquals(
|
155
|
-
assertEquals(1, this.fontActiveEventCalled_);
|
156
|
-
assertEquals(1, this.fontActive_.length);
|
157
|
-
assertEquals('fontFamily1 n4', this.fontActive_[0]);
|
87
|
+
|
88
|
+
assertEquals(0, this.fontInactiveEventCalled_);
|
89
|
+
assertEquals(0, this.activeEventCalled_);
|
90
|
+
assertEquals(0, this.inactiveEventCalled_);
|
158
91
|
};
|
159
92
|
|
160
|
-
FontWatcherTest.prototype.
|
161
|
-
var
|
162
|
-
|
163
|
-
this.eventDispatcher_, {
|
164
|
-
|
165
|
-
font1Count_: 0,
|
166
|
-
font2Count_: 0,
|
167
|
-
font3Count_: 0,
|
168
|
-
|
169
|
-
getWidth: function(element) {
|
170
|
-
var fontFamily = element.style.fontFamily;
|
171
|
-
var fonts = fontFamily.split(',');
|
172
|
-
var size = fonts.length;
|
173
|
-
|
174
|
-
if (size == 6) {
|
175
|
-
return 1;
|
176
|
-
} else if (fonts[0].indexOf("fontFamily1") != -1 &&
|
177
|
-
this.font1Count_ != 2) {
|
178
|
-
this.font1Count_++;
|
179
|
-
return 1;
|
180
|
-
} else if (fonts[0].indexOf("fontFamily2") != -1 &&
|
181
|
-
this.font2Count_ != 1) {
|
182
|
-
this.font2Count_++;
|
183
|
-
return 1;
|
184
|
-
} else if (fonts[0].indexOf("fontFamily3") != -1 &&
|
185
|
-
this.font3Count_ != 5) {
|
186
|
-
this.font3Count_++;
|
187
|
-
return 1;
|
188
|
-
} else {
|
189
|
-
return 2;
|
190
|
-
}
|
191
|
-
}
|
192
|
-
}, function(func, timeout) {
|
193
|
-
async++;
|
194
|
-
func();
|
195
|
-
}, function() { return 0; });
|
196
|
-
var fontFamilies = [ 'fontFamily1', 'fontFamily2', 'fontFamily3' ];
|
93
|
+
FontWatcherTest.prototype.testWatchOneFontActive = function() {
|
94
|
+
var fontFamilies = [ 'fontFamily1' ];
|
95
|
+
this.fontWatchRunnerActiveFamilies_ = [ 'fontFamily1' ];
|
197
96
|
|
198
|
-
fontWatcher.
|
199
|
-
|
200
|
-
assertEquals(3, this.fontLoadingEventCalled_);
|
201
|
-
assertEquals(3, this.fontLoading_.length);
|
202
|
-
assertEquals('fontFamily1 n4', this.fontLoading_[0]);
|
203
|
-
assertEquals('fontFamily2 n4', this.fontLoading_[1]);
|
204
|
-
assertEquals('fontFamily3 n4', this.fontLoading_[2]);
|
205
|
-
assertEquals(3, this.fontActiveEventCalled_);
|
206
|
-
assertEquals(3, this.fontActive_.length);
|
207
|
-
assertEquals('fontFamily1 n4', this.fontActive_[0]);
|
208
|
-
assertEquals('fontFamily2 n4', this.fontActive_[1]);
|
209
|
-
assertEquals('fontFamily3 n4', this.fontActive_[2]);
|
210
|
-
};
|
97
|
+
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
|
98
|
+
this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
|
211
99
|
|
212
|
-
|
213
|
-
function() {
|
214
|
-
var async = 0;
|
215
|
-
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_,
|
216
|
-
this.eventDispatcher_, {
|
217
|
-
|
218
|
-
font1Count_: 0,
|
219
|
-
font3Count_: 0,
|
220
|
-
|
221
|
-
getWidth: function(element) {
|
222
|
-
var fontFamily = element.style.fontFamily;
|
223
|
-
var fonts = fontFamily.split(',');
|
224
|
-
var size = fonts.length;
|
225
|
-
|
226
|
-
if (size == 6) {
|
227
|
-
return 1;
|
228
|
-
} else if (fonts[0].indexOf("fontFamily1") != -1 &&
|
229
|
-
this.font1Count_ != 2) {
|
230
|
-
this.font1Count_++;
|
231
|
-
return 1;
|
232
|
-
} else if (fonts[0].indexOf("fontFamily3") != -1 &&
|
233
|
-
this.font3Count_ != 5) {
|
234
|
-
this.font3Count_++;
|
235
|
-
return 1;
|
236
|
-
} else {
|
237
|
-
return 2;
|
238
|
-
}
|
239
|
-
}
|
240
|
-
}, function(func, timeout) {
|
241
|
-
async++;
|
242
|
-
func();
|
243
|
-
}, function() { return 0; });
|
244
|
-
var fontFamilies = [ 'fontFamily1', 'fontFamily2', 'fontFamily3' ];
|
100
|
+
fontWatcher.watch(fontFamilies, {}, {}, true);
|
245
101
|
|
246
|
-
|
247
|
-
assertEquals(
|
248
|
-
assertEquals(
|
249
|
-
assertEquals(
|
250
|
-
assertEquals(
|
251
|
-
assertEquals(
|
252
|
-
assertEquals(
|
253
|
-
assertEquals(3, this.fontActiveEventCalled_);
|
254
|
-
assertEquals(3, this.fontActive_.length);
|
255
|
-
assertEquals('fontFamily1 n4', this.fontActive_[0]);
|
256
|
-
assertEquals('fontFamily2 n4', this.fontActive_[1]);
|
257
|
-
assertEquals('fontFamily3 n4', this.fontActive_[2]);
|
102
|
+
assertEquals(1, this.fontLoadingEventCalled_);
|
103
|
+
assertEquals(true, this.fontLoading_['fontFamily1 n4']);
|
104
|
+
assertEquals(1, this.fontActiveEventCalled_);
|
105
|
+
assertEquals(true, this.fontActive_['fontFamily1 n4']);
|
106
|
+
assertEquals(0, this.fontInactiveEventCalled_);
|
107
|
+
assertEquals(1, this.activeEventCalled_);
|
108
|
+
assertEquals(0, this.inactiveEventCalled_);
|
258
109
|
};
|
259
110
|
|
260
|
-
FontWatcherTest.prototype.
|
261
|
-
var time = 0;
|
262
|
-
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_,
|
263
|
-
this.eventDispatcher_, {
|
264
|
-
|
265
|
-
count_: 0,
|
266
|
-
|
267
|
-
getWidth: function(element) {
|
268
|
-
return 1;
|
269
|
-
}
|
270
|
-
}, function(func, timeout) {
|
271
|
-
func();
|
272
|
-
}, function() {
|
273
|
-
time += 2500;
|
274
|
-
return time;
|
275
|
-
});
|
111
|
+
FontWatcherTest.prototype.testWatchOneFontInactive = function() {
|
276
112
|
var fontFamilies = [ 'fontFamily1' ];
|
113
|
+
this.fontWatchRunnerActiveFamilies_ = [];
|
114
|
+
|
115
|
+
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
|
116
|
+
this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
|
117
|
+
|
118
|
+
fontWatcher.watch(fontFamilies, {}, {}, true);
|
277
119
|
|
278
|
-
fontWatcher.watch(fontFamilies, {}, {}, false);
|
279
120
|
assertEquals(1, this.fontLoadingEventCalled_);
|
280
|
-
assertEquals(
|
281
|
-
assertEquals(
|
282
|
-
assertEquals(1, this.
|
283
|
-
assertEquals(
|
284
|
-
assertEquals(
|
121
|
+
assertEquals(true, this.fontLoading_['fontFamily1 n4']);
|
122
|
+
assertEquals(0, this.fontActiveEventCalled_);
|
123
|
+
assertEquals(1, this.fontInactiveEventCalled_);
|
124
|
+
assertEquals(true, this.fontInactive_['fontFamily1 n4']);
|
125
|
+
assertEquals(0, this.activeEventCalled_);
|
126
|
+
assertEquals(1, this.inactiveEventCalled_);
|
285
127
|
};
|
286
128
|
|
287
|
-
FontWatcherTest.prototype.
|
288
|
-
function() {
|
289
|
-
var count = 0;
|
290
|
-
var async = 0;
|
291
|
-
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_,
|
292
|
-
this.eventDispatcher_, {
|
293
|
-
|
294
|
-
font1Count_: 0,
|
295
|
-
font3Count_: 0,
|
296
|
-
|
297
|
-
getWidth: function(element) {
|
298
|
-
var fontFamily = element.style.fontFamily;
|
299
|
-
var fonts = fontFamily.split(',');
|
300
|
-
var size = fonts.length;
|
301
|
-
|
302
|
-
if (size == 6) {
|
303
|
-
return 1;
|
304
|
-
} else if (fonts[0].indexOf("fontFamily1") != -1 &&
|
305
|
-
this.font1Count_ != 2) {
|
306
|
-
this.font1Count_++;
|
307
|
-
return 1;
|
308
|
-
} else if (fonts[0].indexOf("fontFamily2") != -1) {
|
309
|
-
return 1;
|
310
|
-
} else if (fonts[0].indexOf("fontFamily3") != -1 &&
|
311
|
-
this.font3Count_ != 5) {
|
312
|
-
this.font3Count_++;
|
313
|
-
return 1;
|
314
|
-
} else {
|
315
|
-
return 2;
|
316
|
-
}
|
317
|
-
}
|
318
|
-
}, function(func, timeout) {
|
319
|
-
async++;
|
320
|
-
func();
|
321
|
-
}, function() {
|
322
|
-
if (++count == 5) {
|
323
|
-
return 5001;
|
324
|
-
}
|
325
|
-
return 0;
|
326
|
-
});
|
129
|
+
FontWatcherTest.prototype.testWatchMultipleFontsActive = function() {
|
327
130
|
var fontFamilies = [ 'fontFamily1', 'fontFamily2', 'fontFamily3' ];
|
131
|
+
this.fontWatchRunnerActiveFamilies_ = [ 'fontFamily1', 'fontFamily2', 'fontFamily3' ];
|
132
|
+
|
133
|
+
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
|
134
|
+
this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
|
135
|
+
|
136
|
+
fontWatcher.watch(fontFamilies, {}, {}, true);
|
328
137
|
|
329
|
-
fontWatcher.watch(fontFamilies, {}, {}, false);
|
330
|
-
assertEquals(9, async);
|
331
138
|
assertEquals(3, this.fontLoadingEventCalled_);
|
332
|
-
assertEquals(
|
333
|
-
assertEquals(
|
334
|
-
assertEquals(
|
335
|
-
assertEquals(
|
336
|
-
assertEquals(
|
337
|
-
assertEquals(
|
338
|
-
assertEquals(
|
339
|
-
assertEquals(
|
340
|
-
assertEquals(1, this.
|
341
|
-
assertEquals(
|
139
|
+
assertEquals(true, this.fontLoading_['fontFamily1 n4']);
|
140
|
+
assertEquals(true, this.fontLoading_['fontFamily2 n4']);
|
141
|
+
assertEquals(true, this.fontLoading_['fontFamily3 n4']);
|
142
|
+
assertEquals(3, this.fontActiveEventCalled_);
|
143
|
+
assertEquals(true, this.fontActive_['fontFamily1 n4']);
|
144
|
+
assertEquals(true, this.fontActive_['fontFamily2 n4']);
|
145
|
+
assertEquals(true, this.fontActive_['fontFamily3 n4']);
|
146
|
+
assertEquals(0, this.fontInactiveEventCalled_);
|
147
|
+
assertEquals(1, this.activeEventCalled_);
|
148
|
+
assertEquals(0, this.inactiveEventCalled_);
|
342
149
|
};
|
343
150
|
|
344
|
-
FontWatcherTest.prototype.
|
345
|
-
= function() {
|
346
|
-
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.eventDispatcher_,{
|
347
|
-
getWidth: function(element) {
|
348
|
-
var fontFamily = element.style.fontFamily;
|
349
|
-
var fonts = fontFamily.split(',');
|
350
|
-
var size = fonts.length;
|
351
|
-
|
352
|
-
if (size == 6) {
|
353
|
-
return 1;
|
354
|
-
} else {
|
355
|
-
return 2;
|
356
|
-
}
|
357
|
-
}
|
358
|
-
}, function() {}, function() { return 0; });
|
151
|
+
FontWatcherTest.prototype.testWatchMultipleFontsInactive = function() {
|
359
152
|
var fontFamilies = [ 'fontFamily1', 'fontFamily2', 'fontFamily3' ];
|
153
|
+
this.fontWatchRunnerActiveFamilies_ = [];
|
154
|
+
|
155
|
+
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
|
156
|
+
this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
|
360
157
|
|
361
158
|
fontWatcher.watch(fontFamilies, {}, {}, true);
|
159
|
+
|
362
160
|
assertEquals(3, this.fontLoadingEventCalled_);
|
363
|
-
assertEquals(
|
364
|
-
assertEquals(
|
365
|
-
assertEquals(
|
366
|
-
assertEquals(
|
367
|
-
assertEquals(3, this.
|
368
|
-
assertEquals(
|
369
|
-
assertEquals(
|
370
|
-
assertEquals(
|
371
|
-
assertEquals(
|
372
|
-
assertEquals(1, this.
|
373
|
-
assertEquals(4, this.classNamesCount_);
|
374
|
-
assertEquals(true, this.classNames_['ns-fontfamily1-n4-active']);
|
375
|
-
assertEquals(true, this.classNames_['ns-fontfamily2-n4-active']);
|
376
|
-
assertEquals(true, this.classNames_['ns-fontfamily3-n4-active']);
|
377
|
-
assertEquals(true, this.classNames_['ns-active']);
|
161
|
+
assertEquals(true, this.fontLoading_['fontFamily1 n4']);
|
162
|
+
assertEquals(true, this.fontLoading_['fontFamily2 n4']);
|
163
|
+
assertEquals(true, this.fontLoading_['fontFamily3 n4']);
|
164
|
+
assertEquals(0, this.fontActiveEventCalled_);
|
165
|
+
assertEquals(3, this.fontInactiveEventCalled_);
|
166
|
+
assertEquals(true, this.fontInactive_['fontFamily1 n4']);
|
167
|
+
assertEquals(true, this.fontInactive_['fontFamily2 n4']);
|
168
|
+
assertEquals(true, this.fontInactive_['fontFamily3 n4']);
|
169
|
+
assertEquals(0, this.activeEventCalled_);
|
170
|
+
assertEquals(1, this.inactiveEventCalled_);
|
378
171
|
};
|
379
172
|
|
380
|
-
FontWatcherTest.prototype.
|
381
|
-
function() {
|
382
|
-
var async = 0;
|
383
|
-
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_,
|
384
|
-
this.eventDispatcher_, {
|
385
|
-
|
386
|
-
font1Count_: 0,
|
387
|
-
font2Count_: 0,
|
388
|
-
font3Count_: 0,
|
389
|
-
|
390
|
-
getWidth: function(element) {
|
391
|
-
var fontFamily = element.style.fontFamily;
|
392
|
-
var fonts = fontFamily.split(',');
|
393
|
-
var size = fonts.length;
|
394
|
-
|
395
|
-
if (size == 6) {
|
396
|
-
return 1;
|
397
|
-
} else if (fonts[0].indexOf("fontFamily1") != -1 &&
|
398
|
-
this.font1Count_ != 2) {
|
399
|
-
this.font1Count_++;
|
400
|
-
return 1;
|
401
|
-
} else if (fonts[0].indexOf("fontFamily2") != -1 &&
|
402
|
-
this.font2Count_ != 1) {
|
403
|
-
this.font2Count_++;
|
404
|
-
return 1;
|
405
|
-
} else if (fonts[0].indexOf("fontFamily3") != -1 &&
|
406
|
-
this.font3Count_ != 5) {
|
407
|
-
this.font3Count_++;
|
408
|
-
return 1;
|
409
|
-
} else {
|
410
|
-
return 2;
|
411
|
-
}
|
412
|
-
}
|
413
|
-
}, function(func, timeout) {
|
414
|
-
async++;
|
415
|
-
func();
|
416
|
-
}, function() { return 0; });
|
173
|
+
FontWatcherTest.prototype.testWatchMultipleFontsMixed = function() {
|
417
174
|
var fontFamilies = [ 'fontFamily1', 'fontFamily2', 'fontFamily3' ];
|
175
|
+
this.fontWatchRunnerActiveFamilies_ = [ 'fontFamily1', 'fontFamily3' ];
|
176
|
+
|
177
|
+
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
|
178
|
+
this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
|
418
179
|
|
419
180
|
fontWatcher.watch(fontFamilies, {}, {}, true);
|
420
|
-
|
181
|
+
|
421
182
|
assertEquals(3, this.fontLoadingEventCalled_);
|
422
|
-
assertEquals(
|
423
|
-
assertEquals(
|
424
|
-
assertEquals(
|
425
|
-
assertEquals(
|
426
|
-
assertEquals(
|
427
|
-
assertEquals(
|
428
|
-
assertEquals(
|
429
|
-
assertEquals('fontFamily2 n4'
|
430
|
-
assertEquals('fontFamily3 n4', this.fontActive_[2]);
|
183
|
+
assertEquals(true, this.fontLoading_['fontFamily1 n4']);
|
184
|
+
assertEquals(true, this.fontLoading_['fontFamily2 n4']);
|
185
|
+
assertEquals(true, this.fontLoading_['fontFamily3 n4']);
|
186
|
+
assertEquals(2, this.fontActiveEventCalled_);
|
187
|
+
assertEquals(true, this.fontActive_['fontFamily1 n4']);
|
188
|
+
assertEquals(true, this.fontActive_['fontFamily3 n4']);
|
189
|
+
assertEquals(1, this.fontInactiveEventCalled_);
|
190
|
+
assertEquals(true, this.fontInactive_['fontFamily2 n4']);
|
431
191
|
assertEquals(1, this.activeEventCalled_);
|
432
|
-
assertEquals(
|
433
|
-
assertEquals(true, this.classNames_['ns-fontfamily2-n4-active']);
|
434
|
-
assertEquals(true, this.classNames_['ns-fontfamily3-n4-active']);
|
435
|
-
assertEquals(true, this.classNames_['ns-active']);
|
436
|
-
assertEquals(4, this.classNamesCount_);
|
192
|
+
assertEquals(0, this.inactiveEventCalled_);
|
437
193
|
};
|
438
194
|
|
439
|
-
FontWatcherTest.prototype
|
440
|
-
.testWatchMultipleFontsWaitForLoadAndLastBatchOnDoneWithVariations =
|
441
|
-
function() {
|
442
|
-
var async = 0;
|
443
|
-
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_,
|
444
|
-
this.eventDispatcher_, {
|
445
|
-
|
446
|
-
font1Count_: 0,
|
447
|
-
font2Count_: 0,
|
448
|
-
font3Count_: 0,
|
449
|
-
|
450
|
-
getWidth: function(element) {
|
451
|
-
var fontFamily = element.style.fontFamily;
|
452
|
-
var fonts = fontFamily.split(',');
|
453
|
-
var size = fonts.length;
|
454
|
-
|
455
|
-
if (size == 6) {
|
456
|
-
return 1;
|
457
|
-
} else if (fonts[0].indexOf("fontFamily1") != -1 &&
|
458
|
-
this.font1Count_ != 2) {
|
459
|
-
this.font1Count_++;
|
460
|
-
return 1;
|
461
|
-
} else if (fonts[0].indexOf("fontFamily2") != -1 &&
|
462
|
-
this.font2Count_ != 1) {
|
463
|
-
this.font2Count_++;
|
464
|
-
return 1;
|
465
|
-
} else if (fonts[0].indexOf("fontFamily3") != -1 &&
|
466
|
-
this.font3Count_ != 5) {
|
467
|
-
this.font3Count_++;
|
468
|
-
return 1;
|
469
|
-
} else {
|
470
|
-
return 2;
|
471
|
-
}
|
472
|
-
}
|
473
|
-
}, function(func, timeout) {
|
474
|
-
async++;
|
475
|
-
func();
|
476
|
-
}, function() { return 0; });
|
195
|
+
FontWatcherTest.prototype.testWatchMultipleFontsWithDescriptions = function() {
|
477
196
|
var fontFamilies = [ 'fontFamily1', 'fontFamily2', 'fontFamily3' ];
|
197
|
+
this.fontWatchRunnerActiveFamilies_ = [ 'fontFamily1', 'fontFamily2' ];
|
478
198
|
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
199
|
+
var fontDescriptions = {
|
200
|
+
'fontFamily1': ['i7'],
|
201
|
+
'fontFamily2': null,
|
202
|
+
'fontFamily3': ['n4', 'i4', 'n7']
|
203
|
+
};
|
204
|
+
|
205
|
+
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
|
206
|
+
this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
|
207
|
+
|
208
|
+
fontWatcher.watch(fontFamilies, fontDescriptions, {}, true);
|
483
209
|
|
484
|
-
assertEquals(8, async);
|
485
210
|
assertEquals(5, this.fontLoadingEventCalled_);
|
486
|
-
assertEquals(
|
487
|
-
assertEquals('
|
488
|
-
|
489
|
-
assertEquals(
|
490
|
-
assertEquals('fontFamily3
|
491
|
-
|
492
|
-
assertEquals(
|
493
|
-
assertEquals(
|
494
|
-
assertEquals(
|
495
|
-
assertEquals(
|
496
|
-
assertEquals('
|
497
|
-
|
498
|
-
assertEquals('fontFamily2 n4', this.fontActive_[1]);
|
499
|
-
assertEquals('fontFamily3 n4',
|
500
|
-
this.fontActive_[2]);
|
501
|
-
assertEquals('fontFamily3 i4', this.fontActive_[3]);
|
502
|
-
assertEquals('fontFamily3 n7', this.fontActive_[4]);
|
211
|
+
assertEquals(true, this.fontLoading_['fontFamily1 i7']);
|
212
|
+
assertEquals(true, this.fontLoading_['fontFamily2 n4']);
|
213
|
+
assertEquals(true, this.fontLoading_['fontFamily3 n4']);
|
214
|
+
assertEquals(true, this.fontLoading_['fontFamily3 i4']);
|
215
|
+
assertEquals(true, this.fontLoading_['fontFamily3 n7']);
|
216
|
+
assertEquals(2, this.fontActiveEventCalled_);
|
217
|
+
assertEquals(true, this.fontActive_['fontFamily1 i7']);
|
218
|
+
assertEquals(true, this.fontActive_['fontFamily2 n4']);
|
219
|
+
assertEquals(3, this.fontInactiveEventCalled_);
|
220
|
+
assertEquals(true, this.fontInactive_['fontFamily3 n4']);
|
221
|
+
assertEquals(true, this.fontInactive_['fontFamily3 i4']);
|
222
|
+
assertEquals(true, this.fontInactive_['fontFamily3 n7']);
|
503
223
|
assertEquals(1, this.activeEventCalled_);
|
504
|
-
assertEquals(
|
505
|
-
assertEquals(true, this.classNames_['ns-fontfamily1-i7-active']);
|
506
|
-
assertEquals(true, this.classNames_['ns-fontfamily2-n4-active']);
|
507
|
-
assertEquals(true, this.classNames_['ns-fontfamily3-n4-active']);
|
508
|
-
assertEquals(true, this.classNames_['ns-fontfamily3-i4-active']);
|
509
|
-
assertEquals(true, this.classNames_['ns-fontfamily3-n7-active']);
|
510
|
-
assertEquals(true, this.classNames_['ns-active']);
|
224
|
+
assertEquals(0, this.inactiveEventCalled_);
|
511
225
|
};
|
512
226
|
|
513
|
-
FontWatcherTest.prototype.
|
514
|
-
var
|
515
|
-
|
516
|
-
this.eventDispatcher_, {
|
517
|
-
getWidth: function(element) {
|
518
|
-
var fontFamily = element.style.fontFamily;
|
519
|
-
var fonts = fontFamily.split(',');
|
520
|
-
var size = fonts.length;
|
521
|
-
|
522
|
-
testString = element.innerHTML;
|
523
|
-
if (size == 6) {
|
524
|
-
return 1;
|
525
|
-
} else {
|
526
|
-
return 2;
|
527
|
-
}
|
528
|
-
}
|
529
|
-
}, function() {}, function() { return 0; });
|
530
|
-
var fontFamilies = [ 'fontFamily1' ];
|
227
|
+
FontWatcherTest.prototype.testWatchMultipleFontsWithTestStrings = function() {
|
228
|
+
var fontFamilies = [ 'fontFamily1', 'fontFamily2', 'fontFamily3', 'fontFamily4' ];
|
229
|
+
this.fontWatchRunnerActiveFamilies_ = [ 'fontFamily1', 'fontFamily2' ];
|
531
230
|
|
532
|
-
|
533
|
-
|
534
|
-
|
231
|
+
var fontTestStrings = {
|
232
|
+
'fontFamily1': 'testString1',
|
233
|
+
'fontFamily2': null,
|
234
|
+
'fontFamily3': 'testString3',
|
235
|
+
'fontFamily4': null
|
236
|
+
};
|
535
237
|
|
536
|
-
|
537
|
-
|
538
|
-
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_,
|
539
|
-
this.eventDispatcher_, {
|
540
|
-
getWidth: function(element) {
|
541
|
-
var fontFamily = element.style.fontFamily;
|
542
|
-
var fonts = fontFamily.split(',');
|
543
|
-
var size = fonts.length;
|
544
|
-
|
545
|
-
testString = element.innerHTML;
|
546
|
-
if (size == 6) {
|
547
|
-
return 1;
|
548
|
-
} else {
|
549
|
-
return 2;
|
550
|
-
}
|
551
|
-
}
|
552
|
-
}, function() {}, function() { return 0; });
|
553
|
-
var fontFamilies = [ 'fontFamily1' ];
|
238
|
+
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
|
239
|
+
this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
|
554
240
|
|
555
|
-
fontWatcher.watch(fontFamilies, {},
|
556
|
-
|
241
|
+
fontWatcher.watch(fontFamilies, {}, fontTestStrings, true);
|
242
|
+
|
243
|
+
assertEquals(2, this.testStringCount_);
|
244
|
+
assertEquals('testString1', this.testStrings_['fontFamily1']);
|
245
|
+
assertEquals('testString3', this.testStrings_['fontFamily3']);
|
557
246
|
};
|