browser 0.1.6 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,20 @@
1
+ class Browser
2
+ class Middleware
3
+ class Context
4
+ attr_reader :browser, :request
5
+
6
+ def initialize(request)
7
+ @request = request
8
+
9
+ @browser = Browser.new(
10
+ ua: request.user_agent,
11
+ accept_language: request.env["HTTP_ACCEPT_LANGUAGE"]
12
+ )
13
+ end
14
+
15
+ def redirect_to(path)
16
+ throw :redirected, path.to_s
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,16 @@
1
+ require "browser/middleware/context/url_methods"
2
+
3
+ class Browser
4
+ class Middleware
5
+ class Context
6
+ module Additions
7
+ extend ActiveSupport::Concern
8
+
9
+ included do
10
+ include Rails.application.routes.url_helpers
11
+ include UrlMethods
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ class Browser
2
+ class Middleware
3
+ class Context
4
+ module UrlMethods
5
+ def default_url_options
6
+ Rails.configuration.browser.default_url_options ||
7
+ Rails.configuration.action_mailer.default_url_options ||
8
+ {}
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ require "rails/railtie"
2
+ require "browser/action_controller"
3
+ require "browser/middleware/context/additions"
4
+
5
+ class Browser
6
+ class Railtie < Rails::Railtie
7
+ config.browser = ActiveSupport::OrderedOptions.new
8
+
9
+ initializer "browser" do
10
+ ::ActionController::Base.send :include, Browser::ActionController
11
+ Browser::Middleware::Context.send :include, Browser::Middleware::Context::Additions
12
+ end
13
+ end
14
+ end
@@ -1,8 +1,8 @@
1
1
  class Browser
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 1
5
- PATCH = 6
4
+ MINOR = 2
5
+ PATCH = 0
6
6
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
7
  end
8
8
  end
data/test/browser_test.rb CHANGED
@@ -2,33 +2,43 @@
2
2
  require "test_helper"
3
3
 
4
4
  class BrowserTest < Test::Unit::TestCase
