Upgrade to ExtJS 4.0.0 - Released 04/26/2011
[extjs.git] / src / core / test / unit / spec / env / Environment.js
1 describe("Ext.Browser and Ext.OS", function() {
2     var profiles = {
3         Safari_502_Mac: {
4             platform: 'MacIntel',
5             userAgent: 'Safari_5533.18.5Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5',
6             expect: {
7                 browser: {
8                     name: 'Safari',
9                     flags: ['Safari', 'Safari5', 'Safari502', 'WebKit', 'WebKit533', 'WebKit533181'],
10                     version: '5.0.2'
11                 },
12                 os: {
13                     name: 'MacOSX',
14                     flags: ['MacOSX'],
15                     version: ''
16                 }
17             }
18         },
19
20         Chrome_70517_Mac: {
21             platform: 'MacIntel',
22             userAgent: 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7',
23             expect: {
24                 browser: {
25                     name: 'Chrome',
26                     flags: ['Chrome', 'Chrome7', 'Chrome7051744', 'WebKit', 'WebKit5347', 'WebKit534'],
27                     version: '7.0.517.44'
28                 },
29                 os: {
30                     name: 'MacOSX',
31                     flags: ['MacOSX'],
32                     version: ''
33                 }
34             }
35         },
36
37         Opera_980_Mac: {
38             platform: 'MacIntel',
39             userAgent: 'Opera/9.80 (Macintosh; Intel Mac OS X; U; en) Presto/2.6.30 Version/10.63',
40             expect: {
41                 browser: {
42                     name: 'Opera',
43                     flags: ['Opera', 'Opera9', 'Opera980', 'Presto', 'Presto2630', 'Presto2'],
44                     version: '9.80'
45                 },
46                 os: {
47                     name: 'MacOSX',
48                     flags: ['MacOSX'],
49                     version: ''
50                 }
51             }
52         },
53
54         IE_8_Win7: {
55             platform: 'Win32',
56             userAgent: 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; .NET CLR 3.5.30729)',
57             expect: {
58                 browser: {
59                     name: 'IE',
60                     flags: ['IE', 'IE8', 'IE80', 'Trident', 'Trident4', 'Trident40'],
61                     version: '8.0'
62                 },
63                 os: {
64                     name: 'Windows',
65                     flags: ['Windows'],
66                     version: ''
67                 }
68             }
69         },
70
71         IE_7_WinVista: {
72             platform: 'Win32',
73             userAgent: 'Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)',
74             expect: {
75                 browser: {
76                     name: 'IE',
77                     flags: ['IE', 'IE7', 'IE70', 'Other'],
78                     version: '7.0'
79                 },
80                 os: {
81                     name: 'Windows',
82                     flags: ['Windows'],
83                     version: ''
84                 }
85             }
86         },
87
88         IE_61_WinXP: {
89             platform: 'Win32',
90             userAgent: 'Mozilla/4.0 (compatible; MSIE 6.1; Windows XP)',
91             expect: {
92                 browser: {
93                     name: 'IE',
94                     flags: ['IE', 'IE6', 'IE61', 'Other'],
95                     version: '6.1'
96                 },
97                 os: {
98                     name: 'Windows',
99                     flags: ['Windows'],
100                     version: ''
101                 }
102             }
103         },
104
105         iPad_32: {
106             platform: 'iPad',
107             userAgent: 'Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10',
108             expect: {
109                 browser: {
110                     name: 'Safari',
111                     flags: ['Safari', 'Safari4', 'Safari404', 'WebKit', 'WebKit531', 'WebKit5312110'],
112                     version: '4.0.4'
113                 },
114                 os: {
115                     name: 'iOS',
116                     flags: ['iOS', 'iOS3', 'iOS32', 'iPad'],
117                     version: '3.2'
118                 }
119             }
120         },
121
122         iPhone_31: {
123             platform: 'iPhone',
124             userAgent: 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1_3 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7E18 Safari/528.16',
125             expect: {
126                 browser: {
127                     name: 'Safari',
128                     flags: ['Safari', 'Safari4', 'Safari40', 'WebKit', 'WebKit528', 'WebKit52818'],
129                     version: '4.0'
130                 },
131                 os: {
132                     name: 'iOS',
133                     flags: ['iOS', 'iOS3', 'iOS313', 'iPhone'],
134                     version: '3.1.3'
135                 }
136             }
137         },
138
139         iPod_41: {
140             platform: 'iPod',
141             userAgent: 'Mozilla/5.0 (iPod; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B118 Safari/6531.22.7',
142             expect: {
143                 browser: {
144                     name: 'Safari',
145                     flags: ['Safari', 'Safari4', 'Safari405', 'WebKit', 'WebKit532', 'WebKit5329'],
146                     version: '4.0.5'
147                 },
148                 os: {
149                     name: 'iOS',
150                     flags: ['iOS', 'iOS4', 'iOS41', 'iPod'],
151                     version: '4.1'
152                 }
153             }
154         },
155
156         iPod_31: {
157             platform: 'iPod',
158             userAgent: 'Mozilla/5.0 (iPod; U; CPU iPhone OS 3_1_3 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7E18 Safari/528.16',
159             expect: {
160                 browser: {
161                     name: 'Safari',
162                     flags: ['Safari', 'Safari4', 'Safari40', 'WebKit', 'WebKit528', 'WebKit52818'],
163                     version: '4.0'
164                 },
165                 os: {
166                     name: 'iOS',
167                     flags: ['iOS', 'iOS3', 'iOS313', 'iPod'],
168                     version: '3.1.3'
169                 }
170             }
171         },
172
173         Android_22_G2: {
174             platform: 'Linux armv7l',
175             userAgent: ' Mozilla/5.0 (Linux; U; Android 2.2; en-us; T-Mobile G2 Build/ FRF91) AppleWebKit/533.1(KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
176             expect: {
177                 browser: {
178                     name: 'Safari',
179                     flags: ['Safari', 'Safari4', 'Safari40', 'WebKit', 'WebKit533', 'WebKit5331'],
180                     version: '4.0'
181                 },
182                 os: {
183                     name: 'Android',
184                     flags: ['Android', 'Android2', 'Android22'],
185                     version: '2.2'
186                 }
187             }
188         },
189
190         Android_22_Desire: {
191             platform: 'Linux armv7l',
192             userAgent: 'Mozilla/5.0 (Linux; U; Android 2.2; en-vn; Desire_A8181 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
193             expect: {
194                 browser: {
195                     name: 'Safari',
196                     flags: ['Safari', 'Safari4', 'Safari40', 'WebKit', 'WebKit533', 'WebKit5331'],
197                     version: '4.0'
198                 },
199                 os: {
200                     name: 'Android',
201                     flags: ['Android', 'Android2', 'Android22'],
202                     version: '2.2'
203                 }
204             }
205         },
206
207         Android_22_NexusOne: {
208             platform: 'Linux armv7l',
209             userAgent: 'Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/ FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
210             expect: {
211                 browser: {
212                     name: 'Safari',
213                     flags: ['Safari', 'Safari4', 'Safari40', 'WebKit', 'WebKit533', 'WebKit5331'],
214                     version: '4.0'
215                 },
216                 os: {
217                     name: 'Android',
218                     flags: ['Android', 'Android2', 'Android22'],
219                     version: '2.2'
220                 }
221             }
222         },
223
224         Android_21_GalaxyS: {
225             platform: 'Linux armv7l',
226             userAgent: 'Mozilla/5.0 (Linux; U; Android 2.1-update1; fr-fr; GT-I9000 Build/ECLAIR) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17',
227             expect: {
228                 browser: {
229                     name: 'Safari',
230                     flags: ['Safari', 'Safari4', 'Safari40', 'WebKit', 'WebKit530', 'WebKit53017'],
231                     version: '4.0'
232                 },
233                 os: {
234                     name: 'Android',
235                     flags: ['Android', 'Android2', 'Android21'],
236                     version: '2.1update1'
237                 }
238             }
239         },
240
241         Android_21_Evo: {
242             platform: 'Linux armv7l',
243             userAgent: 'Mozilla/5.0 (Linux; U; Android 2.1-update1; en-us; Sprint APA9292KT Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko)',
244             expect: {
245                 browser: {
246                     name: 'Other',
247                     flags: ['WebKit', 'WebKit530', 'WebKit53017'],
248                     version: ''
249                 },
250                 os: {
251                     name: 'Android',
252                     flags: ['Android', 'Android2', 'Android21'],
253                     version: '2.1update1'
254                 }
255             }
256         },
257
258         BlackBerry_Torch: {
259             platform: 'BlackBerry',
260             userAgent: 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en-US) AppleWebKit/534.1+ (KHTML, like Gecko) Version/6.0.0.246 Mobile Safari/534.1+',
261             expect: {
262                 browser: {
263                     name: 'Safari',
264                     flags: ['WebKit', 'WebKit534', 'WebKit5341', 'Safari', 'Safari6', 'Safari600246'],
265                     version: '6.0.0.246'
266                 },
267                 os: {
268                     name: 'BlackBerry',
269                     flags: ['BlackBerry', 'BlackBerry6', 'BlackBerry600246'],
270                     version: '6.0.0.246'
271                 }
272             }
273         }
274     };
275     
276     var mockGlobal = {
277             document: {
278                 compatMode: ""
279             },
280             location: {
281                 protocol: "http:"
282             }
283         },
284         profile,
285         expected,
286         flags;
287
288     //~ Ext.each(profiles, function(name) {
289         //~ console.log(arguments);
290     specFor(profiles, function(name) {
291         describe(name, function() {
292             beforeEach(function() {
293                 profile = profiles[name];
294
295                 Ext.global = Ext.merge({}, mockGlobal, {
296                     navigator: {
297                         platform: profile.platform,
298                         userAgent: profile.userAgent
299                     }
300                 });
301
302                 expected = profile.expect;
303             });
304
305             afterEach(function() {
306                 Ext.global = window;
307             });
308
309             it("Ext.env.Browser", function() {
310                 var browserEnv = new Ext.env.Browser();
311
312                 expect(browserEnv.name).toBe(expected.browser.name);
313
314                 expect(browserEnv.version.toString()).toBe(expected.browser.version);
315
316                 flags = [];
317
318                 for (var k in browserEnv.is) {
319                     if (!browserEnv.is.hasOwnProperty(k)) {
320                         continue;
321                     }
322
323                     if (browserEnv.is[k] === true) {
324                         flags.push(k);
325                     }
326                 }
327
328                 expect(flags.sort()).toEqual(expected.browser.flags.sort());
329             });
330
331             it("Ext.env.OS", function() {
332                 var platformEnv = new Ext.env.OS();
333
334                 expect(platformEnv.name).toBe(expected.os.name);
335
336                 expect(platformEnv.version.toString()).toBe(expected.os.version);
337
338                 flags = [];
339
340                 for (var k in platformEnv.is) {
341                     if (!platformEnv.is.hasOwnProperty(k)) {
342                         continue;
343                     }
344
345                     if (platformEnv.is[k] === true) {
346                         flags.push(k);
347                     }
348                 }
349
350                 expect(flags.sort()).toEqual(expected.os.flags.sort());
351             });
352         });
353
354
355     });
356         
357 });