webfontloader 1.2.0 → 1.2.1

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.
Files changed (74) hide show
  1. data/CHANGELOG +9 -0
  2. data/Gemfile +2 -8
  3. data/README.md +31 -32
  4. data/Rakefile +2 -33
  5. data/docs/EVENTS.md +10 -1
  6. data/docs/MODULES.md +4 -3
  7. data/lib/webfontloader.rb +1 -1
  8. data/spec/ascender/ascenderscript_spec.js +43 -0
  9. data/spec/core/cssclassname_spec.js +42 -0
  10. data/spec/core/cssfontfamilyname_spec.js +38 -0
  11. data/spec/core/domhelper_spec.js +158 -0
  12. data/spec/core/eventdispatcher_spec.js +209 -0
  13. data/spec/core/font_spec.js +218 -0
  14. data/spec/core/fontmoduleloader_spec.js +55 -0
  15. data/spec/core/fontruler_spec.js +33 -0
  16. data/spec/core/fontvariationdescription_spec.js +67 -0
  17. data/spec/core/fontwatcher_spec.js +204 -0
  18. data/spec/core/fontwatchrunner_spec.js +398 -0
  19. data/spec/core/size_spec.js +17 -0
  20. data/spec/core/useragentparser_spec.js +921 -0
  21. data/spec/custom/customcss_spec.js +36 -0
  22. data/spec/fontdeck/fontdeckscript_spec.js +111 -0
  23. data/spec/fonts/LICENSE.txt +93 -0
  24. data/spec/fonts/nullfont.css +1 -0
  25. data/spec/fonts/nullfont1.css +1 -0
  26. data/spec/fonts/nullfont2.css +1 -0
  27. data/spec/fonts/nullfont3.css +1 -0
  28. data/spec/fonts/sourcesans.eot +0 -0
  29. data/spec/fonts/sourcesans.otf +0 -0
  30. data/spec/fonts/sourcesans.svg +2523 -0
  31. data/spec/fonts/sourcesans.ttf +0 -0
  32. data/spec/fonts/sourcesans.woff +0 -0
  33. data/spec/fonts/sourcesansa.css +1 -0
  34. data/spec/fonts/sourcesansb.css +1 -0
  35. data/spec/google/fontapiparser_spec.js +348 -0
  36. data/spec/google/fontapiurlbuilder_spec.js +40 -0
  37. data/spec/google/googlefontapi_spec.js +123 -0
  38. data/spec/google/lastresortwebkitfontwatchrunner_spec.js +145 -0
  39. data/spec/index.html +95 -0
  40. data/spec/monotype/monotypescript_spec.js +49 -0
  41. data/spec/typekit/typekitscript_spec.js +93 -0
  42. data/src/core/domhelper.js +6 -3
  43. data/src/core/fontruler.js +1 -1
  44. data/src/core/fontwatcher.js +5 -0
  45. data/src/core/fontwatchrunner.js +7 -4
  46. data/src/monotype/monotype_script.js +4 -3
  47. data/tools/jasmine-phantomjs/jasmine-phantomjs.js +26 -0
  48. data/tools/jasmine-phantomjs/terminal-reporter.js +177 -0
  49. data/tools/jasmine/MIT.LICENSE +20 -0
  50. data/tools/jasmine/jasmine-html.js +681 -0
  51. data/tools/jasmine/jasmine.css +82 -0
  52. data/tools/jasmine/jasmine.js +2600 -0
  53. data/webfontloader.gemspec +46 -25
  54. metadata +77 -42
  55. data/src-test/ascender/ascender_script_test.js +0 -51
  56. data/src-test/core/cssclassnametest.js +0 -42
  57. data/src-test/core/cssfontfamilynametest.js +0 -54
  58. data/src-test/core/domhelpertest.js +0 -151
  59. data/src-test/core/eventdispatchertest.js +0 -275
  60. data/src-test/core/fontmoduleloadertest.js +0 -30
  61. data/src-test/core/fonttest.js +0 -121
  62. data/src-test/core/fontvariationdescriptiontest.js +0 -76
  63. data/src-test/core/fontwatchertest.js +0 -287
  64. data/src-test/core/fontwatchrunnertest.js +0 -454
  65. data/src-test/core/useragenttest.js +0 -755
  66. data/src-test/custom/customcsstest.js +0 -35
  67. data/src-test/fontdeck/fontdeck_script_test.js +0 -116
  68. data/src-test/google/fontapiparsertest.js +0 -252
  69. data/src-test/google/fontapiurlbuildertest.js +0 -71
  70. data/src-test/google/googlefontapitest.js +0 -185
  71. data/src-test/google/lastresortwebkitfontwatchrunnertest.js +0 -204
  72. data/src-test/monotype/monotype_script_test.js +0 -304
  73. data/src-test/typekit/typekit_script_test.js +0 -195
  74. data/tools/jstestdriver/JsTestDriver-1.2.1.jar +0 -0