5
- IPHONE = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/1A542a Safari/419.3"
6
- IPOD = "Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A100a Safari/419.3"
7
- IPAD = "Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10"
8
- SAFARI = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us) AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8"
9
- IE6 = "Mozilla/5.0 (Windows; U; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)"
10
- IE7 = "Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)"
11
- IE8 = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.2; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)"
12
- IE8_COMPAT = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0; SLCC1; Media Center PC 5.0; .NET CLR 3.5.21022)"
13
- IE9 = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
14
- IE9_COMPAT = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)"
15
- OPERA = "Opera/9.80 (Macintosh; Intel Mac OS X 10.7.4; U; en) Presto/2.10.229 Version/11.64"
16
- FIREFOX = "Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.8"
17
- CHROME = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4"
18
- MOBILE_CHROME = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3"
19
- ANDROID = "Android SDK 1.5r3: Mozilla/5.0 (Linux; U; Android 1.5; de-; sdk Build/CUPCAKE) AppleWebkit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1"
20
- TABLOID = "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"
21
- BLACKBERRY = "BlackBerry7100i/4.1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/103"
22
- PSP = "Mozilla/4.0 (PSP (PlayStation Portable); 2.00)"
23
- QUICKTIME = "QuickTime/7.6.8 (qtver=7.6.8;os=Windows NT 5.1Service Pack 3)"
24
- COREMEDIA = "Apple Mac OS X v10.6.4 CoreMedia v1.0.0.10F569"
25
- XOOM = "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"
26
- NEXUS_TABLET = "Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19"
27
- OPERA_MINI = "Opera/9.80 (Android; Opera Mini/7.029952/28.2359;u; fr) Presto/2.8.119 Version/11.10"
28
- OPERA_MOBI = "Opera/9.8 (Android 2.3.5; Linux; Opera Mobi/ADR-1205181138; U; en) Presto/2.10.254 Version/12.00"
29
- WINDOWS_PHONE = "Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; DELL; Venue Pro)"
30
- KINDLE = "Mozilla/5.0 (Linux; U; en-US) AppleWebKit/528.5+ (KHTML, like Gecko, Safari/528.5+) Version/4.0 Kindle/3.0 (screen 600×800; rotate)"
31
- KINDLE_FIRE = "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"
5
+ IPHONE = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/1A542a Safari/419.3"
6
+ IPOD = "Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A100a Safari/419.3"
7
+ IPAD = "Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10"
8
+ SAFARI = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us) AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8"
9
+ IE6 = "Mozilla/5.0 (Windows; U; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)"
10
+ IE7 = "Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)"
11
+ IE8 = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.2; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)"
12
+ IE8_COMPAT = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0; SLCC1; Media Center PC 5.0; .NET CLR 3.5.21022)"
13
+ IE9 = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
14
+ IE9_COMPAT = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)"
15
+ IE10 = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; EIE10;ENUSMSN)"
16
+ IE10_COMPAT = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; EIE10;ENUSMSN)"
17
+ OPERA = "Opera/9.80 (Macintosh; Intel Mac OS X 10.7.4; U; en) Presto/2.10.229 Version/11.64"
18
+ OPERA_NEXT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.37 Safari/537.36 OPR/15.0.1147.44 (Edition Next)"
19
+ FIREFOX = "Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.8"
20
+ FIREFOX_MODERN = "Mozilla/5.0 (X11; Ubuntu; Linux armv7l; rv:17.0) Gecko/20100101 Firefox/17.0"
21
+ CHROME = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4"
22
+ MOBILE_CHROME = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3"
23
+ ANDROID = "Android SDK 1.5r3: Mozilla/5.0 (Linux; U; Android 1.5; de-; sdk Build/CUPCAKE) AppleWebkit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1"
24
+ TABLOID = "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"
25
+ BLACKBERRY = "BlackBerry7100i/4.1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/103"
26
+ PSP = "Mozilla/4.0 (PSP (PlayStation Portable); 2.00)"
27
+ QUICKTIME = "QuickTime/7.6.8 (qtver=7.6.8;os=Windows NT 5.1Service Pack 3)"
28
+ COREMEDIA = "Apple Mac OS X v10.6.4 CoreMedia v1.0.0.10F569"
29
+ XOOM = "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"
30
+ NEXUS_TABLET = "Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19"
31
+ NOOK = "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; NOOK BNTV250A Build/GINGERBREAD 1.4.3) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Safari/533.1"
32
+ SAMSUNG = "Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SAMSUNG-SGH-I497 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30"
33
+ OPERA_MINI = "Opera/9.80 (Android; Opera Mini/7.029952/28.2359;u; fr) Presto/2.8.119 Version/11.10"
34
+ OPERA_MOBI = "Opera/9.8 (Android 2.3.5; Linux; Opera Mobi/ADR-1205181138; U; en) Presto/2.10.254 Version/12.00"
35
+ WINDOWS_PHONE = "Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; DELL; Venue Pro)"
36
+ KINDLE = "Mozilla/5.0 (Linux; U; en-US) AppleWebKit/528.5+ (KHTML, like Gecko, Safari/528.5+) Version/4.0 Kindle/3.0 (screen 600×800; rotate)"
37
+ KINDLE_FIRE = "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"
38
+ PHANTOM_JS = "Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.0 Safari/534.34"
39
+ IOS4 = "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"
40
+ IOS5 = "Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3"
41
+ IOS6 = "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25"
32
42
 
33
43
  def setup
34
44
  @browser = Browser.new
@@ -74,9 +84,9 @@ class BrowserTest < Test::Unit::TestCase
74
84
  assert @browser.safari?
75
85
  assert @browser.webkit?
76
86
  assert @browser.mobile?
77
- assert @browser.capable?
87
+ assert @browser.modern?
78
88
  assert @browser.ios?
79
- assert @browser.tablet? == false
89
+ assert ! @browser.tablet?
80
90
  assert_equal "3.0", @browser.full_version
81
91
  assert_equal "3", @browser.version
82
92
  end
@@ -87,7 +97,7 @@ class BrowserTest < Test::Unit::TestCase
87
97
  assert_equal "Safari", @browser.name
88
98
  assert @browser.safari?
89
99
  assert @browser.webkit?
90
- assert @browser.capable?
100
+ assert @browser.modern?
91
101
  assert_equal "5.0.1", @browser.full_version
92
102
  assert_equal "5", @browser.version
93
103
  end
