browser 2.5.2 → 5.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. checksums.yaml +5 -5
  2. data/.github/ISSUE_TEMPLATE.md +1 -1
  3. data/.github/workflows/tests.yml +57 -0
  4. data/.gitignore +1 -0
  5. data/.prettierignore +1 -0
  6. data/.rubocop.yml +22 -107
  7. data/CHANGELOG.md +192 -11
  8. data/FUNDING.yml +3 -0
  9. data/Gemfile +2 -0
  10. data/README.md +139 -89
  11. data/Rakefile +11 -3
  12. data/bot_exceptions.yml +2 -0
  13. data/bots.yml +302 -247
  14. data/browser.gemspec +12 -7
  15. data/gemfiles/rails6_0.gemfile +6 -0
  16. data/gemfiles/rails6_1.gemfile +6 -0
  17. data/lib/browser/accept_language.rb +12 -9
  18. data/lib/browser/action_controller.rb +1 -3
  19. data/lib/browser/aliases.rb +5 -5
  20. data/lib/browser/alipay.rb +2 -2
  21. data/lib/browser/base.rb +101 -19
  22. data/lib/browser/blackberry.rb +3 -3
  23. data/lib/browser/bot/empty_user_agent_matcher.rb +11 -0
  24. data/lib/browser/bot/keyword_matcher.rb +11 -0
  25. data/lib/browser/bot/known_bots_matcher.rb +11 -0
  26. data/lib/browser/bot.rb +39 -27
  27. data/lib/browser/browser.rb +65 -54
  28. data/lib/browser/chrome.rb +18 -5
  29. data/lib/browser/detect_version.rb +5 -5
  30. data/lib/browser/device/android.rb +20 -0
  31. data/lib/browser/device/blackberry_playbook.rb +1 -1
  32. data/lib/browser/device/ipad.rb +1 -1
  33. data/lib/browser/device/iphone.rb +1 -1
  34. data/lib/browser/device/ipod_touch.rb +1 -1
  35. data/lib/browser/device/kindle.rb +1 -1
  36. data/lib/browser/device/kindle_fire.rb +1 -1
  37. data/lib/browser/device/playstation3.rb +1 -1
  38. data/lib/browser/device/playstation4.rb +1 -1
  39. data/lib/browser/device/psp.rb +1 -1
  40. data/lib/browser/device/psvita.rb +1 -1
  41. data/lib/browser/device/samsung.rb +33 -0
  42. data/lib/browser/device/surface.rb +2 -4
  43. data/lib/browser/device/switch.rb +19 -0
  44. data/lib/browser/device/tv.rb +1 -1
  45. data/lib/browser/device/unknown.rb +1 -1
  46. data/lib/browser/device/wii.rb +1 -1
  47. data/lib/browser/device/wiiu.rb +1 -1
  48. data/lib/browser/device/xbox_360.rb +1 -1
  49. data/lib/browser/device/xbox_one.rb +1 -1
  50. data/lib/browser/device.rb +47 -30
  51. data/lib/browser/duck_duck_go.rb +22 -0
  52. data/lib/browser/edge.rb +6 -2
  53. data/lib/browser/electron.rb +2 -2
  54. data/lib/browser/facebook.rb +4 -2
  55. data/lib/browser/firefox.rb +2 -2
  56. data/lib/browser/google_search_app.rb +21 -0
  57. data/lib/browser/huawei_browser.rb +21 -0
  58. data/lib/browser/instagram.rb +21 -0
  59. data/lib/browser/internet_explorer.rb +9 -10
  60. data/lib/browser/maxthon.rb +21 -0
  61. data/lib/browser/meta/base.rb +0 -1
  62. data/lib/browser/meta/generic_browser.rb +1 -3
  63. data/lib/browser/meta.rb +12 -13
  64. data/lib/browser/micro_messenger.rb +2 -2
  65. data/lib/browser/middleware/context/additions.rb +1 -1
  66. data/lib/browser/middleware.rb +4 -3
  67. data/lib/browser/miui_browser.rb +21 -0
  68. data/lib/browser/nokia.rb +2 -2
  69. data/lib/browser/opera.rb +2 -2
  70. data/lib/browser/otter.rb +2 -2
  71. data/lib/browser/phantom_js.rb +2 -2
  72. data/lib/browser/platform/adobe_air.rb +2 -2
  73. data/lib/browser/platform/android.rb +1 -1
  74. data/lib/browser/platform/base.rb +3 -2
  75. data/lib/browser/platform/blackberry.rb +2 -2
  76. data/lib/browser/platform/chrome_os.rb +1 -1
  77. data/lib/browser/platform/firefox_os.rb +1 -1
  78. data/lib/browser/platform/ios.rb +17 -4
  79. data/lib/browser/platform/kai_os.rb +23 -0
  80. data/lib/browser/platform/linux.rb +1 -1
  81. data/lib/browser/platform/mac.rb +5 -3
  82. data/lib/browser/platform/{other.rb → unknown.rb} +3 -3
  83. data/lib/browser/platform/windows.rb +2 -2
  84. data/lib/browser/platform/windows_mobile.rb +1 -1
  85. data/lib/browser/platform/windows_phone.rb +1 -1
  86. data/lib/browser/platform.rb +37 -28
  87. data/lib/browser/qq.rb +5 -5
  88. data/lib/browser/rails.rb +11 -5
  89. data/lib/browser/safari.rb +19 -4
  90. data/lib/browser/samsung_browser.rb +21 -0
  91. data/lib/browser/snapchat.rb +21 -0
  92. data/lib/browser/sougou_browser.rb +24 -0
  93. data/lib/browser/sputnik.rb +21 -0
  94. data/lib/browser/uc_browser.rb +2 -2
  95. data/lib/browser/{generic.rb → unknown.rb} +6 -8
  96. data/lib/browser/version.rb +1 -1
  97. data/lib/browser/weibo.rb +2 -2
  98. data/lib/browser/yandex.rb +21 -0
  99. data/lib/browser.rb +2 -2
  100. data/samsung.yml +138 -0
  101. data/search_engines.yml +2 -2
  102. data/test/browser_test.rb +42 -10
  103. data/test/rails_test.rb +10 -0
  104. data/test/sample_app.rb +14 -0
  105. data/test/test_helper.rb +9 -1
  106. data/test/ua.yml +147 -109
  107. data/test/ua_bots.yml +98 -45
  108. data/test/ua_search_engines.yml +7 -6
  109. data/test/unit/accept_language_test.rb +24 -0
  110. data/test/unit/adobe_air_test.rb +1 -1
  111. data/test/unit/alipay_test.rb +6 -0
  112. data/test/unit/blackberry_test.rb +0 -6
  113. data/test/unit/bots_test.rb +37 -27
  114. data/test/unit/chrome_test.rb +8 -19
  115. data/test/unit/console_test.rb +2 -2
  116. data/test/unit/device_test.rb +60 -3
  117. data/test/unit/duck_duck_go_test.rb +37 -0
  118. data/test/unit/edge_test.rb +49 -5
  119. data/test/unit/facebook_test.rb +20 -0
  120. data/test/unit/firefox_test.rb +0 -3
  121. data/test/unit/google_search_app_test.rb +54 -0
  122. data/test/unit/huawei_browser_test.rb +25 -0
  123. data/test/unit/instagram_test.rb +30 -0
  124. data/test/unit/internet_explorer_test.rb +0 -12
  125. data/test/unit/ios_test.rb +7 -5
  126. data/test/unit/kai_os_test.rb +31 -0
  127. data/test/unit/kindle_test.rb +0 -2
  128. data/test/unit/maxthon_test.rb +25 -0
  129. data/test/unit/meta_test.rb +10 -2
  130. data/test/unit/micro_messenger_test.rb +21 -6
  131. data/test/unit/miui_browser_test.rb +25 -0
  132. data/test/unit/opera_test.rb +1 -2
  133. data/test/unit/platform_test.rb +34 -8
  134. data/test/unit/qq_test.rb +12 -0
  135. data/test/unit/safari_test.rb +12 -7
  136. data/test/unit/samsung_browser_test.rb +23 -0
  137. data/test/unit/snapchat_test.rb +40 -0
  138. data/test/unit/sougou_browser_test.rb +41 -0
  139. data/test/unit/sputnik_test.rb +22 -0
  140. data/test/unit/yandex_test.rb +37 -0
  141. metadata +83 -26
  142. data/.bundle/config +0 -2
  143. data/.travis.yml +0 -16
  144. data/bin/rake +0 -17
  145. data/gemfiles/rails4.gemfile +0 -4
  146. data/lib/browser/meta/modern.rb +0 -11