Binary file
Binary file
@@ -0,0 +1 @@
1
+ @font-face{font-family:SourceSansA;src:url(sourcesans.eot?#iefix) format('embedded-opentype'),url(sourcesans.woff) format('woff'),url(sourcesans.otf) format('opentype'),url(sourcesans.ttf) format('truetype'),url(sourcesans.svg#source_sans_proregular) format('svg');}
@@ -0,0 +1 @@
1
+ @font-face{font-family:SourceSansB;src:url(sourcesans.eot?#iefix) format('embedded-opentype'),url(sourcesans.woff) format('woff'),url(sourcesans.otf) format('opentype'),url(sourcesans.ttf) format('truetype'),url(sourcesans.svg#source_sans_proregular) format('svg');}
@@ -0,0 +1,348 @@
1
+ describe('FontApiParser', function () {
2
+ var FontApiParser = webfont.FontApiParser;
3
+
4
+ describe('parsed values are coherent', function () {
5
+ var parser = null;
6
+
7
+ beforeEach(function () {
8
+ parser = new FontApiParser(['Tangerine', 'Droid Serif:bi', 'Yanone Kaffeesatz:200,300,400,700', 'Cantarell:italic,b', 'Exo:100italic', 'Lobster:200n']);
9
+ parser.parse();
10
+ });
11
+
12
+ it('should parse families correctly', function () {
13
+ var fontFamilies = parser.getFontFamilies();
14
+
15
+ expect(fontFamilies.length).toEqual(6);
16
+ expect(fontFamilies).toEqual([
17
+ 'Tangerine',
18
+ 'Droid Serif',
19
+ 'Yanone Kaffeesatz',
20
+ 'Cantarell',
21
+ 'Exo',
22
+ 'Lobster'
23
+ ]);
24
+ });
25
+
26
+ it('should parse variations correctly', function () {
27
+ var variations = parser.getVariations();
28
+
29
+ var tangerine = variations['Tangerine'];
30
+ expect(tangerine).not.toBeNull();
31
+ expect(tangerine.length).toEqual(1);
32
+ expect(tangerine[0]).toEqual('n4');
33
+
34
+ var droidSerif = variations['Droid Serif'];
35
+ expect(droidSerif).not.toBeNull();
36
+ expect(droidSerif.length).toEqual(1);
37
+ expect(droidSerif[0]).toEqual('i7');
38
+
39
+ var yanoneKaffeesatz = variations['Yanone Kaffeesatz'];
40
+ expect(yanoneKaffeesatz).not.toBeNull();
41
+ expect(yanoneKaffeesatz.length).toEqual(4);
42
+ expect(yanoneKaffeesatz[0]).toEqual('n2');
43
+ expect(yanoneKaffeesatz[1]).toEqual('n3');
44
+ expect(yanoneKaffeesatz[2]).toEqual('n4');
45
+ expect(yanoneKaffeesatz[3]).toEqual('n7');
46
+
47
+ var cantarell = variations['Cantarell'];
48
+ expect(cantarell).not.toBeNull();
49
+ expect(cantarell.length).toEqual(2);
50
+ expect(cantarell[0]).toEqual('i4');
51
+ expect(cantarell[1]).toEqual('n7');
52
+
53
+ var exo = variations['Exo'];
54
+ expect(exo).not.toBeNull();
55
+ expect(exo.length).toEqual(1);
56
+ expect(exo[0]).toEqual('i1');
57
+
58
+ var lobster = variations['Lobster'];
59
+ expect(lobster).not.toBeNull();
60
+ expect(lobster.length).toEqual(1);
61
+ expect(lobster[0]).toEqual('n2');
62
+ });
63
+ });
64
+
65
+ describe('mix of numeric weight and style', function () {
66
+ var parser = null;
67
+
68
+ beforeEach(function () {
69
+ parser = new FontApiParser(['Nobile:700i,b,200i,r,i700']);
70
+ parser.parse();
71
+ });
72
+
73
+ it('should parse families correctly', function () {
74
+ var families = parser.getFontFamilies();
75
+
76
+ expect(families.length).toEqual(1);
77
+ expect(families[0]).toEqual('Nobile');
78
+ });
79
+
80
+ it('should parse variations correctly', function () {
81
+ var variations = parser.getVariations(),
82
+ nobile = variations['Nobile'];
83
+
84
+ expect(nobile).not.toBeNull();
85
+ expect(nobile.length).toEqual(4);
86
+ expect(nobile[0]).toEqual('i7');
87
+ expect(nobile[1]).toEqual('n7');
88
+ expect(nobile[2]).toEqual('i2');
89
+ expect(nobile[3]).toEqual('n4');
90
+ });
91
+ });
92
+
93
+ describe('typo bild instead of bold', function () {
94
+ var parser = null;
95
+
96
+ beforeEach(function () {
97
+ parser = new FontApiParser(['Nobile:bild']);
98
+ parser.parse();
99
+ });
100
+
101
+ it('should parse families correctly', function () {
102
+ var families = parser.getFontFamilies();
103
+
104
+ expect(families.length).toEqual(1);
105
+ expect(families[0]).toEqual('Nobile');
106
+ });
107
+
108
+ it('should parse variations correctly', function () {
109
+ var variations = parser.getVariations(),
110
+ nobile = variations['Nobile'];
111
+
112
+ expect(nobile).not.toBeNull();
113
+ expect(nobile.length).toEqual(1);
114
+ expect(nobile[0]).toEqual('n4');
115
+ });
116
+ });
117
+
118
+ describe('nonsense', function () {
119
+ var parser = null;
120
+
121
+ beforeEach(function () {
122
+ parser = new FontApiParser(['Nobile:dwe,^%^%fewf,$9940@#!@#$%^&*()_+}POIBJ{}{']);
123
+ parser.parse();
124
+ });
125
+
126
+ it('should parse families correctly', function () {
127
+ var families = parser.getFontFamilies();
128
+
129
+ expect(families.length).toEqual(1);
130
+ expect(families[0]).toEqual('Nobile');
131
+ });
132
+
133
+ it('should parse variations correctly', function () {
134
+ var variations = parser.getVariations(),
135
+ nobile = variations['Nobile'];
136
+
137
+ expect(nobile).not.toBeNull();
138
+ expect(nobile.length).toEqual(1);
139
+ expect(nobile[0]).toEqual('n4');
140
+ });
141
+ });
142
+
143
+ describe('no weight and one subset defined', function () {
144
+ var parser = null;
145
+
146
+ beforeEach(function () {
147
+ parser = new FontApiParser(['Cantarell::greek']);
148
+ parser.parse();
149
+ });
150
+
151
+ it('should parse families correctly', function () {
152
+ var families = parser.getFontFamilies();
153
+
154
+ expect(families.length).toEqual(1);
155
+ expect(families[0]).toEqual('Cantarell');
156
+ });
157
+
158
+ it('should parse variations correctly', function () {
159
+ var variations = parser.getVariations(),
160
+ cantarell = variations['Cantarell'];
161
+
162
+ expect(cantarell).not.toBeNull();
163
+ expect(cantarell.length).toEqual(1);
164
+ expect(cantarell[0]).toEqual('n4');
165
+ });
166
+
167
+ it('should parse pick test strings correctly', function () {
168
+ var testStrings = parser.getFontTestStrings(),
169
+ cantarell = testStrings['Cantarell'];
170
+
171
+ expect(cantarell).not.toBeNull();
172
+ expect(cantarell).toEqual(FontApiParser.INT_FONTS['greek']);
173
+ });
174
+ });
175
+
176
+ describe('no weight and multiple subsets defined', function () {
177
+ var parser = null;
178
+
179
+ beforeEach(function () {
180
+ parser = new FontApiParser(['Cantarell::cyrillic,greek,latin']);
181
+ parser.parse();
182
+ });
183
+
184
+ it('should parse families correctly', function () {
185
+ var families = parser.getFontFamilies();
186
+
187
+ expect(families.length).toEqual(1);
188
+ expect(families[0]).toEqual('Cantarell');
189
+ });
190
+
191
+ it('should parse variations correctly', function () {
192
+ var variations = parser.getVariations(),
193
+ cantarell = variations['Cantarell'];
194
+
195
+ expect(cantarell).not.toBeNull();
196
+ expect(cantarell.length).toEqual(1);
197
+ expect(cantarell[0]).toEqual('n4');
198
+ });
199
+
200
+ it('should parse pick test strings correctly', function () {
201
+ var testStrings = parser.getFontTestStrings(),
202
+ cantarell = testStrings['Cantarell'];
203
+
204
+ expect(cantarell).not.toBeNull();
205
+ expect(cantarell).toEqual(FontApiParser.INT_FONTS['cyrillic']);
206
+ });
207
+ });
208
+
209
+ describe('weight and multiple subsets defined', function () {
210
+ var parser = null;
211
+
212
+ beforeEach(function () {
213
+ parser = new FontApiParser(['Cantarell:regular,bold:cyrillic,greek,latin']);
214
+ parser.parse();
215
+ });
216
+
217
+ it('should parse families correctly', function () {
218
+ var families = parser.getFontFamilies();
219
+
220
+ expect(families.length).toEqual(1);
221
+ expect(families[0]).toEqual('Cantarell');
222
+ });
223
+
224
+ it('should parse variations correctly', function () {
225
+ var variations = parser.getVariations(),
226
+ cantarell = variations['Cantarell'];
227
+
228
+ expect(cantarell).not.toBeNull();
229
+ expect(cantarell.length).toEqual(2);
230
+ expect(cantarell[0]).toEqual('n4');
231
+ expect(cantarell[1]).toEqual('n7');
232
+ });
233
+
234
+ it('should parse pick test strings correctly', function () {
235
+ var testStrings = parser.getFontTestStrings(),
236
+ cantarell = testStrings['Cantarell'];
237
+
238
+ expect(cantarell).not.toBeNull();
239
+ expect(cantarell).toEqual(FontApiParser.INT_FONTS['cyrillic']);
240
+ });
241
+ });
242
+
243
+ describe('Hanuman is backward compatible', function () {
244
+ var parser = null;
245
+
246
+ beforeEach(function () {
247
+ parser = new FontApiParser(['Hanuman']);
248
+ parser.parse();
249
+ });
250
+
251
+ it('should parse families correctly', function () {
252
+ var families = parser.getFontFamilies();
253
+
254
+ expect(families.length).toEqual(1);
255
+ expect(families[0]).toEqual('Hanuman');
256
+ });
257
+
258
+ it('should parse variations correctly', function () {
259
+ var variations = parser.getVariations(),
260
+ hanuman = variations['Hanuman'];
261
+
262
+ expect(hanuman).not.toBeNull();
263
+ expect(hanuman.length).toEqual(1);
264
+ expect(hanuman[0]).toEqual('n4');
265
+ });
266
+
267
+ it('should parse pick test strings correctly', function () {
268
+ var testStrings = parser.getFontTestStrings(),
269
+ hanuman = testStrings['Hanuman'];
270
+
271
+ expect(hanuman).not.toBeNull();
272
+ expect(hanuman).toEqual(FontApiParser.INT_FONTS['Hanuman']);
273
+ });
274
+ });
275
+
276
+ describe('Hanuman is forward compatible', function () {
277
+ var parser = null;
278
+
279
+ beforeEach(function () {
280
+ parser = new FontApiParser(['Hanuman::khmer']);
281
+ parser.parse();
282
+ });
283
+
284
+ it('should parse families correctly', function () {
285
+ var families = parser.getFontFamilies();
286
+
287
+ expect(families.length).toEqual(1);
288
+ expect(families[0]).toEqual('Hanuman');
289
+ });
290
+
291
+ it('should parse variations correctly', function () {
292
+ var variations = parser.getVariations(),
293
+ hanuman = variations['Hanuman'];
294
+
295
+ expect(hanuman).not.toBeNull();
296
+ expect(hanuman.length).toEqual(1);
297
+ expect(hanuman[0]).toEqual('n4');
298
+ });
299
+
300
+ it('should parse pick test strings correctly', function () {
301
+ var testStrings = parser.getFontTestStrings(),
302
+ hanuman = testStrings['Hanuman'];
303
+
304
+ expect(hanuman).not.toBeNull();
305
+ expect(hanuman).toEqual(FontApiParser.INT_FONTS['khmer']);
306
+ });
307
+ });
308
+
309
+ describe('plus replaced with space', function () {
310
+ var parser = null;
311
+
312
+ beforeEach(function () {
313
+ parser = new FontApiParser(['Erica+One', 'Droid+Serif::latin', 'Yanone+Kaffeesatz:400,700:latin']);
314
+ parser.parse();
315
+ });
316
+
317
+ it('should parse families correctly', function () {
318
+ var fontFamilies = parser.getFontFamilies();
319
+
320
+ expect(fontFamilies.length).toEqual(3);
321
+ expect(fontFamilies).toEqual([
322
+ 'Erica One',
323
+ 'Droid Serif',
324
+ 'Yanone Kaffeesatz'
325
+ ]);
326
+ });
327
+
328
+ it('should parse variations correctly', function () {
329
+ var variations = parser.getVariations();
330
+
331
+ var ericaOne = variations['Erica One'];
332
+ expect(ericaOne).not.toBeNull();
333
+ expect(ericaOne.length).toEqual(1);
334
+ expect(ericaOne[0]).toEqual('n4');
335
+
336
+ var droidSerif = variations['Droid Serif'];
337
+ expect(droidSerif).not.toBeNull();
338
+ expect(droidSerif.length).toEqual(1);
339
+ expect(droidSerif[0]).toEqual('n4');
340
+
341
+ var yanoneKaffeesatz = variations['Yanone Kaffeesatz'];
342
+ expect(yanoneKaffeesatz).not.toBeNull();
343
+ expect(yanoneKaffeesatz.length).toEqual(2);
344
+ expect(yanoneKaffeesatz[0]).toEqual('n4');
345
+ expect(yanoneKaffeesatz[1]).toEqual('n7');
346
+ });
347
+ });
348
+ });
@@ -0,0 +1,40 @@
1
+ describe('FontApiUrlBuilder', function () {
2
+ var FontApiUrlBuilder = webfont.FontApiUrlBuilder;
3
+
4
+ it('should throw an exception if there are no font families', function () {
5
+ var builder = new FontApiUrlBuilder('http://moo', 'http:');
6
+ expect(builder.build).toThrow();
7
+ });
8
+
9
+ it('should build a proper url', function () {
10
+ var builder = new FontApiUrlBuilder('http://moo', 'http:');
11
+ builder.setFontFamilies(['Font1', 'Font2']);
12
+ expect(builder.build()).toEqual('http://moo?family=Font1%7CFont2');
13
+ });
14
+
15
+ it('should build a proper url', function () {
16
+ var builder = new FontApiUrlBuilder(undefined, 'http:');
17
+ builder.setFontFamilies(['Font1', 'Font2']);
18
+ expect(builder.build()).toEqual('http:' +
19
+ FontApiUrlBuilder.DEFAULT_API_URL +
20
+ '?family=Font1%7CFont2');
21
+ });
22
+
23
+ it('should build a proper url', function () {
24
+ var builder = new FontApiUrlBuilder(undefined, 'http:');
25
+ builder.setFontFamilies(['Font1:bold:greek,cyrillic', 'Font2:italic', 'Font3']);
26
+ expect(builder.build()).toEqual('http:' +
27
+ FontApiUrlBuilder.DEFAULT_API_URL +
28
+ '?family=Font1:bold%7CFont2:italic%7CFont3' +
29
+ '&subset=greek,cyrillic');
30
+ });
31
+
32
+ it('should build a proper url', function () {
33
+ var builder = new FontApiUrlBuilder(undefined, 'http:');
34
+ builder.setFontFamilies(['Font1:bold,italic:greek,cyrillic', 'Font2:italic', 'Font3::latin']);
35
+ expect(builder.build()).toEqual('http:' +
36
+ FontApiUrlBuilder.DEFAULT_API_URL +
37
+ '?family=Font1:bold,italic%7CFont2:italic%7CFont3' +
38
+ '&subset=greek,cyrillic,latin');
39
+ });
40
+ });
@@ -0,0 +1,123 @@
1
+ describe('GoogleFontApi', function () {
2
+ var GoogleFontApi = webfont.GoogleFontApi,
3
+ UserAgent = webfont.UserAgent,
4
+ userAgent = null,
5
+ link = '',
6
+ insert = '',
7
+ fakeDomHelper = {
8
+ insertInto: function (tag, e) {
9
+ insert = tag;
10
+ },
11
+ createCssLink: function (cssLink) {
12
+ link = cssLink;
13
+ },
14
+ getProtocol: function () {
15
+ return 'http:';
16
+ }
17
+ };
18
+
19
+
20
+ beforeEach(function () {
21
+ insert = '';
22
+ link = '';
23
+ userAgent = new UserAgent('Test', '1.0', true);
24
+ });
25
+
26
+ describe('call onReady with font family loading', function () {
27
+ var googleFontApi = null,
28
+ families = null,
29
+ descriptions = null;
30
+
31
+ beforeEach(function () {
32
+ googleFontApi = new GoogleFontApi(userAgent, fakeDomHelper, { families: ['Font1', 'Font2'] });
33
+ googleFontApi.load(function (fontFamilies, fontDescriptions) {
34
+ families = fontFamilies;
35
+ descriptions = fontDescriptions;
36
+ });
37
+ });
38
+
39
+ it('has inserted the link element correctly', function () {
40
+ expect(insert).toEqual('head');
41
+ expect(link).toEqual('http://fonts.googleapis.com/css?family=Font1%7CFont2');
42
+ });
43
+
44
+ it('has the correct families', function () {
45
+ expect(families).not.toBeNull();
46
+ expect(families.length).toEqual(2);
47
+ expect(families[0]).toEqual('Font1');
48
+ expect(families[1]).toEqual('Font2');
49
+ });
50
+
51
+ it('has the correct font descriptions', function () {
52
+ var font1 = descriptions['Font1'];
53
+ expect(font1).not.toBeNull();
54
+ expect(font1.length).toEqual(1);
55
+ expect(font1[0]).toEqual('n4');
56
+
57
+ var font2 = descriptions['Font2'];
58
+ expect(font2).not.toBeNull();
59
+ expect(font2.length).toEqual(1);
60
+ expect(font1[0]).toEqual('n4');
61
+ });
62
+ });
63
+
64
+ describe('call onReady with font family loading and custom API url', function () {
65
+ var googleFontApi = null,
66
+ families = null,
67
+ descriptions = null;
68
+
69
+ beforeEach(function () {
70
+ googleFontApi = new GoogleFontApi(userAgent, fakeDomHelper, {
71
+ api: 'http://moo',
72
+ families: ['Font1', 'Font2']
73
+ });
74
+ googleFontApi.load(function (fontFamilies, fontDescriptions) {
75
+ families = fontFamilies;
76
+ descriptions = fontDescriptions;
77
+ });
78
+ });
79
+
80
+ it('has inserted the link element correctly', function () {
81
+ expect(insert).toEqual('head');
82
+ expect(link).toEqual('http://moo?family=Font1%7CFont2');
83
+ });
84
+ });
85
+
86
+ describe('spaces replaced by plus', function () {
87
+ var googleFontApi = null,
88
+ families = null,
89
+ descriptions = null;
90
+
91
+ beforeEach(function () {
92
+ googleFontApi = new GoogleFontApi(userAgent, fakeDomHelper, { families: ['Font1 WithSpace', 'Font2 WithSpaceToo'] });
93
+ googleFontApi.load(function (fontFamilies, fontDescriptions) {
94
+ families = fontFamilies;
95
+ descriptions = fontDescriptions;
96
+ });
97
+ });
98
+
99
+ it('has inserted the link element correctly', function () {
100
+ expect(insert).toEqual('head');
101
+ expect(link).toEqual('http://fonts.googleapis.com/css?family=Font1+WithSpace%7CFont2+WithSpaceToo');
102
+ });
103
+ });
104
+
105
+ describe('load with variations', function () {
106
+ var googleFontApi = null,
107
+ families = null,
108
+ descriptions = null;
109
+
110
+ beforeEach(function () {
111
+ googleFontApi = new GoogleFontApi(userAgent, fakeDomHelper, { families: ['Font1 WithSpace:bi', 'Font2 WithSpaceToo:b,r'] });
112
+ googleFontApi.load(function (fontFamilies, fontDescriptions) {
113
+ families = fontFamilies;
114
+ descriptions = fontDescriptions;
115
+ });
116
+ });
117
+
118
+ it('has inserted the link element correctly', function () {
119
+ expect(insert).toEqual('head');
120
+ expect(link).toEqual('http://fonts.googleapis.com/css?family=Font1+WithSpace:bi%7CFont2+WithSpaceToo:b,r');
121
+ });
122
+ });
123
+ });