You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

VBrowserDetailsUserAgentParserTest.java 29KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741
  1. package com.vaadin.client;
  2. import static org.junit.Assert.assertEquals;
  3. import static org.junit.Assert.assertFalse;
  4. import static org.junit.Assert.assertTrue;
  5. import org.junit.Test;
  6. import com.vaadin.shared.VBrowserDetails;
  7. public class VBrowserDetailsUserAgentParserTest {
  8. private static final String FIREFOX30_WINDOWS = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6";
  9. private static final String FIREFOX30_LINUX = "Mozilla/5.0 (X11; U; Linux x86_64; es-ES; rv:1.9.0.12) Gecko/2009070811 Ubuntu/9.04 (jaunty) Firefox/3.0.12";
  10. private static final String FIREFOX33_ANDROID = "Mozilla/5.0 (Android; Tablet; rv:33.0) Gecko/33.0 Firefox/33.0";
  11. private static final String FIREFOX57_ANDROID = "Mozilla/5.0 (Android 8.1.0; Mobile; rv:57.0) Gecko/57.0 Firefox/57.0";
  12. private static final String FIREFOX35_WINDOWS = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 (.NET CLR 3.5.30729) FirePHP/0.4";
  13. private static final String FIREFOX36_WINDOWS = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)";
  14. private static final String FIREFOX36B_MAC = "UAString mozilla/5.0 (macintosh; u; intel mac os x 10.6; en-us; rv:1.9.2) gecko/20100115 firefox/3.6";
  15. private static final String FIREFOX_30B5_MAC = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9b5) Gecko/2008032619 Firefox/3.0b5";
  16. private static final String FIREFOX_40B7_WIN = "Mozilla/5.0 (Windows NT 5.1; rv:2.0b7) Gecko/20100101 Firefox/4.0b7";
  17. private static final String FIREFOX_40B11_WIN = "Mozilla/5.0 (Windows NT 5.1; rv:2.0b11) Gecko/20100101 Firefox/4.0b11";
  18. private static final String FIREFOX_SUPPORTED = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:45.0) Gecko/20100101 Firefox/45.0";
  19. private static final String KONQUEROR_LINUX = "Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Exabot-Thumbnails)";
  20. private static final String IE11_WINDOWS_7 = "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; rv:11.0) like Gecko";
  21. private static final String IE11_WINDOWS_7_COMPATIBILITY_VIEW_IE7 = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)";
  22. private static final String IE11_WINDOWS_10_COMPATIBILITY_VIEW_IE7 = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E)";
  23. private static final String IE11_INITIAL_WINDOWS_10_COMPATIBILITY_VIEW_IE7 = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/8.0; .NET4.0C; .NET4.0E)";
  24. private static final String IE11_WINDOWS_PHONE_8_1_UPDATE = "Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920) Like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537";
  25. // "Version/" was added in 10.00
  26. private static final String OPERA964_WINDOWS = "Opera/9.64(Windows NT 5.1; U; en) Presto/2.1.1";
  27. private static final String OPERA1010_WINDOWS = "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.10";
  28. private static final String OPERA1050_WINDOWS = "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.5.22 Version/10.50";
  29. private static final String CHROME3_MAC = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.198 Safari/532.0";
  30. private static final String CHROME4_WINDOWS = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.89 Safari/532.5";
  31. private static final String SAFARI3_WINDOWS = "Mozilla/5.0 (Windows; U; Windows NT 5.1; cs-CZ) AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 Safari/525.29";
  32. private static final String SAFARI4_MAC = "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; en-us) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7";
  33. private static final String IPHONE_IOS_5_1 = "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3";
  34. private static final String IPHONE_IOS_4_0 = "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";
  35. private static final String IPAD_IOS_4_3_1 = "Mozilla/5.0 (iPad; U; CPU OS 4_3_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8G4 Safari/6533.18.5";
  36. private static final String IPHONE_IOS9_1_FIREFOX = "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) FxiOS/8.3b5826 Mobile/13B143 Safari/601.1.46";
  37. private static final String IPHONE_IOS9_1_SAFARI = "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1";
  38. private static final String IPHONE_IOS9_1_CHROME = "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/63.0.3239.73 Mobile/13B143 Safari/601.1.46";
  39. // application on the home screen, without Safari in user agent
  40. private static final String IPHONE_IOS_6_1_HOMESCREEN_SIMULATOR = "Mozilla/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B141";
  41. private static final String ANDROID_HTC_2_1 = "Mozilla/5.0 (Linux; U; Android 2.1-update1; en-us; ADR6300 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17";
  42. private static final String ANDROID_GOOGLE_NEXUS_2_2 = "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";
  43. private static final String ANDROID_MOTOROLA_3_0 = "Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13";
  44. private static final String ANDROID_GALAXY_NEXUS_4_0_4_CHROME = "Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19";
  45. private static final String EDGE_WINDOWS_10 = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240";
  46. private static final String PHANTOMJS_211_MAC = "Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1";
  47. private static final String CHROME_57_ON_IOS_10_3_1 = "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/57.0.2987.137 Mobile/14E304 Safari/602.1";
  48. private static final String CHROME_40_ON_CHROMEOS = "Mozilla/5.0 (X11; CrOS x86_64 6457.31.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.38 Safari/537.36";
  49. @Test
  50. public void testSafari3() {
  51. VBrowserDetails bd = new VBrowserDetails(SAFARI3_WINDOWS);
  52. assertWebKit(bd);
  53. assertSafari(bd);
  54. assertBrowserMajorVersion(bd, 3);
  55. assertBrowserMinorVersion(bd, 2);
  56. assertBrowserVersion(bd, "3.2.3");
  57. assertEngineVersion(bd, 525.0f);
  58. assertWindows(bd);
  59. }
  60. @Test
  61. public void testSafari4() {
  62. VBrowserDetails bd = new VBrowserDetails(SAFARI4_MAC);
  63. assertWebKit(bd);
  64. assertSafari(bd);
  65. assertBrowserMajorVersion(bd, 4);
  66. assertBrowserMinorVersion(bd, 0);
  67. assertBrowserVersion(bd, "4.0.5");
  68. assertEngineVersion(bd, 531f);
  69. assertMacOSX(bd);
  70. }
  71. @Test
  72. public void testIPhoneIOS6Homescreen() {
  73. VBrowserDetails bd = new VBrowserDetails(
  74. IPHONE_IOS_6_1_HOMESCREEN_SIMULATOR);
  75. assertWebKit(bd);
  76. // not identified as Safari, no browser version available
  77. // assertSafari(bd);
  78. // assertBrowserMajorVersion(bd, 6);
  79. // assertBrowserMinorVersion(bd, 1);
  80. assertEngineVersion(bd, 536f);
  81. assertIOS(bd, 6, 1);
  82. assertIPhone(bd);
  83. }
  84. @Test
  85. public void testIPhoneIOS5() {
  86. VBrowserDetails bd = new VBrowserDetails(IPHONE_IOS_5_1);
  87. assertWebKit(bd);
  88. assertSafari(bd);
  89. assertBrowserMajorVersion(bd, 5);
  90. assertBrowserMinorVersion(bd, 1);
  91. assertBrowserVersion(bd, "5.1");
  92. assertEngineVersion(bd, 534f);
  93. assertIOS(bd, 5, 1);
  94. assertIPhone(bd);
  95. }
  96. @Test
  97. public void testIPhoneIOS4() {
  98. VBrowserDetails bd = new VBrowserDetails(IPHONE_IOS_4_0);
  99. assertWebKit(bd);
  100. assertSafari(bd);
  101. assertBrowserMajorVersion(bd, 4);
  102. assertBrowserMinorVersion(bd, 0);
  103. assertBrowserVersion(bd, "4.0.5");
  104. assertEngineVersion(bd, 532f);
  105. assertIOS(bd, 4, 0);
  106. assertIPhone(bd);
  107. }
  108. @Test
  109. public void testIPadIOS4() {
  110. VBrowserDetails bd = new VBrowserDetails(IPAD_IOS_4_3_1);
  111. assertWebKit(bd);
  112. assertSafari(bd);
  113. assertBrowserMajorVersion(bd, 5);
  114. assertBrowserMinorVersion(bd, 0);
  115. assertEngineVersion(bd, 533f);
  116. assertIOS(bd, 4, 3);
  117. assertIPad(bd);
  118. }
  119. @Test
  120. public void testAndroid21() {
  121. VBrowserDetails bd = new VBrowserDetails(ANDROID_HTC_2_1);
  122. assertWebKit(bd);
  123. assertSafari(bd);
  124. assertBrowserMajorVersion(bd, 4);
  125. assertBrowserMinorVersion(bd, 0);
  126. assertBrowserVersion(bd, "4.0");
  127. assertEngineVersion(bd, 530f);
  128. assertAndroid(bd, 2, 1);
  129. }
  130. @Test
  131. public void testAndroid22() {
  132. VBrowserDetails bd = new VBrowserDetails(ANDROID_GOOGLE_NEXUS_2_2);
  133. assertWebKit(bd);
  134. assertSafari(bd);
  135. assertBrowserMajorVersion(bd, 4);
  136. assertBrowserMinorVersion(bd, 0);
  137. assertBrowserVersion(bd, "4.0");
  138. assertEngineVersion(bd, 533f);
  139. assertAndroid(bd, 2, 2);
  140. }
  141. @Test
  142. public void testAndroid30() {
  143. VBrowserDetails bd = new VBrowserDetails(ANDROID_MOTOROLA_3_0);
  144. assertWebKit(bd);
  145. assertSafari(bd);
  146. assertBrowserMajorVersion(bd, 4);
  147. assertBrowserMinorVersion(bd, 0);
  148. assertBrowserVersion(bd, "4.0");
  149. assertEngineVersion(bd, 534f);
  150. assertAndroid(bd, 3, 0);
  151. }
  152. @Test
  153. public void testAndroid40Chrome() {
  154. VBrowserDetails bd = new VBrowserDetails(
  155. ANDROID_GALAXY_NEXUS_4_0_4_CHROME);
  156. assertWebKit(bd);
  157. assertChrome(bd);
  158. assertBrowserMajorVersion(bd, 18);
  159. assertBrowserMinorVersion(bd, 0);
  160. assertBrowserVersion(bd, "18.0.1025.133");
  161. assertEngineVersion(bd, 535f);
  162. assertAndroid(bd, 4, 0);
  163. }
  164. private void assertOSMajorVersion(VBrowserDetails bd, int i) {
  165. assertEquals(i, bd.getOperatingSystemMajorVersion());
  166. }
  167. private void assertOSMinorVersion(VBrowserDetails bd, int i) {
  168. assertEquals(i, bd.getOperatingSystemMinorVersion());
  169. }
  170. @Test
  171. public void testChrome3() {
  172. VBrowserDetails bd = new VBrowserDetails(CHROME3_MAC);
  173. assertWebKit(bd);
  174. assertChrome(bd);
  175. assertBrowserMajorVersion(bd, 3);
  176. assertBrowserMinorVersion(bd, 0);
  177. assertBrowserVersion(bd, "3.0.198");
  178. assertEngineVersion(bd, 532.0f);
  179. assertMacOSX(bd);
  180. }
  181. @Test
  182. public void testChrome4() {
  183. VBrowserDetails bd = new VBrowserDetails(CHROME4_WINDOWS);
  184. assertWebKit(bd);
  185. assertChrome(bd);
  186. assertBrowserMajorVersion(bd, 4);
  187. assertBrowserMinorVersion(bd, 0);
  188. assertBrowserVersion(bd, "4.0.249.89");
  189. assertEngineVersion(bd, 532f);
  190. assertWindows(bd);
  191. }
  192. @Test
  193. public void testChromeChromeOS() {
  194. VBrowserDetails bd = new VBrowserDetails(CHROME_40_ON_CHROMEOS);
  195. assertWebKit(bd);
  196. assertChrome(bd);
  197. assertBrowserMajorVersion(bd, 40);
  198. assertBrowserMinorVersion(bd, 0);
  199. assertBrowserVersion(bd, "40.0.2214.38");
  200. assertEngineVersion(bd, 537f);
  201. assertChromeOS(bd);
  202. }
  203. @Test
  204. public void testChromeIOS() {
  205. VBrowserDetails bd = new VBrowserDetails(CHROME_57_ON_IOS_10_3_1);
  206. assertWebKit(bd);
  207. assertChrome(bd);
  208. assertBrowserMajorVersion(bd, 57);
  209. assertBrowserMinorVersion(bd, 0);
  210. assertBrowserVersion(bd, "57.0.2987.137");
  211. assertEngineVersion(bd, 602f);
  212. assertIOS(bd, 10, 3);
  213. }
  214. @Test
  215. public void testFirefox3() {
  216. VBrowserDetails bd = new VBrowserDetails(FIREFOX30_WINDOWS);
  217. assertGecko(bd);
  218. assertFirefox(bd);
  219. assertBrowserMajorVersion(bd, 3);
  220. assertBrowserMinorVersion(bd, 0);
  221. assertBrowserVersion(bd, "3.0.6");
  222. assertEngineVersion(bd, 1.9f);
  223. assertWindows(bd);
  224. bd = new VBrowserDetails(FIREFOX30_LINUX);
  225. assertGecko(bd);
  226. assertFirefox(bd);
  227. assertBrowserMajorVersion(bd, 3);
  228. assertBrowserMinorVersion(bd, 0);
  229. assertBrowserVersion(bd, "3.0.12");
  230. assertEngineVersion(bd, 1.9f);
  231. assertLinux(bd);
  232. }
  233. @Test
  234. public void testFirefox33Android() {
  235. VBrowserDetails bd = new VBrowserDetails(FIREFOX33_ANDROID);
  236. assertGecko(bd);
  237. assertFirefox(bd);
  238. assertBrowserMajorVersion(bd, 33);
  239. assertBrowserMinorVersion(bd, 0);
  240. assertBrowserVersion(bd, "33.0");
  241. assertAndroid(bd, -1, -1);
  242. }
  243. @Test
  244. public void testFirefox57Android() {
  245. VBrowserDetails bd = new VBrowserDetails(FIREFOX57_ANDROID);
  246. assertGecko(bd);
  247. assertFirefox(bd);
  248. assertBrowserMajorVersion(bd, 57);
  249. assertBrowserMinorVersion(bd, 0);
  250. assertAndroid(bd, 8, 1);
  251. }
  252. @Test
  253. public void testFirefox35() {
  254. VBrowserDetails bd = new VBrowserDetails(FIREFOX35_WINDOWS);
  255. assertGecko(bd);
  256. assertFirefox(bd);
  257. assertBrowserMajorVersion(bd, 3);
  258. assertBrowserMinorVersion(bd, 5);
  259. assertBrowserVersion(bd, "3.5.8");
  260. assertEngineVersion(bd, 1.9f);
  261. assertWindows(bd);
  262. }
  263. @Test
  264. public void testFirefox36() {
  265. VBrowserDetails bd = new VBrowserDetails(FIREFOX36_WINDOWS);
  266. assertGecko(bd);
  267. assertFirefox(bd);
  268. assertBrowserMajorVersion(bd, 3);
  269. assertBrowserMinorVersion(bd, 6);
  270. assertBrowserVersion(bd, "3.6");
  271. assertEngineVersion(bd, 1.9f);
  272. assertWindows(bd);
  273. }
  274. @Test
  275. public void testFirefox30b5() {
  276. VBrowserDetails bd = new VBrowserDetails(FIREFOX_30B5_MAC);
  277. assertGecko(bd);
  278. assertFirefox(bd);
  279. assertBrowserMajorVersion(bd, 3);
  280. assertBrowserMinorVersion(bd, 0);
  281. assertBrowserVersion(bd, "3.0b5");
  282. assertEngineVersion(bd, 1.9f);
  283. assertMacOSX(bd);
  284. }
  285. @Test
  286. public void testFirefox40b11() {
  287. VBrowserDetails bd = new VBrowserDetails(FIREFOX_40B11_WIN);
  288. assertGecko(bd);
  289. assertFirefox(bd);
  290. assertBrowserMajorVersion(bd, 4);
  291. assertBrowserMinorVersion(bd, 0);
  292. assertBrowserVersion(bd, "4.0b11");
  293. assertEngineVersion(bd, 2.0f);
  294. assertWindows(bd);
  295. }
  296. @Test
  297. public void testFirefox40b7() {
  298. VBrowserDetails bd = new VBrowserDetails(FIREFOX_40B7_WIN);
  299. assertGecko(bd);
  300. assertFirefox(bd);
  301. assertBrowserMajorVersion(bd, 4);
  302. assertBrowserMinorVersion(bd, 0);
  303. assertBrowserVersion(bd, "4.0b7");
  304. assertEngineVersion(bd, 2.0f);
  305. assertWindows(bd);
  306. }
  307. @Test
  308. public void testKonquerorLinux() {
  309. // Just ensure detection does not crash
  310. VBrowserDetails bd = new VBrowserDetails(KONQUEROR_LINUX);
  311. assertLinux(bd);
  312. }
  313. @Test
  314. public void testFirefox36b() {
  315. VBrowserDetails bd = new VBrowserDetails(FIREFOX36B_MAC);
  316. assertGecko(bd);
  317. assertFirefox(bd);
  318. assertBrowserMajorVersion(bd, 3);
  319. assertBrowserMinorVersion(bd, 6);
  320. assertBrowserVersion(bd, "3.6");
  321. assertEngineVersion(bd, 1.9f);
  322. assertMacOSX(bd);
  323. }
  324. @Test
  325. public void testOpera964() {
  326. VBrowserDetails bd = new VBrowserDetails(OPERA964_WINDOWS);
  327. assertPresto(bd);
  328. assertOpera(bd);
  329. assertBrowserMajorVersion(bd, 9);
  330. assertBrowserMinorVersion(bd, 64);
  331. assertBrowserVersion(bd, "9.64");
  332. assertWindows(bd);
  333. }
  334. @Test
  335. public void testOpera1010() {
  336. VBrowserDetails bd = new VBrowserDetails(OPERA1010_WINDOWS);
  337. assertPresto(bd);
  338. assertOpera(bd);
  339. assertBrowserMajorVersion(bd, 10);
  340. assertBrowserMinorVersion(bd, 10);
  341. assertBrowserVersion(bd, "10.10");
  342. assertWindows(bd);
  343. }
  344. @Test
  345. public void testOpera1050() {
  346. VBrowserDetails bd = new VBrowserDetails(OPERA1050_WINDOWS);
  347. assertPresto(bd);
  348. assertOpera(bd);
  349. assertBrowserMajorVersion(bd, 10);
  350. assertBrowserMinorVersion(bd, 50);
  351. assertBrowserVersion(bd, "10.50");
  352. assertWindows(bd);
  353. }
  354. @Test
  355. public void testIE11() {
  356. VBrowserDetails bd = new VBrowserDetails(IE11_WINDOWS_7);
  357. assertTrident(bd);
  358. assertEngineVersion(bd, 7);
  359. assertIE(bd);
  360. assertBrowserMajorVersion(bd, 11);
  361. assertBrowserMinorVersion(bd, 0);
  362. assertBrowserVersion(bd, "11.0");
  363. assertWindows(bd);
  364. }
  365. @Test
  366. public void testIE11Windows7CompatibilityViewIE7() {
  367. VBrowserDetails bd = new VBrowserDetails(
  368. IE11_WINDOWS_7_COMPATIBILITY_VIEW_IE7);
  369. assertTrident(bd);
  370. assertEngineVersion(bd, 7);
  371. assertIE(bd);
  372. assertBrowserMajorVersion(bd, 11);
  373. assertBrowserMinorVersion(bd, 0);
  374. assertBrowserVersion(bd, "11.0");
  375. assertWindows(bd);
  376. }
  377. @Test
  378. public void testIE11Windows10CompatibilityViewIE7() {
  379. VBrowserDetails bd = new VBrowserDetails(
  380. IE11_WINDOWS_10_COMPATIBILITY_VIEW_IE7);
  381. assertTrident(bd);
  382. assertEngineVersion(bd, 7);
  383. assertIE(bd);
  384. assertBrowserMajorVersion(bd, 11);
  385. assertBrowserMinorVersion(bd, 0);
  386. assertBrowserVersion(bd, "11.0");
  387. assertWindows(bd);
  388. }
  389. @Test
  390. public void testIE11InitialWindows10CompatibilityViewIE7() {
  391. VBrowserDetails bd = new VBrowserDetails(
  392. IE11_INITIAL_WINDOWS_10_COMPATIBILITY_VIEW_IE7);
  393. assertTrident(bd);
  394. assertEngineVersion(bd, 7);
  395. assertIE(bd);
  396. assertBrowserMajorVersion(bd, 11);
  397. assertBrowserMinorVersion(bd, 0);
  398. assertBrowserVersion(bd, "11.0");
  399. assertWindows(bd);
  400. }
  401. @Test
  402. public void testIE11WindowsPhone81Update() {
  403. VBrowserDetails bd = new VBrowserDetails(IE11_WINDOWS_PHONE_8_1_UPDATE);
  404. assertTrident(bd);
  405. assertEngineVersion(bd, 7);
  406. assertIE(bd);
  407. assertBrowserMajorVersion(bd, 11);
  408. assertBrowserMinorVersion(bd, 0);
  409. assertBrowserVersion(bd, "11.0");
  410. assertWindows(bd, true);
  411. }
  412. @Test
  413. public void testEdgeWindows10() {
  414. VBrowserDetails bd = new VBrowserDetails(EDGE_WINDOWS_10);
  415. assertEdge(bd);
  416. assertBrowserMajorVersion(bd, 12);
  417. assertBrowserMinorVersion(bd, 10240);
  418. assertBrowserVersion(bd, "12.10240");
  419. assertWindows(bd, false);
  420. }
  421. @Test
  422. public void testPhantomJs211() {
  423. VBrowserDetails bd = new VBrowserDetails(PHANTOMJS_211_MAC);
  424. assertPhantomJS(bd);
  425. assertWebKit(bd);
  426. assertBrowserMajorVersion(bd, 2);
  427. assertBrowserMinorVersion(bd, 1);
  428. assertBrowserVersion(bd, "2.1.1");
  429. assertMacOSX(bd);
  430. }
  431. @Test
  432. public void checkFFsupportedVersions() {
  433. VBrowserDetails details = new VBrowserDetails(FIREFOX_40B11_WIN);
  434. assertTrue(details.isTooOldToFunctionProperly());
  435. details = new VBrowserDetails(FIREFOX_SUPPORTED);
  436. assertFalse(details.isTooOldToFunctionProperly());
  437. }
  438. @Test
  439. public void testFirefoxIos() {
  440. VBrowserDetails details = new VBrowserDetails(IPHONE_IOS9_1_FIREFOX);
  441. assertFirefox(details);
  442. assertBrowserMajorVersion(details, 8);
  443. assertBrowserMinorVersion(details, 3);
  444. assertBrowserVersion(details, "8.3b5826");
  445. assertWebKit(details);
  446. assertEngineVersion(details, 601);
  447. }
  448. @Test
  449. public void testSafariIos() {
  450. VBrowserDetails details = new VBrowserDetails(IPHONE_IOS9_1_SAFARI);
  451. assertSafari(details);
  452. assertBrowserMajorVersion(details, 9);
  453. assertBrowserMinorVersion(details, 0);
  454. assertBrowserVersion(details, "9.0");
  455. assertWebKit(details);
  456. assertEngineVersion(details, 601);
  457. }
  458. @Test
  459. public void testChromeIos() {
  460. VBrowserDetails details = new VBrowserDetails(IPHONE_IOS9_1_CHROME);
  461. assertChrome(details);
  462. assertBrowserMajorVersion(details, 63);
  463. assertBrowserMinorVersion(details, 0);
  464. assertBrowserVersion(details, "63.0.3239.73");
  465. assertWebKit(details);
  466. assertEngineVersion(details, 601);
  467. }
  468. /*
  469. * Helper methods below
  470. */
  471. private void assertEngineVersion(VBrowserDetails browserDetails,
  472. float version) {
  473. assertEquals(version, browserDetails.getBrowserEngineVersion(), 0.01d);
  474. }
  475. private void assertBrowserMajorVersion(VBrowserDetails browserDetails,
  476. int version) {
  477. assertEquals(version, browserDetails.getBrowserMajorVersion());
  478. }
  479. private void assertBrowserMinorVersion(VBrowserDetails browserDetails,
  480. int version) {
  481. assertEquals(version, browserDetails.getBrowserMinorVersion());
  482. }
  483. private void assertBrowserVersion(VBrowserDetails browserDetails,
  484. String version) {
  485. assertEquals(version, browserDetails.getBrowserVersion());
  486. }
  487. private void assertGecko(VBrowserDetails browserDetails) {
  488. // Engine
  489. assertTrue(browserDetails.isGecko());
  490. assertFalse(browserDetails.isWebKit());
  491. assertFalse(browserDetails.isPresto());
  492. assertFalse(browserDetails.isTrident());
  493. }
  494. private void assertPresto(VBrowserDetails browserDetails) {
  495. // Engine
  496. assertFalse(browserDetails.isGecko());
  497. assertFalse(browserDetails.isWebKit());
  498. assertTrue(browserDetails.isPresto());
  499. assertFalse(browserDetails.isTrident());
  500. }
  501. private void assertTrident(VBrowserDetails browserDetails) {
  502. // Engine
  503. assertFalse(browserDetails.isGecko());
  504. assertFalse(browserDetails.isWebKit());
  505. assertFalse(browserDetails.isPresto());
  506. assertTrue(browserDetails.isTrident());
  507. }
  508. private void assertWebKit(VBrowserDetails browserDetails) {
  509. // Engine
  510. assertFalse(browserDetails.isGecko());
  511. assertTrue(browserDetails.isWebKit());
  512. assertFalse(browserDetails.isPresto());
  513. assertFalse(browserDetails.isTrident());
  514. }
  515. private void assertPhantomJS(VBrowserDetails browserDetails) {
  516. // Browser
  517. assertFalse(browserDetails.isFirefox());
  518. assertFalse(browserDetails.isChrome());
  519. assertFalse(browserDetails.isIE());
  520. assertFalse(browserDetails.isOpera());
  521. assertFalse(browserDetails.isSafari());
  522. assertFalse(browserDetails.isEdge());
  523. assertTrue(browserDetails.isPhantomJS());
  524. }
  525. private void assertFirefox(VBrowserDetails browserDetails) {
  526. // Browser
  527. assertTrue(browserDetails.isFirefox());
  528. assertFalse(browserDetails.isChrome());
  529. assertFalse(browserDetails.isIE());
  530. assertFalse(browserDetails.isOpera());
  531. assertFalse(browserDetails.isSafari());
  532. assertFalse(browserDetails.isEdge());
  533. assertFalse(browserDetails.isPhantomJS());
  534. }
  535. private void assertChrome(VBrowserDetails browserDetails) {
  536. // Browser
  537. assertFalse(browserDetails.isFirefox());
  538. assertTrue(browserDetails.isChrome());
  539. assertFalse(browserDetails.isIE());
  540. assertFalse(browserDetails.isOpera());
  541. assertFalse(browserDetails.isSafari());
  542. assertFalse(browserDetails.isEdge());
  543. assertFalse(browserDetails.isPhantomJS());
  544. }
  545. private void assertIE(VBrowserDetails browserDetails) {
  546. // Browser
  547. assertFalse(browserDetails.isFirefox());
  548. assertFalse(browserDetails.isChrome());
  549. assertTrue(browserDetails.isIE());
  550. assertFalse(browserDetails.isOpera());
  551. assertFalse(browserDetails.isSafari());
  552. assertFalse(browserDetails.isEdge());
  553. assertFalse(browserDetails.isPhantomJS());
  554. }
  555. private void assertOpera(VBrowserDetails browserDetails) {
  556. // Browser
  557. assertFalse(browserDetails.isFirefox());
  558. assertFalse(browserDetails.isChrome());
  559. assertFalse(browserDetails.isIE());
  560. assertTrue(browserDetails.isOpera());
  561. assertFalse(browserDetails.isSafari());
  562. assertFalse(browserDetails.isEdge());
  563. assertFalse(browserDetails.isPhantomJS());
  564. }
  565. private void assertSafari(VBrowserDetails browserDetails) {
  566. // Browser
  567. assertFalse(browserDetails.isFirefox());
  568. assertFalse(browserDetails.isChrome());
  569. assertFalse(browserDetails.isIE());
  570. assertFalse(browserDetails.isOpera());
  571. assertTrue(browserDetails.isSafari());
  572. assertFalse(browserDetails.isEdge());
  573. assertFalse(browserDetails.isPhantomJS());
  574. }
  575. private void assertEdge(VBrowserDetails browserDetails) {
  576. // Browser
  577. assertFalse(browserDetails.isFirefox());
  578. assertFalse(browserDetails.isChrome());
  579. assertFalse(browserDetails.isIE());
  580. assertFalse(browserDetails.isOpera());
  581. assertFalse(browserDetails.isSafari());
  582. assertTrue(browserDetails.isEdge());
  583. assertFalse(browserDetails.isPhantomJS());
  584. }
  585. private void assertMacOSX(VBrowserDetails browserDetails) {
  586. assertFalse(browserDetails.isLinux());
  587. assertFalse(browserDetails.isWindows());
  588. assertTrue(browserDetails.isMacOSX());
  589. assertFalse(browserDetails.isAndroid());
  590. assertFalse(browserDetails.isChromeOS());
  591. }
  592. private void assertAndroid(VBrowserDetails browserDetails, int majorVersion,
  593. int minorVersion) {
  594. assertFalse(browserDetails.isLinux());
  595. assertFalse(browserDetails.isWindows());
  596. assertFalse(browserDetails.isMacOSX());
  597. assertFalse(browserDetails.isIOS());
  598. assertTrue(browserDetails.isAndroid());
  599. assertFalse(browserDetails.isChromeOS());
  600. assertOSMajorVersion(browserDetails, majorVersion);
  601. assertOSMinorVersion(browserDetails, minorVersion);
  602. }
  603. private void assertIOS(VBrowserDetails browserDetails, int majorVersion,
  604. int minorVersion) {
  605. assertFalse(browserDetails.isLinux());
  606. assertFalse(browserDetails.isWindows());
  607. assertFalse(browserDetails.isMacOSX());
  608. assertTrue(browserDetails.isIOS());
  609. assertFalse(browserDetails.isAndroid());
  610. assertFalse(browserDetails.isChromeOS());
  611. assertOSMajorVersion(browserDetails, majorVersion);
  612. assertOSMinorVersion(browserDetails, minorVersion);
  613. }
  614. private void assertIPhone(VBrowserDetails browserDetails) {
  615. assertTrue(browserDetails.isIPhone());
  616. assertFalse(browserDetails.isIPad());
  617. }
  618. private void assertIPad(VBrowserDetails browserDetails) {
  619. assertFalse(browserDetails.isIPhone());
  620. assertTrue(browserDetails.isIPad());
  621. }
  622. private void assertWindows(VBrowserDetails browserDetails) {
  623. assertWindows(browserDetails, false);
  624. }
  625. private void assertWindows(VBrowserDetails browserDetails,
  626. boolean isWindowsPhone) {
  627. assertFalse(browserDetails.isLinux());
  628. assertTrue(browserDetails.isWindows());
  629. assertFalse(browserDetails.isMacOSX());
  630. assertFalse(browserDetails.isIOS());
  631. assertFalse(browserDetails.isAndroid());
  632. assertFalse(browserDetails.isChromeOS());
  633. assertEquals(isWindowsPhone, browserDetails.isWindowsPhone());
  634. }
  635. private void assertLinux(VBrowserDetails browserDetails) {
  636. assertTrue(browserDetails.isLinux());
  637. assertFalse(browserDetails.isWindows());
  638. assertFalse(browserDetails.isMacOSX());
  639. assertFalse(browserDetails.isIOS());
  640. assertFalse(browserDetails.isAndroid());
  641. assertFalse(browserDetails.isChromeOS());
  642. }
  643. private void assertChromeOS(VBrowserDetails browserDetails) {
  644. assertFalse(browserDetails.isLinux());
  645. assertFalse(browserDetails.isWindows());
  646. assertFalse(browserDetails.isMacOSX());
  647. assertFalse(browserDetails.isIOS());
  648. assertFalse(browserDetails.isAndroid());
  649. assertTrue(browserDetails.isChromeOS());
  650. }
  651. }