@@ -9,7 +9,6 @@ class IeTest < Minitest::Test
9
9
  assert_equal "Internet Explorer", browser.name
10
10
  assert browser.ie?
11
11
  assert browser.ie?(6)
12
- refute browser.modern?
13
12
  assert_equal "6.0", browser.full_version
14
13
  assert_equal "6", browser.version
15
14
  end
@@ -20,7 +19,6 @@ class IeTest < Minitest::Test
20
19
  assert_equal "Internet Explorer", browser.name
21
20
  assert browser.ie?
22
21
  assert browser.ie?(7)
23
- refute browser.modern?
24
22
  assert_equal "7.0", browser.full_version
25
23
  assert_equal "7", browser.version
26
24
  end
@@ -31,7 +29,6 @@ class IeTest < Minitest::Test
31
29
  assert_equal "Internet Explorer", browser.name
32
30
  assert browser.ie?
33
31
  assert browser.ie?(8)
34
- refute browser.modern?
35
32
  refute browser.compatibility_view?
36
33
  assert_equal "8.0", browser.full_version
37
34
  assert_equal "8", browser.version
@@ -43,7 +40,6 @@ class IeTest < Minitest::Test
43
40
  assert_equal "Internet Explorer", browser.name
44
41
  assert browser.ie?
45
42
  assert browser.ie?(8)
