// ========================================================================== // Project: SproutCore - JavaScript Application Framework // Copyright: ©2010 Strobe Inc. All rights reserved. // Author: Peter Wagenet // License: Licensed under MIT license (see license.js) // ==========================================================================

var userAgents = {

// CHROME

"Mozilla/5.0 (compatible; Konqueror/4.4; Linux) KHTML/4.4.1 (like Gecko) Fedora/4.4.1-1.fc12": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.unknown,
  version: '0',
  os: SC.OS.linux,
  osVersion: '0',
  engine: SC.BROWSER.unknown,
  engineVersion: '0'
},
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-US) AppleWebKit/534.12 (KHTML, like Gecko) Chrome/9.0.572.1 Safari/534.12": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.chrome,
  version: '9.0.572.1',
  os: SC.OS.mac,
  osVersion: '10.6.5',
  engine: SC.ENGINE.webkit,
  engineVersion: '534.12'
},
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.chrome,
  version: '16.0.912.63',
  os: SC.OS.mac,
  osVersion: '10.7.2',
  engine: SC.ENGINE.webkit,
  engineVersion: '535.7'
},
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.36 Safari/535.7": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.chrome,
  version: '16.0.912.36',
  os: SC.OS.win,
  osVersion: '6.1',
  engine: SC.ENGINE.webkit,
  engineVersion: '535.7'
},

// OPERA

"Opera/9.00 (X11; Linux i686; U; pl)": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.opera,
  version: '9.00',
  os: SC.OS.linux,
  osVersion: '0',
  engine: SC.ENGINE.opera,
  engineVersion: '9.00'
},
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) Opera 8.65 [en]": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.opera,
  version: '8.65',
  os: SC.OS.win,
  osVersion: '5.1',
  engine: SC.ENGINE.opera,
  engineVersion: '8.65'
},
"Opera/9.80 (Windows NT 6.1; U; en) Presto/2.6.30 Version/10.62": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.opera,
  version: '10.62',
  os: SC.OS.win,
  osVersion: '6.1',
  engine: SC.ENGINE.presto,
  engineVersion: '2.6.30'
},
"Opera/9.80 (Windows NT 5.1; U; en) Presto/2.9.168 Version/11.51": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.opera,
  version: '11.51',
  os: SC.OS.win,
  osVersion: '5.1',
  engine: SC.ENGINE.presto,
  engineVersion: '2.9.168'
},
"Opera/9.80 (Windows NT 6.1; U; es-ES) Presto/2.9.181 Version/12.00": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.opera,
  version: '12.00',
  os: SC.OS.win,
  osVersion: '6.1',
  engine: SC.ENGINE.presto,
  engineVersion: '2.9.181'
},
"Opera/9.80 (Macintosh; Intel Mac OS X; U; en) Presto/2.6.30 Version/10.62": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.opera,
  version: '10.62',
  os: SC.OS.mac,
  osVersion: '0',
  engine: SC.ENGINE.presto,
  engineVersion: '2.6.30'
},
"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.opera,
  version: '11.52',
  os: SC.OS.mac,
  osVersion: '10.6.8',
  engine: SC.ENGINE.presto,
  engineVersion: '2.9.168'
},

// INTERNET EXPLORER

