spec/user_agent_spec.rb in fivepointssolutions-uaid-0.0.1 vs spec/user_agent_spec.rb in fivepointssolutions-uaid-0.1.0
- old
+ new
@@ -1,57 +1,77 @@
require File.expand_path(File.dirname(__FILE__) + '/spec_helper.rb')
-describe Uaid::UserAgent do
- {
- ["noagent", "x", false] => [nil, '', ' '],
- ["webkit", "3", true] => [
- "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_2; en-us) AppleWebKit/526+ (KHTML, like Gecko) Version/3.1.1 Safari/525.18",
- "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.1 Safari/525.17",
- "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.A.B.C Safari/525.13",
- "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.36 Safari/525.19"],
- ["webkit", "4", true] => [
- "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16"],
- ["gecko", "2", true] => [
- "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14",
- "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.6) Gecko/20060601 Firefox/2.0.0.6 (Ubuntu-edgy)",
- "Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.4) Gecko/20080721 BonEcho/2.0.0.4"],
- ["gecko", "3", true] => [
- "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.1) Gecko/2008070206 Firefox/3.0.1"],
- ["gecko", "3.5", true] => [
- "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1b3pre) Gecko/20090109 Shiretoko/3.1b3pre"],
- ["ie", "8", true] => [
- "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0; .NET CLR 1.1.4322)"],
- ["ie", "7", true] => [
- "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; InfoPath.1)",
- "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"],
- ["ie", "6", false] => [
- "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"],
- ["mobilesafari", "3", true] => [
- "Mozilla/5.0 (iPhone; U; XXXXX like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/241 Safari/419.3"],
- ["unknown", "x", false] => [
- "Mozilla/4.0",
- "VB Project"],
- ["bot", "x", true] => [
- "ia_archiver",
- "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
- "Googlebot/2.1 (+http://www.googlebot.com/bot.html)",
- "Googlebot/2.1 (+http://www.google.com/bot.html)",
- "msnbot/1.0 (+http://search.msn.com/msnbot.htm)"]
- }.each do |expected_name_version_supported, agents| agents.each do |agent|
-
- it "should indicate #{agent.inspect} as #{expected_name_version_supported[0..1].inspect}, #{expected_name_version_supported.last ? 'a supported' : 'an unsupported'} browser" do
- user_agent = Uaid::UserAgent.new(agent)
- user_agent.name.should == expected_name_version_supported[0]
- user_agent.version.should == expected_name_version_supported[1]
- user_agent.supported?.should == expected_name_version_supported[2]
- end
-
- end; end
-end
-
-describe Uaid::UserAgent, 'name question' do
- it 'should answer true when agent has name' do
- user_agent = Uaid::UserAgent.new('unknown')
- user_agent.webkit?.should be_false
- user_agent.unknown?.should be_true
+describe Uaid::UserAgent, 'identification questions' do
+ before do
+ @user_agent = Uaid::UserAgent.new('unknown')
+ end
+
+ after do
+ Uaid.supported_agents = nil
+ end
+
+ [
+ ['unknown', 'bot', '1'],
+ ['webkit', 'unknown', '1'],
+ ['webkit', 'bot', 'x'],
+ ].each do |attributes|
+ engine, product, version = attributes
+ it "should answer true for unknown when unknown as #{attributes.inspect}" do
+ user_agent = Uaid::UserAgent.new('unknown')
+ stub(@user_agent).engine { engine }
+ stub(@user_agent).product { product }
+ stub(@user_agent).version { version }
+ @user_agent.unknown?.should be_true
+ end
+ end
+
+ it 'should answer false for unknown when all attributes are known' do
+ stub(@user_agent).engine { 'someengine' }
+ stub(@user_agent).product { 'someproduct' }
+ stub(@user_agent).version { '1' }
+ @user_agent.unknown?.should be_false
+ end
+
+ it 'should answer for engine' do
+ stub(@user_agent).engine { 'someengine' }
+ @user_agent.someengine?.should be_true
+ @user_agent.otherengine?.should be_false
+ end
+
+ it 'should answer for product' do
+ stub(@user_agent).product { 'someproduct' }
+ @user_agent.someproduct?.should be_true
+ @user_agent.otherproduct?.should be_false
+ end
+
+ it 'should answer for version' do
+ stub(@user_agent).version { '2' }
+ @user_agent.version?('2').should be_true
+ end
+
+ it 'should answer an identifier which include the engine, product and version' do
+ stub(@user_agent).engine { 'someengine' }
+ stub(@user_agent).product { 'someproduct' }
+ stub(@user_agent).version { '1' }
+ @user_agent.identifier.should == 'someengine someproduct someproduct1'
+ end
+
+ it 'should answer supported as true when all attributes match a supported agent' do
+ stub(@user_agent).engine { 'webkit' }
+ stub(@user_agent).product { 'safari' }
+ stub(@user_agent).version { '3' }
+ @user_agent.should be_supported
+ end
+
+ it 'should answer supported when an entry in the supported list is a regular expression' do
+ Uaid.supported_agents = [/safari [34]/]
+ stub(@user_agent).product { 'safari' }
+ stub(@user_agent).version { '3' }
+ @user_agent.should be_supported
+
+ stub(@user_agent).version { '4' }
+ @user_agent.should be_supported
+
+ stub(@user_agent).version { '2' }
+ @user_agent.should_not be_supported
end
end
\ No newline at end of file