46
- refute browser.modern?
47
43
  assert browser.compatibility_view?
48
44
  assert_equal "8.0", browser.full_version
49
45
  assert_equal "8", browser.version
@@ -57,7 +53,6 @@ class IeTest < Minitest::Test
57
53
  assert_equal "Internet Explorer", browser.name
58
54
  assert browser.ie?
59
55
  assert browser.ie?(9)
60
- assert browser.modern?
61
56
  refute browser.compatibility_view?
62
57
  assert_equal "9.0", browser.full_version
63
58
  assert_equal "9", browser.version
@@ -69,7 +64,6 @@ class IeTest < Minitest::Test
69
64
  assert_equal "Internet Explorer", browser.name
70
65
  assert browser.ie?
71
66
  assert browser.ie?(9)
72
- refute browser.modern?
73
67
  assert browser.compatibility_view?
74
68
  assert_equal "9.0", browser.full_version
75
69
  assert_equal "9", browser.version
@@ -83,7 +77,6 @@ class IeTest < Minitest::Test
83
77
  assert_equal "Internet Explorer", browser.name
84
78
  assert browser.ie?
85
79
  assert browser.ie?(10)
86
- assert browser.modern?
87
80
  refute browser.compatibility_view?
88
81
  assert_equal "10.0", browser.full_version
89
82
  assert_equal "10", browser.version
@@ -95,7 +88,6 @@ class IeTest < Minitest::Test
95
88
  assert_equal "Internet Explorer", browser.name
96
89
  assert browser.ie?
97
90
  assert browser.ie?(10)
98
- refute browser.modern?
99
91
  assert browser.compatibility_view?
100
92
  assert_equal "10.0", browser.full_version
101
93
  assert_equal "10", browser.version
@@ -109,7 +101,6 @@ class IeTest < Minitest::Test
109
101
  assert_equal "Internet Explorer", browser.name
110
102
  assert browser.ie?
111
103
  assert browser.ie?(11)
112
- assert browser.modern?
113
104
  refute browser.compatibility_view?
114
105
  assert_equal "11.0", browser.full_version
115
106
  assert_equal "11", browser.version
@@ -121,7 +112,6 @@ class IeTest < Minitest::Test
121
112
  assert_equal "Internet Explorer", browser.name
122
113
  assert browser.ie?
123
114
  assert browser.ie?(11)
124
- refute browser.modern?
125
115
  assert browser.compatibility_view?
126
116
  assert_equal "11.0", browser.full_version
127
117
  assert_equal "11", browser.version
@@ -145,7 +135,6 @@ class IeTest < Minitest::Test
145
135
  assert_equal "Internet Explorer", browser.name
146
136
  assert browser.ie?
147
137
  assert browser.ie?(11)
148
- assert browser.modern?
149
138
  refute browser.compatibility_view?
150
139
  refute browser.platform.windows_rt?
151
140
  assert browser.platform.windows_touchscreen_desktop?
@@ -166,7 +155,6 @@ class IeTest < Minitest::Test
166
155
  refute browser.platform.windows10?
167
156
  refute browser.platform.windows_phone?
168
157
  refute browser.edge?
169
- refute browser.modern?
170
158
  refute browser.device.mobile?
171
159
  refute browser.webkit?
172
160
  refute browser.chrome?
@@ -9,7 +9,6 @@ class IosTest < Minitest::Test
9
9
  assert_equal "Safari", browser.name
10
10
  assert browser.safari?