"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.ie,
  version: '7.0',
  os: SC.OS.win,
  osVersion: '6.0',
  engine: SC.ENGINE.trident,
  engineVersion: '7.0'
},
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.ie,
  version: '8.0',
  os: SC.OS.win,
  osVersion: '6.0',
  engine: SC.ENGINE.trident,
  engineVersion: '4.0'
},
"Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US))": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.ie,
  version: '9.0',
  os: SC.OS.win,
  osVersion: '9.0',
  engine: SC.ENGINE.trident,
  engineVersion: '9.0'
},
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.ie,
  version: '9.0',
  os: SC.OS.win,
  osVersion: '6.1',
  engine: SC.ENGINE.trident,
  engineVersion: '5.0'
},
"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.ie,
  version: '10.0',
  os: SC.OS.win,
  osVersion: '6.1',
  engine: SC.ENGINE.trident,
  engineVersion: '6.0'
},
"Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.ie,
  version: '10.6',
  os: SC.OS.win,
  osVersion: '6.1',
  engine: SC.ENGINE.trident,
  engineVersion: '5.0'
},
"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.ie,
  version: '10.0',
  os: SC.OS.win,
  osVersion: '6.2',
  engine: SC.ENGINE.trident,
  engineVersion: '6.0'
},
"Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.ie,
  version: '10.6',
  os: SC.OS.win,
  osVersion: '6.1',
  engine: SC.ENGINE.trident,
  engineVersion: '5.0'
},
"Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.ie,
  version: '11.0',
  os: SC.OS.win,
  osVersion: '6.3',
  engine: SC.ENGINE.trident,
  engineVersion: '7.0'
},

// MOZILLA

"Mozilla/5.0 (Windows; U; Windows NT 6.1; it; rv:2.0b4) Gecko/20100818": {
  device: SC.DEVICE.desktop,
  name: SC.ENGINE.gecko,
  version: '0',
  os: SC.OS.win,
  osVersion: '6.1',
  engine: SC.ENGINE.gecko,
  engineVersion: '2.0b4'
},

// FIREFOX

"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1.13) Gecko/20100914 Firefox/3.5.13": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.firefox,
  version: '3.5.13',
  os: SC.OS.mac,
  osVersion: '10.6',
  engine: SC.ENGINE.gecko,
  engineVersion: '1.9.1.13'
},
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.firefox,
  version: '3.6.10',
  os: SC.OS.mac,
  osVersion: '10.6',
  engine: SC.ENGINE.gecko,
  engineVersion: '1.9.2.10'
},
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20100101 Firefox/9.0": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.firefox,
  version: '9.0',
  os: SC.OS.mac,
  osVersion: '10.6',
  engine: SC.ENGINE.gecko,
  engineVersion: '9.0'
},
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.13) Gecko/20100914 Firefox/3.5.13": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.firefox,
  version: '3.5.13',
  os: SC.OS.win,
  osVersion: '6.1',
  engine: SC.ENGINE.gecko,
  engineVersion: '1.9.1.13'
},
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.firefox,
  version: '3.6.10',
  os: SC.OS.win,
  osVersion: '6.1',
  engine: SC.ENGINE.gecko,
  engineVersion: '1.9.2.10'
},
"Mozilla/5.0 (Windows NT 6.1; rv:2.0b7pre) Gecko/20100921 Firefox/4.0b7pre": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.firefox,
  version: '4.0b7pre',
  os: SC.OS.win,
  osVersion: '6.1',
  engine: SC.ENGINE.gecko,
  engineVersion: '2.0b7pre'
},
"Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.firefox,
  version: '6.0',
  os: SC.OS.win,
  osVersion: '6.1',
  engine: SC.ENGINE.gecko,
  engineVersion: '6.0'
},

// SAFARI

