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