11
11
  assert browser.webkit?
12
- assert browser.modern?
13
12
  assert browser.platform.ios?
14
13
  refute browser.platform.mac?
15
14
  assert_equal "3.0", browser.full_version
@@ -22,7 +21,6 @@ class IosTest < Minitest::Test
22
21
  assert_equal "Safari", browser.name
23
22
  assert browser.safari?
24
23
  assert browser.webkit?
25
- assert browser.modern?
26
24
  assert_equal "5.0.1", browser.full_version
27
25
  assert_equal "5", browser.version
28
26
  end
@@ -56,7 +54,6 @@ class IosTest < Minitest::Test
56
54
  assert_equal "Safari", browser.name
57
55
  assert browser.safari?
58
56
  assert browser.webkit?
59
- assert browser.modern?
60
57
  assert browser.platform.ios?
61
58
  refute browser.platform.mac?
62
59
  assert_equal "4.0.4", browser.full_version
@@ -105,6 +102,13 @@ class IosTest < Minitest::Test
105
102
  refute browser.platform.mac?
106
103
  end
107
104
 
105
+ test "detects ios12" do
106
+ browser = Browser.new(Browser["IOS12"])
107
+ assert browser.platform.ios?
108
+ assert browser.platform.ios?(12)
109
+ refute browser.platform.mac?
110
+ end
111
+
108
112
  test "don't detect as two different versions" do
109
113
  browser = Browser.new(Browser["IOS8"])
110
114
  assert browser.platform.ios?(8)
@@ -119,7 +123,6 @@ class IosTest < Minitest::Test
119
123
  assert meta.include?("ios")
120
124
  assert meta.include?("safari")
121
125
  assert meta.include?("safari3")
122
- assert meta.include?("modern")
123
126
  assert meta.include?("mobile")
124
127
  refute meta.include?("tablet")
125
128
  end
@@ -131,7 +134,6 @@ class IosTest < Minitest::Test
131
134
  assert meta.include?("webkit")
132
135
  assert meta.include?("ios")
133
136
  assert meta.include?("safari")
134
- assert meta.include?("modern")
135
137
  assert meta.include?("tablet")
136
138
  refute meta.include?("mobile")
137
139
  end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class KaiOSTest < Minitest::Test
6
+ test "detects KaiOS" do
7
+ browser = Browser.new(Browser["NOKIA_8110"])
8
+
9
+ assert browser.firefox?
10
+ assert_equal "48", browser.version
11
+ assert_equal "48.0", browser.full_version
12
+ assert_equal "Firefox", browser.name
13
+ assert browser.platform.kai_os?
14
+ assert_equal "KaiOS", browser.platform.name
15
+ assert_equal "2.5", browser.platform.version
16
+ refute browser.platform.android?
17
+ end
18
+
19
+ test "detects KaiOS with Android string in user-agent " do
20
+ browser = Browser.new(Browser["JIOPHONE_2"])
21
+
22
+ assert browser.firefox?
23
+ assert_equal "48", browser.version
24
+ assert_equal "48.0", browser.full_version
25
+ assert_equal "Firefox", browser.name
26
+ assert browser.platform.kai_os?
27
+ assert_equal "KaiOS", browser.platform.name
28
+ assert_equal "2.5", browser.platform.version
29
+ refute browser.platform.android?
30
+ end
31
+ end
@@ -17,13 +17,11 @@ class KindleTest < Minitest::Test
17
17
  browser = Browser.new(Browser["KINDLE_FIRE_HD"])
18
18
 
19
19
  assert browser.webkit?
20
- assert browser.modern?
21
20
  end
22
21
 
23
22
  test "detects kindle fire hd mobile" do
24
23
  browser = Browser.new(Browser["KINDLE_FIRE_HD_MOBILE"])
25
24
 
26
25
  assert browser.webkit?
27
- assert browser.modern?
28
26
  end
29
27
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class MaxthonTest < Minitest::Test
6
+ test "detects Maxthon" do
7
+ browser = Browser.new(Browser["MAXTHON"])
8
+ assert browser.maxthon?
9
+ refute browser.safari?
10
+ refute browser.chrome?
11
+ assert_equal "Maxthon", browser.name
12
+ assert_equal :maxthon, browser.id
13
+ end
14
+
15
+ test "detects correct version" do
16
+ browser = Browser.new(Browser["MAXTHON"])
17
+ assert_equal "5.3.8.2000", browser.full_version
18
+ assert_equal "5", browser.version
19
+ end
20
+
21
+ test "detects version by range" do
22
+ browser = Browser.new(Browser["MAXTHON"])
23
+ assert browser.maxthon?(%w[>=5 <6])
24
+ end
25
+ end
@@ -5,7 +5,7 @@ require "test_helper"
5
5
  class MetaTest < Minitest::Test