"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; sv-se) AppleWebKit/419 (KHTML, like Gecko) Safari/419.3": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.safari,
  version: '0',
  os: SC.OS.mac,
  osVersion: '0',
  engine: SC.ENGINE.webkit,
  engineVersion: '419'
},
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; ja-jp) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/3.2.3 Safari/525.28.3": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.safari,
  version: '3.2.3',
  os: SC.OS.mac,
  osVersion: '10.5.8',
  engine: SC.ENGINE.webkit,
  engineVersion: '530.19.2'
},
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; nl-nl) AppleWebKit/533.16 (KHTML, like Gecko) Version/4.1 Safari/533.16": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.safari,
  version: '4.1',
  os: SC.OS.mac,
  osVersion: '10.4.11',
  engine: SC.ENGINE.webkit,
  engineVersion: '533.16'
},
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-us) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.safari,
  version: '5.0.3',
  os: SC.OS.mac,
  osVersion: '10.6.6',
  engine: SC.ENGINE.webkit,
  engineVersion: '533.19.4'
},
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.safari,
  version: '5.0.5',
  os: SC.OS.mac,
  osVersion: '10.6.8',
  engine: SC.ENGINE.webkit,
  engineVersion: '533.21.1'
},
"Mozilla/5.0 (Windows; U; Windows NT 5.0; en-en) AppleWebKit/533.16 (KHTML, like Gecko) Version/4.1 Safari/533.16": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.safari,
  version: '4.1',
  os: SC.OS.win,
  osVersion: '5.0',
  engine: SC.ENGINE.webkit,
  engineVersion: '533.16'
},
"Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.safari,
  version: '5.0.1',
  os: SC.OS.win,
  osVersion: '5.2',
  engine: SC.ENGINE.webkit,
  engineVersion: '533.17.8'
},
"Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-HK) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.safari,
  version: '5.0.2',
  os: SC.OS.win,
  osVersion: '6.1',
  engine: SC.ENGINE.webkit,
  engineVersion: '533.18.1'
},
"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-us) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.safari,
  version: '5.0.3',
  os: SC.OS.win,
  osVersion: '6.0',
  engine: SC.ENGINE.webkit,
  engineVersion: '533.19.4'
},
"Mozilla/5.0 (Windows; U; Windows NT 6.1; tr-TR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27": {
  device: SC.DEVICE.desktop,
  name: SC.BROWSER.safari,
  version: '5.0.4',
  os: SC.OS.win,
  osVersion: '6.1',
  engine: SC.ENGINE.webkit,
  engineVersion: '533.20.25'
},

// BLACKBERRY

"Mozilla/5.0 (BlackBerry; U; BlackBerry 9850; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0.115 Mobile Safari/534.11+": {
  device: SC.DEVICE.blackberry,
  name: SC.BROWSER.blackberry,
  version: '7.0.0.115',
  os: SC.OS.blackberry,
  osVersion: '0',
  engine: SC.ENGINE.webkit,
  engineVersion: '534.11+'
},

// MOBILE SAFARI

"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7": {
  device: SC.DEVICE.iphone,
  name: SC.BROWSER.safari,
  version: '4.0.5',
  os: SC.OS.ios,
  osVersion: '4.0',
  engine: SC.ENGINE.webkit,
  engineVersion: '532.9'
},
"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7": {
  device: SC.DEVICE.iphone,
  name: SC.BROWSER.safari,
  version: '4.0.5',
  os: SC.OS.ios,
  osVersion: '4.1',
  engine: SC.ENGINE.webkit,
  engineVersion: '532.9'
},
"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Mobile/8B117": {
  device: SC.DEVICE.iphone,
  name: SC.BROWSER.safari,
  version: '0',
  os: SC.OS.ios,
  osVersion: '4.1',
  engine: SC.ENGINE.webkit,
  engineVersion: '532.9'
},
"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile/8C14": {
  device: SC.DEVICE.iphone,
  name: SC.BROWSER.safari,
  version: '0',
  os: SC.OS.ios,
  osVersion: '4.2.1',
  engine: SC.ENGINE.webkit,
  engineVersion: '533.17.9'
},
"Mozilla/5.0 (iPhone; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3": {
  device: SC.DEVICE.iphone,
  name: SC.BROWSER.safari,
  version: '5.1',
  os: SC.OS.ios,
  osVersion: '5.0.1',
  engine: SC.ENGINE.webkit,
  engineVersion: '534.46'
},
"Mozilla/5.0 (iPad; U; CPU OS 3_2_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B500 Safari/531.21.10": {
  device: SC.DEVICE.ipad,
  name: SC.BROWSER.safari,
  version: '4.0.4',
  os: SC.OS.ios,
  osVersion: '3.2.2',
  engine: SC.ENGINE.webkit,
  engineVersion: '531.21.10'
},
"Mozilla/5.0(iPad; U; CPU OS 4_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8F191 Safari/6533.18.5": {
  device: SC.DEVICE.ipad,
  name: SC.BROWSER.safari,
  version: '5.0.2',
  os: SC.OS.ios,
  osVersion: '4.3',
  engine: SC.ENGINE.webkit,
  engineVersion: '533.17.9'
},
"Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53": {
  device: SC.DEVICE.ipad,
  name: SC.BROWSER.safari,
  version: '7.0',
  os: SC.OS.ios,
  osVersion: '7.0',
  engine: SC.ENGINE.webkit,
  engineVersion: '537.51.1'
},

