server/browsers.rb in visionmedia-jspec-2.8.4 vs server/browsers.rb in visionmedia-jspec-2.9.0
- old
+ new
@@ -1,16 +1,228 @@
-module JSpec
- class Browser
- def open url
- `open -g -a #{name} #{url}`
+require 'rbconfig'
+
+#--
+# Browser
+#++
+
+class Browser
+
+ ##
+ # Check if the user agent _string_ matches this browser.
+
+ def self.matches_agent? string; end
+
+ ##
+ # Check if the browser matches the name _string_.
+
+ def self.matches_name? string; end
+
+ ##
+ # Subclasses.
+
+ def self.subclasses
+ @subclasses ||= []
+ end
+
+ ##
+ # Stack subclasses.
+
+ def self.inherited subclass
+ subclasses << subclass
+ end
+
+ ##
+ # Weither or not the browser is supported.
+
+ def supported?; true end
+
+ ##
+ # Server setup.
+
+ def setup; end
+
+ ##
+ # Server teardown.
+
+ def teardown; end
+
+ ##
+ # Host environment.
+
+ def host
+ Config::CONFIG['host']
+ end
+
+ ##
+ # Check if we are using macos.
+
+ def macos?
+ host.include? 'darwin'
+ end
+
+ ##
+ # Check if we are using windows.
+
+ def windows?
+ host.include? 'mswin'
+ end
+
+ ##
+ # Check if we are using linux.
+
+ def linux?
+ host.include? 'linux'
+ end
+
+ ##
+ # Run applescript _code_.
+
+ def applescript code
+ raise "Can't run AppleScript on #{host}" unless macos?
+ system "osascript -e '#{code}' 2>&1 >/dev/null"
+ end
+
+ #--
+ # Firefox
+ #++
+
+ class Firefox < self
+ def self.matches_agent? string
+ string =~ /firefox/i
end
- def name
- self.class.to_s.split('::').last
+ def self.matches_name? string
+ string =~ /ff|firefox|mozilla/i
end
- class Firefox < self; end
- class Safari < self; end
- class Opera < self; end
+ def visit uri
+ system "open -g -a Firefox '#{uri}'" if macos?
+ system "firefox #{uri}" if linux?
+ system "#{File.join(ENV['ProgramFiles'] || 'c:\Program Files', '\Mozilla Firefox\firefox.exe')} #{uri}" if windows?
+ end
+
+ def to_s
+ 'Firefox'
+ end
end
-end
\ No newline at end of file
+
+ #--
+ # Safari
+ #++
+
+ class Safari < self
+ def self.matches_agent? string
+ string =~ /safari/i && string !~ /chrome/i
+ end
+
+ def self.matches_name? string
+ string =~ /safari/i
+ end
+
+ def supported?
+ macos?
+ end
+
+ def setup
+ applescript 'tell application "Safari" to make new document'
+ end
+
+ def visit uri
+ applescript 'tell application "Safari" to set URL of front document to "' + uri + '"'
+ end
+
+ def matches_agent? string
+ string =~ /safari/i
+ end
+
+ def to_s
+ 'Safari'
+ end
+ end
+
+ #--
+ # Chrome
+ #++
+
+ class Chrome < self
+ def self.matches_agent? string
+ string =~ /chrome/i
+ end
+
+ def self.matches_name? string
+ string =~ /google|chrome/i
+ end
+
+ def supported?
+ macos?
+ end
+
+ def visit uri
+ system "open -g -a Chromium #{uri}" if macos?
+ end
+
+ def to_s
+ 'Chrome'
+ end
+ end
+
+ #--
+ # Internet Explorer
+ #++
+
+ class IE < self
+ def self.matches_agent? string
+ string =~ /microsoft/i
+ end
+
+ def self.matches_name? string
+ string =~ /ie|explorer/i
+ end
+
+ def supported?
+ windows?
+ end
+
+ def setup
+ require 'win32ole'
+ end
+
+ def visit uri
+ ie = WIN32OLE.new 'InternetExplorer.Application'
+ ie.visible = true
+ ie.Navigate uri
+ while ie.ReadyState != 4 do
+ sleep 1
+ end
+ end
+
+ def to_s
+ 'Internet Explorer'
+ end
+ end
+
+ #--
+ # Opera
+ #++
+
+ class Opera < self
+ def self.matches_agent? string
+ string =~ /opera/i
+ end
+
+ def self.matches_name? string
+ string =~ /opera/i
+ end
+
+ def visit uri
+ system "open -g -a Opera #{uri}" if macos?
+ system "c:\Program Files\Opera\Opera.exe #{uri}" if windows?
+ system "opera #{uri}" if linux?
+ end
+
+ def to_s
+ 'Opera'
+ end
+ end
+
+end