6
6
  class CustomRule < Browser::Meta::Base
7
7
  def meta
8
- "custom" if browser.ua =~ /Custom/
8
+ "custom" if /Custom/.match?(browser.ua)
9
9
  end
10
10
  end
11
11
 
@@ -36,7 +36,6 @@ class MetaTest < Minitest::Test
36
36
  assert meta.include?("chrome")
37
37
  assert meta.include?("webkit")
38
38
  assert meta.include?("mac")
39
- assert meta.include?("modern")
40
39
  end
41
40
 
42
41
  test "returns string representation for mobile" do
@@ -46,4 +45,13 @@ class MetaTest < Minitest::Test
46
45
  assert meta.include?("blackberry")
47
46
  assert meta.include?("mobile")
48
47
  end
48
+
49
+ test "returns string representation for unknown platform/device/browser" do
50
+ browser = Browser.new("Unknown")
51
+ meta = browser.to_s
52
+
53
+ assert meta.include?("unknown_platform")
54
+ assert meta.include?("unknown_device")
55
+ assert meta.include?("unknown_browser")
56
+ end
49
57
  end
@@ -3,18 +3,33 @@
3
3
  require "test_helper"
4
4
 
5
5
  class MicroMessengerTest < Minitest::Test
6
- test "detects micro messenger 6.3.15" do
7
- browser = Browser.new(Browser["MICRO_MESSENGER"])
6
+ test "detects micro messenger 7.0.10 on iOS" do
7
+ browser = Browser.new(Browser["MICRO_MESSENGER_IOS"])
8
8
 
9
9
  assert browser.micro_messenger?
10
10
  assert browser.wechat?
11
- assert_equal "6.3.15", browser.full_version
11
+ assert_equal "7.0.10", browser.full_version
12
12
  assert_equal "MicroMessenger", browser.name
13
13
  assert_equal :micro_messenger, browser.id
14
14
  end
15
15
 
16
- test "detects version by range" do
17
- browser = Browser.new(Browser["MICRO_MESSENGER"])
18
- assert browser.wechat?(%w[>=6 <7])
16
+ test "detects version by range on iOS" do
17
+ browser = Browser.new(Browser["MICRO_MESSENGER_IOS"])
18
+ assert browser.wechat?(%w[>=7 <8])
19
+ end
20
+
21
+ test "detects micro messenger 7.0.13.1640 on Android" do
22
+ browser = Browser.new(Browser["MICRO_MESSENGER_ANDROID"])
23
+
24
+ assert browser.micro_messenger?
25
+ assert browser.wechat?
26
+ assert_equal "7.0.13.1640", browser.full_version
27
+ assert_equal "MicroMessenger", browser.name
28
+ assert_equal :micro_messenger, browser.id
29
+ end
30
+
31
+ test "detects version by range on Android" do
32
+ browser = Browser.new(Browser["MICRO_MESSENGER_ANDROID"])
33
+ assert browser.wechat?(%w[>=7 <8])
19
34
  end
20
35
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class MiuiBrowserTest < Minitest::Test
6
+ test "detects Miui Browser" do
7
+ browser = Browser.new(Browser["MIUI_BROWSER"])
8
+ assert browser.miui_browser?
9
+ refute browser.safari?
10
+ refute browser.chrome?
11
+ assert_equal "Miui Browser", browser.name
12
+ assert_equal :miui_browser, browser.id
13
+ end
14
+
15
+ test "detects correct version" do
16
+ browser = Browser.new(Browser["MIUI_BROWSER"])
17
+ assert_equal "12.3.3", browser.full_version
18
+ assert_equal "12", browser.version
19
+ end
20
+
21
+ test "detects version by range" do
22
+ browser = Browser.new(Browser["MIUI_BROWSER"])
23
+ assert browser.miui_browser?(%w[>=12 <13])
24
+ end
25
+ end
@@ -8,7 +8,6 @@ class OperaTest < Minitest::Test
8
8
 
9
9
  assert_equal "Opera", browser.name
10
10
  assert browser.opera?
11
- refute browser.modern?
12
11
  assert_equal "11.64", browser.full_version
13
12
  assert_equal "11", browser.version
14
13
  end
