PageRenderTime 30ms CodeModel.GetById 7ms RepoModel.GetById 0ms app.codeStats 0ms

/js/closure-library/closure/goog/useragent/useragent_test.html

https://gitlab.com/gregtyka/napster.fm
HTML | 298 lines | 262 code | 30 blank | 6 comment | 0 complexity | 7264015d1cf9378af79e54285bcda112 MD5 | raw file
  1. <!DOCTYPE html>
  2. <html>
  3. <!--
  4. Copyright 2006 The Closure Library Authors. All Rights Reserved.
  5. Use of this source code is governed by the Apache License, Version 2.0.
  6. See the COPYING file for details.
  7. -->
  8. <head>
  9. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  10. <title>Closure Unit Tests - goog.userAgent</title>
  11. <script src="../base.js"></script>
  12. <script>
  13. goog.require('goog.array');
  14. goog.require('goog.testing.jsunit');
  15. goog.require('goog.testing.PropertyReplacer');
  16. goog.require('goog.userAgent');
  17. </script>
  18. </head>
  19. <body>
  20. <script>
  21. var documentMode;
  22. goog.userAgent.getDocumentMode_ = function() {
  23. return documentMode;
  24. };
  25. var propertyReplacer = new goog.testing.PropertyReplacer();
  26. var UserAgents = {
  27. GECKO: 'GECKO',
  28. IE: 'IE',
  29. OPERA: 'OPERA',
  30. WEBKIT: 'WEBKIT'
  31. };
  32. /**
  33. * Rerun the initialization code to set all of the goog.userAgent constants.
  34. */
  35. function reinitializeUserAgent() {
  36. goog.userAgent.init_();
  37. // Unfortunately we can't isolate the useragent setting in a function
  38. // we can call, because things rely on it compiling to nothing when
  39. // one of the ASSUME flags is set, and the compiler isn't smart enough
  40. // to do that when the setting is done inside a function that's inlined.
  41. goog.userAgent.OPERA = goog.userAgent.detectedOpera_;
  42. goog.userAgent.IE = goog.userAgent.detectedIe_;
  43. goog.userAgent.GECKO = goog.userAgent.detectedGecko_;
  44. goog.userAgent.WEBKIT = goog.userAgent.detectedWebkit_;
  45. goog.userAgent.MOBILE = goog.userAgent.detectedMobile_;
  46. goog.userAgent.SAFARI = goog.userAgent.WEBKIT;
  47. goog.userAgent.PLATFORM = goog.userAgent.determinePlatform_();
  48. goog.userAgent.initPlatform_();
  49. goog.userAgent.VERSION = goog.userAgent.determineVersion_();
  50. }
  51. function tearDown() {
  52. documentMode = undefined;
  53. propertyReplacer.reset();
  54. }
  55. /**
  56. * Test browser detection for a user agent configuration.
  57. * @param {Array.<number>} expectedAgents Array of expected userAgents.
  58. * @param {string} uaString User agent string.
  59. * @param {string=} opt_product Navigator product string.
  60. * @param {string=} opt_vendor Navigator vendor string.
  61. */
  62. function assertUserAgent(expectedAgents, uaString, opt_product, opt_vendor) {
  63. var mockGlobal = {
  64. 'navigator': {
  65. 'userAgent': uaString,
  66. 'product': opt_product,
  67. 'vendor': opt_vendor
  68. }
  69. };
  70. propertyReplacer.set(goog, 'global', mockGlobal);
  71. reinitializeUserAgent();
  72. for (var ua in UserAgents) {
  73. var isExpected = goog.array.contains(expectedAgents, UserAgents[ua]);
  74. assertEquals(isExpected, getUserAgentDetected_(UserAgents[ua]));
  75. }
  76. }
  77. /**
  78. * Return whether a given user agent has been detected.
  79. * @param {number} agent Value in UserAgents.
  80. * @return {boolean} Whether the user agent has been detected.
  81. */
  82. function getUserAgentDetected_(agent) {
  83. switch (agent) {
  84. case UserAgents.GECKO:
  85. return goog.userAgent.detectedGecko_;
  86. case UserAgents.IE:
  87. return goog.userAgent.detectedIe_;
  88. case UserAgents.OPERA:
  89. return goog.userAgent.detectedOpera_;
  90. case UserAgents.WEBKIT:
  91. return goog.userAgent.detectedWebkit_;
  92. }
  93. return null;
  94. }
  95. function testOperaInit() {
  96. propertyReplacer.set(goog.userAgent, 'getUserAgentString', function() {
  97. return 'Opera/9.20 (Windows NT 5.1; U; de),gzip(gfe)';
  98. });
  99. goog.global['opera'] = {
  100. version: function() {
  101. return '9.20';
  102. }
  103. };
  104. reinitializeUserAgent();
  105. assertTrue(goog.userAgent.detectedOpera_);
  106. assertEquals('9.20', goog.userAgent.VERSION);
  107. // What if 'opera' global has been overwritten?
  108. // We must degrade gracefully (rather than throwing JS errors).
  109. goog.global['opera'] = 'bobloblaw';
  110. reinitializeUserAgent();
  111. assertUndefined(goog.userAgent.VERSION);
  112. }
  113. function testCompare() {
  114. assertTrue('exact equality broken',
  115. goog.userAgent.compare('1.0', '1.0') == 0);
  116. assertTrue('mutlidot equality broken',
  117. goog.userAgent.compare('1.0.0.0', '1.0') == 0);
  118. assertTrue('less than broken',
  119. goog.userAgent.compare('1.0.2.1', '1.1') < 0);
  120. assertTrue('greater than broken',
  121. goog.userAgent.compare('1.1', '1.0.2.1') > 0);
  122. assertTrue('b broken', goog.userAgent.compare('1.1', '1.1b') > 0);
  123. assertTrue('b broken', goog.userAgent.compare('1.1b', '1.1') < 0);
  124. assertTrue('b broken', goog.userAgent.compare('1.1b', '1.1b') == 0);
  125. assertTrue('b>a broken', goog.userAgent.compare('1.1b', '1.1a') > 0);
  126. assertTrue('a<b broken', goog.userAgent.compare('1.1a', '1.1b') < 0);
  127. }
  128. function testGecko() {
  129. assertGecko('Mozilla/5.0 (Windows; U; Windows NT 5.1; nl-NL; rv:1.7.5)' +
  130. 'Gecko/20041202 Gecko/1.0', '1.7.5');
  131. assertGecko('Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.7.6)' +
  132. 'Gecko/20050512 Gecko', '1.7.6');
  133. assertGecko('Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7.8)' +
  134. 'Gecko/20050609 Gecko/1.0.4', '1.7.8');
  135. assertGecko('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.9)' +
  136. 'Gecko/20050711 Gecko/1.0.5', '1.7.9');
  137. assertGecko('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.10)' +
  138. 'Gecko/20050716 Gecko/1.0.6', '1.7.10');
  139. assertGecko('Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-GB;' +
  140. 'rv:1.7.10) Gecko/20050717 Gecko/1.0.6', '1.7.10');
  141. assertGecko('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12)' +
  142. 'Gecko/20050915 Gecko/1.0.7', '1.7.12');
  143. assertGecko('Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US;' +
  144. 'rv:1.7.12) Gecko/20050915 Gecko/1.0.7', '1.7.12');
  145. assertGecko('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b4)' +
  146. 'Gecko/20050908 Gecko/1.4', '1.8b4');
  147. assertGecko('Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8)' +
  148. 'Gecko/20051107 Gecko/1.5', '1.8');
  149. assertGecko('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.0.1)' +
  150. 'Gecko/20060111 Gecko/1.5.0.1', '1.8.0.1');
  151. assertGecko('Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.0.1)' +
  152. 'Gecko/20060111 Gecko/1.5.0.1', '1.8.0.1');
  153. assertGecko('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.2)' +
  154. 'Gecko/20060308 Gecko/1.5.0.2', '1.8.0.2');
  155. assertGecko('Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US;' +
  156. 'rv:1.8.0.3) Gecko/20060426 Gecko/1.5.0.3', '1.8.0.3');
  157. assertGecko('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.3)' +
  158. 'Gecko/20060426 Gecko/1.5.0.3', '1.8.0.3');
  159. assertGecko('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.4)' +
  160. 'Gecko/20060508 Gecko/1.5.0.4', '1.8.0.4');
  161. assertGecko('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4)' +
  162. 'Gecko/20060508 Gecko/1.5.0.4', '1.8.0.4');
  163. assertGecko('Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.0.4)' +
  164. 'Gecko/20060508 Gecko/1.5.0.4', '1.8.0.4');
  165. assertGecko('Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.0.6)' +
  166. 'Gecko/20060728 Gecko/1.5.0.6', '1.8.0.6');
  167. assertGecko('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.6)' +
  168. 'Gecko/20060808 Fedora/1.5.0.6-2.fc5 Gecko/1.5.0.6 pango-text',
  169. '1.8.0.6');
  170. assertGecko('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8)' +
  171. 'Gecko/20060321 Gecko/2.0a1', '1.8');
  172. assertGecko('Mozilla/5.0 (X11; Linux i686; rv:6.0) Gecko/6.0 Firefox/6.0',
  173. '6.0');
  174. }
  175. function testIe() {
  176. assertIe('Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)', '5.01');
  177. assertIe('Mozilla/4.0 (compatible; MSIE 5.17; Mac_PowerPC)', '5.17');
  178. assertIe('Mozilla/4.0 (compatible; MSIE 5.23; Mac_PowerPC)', '5.23');
  179. assertIe('Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)', '5.5');
  180. assertIe('Mozilla/4.0 (compatible; MSIE 6.0; MSN 2.5; Windows 98)', '6.0');
  181. assertIe('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)', '6.0');
  182. assertIe('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; ' +
  183. '.NET CLR 1.1.4322)', '6.0');
  184. assertIe('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; ' +
  185. '.NET CLR 2.0.50727)', '6.0');
  186. assertIe('Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1)', '7.0b');
  187. assertIe('Mozilla/4.0 (compatible; MSIE 7.0b; Win32)', '7.0b');
  188. assertIe('Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)', '7.0b');
  189. assertIe('Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1;' +
  190. 'Arcor 5.005; .NET CLR 1.0.3705; .NET CLR 1.1.4322)', '7.0');
  191. }
  192. function testIeDocumentModeOverride() {
  193. documentMode = 9;
  194. assertIe('Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0',
  195. '9');
  196. assertIe('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0',
  197. '9');
  198. documentMode = 8;
  199. assertIe('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0',
  200. '8.0');
  201. }
  202. function testDocumentModeInStandardsMode() {
  203. reinitializeUserAgent();
  204. var expectedMode = goog.userAgent.IE ? parseInt(goog.userAgent.VERSION) :
  205. undefined;
  206. assertEquals(expectedMode, goog.userAgent.DOCUMENT_MODE);
  207. }
  208. function testOpera() {
  209. var assertOpera = function(uaString) {
  210. assertUserAgent([UserAgents.OPERA], uaString);
  211. };
  212. var assertIe = function(uaString) {
  213. assertUserAgent([UserAgents.IE], uaString);
  214. };
  215. assertOpera('Opera/7.23 (Windows 98; U) [en]');
  216. assertOpera('Opera/8.00 (Windows NT 5.1; U; en)');
  217. assertOpera('Opera/8.0 (X11; Linux i686; U; cs)');
  218. assertOpera('Opera/8.02 (Windows NT 5.1; U; en)');
  219. assertOpera('Opera/8.50 (Windows NT 5.1; U; en)');
  220. assertOpera('Opera/8.5 (X11; Linux i686; U; cs)');
  221. assertOpera('Opera/8.51 (Windows NT 5.1; U; en)');
  222. assertOpera('Opera/9.0 (Windows NT 5.0; U; en)');
  223. assertOpera('Opera/9.00 (Macintosh; PPC Mac OS X; U; en)');
  224. assertOpera('Opera/9.00 (Windows NT 5.1; U; en)');
  225. assertOpera('Opera/9.00 (Windows NT 5.2; U; en)');
  226. assertOpera('Opera/9.00 (Windows NT 6.0; U; en)');
  227. // Test Opera spoofing as IE. Currently detected as IE.
  228. assertIe('Mozilla/4.0 (compatible; MSIE 5.0; Windows 2000) Opera 6.03' +
  229. '[en]');
  230. assertIe('Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC) Opera 6.0' +
  231. '[en]');
  232. assertIe('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera' +
  233. '8.50');
  234. assertIe('Mozilla/4.0 (compatible; MSIE 6.0; Symbian OS; Nokia' +
  235. '6630/4.03.38; 6937) Opera 8.50 [es]');
  236. }
  237. function testUnknownBrowser() {
  238. assertUserAgent([], 'MyWebBrowser');
  239. assertUserAgent([], undefined);
  240. }
  241. function testNoNavigator() {
  242. // global object has no "navigator" property.
  243. var mockGlobal = {};
  244. propertyReplacer.set(goog, 'global', mockGlobal);
  245. reinitializeUserAgent();
  246. assertEquals('Platform should be the empty string', '',
  247. goog.userAgent.PLATFORM);
  248. assertEquals('Version should be the empty string', '',
  249. goog.userAgent.VERSION);
  250. }
  251. function assertIe(uaString, expectedVersion) {
  252. assertUserAgent([UserAgents.IE], uaString);
  253. assertEquals('User agent ' + uaString + ' should have had version ' +
  254. expectedVersion + ' but had ' + goog.userAgent.VERSION,
  255. expectedVersion,
  256. goog.userAgent.VERSION);
  257. }
  258. function assertGecko(uaString, expectedVersion) {
  259. assertUserAgent([UserAgents.GECKO], uaString, 'Gecko');
  260. assertEquals('User agent ' + uaString + ' should have had version ' +
  261. expectedVersion + ' but had ' + goog.userAgent.VERSION,
  262. expectedVersion,
  263. goog.userAgent.VERSION);
  264. }
  265. </script>
  266. </body>
  267. </html>