@@ -100,9 +110,9 @@ class BrowserTest < Test::Unit::TestCase
100
110
  assert @browser.safari?
101
111
  assert @browser.webkit?
102
112
  assert @browser.mobile?
103
- assert @browser.capable?
113
+ assert @browser.modern?
104
114
  assert @browser.ios?
105
- assert @browser.tablet? == false
115
+ assert ! @browser.tablet?
106
116
  assert_equal "3.0", @browser.full_version
107
117
  assert_equal "3", @browser.version
108
118
  end
@@ -114,20 +124,40 @@ class BrowserTest < Test::Unit::TestCase
114
124
  assert @browser.ipad?
115
125
  assert @browser.safari?
116
126
  assert @browser.webkit?
117
- assert @browser.capable?
127
+ assert @browser.modern?
118
128
  assert @browser.ios?
119
129
  assert @browser.tablet?
130
+ assert ! @browser.mobile?
120
131
  assert_equal "4.0.4", @browser.full_version
121
132
  assert_equal "4", @browser.version
122
133
  end
123
134
 
135
+ def test_detect_ios4
136
+ @browser.ua = IOS4
137
+ assert @browser.ios?
138
+ assert @browser.ios4?
139
+ end
140
+
141
+
142
+ def test_detect_ios5
143
+ @browser.ua = IOS5
144
+ assert @browser.ios?
145
+ assert @browser.ios5?
146
+ end
147
+
148
+ def test_detect_ios6
149
+ @browser.ua = IOS6
150
+ assert @browser.ios?
151
+ assert @browser.ios6?
152
+ end
153
+
124
154
  def test_detect_ie6
125
155
  @browser.ua = IE6
126
156
 
127
157
  assert_equal "Internet Explorer", @browser.name
128
158
  assert @browser.ie?
129
159
  assert @browser.ie6?
130
- assert @browser.capable? == false
160
+ assert ! @browser.modern?
131
161
  assert_equal "6.0", @browser.full_version
132
162
  assert_equal "6", @browser.version
133
163
  end
@@ -138,7 +168,7 @@ class BrowserTest < Test::Unit::TestCase
138
168
  assert_equal "Internet Explorer", @browser.name
139
169
  assert @browser.ie?
140
170
  assert @browser.ie7?
141
- assert @browser.capable?
171
+ assert ! @browser.modern?
142
172
  assert_equal "7.0", @browser.full_version
143
173
  assert_equal "7", @browser.version
144
174
  end
@@ -149,8 +179,8 @@ class BrowserTest < Test::Unit::TestCase
149
179
  assert_equal "Internet Explorer", @browser.name
150
180
  assert @browser.ie?
151
181
  assert @browser.ie8?
152
- assert @browser.capable?
153
- assert @browser.compatibility_view? == false
182
+ assert ! @browser.modern?
183
+ assert ! @browser.compatibility_view?
154
184
  assert_equal "8.0", @browser.full_version
155
185
  assert_equal "8", @browser.version
156
186
  end
@@ -161,8 +191,8 @@ class BrowserTest < Test::Unit::TestCase
161
191
  assert_equal "Internet Explorer", @browser.name
162
192
  assert @browser.ie?
163
193
  assert @browser.ie7?
164
- assert !@browser.ie8?
165
- assert @browser.capable?
194
+ assert ! @browser.ie8?
195
+ assert ! @browser.modern?
166
196
  assert @browser.compatibility_view?
167
197
  assert_equal "7.0", @browser.full_version
168
198
  assert_equal "7", @browser.version
@@ -174,8 +204,8 @@ class BrowserTest < Test::Unit::TestCase
174
204
  assert_equal "Internet Explorer", @browser.name
175
205
  assert @browser.ie?
176
206
  assert @browser.ie9?
177
- assert @browser.capable?
178
- assert !@browser.compatibility_view?
207
+ assert @browser.modern?
208
+ assert ! @browser.compatibility_view?
179
209
  assert_equal "9.0", @browser.full_version
180
210
  assert_equal "9", @browser.version
181
211
  end
@@ -186,8 +216,33 @@ class BrowserTest < Test::Unit::TestCase
186
216
  assert_equal "Internet Explorer", @browser.name
187
217
  assert @browser.ie?
188
218
  assert @browser.ie7?