@@ -20,8 +19,8 @@ class OperaTest < Minitest::Test
20
19
  assert_equal :opera, browser.id
21
20
  assert browser.opera?
22
21
  assert browser.webkit?
23
- assert browser.modern?
24
22
  refute browser.chrome?
23
+ refute browser.safari?
25
24
  assert_equal "15.0.1147.44", browser.full_version
26
25
  assert_equal "15", browser.version
27
26
  end
@@ -5,7 +5,7 @@ require "test_helper"
5
5
  class PlatformTest < Minitest::Test
6
6
  class CustomPlatform < Browser::Platform::Base
7
7
  def match?
8
- ua =~ /Custom/
8
+ ua.include?("Custom")
9
9
  end
10
10
 
11
11
  def id
@@ -20,7 +20,7 @@ class PlatformTest < Minitest::Test
20
20
 
21
21
  Browser::Platform.matchers.shift
22
22
  platform = Browser::Platform.new("Custom")
23
- assert_equal :other, platform.id
23
+ assert_equal :unknown_platform, platform.id
24
24
  end
25
25
 
26
26
  test "implements to_s" do
@@ -35,13 +35,13 @@ class PlatformTest < Minitest::Test
35
35
  refute platform == :android
36
36
  end
37
37
 
38
- test "detect other" do
39
- platform = Browser::Platform.new("Other")
38
+ test "detect unknown platforms" do
39
+ platform = Browser::Platform.new("Unknown")
40
40
 
41
- assert_equal "Other", platform.name
42
- assert_equal :other, platform.id
41
+ assert_equal "Unknown", platform.name
42
+ assert_equal :unknown_platform, platform.id
43
43
  assert_equal "0", platform.version
44
- assert platform.other?
44
+ assert platform.unknown?
45
45
  end
46
46
 
47
47
  test "detect ios (iPhone)" do
@@ -62,6 +62,27 @@ class PlatformTest < Minitest::Test
62
62
  assert_equal "9", platform.version
63
63
  end
64
64
 
65
+ test "detect specific minor iOS (iPhone)" do
66
+ platform = Browser::Platform.new(Browser["IOS8_3"])
67
+
68
+ assert_equal "iOS (iPhone)", platform.name
69
+ assert_equal :ios, platform.id
70
+ assert platform.ios?
71
+ assert platform.ios?(8.3)
72
+ assert_equal "8.3", platform.version
73
+ end
74
+
75
+ test "detect specific patch iOS (iPhone)" do
76
+ platform = Browser::Platform.new(Browser["IOS8_1_2"])
77
+
78
+ assert_equal "iOS (iPhone)", platform.name
79
+ assert_equal :ios, platform.id
80
+ assert platform.ios?
81
+ assert platform.ios?("8.1.2")
82
+ assert platform.ios?("<8.2")
83
+ assert_equal "8.1.2", platform.version
84
+ end
85
+
65
86
  test "detect ios (iPod Touch)" do
66
87
  platform = Browser::Platform.new(Browser["IPOD"])
67
88
 
@@ -83,7 +104,7 @@ class PlatformTest < Minitest::Test
83
104
  test "detect mac" do
84
105
  platform = Browser::Platform.new(Browser["SAFARI"])
85
106
 
86
- assert_equal "Macintosh", platform.name
107
+ assert_equal "Mac OS X", platform.name
87
108
  assert_equal :mac, platform.id
88
109
  assert platform.mac?
89
110
  assert_equal "10.6.4", platform.version
@@ -95,6 +116,11 @@ class PlatformTest < Minitest::Test
95
116
  assert_equal "0", platform.version
96
117
  end
97
118
 
119
+ test "detect mac names" do
120
+ assert_equal "Mac OS X", Browser::Platform.new(Browser["MAC_OSX"]).name
121
+ assert_equal "macOS", Browser::Platform.new(Browser["MAC_OS"]).name
122
+ end
123
+
98
124
  test "detect firefox os" do
99
125
  platform = Browser::Platform.new(Browser["FIREFOX_OS"])
100
126
 
data/test/unit/qq_test.rb CHANGED
@@ -9,6 +9,9 @@ class QQTest < Minitest::Test
9
9
  assert_equal "6.3.3.432", browser.full_version
10
10
  assert_equal "QQ Browser", browser.name
11
11
  assert_equal :qq, browser.id
12
+
13
+ refute browser.chrome?
14
+ refute browser.safari?
12
15
  end
13
16
 
14
17
  test "detects QQ browser for Android" do
