1 module( 'jquery.client' );
3 test( '-- Initial check', function() {
5 ok( jQuery
.client
, 'jQuery.client defined' );
8 var uacount
= 0, uas
= (function() {
10 // Object keyed by userAgent. Value is an array (human-readable name, client-profile object, navigator.platform value)
11 // Info based on results from http://toolserver.org/~krinkle/testswarm/job/174/
13 // Internet Explorer 6
14 // Internet Explorer 7
15 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)': {
16 title
: 'Internet Explorer 7',
21 "layoutVersion": "unknown",
32 // Internet Explorer 8
33 // Internet Explorer 9
34 // Internet Explorer 10
35 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)': {
36 title
: 'Internet Explorer 10',
41 "layoutVersion": "unknown", // should be able to report 6?
54 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.19) Gecko/20110420 Firefox/3.5.19': {
60 "layoutVersion": 20110420,
72 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110422 Ubuntu/10.10 (maverick) Firefox/3.6.17': {
74 platform
: 'Linux i686',
78 "layoutVersion": 20110422,
90 'Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1': {
96 "layoutVersion": 20100101,
107 // Firefox 10 nightly build
108 'Mozilla/5.0 (X11; Linux x86_64; rv:10.0a1) Gecko/20111103 Firefox/10.0a1': {
109 title
: 'Firefox 10 nightly',
114 "layoutVersion": 20111103,
128 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; nl-nl) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7': {
130 platform
: 'MacIntel',
134 "layoutVersion": 531,
145 'Mozilla/5.0 (Windows; U; Windows NT 6.0; cs-CZ) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7': {
151 "layoutVersion": 533,
172 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30': {
174 platform
: 'MacIntel',
178 "layoutVersion": 534,
180 "version": "12.0.742.112",
189 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.68 Safari/534.30': {
191 platform
: 'Linux i686',
195 "layoutVersion": 534,
197 "version": "12.0.742.68",
207 $.each( uas
, function() { uacount
++ });
211 test( 'profile userAgent support', function() {
214 // Generate a client profile object and compare recursively
215 var uaTest = function( rawUserAgent
, data
) {
216 var ret
= $.client
.profile( {
217 userAgent
: rawUserAgent
,
218 platform
: data
.platform
220 deepEqual( ret
, data
.profile
, 'Client profile support check for ' + data
.title
+ ' (' + data
.platform
+ '): ' + rawUserAgent
);
223 // Loop through and run tests
224 $.each( uas
, uaTest
);
227 test( 'profile return validation for current user agent', function() {
229 var p
= $.client
.profile();
230 var unknownOrType = function( val
, type
, summary
) {
231 return ok( typeof val
=== type
|| val
=== 'unknown', summary
);
234 equal( typeof p
, 'object', 'profile returns an object' );
235 unknownOrType( p
.layout
, 'string', 'p.layout is a string (or "unknown")' );
236 unknownOrType( p
.layoutVersion
, 'number', 'p.layoutVersion is a number (or "unknown")' );
237 unknownOrType( p
.platform
, 'string', 'p.platform is a string (or "unknown")' );
238 unknownOrType( p
.version
, 'string', 'p.version is a string (or "unknown")' );
239 unknownOrType( p
.versionBase
, 'string', 'p.versionBase is a string (or "unknown")' );
240 equal( typeof p
.versionNumber
, 'number', 'p.versionNumber is a number' );
243 // Example from WikiEditor
246 'msie': [['>=', 7.0]],
247 'firefox': [['>=', 2]],
248 'opera': [['>=', 9.6]],
249 'safari': [['>=', 3]],
250 'chrome': [['>=', 3]],
251 'netscape': [['>=', 9]],
258 'firefox': [['>=', 2]],
259 'opera': [['>=', 9.6]],
260 'safari': [['>=', 3]],
261 'chrome': [['>=', 3]],
262 'netscape': [['>=', 9]],
269 test( 'test', function() {
272 // .test() uses eval, make sure no exceptions are thrown
273 // then do a basic return value type check
274 var testMatch
= $.client
.test( testMap
);
276 equal( typeof testMatch
, 'boolean', 'test returns a boolean value' );
280 test( 'User-agent matches against WikiEditor\'s compatibility map', function() {
281 expect( uacount
* 2 );
283 // Loop through and run tests
284 $.each( uas
, function( agent
, data
) {
285 $.each( ['ltr', 'rtl'], function( i
, dir
) {
286 $('body').addClass(dir
);
287 var profile
= $.client
.profile( {
289 platform
: data
.platform
291 var testMatch
= $.client
.test( testMap
, profile
);
292 $('body').removeClass(dir
);
294 equal( testMatch
, data
.wikiEditor
[dir
], 'testing comparison based on ' + dir
+ ', ' + agent
);