189
- assert !@browser.ie9?
190
- assert @browser.capable?
219
+ assert ! @browser.ie9?
220
+ assert ! @browser.modern?
221
+ assert @browser.compatibility_view?
222
+ assert_equal "7.0", @browser.full_version
223
+ assert_equal "7", @browser.version
224
+ end
225
+
226
+ def test_detect_ie10
227
+ @browser.ua = IE10
228
+
229
+ assert_equal "Internet Explorer", @browser.name
230
+ assert @browser.ie?
231
+ assert @browser.ie10?
232
+ assert @browser.modern?
233
+ assert ! @browser.compatibility_view?
234
+ assert_equal "10.0", @browser.full_version
235
+ assert_equal "10", @browser.version
236
+ end
237
+
238
+ def test_detect_ie10_in_compatibility_view
239
+ @browser.ua = IE10_COMPAT
240
+
241
+ assert_equal "Internet Explorer", @browser.name
242
+ assert @browser.ie?
243
+ assert @browser.ie7?
244
+ assert ! @browser.ie10?
245
+ assert ! @browser.modern?
191
246
  assert @browser.compatibility_view?
192
247
  assert_equal "7.0", @browser.full_version
193
248
  assert_equal "7", @browser.version
@@ -198,29 +253,52 @@ class BrowserTest < Test::Unit::TestCase
198
253
 
199
254
  assert_equal "Opera", @browser.name
200
255
  assert @browser.opera?
201
- assert @browser.capable?
256
+ assert ! @browser.modern?
202
257
  assert_equal "11.64", @browser.full_version
203
258
  assert_equal "11", @browser.version
204
259
  end
205
260
 
261
+ def test_detect_opera_next
262
+ @browser.ua = OPERA_NEXT
263
+
264
+ assert_equal "Opera", @browser.name
265
+ assert_equal :opera, @browser.id
266
+ assert @browser.opera?
267
+ assert @browser.webkit?
268
+ assert @browser.modern?
269
+ assert ! @browser.chrome?
270
+ assert_equal "28.0.1500.37", @browser.full_version
271
+ assert_equal "28", @browser.version
272
+ end
273
+
206
274
  def test_detect_firefox
207
275
  @browser.ua = FIREFOX
208
276
 
209
277
  assert_equal "Firefox", @browser.name
210
278
  assert @browser.firefox?
211
- assert @browser.capable?
279
+ assert ! @browser.modern?
212
280
  assert_equal "3.8", @browser.full_version
213
281
  assert_equal "3", @browser.version
214
282
  end
215
283
 
284
+ def test_detect_modern_firefox
285
+ @browser.ua = FIREFOX_MODERN
286
+
287
+ assert_equal "Firefox", @browser.name
288
+ assert @browser.firefox?
289
+ assert @browser.modern?
290
+ assert_equal "17.0", @browser.full_version
291
+ assert_equal "17", @browser.version
292
+ end
293
+
216
294
  def test_detect_chrome
217
295
  @browser.ua = CHROME
218
296
 
219
297
  assert_equal "Chrome", @browser.name
220
298
  assert @browser.chrome?
221
- assert !@browser.safari?
299
+ assert ! @browser.safari?
222
300
  assert @browser.webkit?
223
- assert @browser.capable?
301
+ assert @browser.modern?
224
302
  assert_equal "5.0.375.99", @browser.full_version
225
303
  assert_equal "5", @browser.version
226
304
  end
@@ -230,9 +308,9 @@ class BrowserTest < Test::Unit::TestCase
230
308
 
231
309
  assert_equal "Chrome", @browser.name
232
310
  assert @browser.chrome?
233
- assert !@browser.safari?
311
+ assert ! @browser.safari?
234
312
  assert @browser.webkit?
235
- assert @browser.capable?
313
+ assert @browser.modern?
236
314
  assert_equal "19.0.1084.60", @browser.full_version
237
315
  assert_equal "19", @browser.version
238
316
  end
@@ -245,8 +323,8 @@ class BrowserTest < Test::Unit::TestCase
245
323
  assert @browser.safari?
246
324
  assert @browser.webkit?
247
325
  assert @browser.mobile?