@@ -17,6 +20,9 @@ class QQTest < Minitest::Test
17
20
  assert_equal "6.2", browser.full_version
18
21
  assert_equal "QQ Browser", browser.name
19
22
  assert_equal :qq, browser.id
23
+
24
+ refute browser.chrome?
25
+ refute browser.safari?
20
26
  end
21
27
 
22
28
  test "detects QQ browser for Mac" do
@@ -25,6 +31,9 @@ class QQTest < Minitest::Test
25
31
  assert_equal "4.2.4753.400", browser.full_version
26
32
  assert_equal "QQ Browser", browser.name
27
33
  assert_equal :qq, browser.id
34
+
35
+ refute browser.chrome?
36
+ refute browser.safari?
28
37
  end
29
38
 
30
39
  test "detects QQ browser lite for Mac" do
@@ -33,5 +42,8 @@ class QQTest < Minitest::Test
33
42
  assert_equal "1.0.4", browser.full_version
34
43
  assert_equal "QQ Browser", browser.name
35
44
  assert_equal :qq, browser.id
45
+
46
+ refute browser.chrome?
47
+ refute browser.safari?
36
48
  end
37
49
  end
@@ -7,7 +7,7 @@ class SafariTest < Minitest::Test
7
7
  browser = Browser.new(Browser["SAFARI3"])
8
8
 
9
9
  assert browser.safari?
10
- assert browser.safari?(3)
10
+ assert browser.safari?("~>3.0")
11
11
  assert_equal "3", browser.version
12
12
  assert_equal "3.0.3", browser.full_version
13
13
  end
@@ -16,7 +16,7 @@ class SafariTest < Minitest::Test
16
16
  browser = Browser.new(Browser["SAFARI4"])
17
17
 
18
18
  assert browser.safari?
19
- assert browser.safari?(4)
19
+ assert browser.safari?("~>4.0")
20
20
  assert_equal "4", browser.version
21
21
  assert_equal "4.0.3", browser.full_version
22
22
  end
@@ -25,7 +25,7 @@ class SafariTest < Minitest::Test
25
25
  browser = Browser.new(Browser["SAFARI5"])
26
26
 
27
27
  assert browser.safari?
28
- assert browser.safari?(5)
28
+ assert browser.safari?("~>5.0")
29
29
  assert_equal "5", browser.version
30
30
  assert_equal "5.0.3", browser.full_version
31
31
  end
@@ -34,7 +34,7 @@ class SafariTest < Minitest::Test
34
34
  browser = Browser.new(Browser["SAFARI6"])
35
35
 
36
36
  assert browser.safari?
37
- assert browser.safari?(6)
37
+ assert browser.safari?("~>6.0")
38
38
  assert_equal "6", browser.version
39
39
  assert_equal "6.0", browser.full_version
40
40
  end
@@ -43,7 +43,7 @@ class SafariTest < Minitest::Test
43
43
  browser = Browser.new(Browser["SAFARI7"])
44
44
 
45
45
  assert browser.safari?
46
- assert browser.safari?(7)
46
+ assert browser.safari?("~>7.0")
47
47
  assert_equal "7", browser.version
48
48
  assert_equal "7.0", browser.full_version
49
49
  end
@@ -52,7 +52,7 @@ class SafariTest < Minitest::Test
52
52
  browser = Browser.new(Browser["SAFARI8"])
53
53
 
54
54
  assert browser.safari?
55
- assert browser.safari?(8)
55
+ assert browser.safari?("~>8.0")
56
56
  assert_equal "8", browser.version
57
57
  assert_equal "8.0", browser.full_version
58
58
  end
@@ -61,7 +61,7 @@ class SafariTest < Minitest::Test
61
61
  browser = Browser.new(Browser["SAFARI9"])
62
62
 
63
63
  assert browser.safari?
64
- assert browser.safari?(9)
64
+ assert browser.safari?("~>9.0")
65
65
  assert_equal "9", browser.version
66
66
  assert_equal "9.0.2", browser.full_version
67
67
  end
@@ -88,4 +88,9 @@ class SafariTest < Minitest::Test
88
88
  browser = Browser.new(Browser["SAFARI9"])
89
89
  assert browser.webkit?(%w[>=601 <602])
90
90
  end
91
+
92
+ test "detects safari version by range" do
93
+ browser = Browser.new(Browser["SAFARI9"])
94
+ assert browser.safari?(%w[>=9.0 <10])
95
+ end
91
96
  end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class SamsungBrowserTest < Minitest::Test