// Android

"Mozilla/5.0 (Linux; U; Android 2.1-update1; en-us; SCH-I500 Build/ECLAIR) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17": {
  device: SC.DEVICE.android,
  name: SC.BROWSER.android,
  version: '4.0',
  os: SC.OS.android,
  osVersion: '2.1-update1',
  engine: SC.ENGINE.webkit,
  engineVersion: '530.17'
},
"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; T-Mobile myTouch 3G Slide Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1": {
  device: SC.DEVICE.android,
  name: SC.BROWSER.android,
  version: '4.0',
  os: SC.OS.android,
  osVersion: '2.3.4',
  engine: SC.ENGINE.webkit,
  engineVersion: '533.1'
},
"Mozilla/5.0 (Linux; U; Android 2.3.4; fr-fr; HTC Desire Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1": {
  device: SC.DEVICE.android,
  name: SC.BROWSER.android,
  version: '4.0',
  os: SC.OS.android,
  osVersion: '2.3.4',
  engine: SC.ENGINE.webkit,
  engineVersion: '533.1'
},
"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; HTC Vision Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1": {
  device: SC.DEVICE.android,
  name: SC.BROWSER.android,
  version: '4.0',
  os: SC.OS.android,
  osVersion: '2.3.5',
  engine: SC.ENGINE.webkit,
  engineVersion: '533.1'
},

// KINDLE

"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Kindle Fire Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1": {
  device: SC.DEVICE.android,
  name: SC.BROWSER.android,
  version: '4.0',
  os: SC.OS.android,
  osVersion: '2.3.4',
  engine: SC.ENGINE.webkit,
  engineVersion: '533.1'
}

};

// Cycle through all the given user agents and test them individually against their expected // values. for (var userAgent in userAgents) {

test(userAgent, function() {
  var userAgent,
      browser,
      expected;

  userAgent = this.working.test;
  browser = SC.detectBrowser(userAgent);
  expected = userAgents[userAgent];
  for (var key in expected) {
    if ( !browser.hasOwnProperty(key) || browser[key] == null) {
      ok(false,"Property %@ not set, expected %@".fmt(key, expected[key]));
    }
    if (browser[key] && typeof browser[key] !== "function") {
      equals(browser[key], expected[key], "'" + key + "' should be '" + expected[key] + "'");
    }
  }
});

}

// COMMON

test(“Language”, function(){

equals(SC.detectBrowser(undefined, 'fr').language, 'fr', "should only show base language part");
equals(SC.detectBrowser(undefined, 'en-US').language, 'en', "should only show base language part");
equals(SC.detectBrowser(undefined, 'es-ES').language, 'es', "should only show base language part");

});

test(“CountyCode”, function(){

equals(SC.detectBrowser(undefined, 'fr').countryCode, undefined, "should not have a countryCode if the language doesn't indicate it");
equals(SC.detectBrowser(undefined, 'en-US').countryCode, 'us', "should only show ISO 639-1 countryCode part");
equals(SC.detectBrowser(undefined, 'es-ES').countryCode, 'es', "should only show ISO 639-1 countryCode part");

});