248
- assert @browser.tablet? == false
249
- assert @browser.capable?
326
+ assert ! @browser.tablet?
327
+ assert @browser.modern?
250
328
  assert_equal "3.1.2", @browser.full_version
251
329
  assert_equal "3", @browser.version
252
330
  end
@@ -258,9 +336,9 @@ class BrowserTest < Test::Unit::TestCase
258
336
  assert @browser.android?
259
337
  assert @browser.safari?
260
338
  assert @browser.webkit?
261
- assert @browser.mobile? == false
339
+ assert ! @browser.mobile?
262
340
  assert @browser.tablet?
263
- assert @browser.capable?
341
+ assert @browser.modern?
264
342
  assert_equal "4.0", @browser.full_version
265
343
  assert_equal "4", @browser.version
266
344
  end
@@ -270,9 +348,9 @@ class BrowserTest < Test::Unit::TestCase
270
348
 
271
349
  assert_equal "BlackBerry", @browser.name
272
350
  assert @browser.blackberry?
273
- assert @browser.tablet? == false
351
+ assert ! @browser.tablet?
274
352
  assert @browser.mobile?
275
- assert @browser.capable? == false
353
+ assert ! @browser.modern?
276
354
  assert_equal "4.1.0", @browser.full_version
277
355
  assert_equal "4", @browser.version
278
356
  end
@@ -295,6 +373,18 @@ class BrowserTest < Test::Unit::TestCase
295
373
  assert_equal "1", @browser.version
296
374
  end
297
375
 
376
+ def test_detect_phantom_js
377
+ @browser.ua = PHANTOM_JS
378
+
379
+ assert_equal "PhantomJS", @browser.name
380
+ assert @browser.phantom_js?
381
+ assert ! @browser.tablet?
382
+ assert ! @browser.mobile?
383
+ assert @browser.modern?
384
+ assert_equal "1.9.0", @browser.full_version
385
+ assert_equal "1", @browser.version
386
+ end
387
+
298
388
  def test_detect_psp
299
389
  @browser.ua = PSP
300
390
 
@@ -306,16 +396,15 @@ class BrowserTest < Test::Unit::TestCase
306
396
  def test_detect_other_mobiles
307
397
  @browser.ua = "Symbian OS"
308
398
  assert @browser.mobile?
309
- assert @browser.tablet? == false
399
+ assert ! @browser.tablet?
310
400
 
311
401
  @browser.ua = "MIDP-2.0"
312
402
  assert @browser.mobile?
313
- assert @browser.tablet? == false
403
+ assert ! @browser.tablet?
314
404
 
315
405
  @browser.ua = "Windows CE"
316
406
  assert @browser.mobile?
317
- assert @browser.tablet? == false
318
-
407
+ assert ! @browser.tablet?
319
408
  end
320
409
 
321
410
  def test_return_a_zero_version
@@ -331,22 +420,70 @@ class BrowserTest < Test::Unit::TestCase
331
420
 
332
421
  def test_return_string_representation
333
422
  @browser.ua = CHROME
334
- assert_equal "chrome webkit mac capable", @browser.to_s
423
+ meta = @browser.to_s
424
+
425
+ assert meta.include?("chrome")
426
+ assert meta.include?("webkit")
427
+ assert meta.include?("mac")
428
+ assert meta.include?("modern")
335
429
  end
336
430
 
337
431
  def test_return_string_representation_for_ios
338
432
  @browser.ua = IPHONE
339
- assert_equal "iphone webkit ios safari safari3 mac capable mobile", @browser.to_s
433
+ meta = @browser.to_s
434
+
435
+ assert meta.include?("iphone")
436
+ assert meta.include?("webkit")
437
+ assert meta.include?("ios")
438
+ assert meta.include?("safari")
439
+ assert meta.include?("safari3")
440
+ assert meta.include?("mac")
441
+ assert meta.include?("modern")
442
+ assert meta.include?("mobile")
340
443
  end
341
444
 
342
445
  def test_return_string_representation_for_mobile
343
446
  @browser.ua = BLACKBERRY
344
- assert_equal "blackberry blackberry4 other mobile", @browser.to_s
447
+ meta = @browser.to_s
448
+
449
+ assert meta.include?("blackberry")
450
+ assert meta.include?("blackberry4")
451
+ assert meta.include?("other")
452
+ assert meta.include?("mobile")
345
453
  end