6
+ test "detects samsung browser" do
7
+ browser = Browser.new(Browser["SAMSUNG_BROWSER"])
8
+
9
+ assert browser.webkit?
10
+ assert browser.samsung_browser?
11
+ assert_equal "11", browser.version
12
+ assert_equal :samsung_browser, browser.id
13
+ assert_equal "11.1", browser.full_version
14
+ assert_equal "Samsung Browser", browser.name
15
+ refute browser.chrome?
16
+ refute browser.safari?
17
+ end
18
+
19
+ test "detects version by range" do
20
+ browser = Browser.new(Browser["SAMSUNG_BROWSER"])
21
+ assert browser.samsung_browser?(%w[>=11 <12])
22
+ end
23
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class SnapchatTest < Minitest::Test
6
+ test "detects snapchat" do
7
+ browser = Browser.new(Browser["SNAPCHAT"])
8
+
9
+ assert_equal "Snapchat", browser.name
10
+ assert browser.snapchat?
11
+ assert :snapchat, browser.id
12
+ assert_equal "10.69.5.72", browser.full_version
13
+ assert_equal "10", browser.version
14
+ end
15
+
16
+ test "detects snapchat for badly formatted user agent" do
17
+ browser = Browser.new(Browser["SNAPCHAT_EMPTY_STRING_VERSION"])
18
+
19
+ assert_equal "Snapchat", browser.name
20
+ assert browser.snapchat?
21
+ assert :snapchat, browser.id
22
+ assert_equal "10.70.0.0", browser.full_version
23
+ assert_equal "10", browser.version
24
+ end
25
+
26
+ test "detects alternate snapchat user agent" do
27
+ browser = Browser.new(Browser["SNAPCHAT_SPACE_VERSION"])
28
+
29
+ assert_equal "Snapchat", browser.name
30
+ assert browser.snapchat?
31
+ assert :snapchat, browser.id
32
+ assert_equal "10.70.0.0", browser.full_version
33
+ assert_equal "10", browser.version
34
+ end
35
+
36
+ test "detects version by range" do
37
+ browser = Browser.new(Browser["SNAPCHAT"])
38
+ assert browser.snapchat?(%w[>=10])
39
+ end
40
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class SougouBrowserTest < Minitest::Test
6
+ test "detects Sougou Browser on desktop device" do
7
+ browser = Browser.new(Browser["SOUGOU_BROWSER"])
8
+ assert browser.sougou_browser?
9
+ refute browser.safari?
10
+ refute browser.chrome?
11
+ assert_equal "Sougou Browser", browser.name
12
+ assert_equal :sougou_browser, browser.id
13
+ end
14
+
15
+ test "detects correct version on desktop device" do
16
+ browser = Browser.new(Browser["SOUGOU_BROWSER"])
17
+ assert_equal "0.0", browser.full_version
18
+ assert_equal "0", browser.version
19
+ end
20
+
21
+ test "detects Sougou Browser on mobile device" do
22
+ browser = Browser.new(Browser["SOUGOU_BROWSER_MOBILE"])
23
+ assert browser.sougou_browser?
24
+ assert browser.device.mobile?
25
+ refute browser.safari?
26
+ refute browser.chrome?
27
+ assert_equal "Sougou Browser", browser.name
28
+ assert_equal :sougou_browser, browser.id
29
+ end
30
+
31
+ test "detects correct version on mobile device" do
32
+ browser = Browser.new(Browser["SOUGOU_BROWSER_MOBILE"])
33
+ assert_equal "5.28.12", browser.full_version
34
+ assert_equal "5", browser.version
35
+ end
36
+
37
+ test "detects version by range on mobile device" do
38
+ browser = Browser.new(Browser["SOUGOU_BROWSER_MOBILE"])
39
+ assert browser.sougou_browser?(%w[>=5 <6])
40
+ end
41
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class SputnikTest < Minitest::Test
6
+ test "detects sputnik" do
7
+ browser = Browser.new(Browser["SPUTNIK"])
8
+
9
+ assert_equal "Sputnik", browser.name
10
+ assert_equal :sputnik, browser.id
11
+ assert browser.sputnik?
12
+ refute browser.chrome?
13
+ refute browser.safari?
14
+ assert_equal "4.1.2801.0", browser.full_version
15
+ assert_equal "4", browser.version
16
+ end
17
+
18
+ test "detects version by range" do
19
+ browser = Browser.new(Browser["SPUTNIK"])
20
+ assert browser.sputnik?(%w[>=4 <5])
21
+ end
22
+ end