346
454
 
347
- def test_return_string_representation_for_handcap
455
+ def test_return_string_representation_for_ie6
348
456
  @browser.ua = IE6
349
- assert_equal "ie ie6 windows", @browser.to_s
457
+ meta = @browser.meta
458
+
459
+ assert meta.include?("ie")
460
+ assert meta.include?("ie6")
461
+ assert meta.include?("oldie")
462
+ assert meta.include?("lt-ie8")
463
+ assert meta.include?("lt-ie9")
464
+ assert meta.include?("windows")
465
+ end
466
+
467
+ def test_return_string_representation_for_ie7
468
+ @browser.ua = IE7
469
+ meta = @browser.meta
470
+
471
+ assert meta.include?("ie")
472
+ assert meta.include?("ie7")
473
+ assert meta.include?("oldie")
474
+ assert meta.include?("lt-ie8")
475
+ assert meta.include?("lt-ie9")
476
+ assert meta.include?("windows")
477
+ end
478
+
479
+ def test_return_string_representation_for_ie8
480
+ @browser.ua = IE8
481
+ meta = @browser.meta
482
+
483
+ assert meta.include?("ie")
484
+ assert meta.include?("ie8")
485
+ assert meta.include?("lt-ie9")
486
+ assert meta.include?("windows")
350
487
  end
351
488
 
352
489
  def test_detect_unknown_id
@@ -384,17 +521,12 @@ class BrowserTest < Test::Unit::TestCase
384
521
  assert_equal ["en-us", "en", "pt-br", "pt"], @browser.accept_language
385
522
  end
386
523
 
387
- def test_pimp_action_controller
388
- methods = ActionController::Base.private_instance_methods.collect {|m| m.to_sym}
389
- assert methods.include?(:browser)
390
- end
391
-
392
524
  def test_xoom
393
525
  @browser.ua = XOOM
394
526
 
395
527
  assert @browser.android?
396
528
  assert @browser.tablet?
397
- assert !@browser.mobile?
529
+ assert ! @browser.mobile?
398
530
  end
399
531
 
400
532
  def test_nexus_tablet
@@ -402,14 +534,14 @@ class BrowserTest < Test::Unit::TestCase
402
534
 
403
535
  assert @browser.android?
404
536
  assert @browser.tablet?
405
- assert !@browser.mobile?
537
+ assert ! @browser.mobile?
406
538
  end
407
539
 
408
540
  def test_opera_mini
409
541
  @browser.ua = OPERA_MINI
410
542
 
411
543
  assert @browser.opera_mini?
412
- assert !@browser.tablet?
544
+ assert ! @browser.tablet?
413
545
  assert @browser.mobile?
414
546
  end
415
547
 
@@ -417,7 +549,7 @@ class BrowserTest < Test::Unit::TestCase
417
549
  @browser.ua = OPERA_MOBI
418
550
 
419
551
  assert @browser.opera?
420
- assert !@browser.tablet?
552
+ assert ! @browser.tablet?
421
553
  assert @browser.mobile?
422
554
  end
423
555
 
@@ -427,7 +559,7 @@ class BrowserTest < Test::Unit::TestCase
427
559
  assert @browser.ie?
428
560
  assert_equal "7", @browser.version
429
561
  assert @browser.mobile?
430
- assert !@browser.tablet?
562
+ assert ! @browser.tablet?
431
563
  end
432
564
 
433
565
  def test_kindle_monochrome
@@ -444,6 +576,20 @@ class BrowserTest < Test::Unit::TestCase
444
576
  assert @browser.webkit?
445
577
  end
446
578
 
579
+ def test_nook
580
+ @browser.ua = NOOK
581
+
582
+ assert @browser.tablet?
583
+ assert ! @browser.mobile?
584
+ end
585
+
586
+ def test_samsung
587
+ @browser.ua = SAMSUNG
588
+
589
+ assert @browser.tablet?
590
+ assert ! @browser.mobile?
591
+ end
592
+
447
593
  def test_remove_duplicate_items
448
594
  @browser.ua = SAFARI
449
595
  assert_equal ["safari"], @browser.meta.select {|item| item == "safari" }