aslakhellesoy-webrat 0.3.2.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.
- data/History.txt +193 -0
- data/MIT-LICENSE.txt +19 -0
- data/README.rdoc +81 -0
- data/Rakefile +104 -0
- data/install.rb +1 -0
- data/lib/webrat.rb +34 -0
- data/lib/webrat/core.rb +14 -0
- data/lib/webrat/core/configuration.rb +44 -0
- data/lib/webrat/core/elements/area.rb +31 -0
- data/lib/webrat/core/elements/element.rb +33 -0
- data/lib/webrat/core/elements/field.rb +386 -0
- data/lib/webrat/core/elements/form.rb +103 -0
- data/lib/webrat/core/elements/label.rb +31 -0
- data/lib/webrat/core/elements/link.rb +90 -0
- data/lib/webrat/core/elements/select_option.rb +35 -0
- data/lib/webrat/core/locators.rb +20 -0
- data/lib/webrat/core/locators/area_locator.rb +38 -0
- data/lib/webrat/core/locators/button_locator.rb +54 -0
- data/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
- data/lib/webrat/core/locators/field_labeled_locator.rb +50 -0
- data/lib/webrat/core/locators/field_locator.rb +25 -0
- data/lib/webrat/core/locators/field_named_locator.rb +41 -0
- data/lib/webrat/core/locators/form_locator.rb +19 -0
- data/lib/webrat/core/locators/label_locator.rb +34 -0
- data/lib/webrat/core/locators/link_locator.rb +66 -0
- data/lib/webrat/core/locators/locator.rb +20 -0
- data/lib/webrat/core/locators/select_option_locator.rb +59 -0
- data/lib/webrat/core/logging.rb +21 -0
- data/lib/webrat/core/matchers.rb +4 -0
- data/lib/webrat/core/matchers/have_content.rb +55 -0
- data/lib/webrat/core/matchers/have_selector.rb +37 -0
- data/lib/webrat/core/matchers/have_tag.rb +57 -0
- data/lib/webrat/core/matchers/have_xpath.rb +83 -0
- data/lib/webrat/core/methods.rb +60 -0
- data/lib/webrat/core/mime.rb +29 -0
- data/lib/webrat/core/save_and_open_page.rb +50 -0
- data/lib/webrat/core/scope.rb +330 -0
- data/lib/webrat/core/session.rb +218 -0
- data/lib/webrat/core/xml.rb +115 -0
- data/lib/webrat/core/xml/hpricot.rb +19 -0
- data/lib/webrat/core/xml/nokogiri.rb +76 -0
- data/lib/webrat/core/xml/rexml.rb +24 -0
- data/lib/webrat/core_extensions/blank.rb +58 -0
- data/lib/webrat/core_extensions/deprecate.rb +8 -0
- data/lib/webrat/core_extensions/detect_mapped.rb +12 -0
- data/lib/webrat/core_extensions/hash_with_indifferent_access.rb +131 -0
- data/lib/webrat/core_extensions/meta_class.rb +6 -0
- data/lib/webrat/core_extensions/nil_to_param.rb +5 -0
- data/lib/webrat/mechanize.rb +43 -0
- data/lib/webrat/merb.rb +77 -0
- data/lib/webrat/rack.rb +26 -0
- data/lib/webrat/rails.rb +96 -0
- data/lib/webrat/rails/redirect_actions.rb +18 -0
- data/lib/webrat/rspec-rails.rb +13 -0
- data/lib/webrat/selenium.rb +107 -0
- data/lib/webrat/selenium/location_strategy_javascript/button.js +12 -0
- data/lib/webrat/selenium/location_strategy_javascript/label.js +16 -0
- data/lib/webrat/selenium/location_strategy_javascript/webrat.js +5 -0
- data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +9 -0
- data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
- data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
- data/lib/webrat/selenium/selenium_extensions.js +6 -0
- data/lib/webrat/selenium/selenium_session.rb +230 -0
- data/lib/webrat/sinatra.rb +21 -0
- data/vendor/selenium-server.jar +0 -0
- metadata +136 -0
| @@ -0,0 +1,58 @@ | |
| 1 | 
            +
            class Object #:nodoc:
         | 
| 2 | 
            +
              # An object is blank if it's false, empty, or a whitespace string.
         | 
| 3 | 
            +
              # For example, "", "   ", +nil+, [], and {} are blank.
         | 
| 4 | 
            +
              #
         | 
| 5 | 
            +
              # This simplifies
         | 
| 6 | 
            +
              #
         | 
| 7 | 
            +
              #   if !address.nil? && !address.empty?
         | 
| 8 | 
            +
              #
         | 
| 9 | 
            +
              # to
         | 
| 10 | 
            +
              #
         | 
| 11 | 
            +
              #   if !address.blank?
         | 
| 12 | 
            +
              def blank?
         | 
| 13 | 
            +
                respond_to?(:empty?) ? empty? : !self
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
                
         | 
| 16 | 
            +
              # An object is present if it's not blank.
         | 
| 17 | 
            +
              def present?
         | 
| 18 | 
            +
                !blank?
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            class NilClass #:nodoc:
         | 
| 23 | 
            +
              def blank?
         | 
| 24 | 
            +
                true
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
            end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            class FalseClass #:nodoc:
         | 
| 29 | 
            +
              def blank?
         | 
| 30 | 
            +
                true
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
            end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            class TrueClass #:nodoc:
         | 
| 35 | 
            +
              def blank?
         | 
| 36 | 
            +
                false
         | 
| 37 | 
            +
              end
         | 
| 38 | 
            +
            end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
            class Array #:nodoc:
         | 
| 41 | 
            +
              alias_method :blank?, :empty?
         | 
| 42 | 
            +
            end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            class Hash #:nodoc:
         | 
| 45 | 
            +
              alias_method :blank?, :empty?
         | 
| 46 | 
            +
            end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
            class String #:nodoc:
         | 
| 49 | 
            +
              def blank?
         | 
| 50 | 
            +
                self !~ /\S/
         | 
| 51 | 
            +
              end
         | 
| 52 | 
            +
            end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
            class Numeric #:nodoc:
         | 
| 55 | 
            +
              def blank?
         | 
| 56 | 
            +
                false
         | 
| 57 | 
            +
              end
         | 
| 58 | 
            +
            end
         | 
| @@ -0,0 +1,131 @@ | |
| 1 | 
            +
            # This class has dubious semantics and we only have it so that
         | 
| 2 | 
            +
            # people can write params[:key] instead of params['key']
         | 
| 3 | 
            +
            # and they get the same value for both keys.
         | 
| 4 | 
            +
            class HashWithIndifferentAccess < Hash #:nodoc:
         | 
| 5 | 
            +
              def initialize(constructor = {})
         | 
| 6 | 
            +
                if constructor.is_a?(Hash)
         | 
| 7 | 
            +
                  super()
         | 
| 8 | 
            +
                  update(constructor)
         | 
| 9 | 
            +
                else
         | 
| 10 | 
            +
                  super(constructor)
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              def default(key = nil)
         | 
| 15 | 
            +
                if key.is_a?(Symbol) && include?(key = key.to_s)
         | 
| 16 | 
            +
                  self[key]
         | 
| 17 | 
            +
                else
         | 
| 18 | 
            +
                  super
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              alias_method :regular_writer, :[]= unless method_defined?(:regular_writer)
         | 
| 23 | 
            +
              alias_method :regular_update, :update unless method_defined?(:regular_update)
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              #
         | 
| 26 | 
            +
              # Assigns a new value to the hash.
         | 
| 27 | 
            +
              #
         | 
| 28 | 
            +
              # Example:
         | 
| 29 | 
            +
              #
         | 
| 30 | 
            +
              #   hash = HashWithIndifferentAccess.new
         | 
| 31 | 
            +
              #   hash[:key] = "value"
         | 
| 32 | 
            +
              #
         | 
| 33 | 
            +
              def []=(key, value)
         | 
| 34 | 
            +
                regular_writer(convert_key(key), convert_value(value))
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              # 
         | 
| 38 | 
            +
              # Updates the instantized hash with values from the second.
         | 
| 39 | 
            +
              # 
         | 
| 40 | 
            +
              # Example:
         | 
| 41 | 
            +
              # 
         | 
| 42 | 
            +
              #   >> hash_1 = HashWithIndifferentAccess.new
         | 
| 43 | 
            +
              #   => {}
         | 
| 44 | 
            +
              # 
         | 
| 45 | 
            +
              #   >> hash_1[:key] = "value"
         | 
| 46 | 
            +
              #   => "value"
         | 
| 47 | 
            +
              # 
         | 
| 48 | 
            +
              #   >> hash_2 = HashWithIndifferentAccess.new
         | 
| 49 | 
            +
              #   => {}
         | 
| 50 | 
            +
              # 
         | 
| 51 | 
            +
              #   >> hash_2[:key] = "New Value!"
         | 
| 52 | 
            +
              #   => "New Value!"
         | 
| 53 | 
            +
              # 
         | 
| 54 | 
            +
              #   >> hash_1.update(hash_2)
         | 
| 55 | 
            +
              #   => {"key"=>"New Value!"}
         | 
| 56 | 
            +
              # 
         | 
| 57 | 
            +
              def update(other_hash)
         | 
| 58 | 
            +
                other_hash.each_pair { |key, value| regular_writer(convert_key(key), convert_value(value)) }
         | 
| 59 | 
            +
                self
         | 
| 60 | 
            +
              end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
              alias_method :merge!, :update
         | 
| 63 | 
            +
             | 
| 64 | 
            +
              # Checks the hash for a key matching the argument passed in
         | 
| 65 | 
            +
              def key?(key)
         | 
| 66 | 
            +
                super(convert_key(key))
         | 
| 67 | 
            +
              end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
              alias_method :include?, :key?
         | 
| 70 | 
            +
              alias_method :has_key?, :key?
         | 
| 71 | 
            +
              alias_method :member?, :key?
         | 
| 72 | 
            +
             | 
| 73 | 
            +
              # Fetches the value for the specified key, same as doing hash[key]
         | 
| 74 | 
            +
              def fetch(key, *extras)
         | 
| 75 | 
            +
                super(convert_key(key), *extras)
         | 
| 76 | 
            +
              end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
              # Returns an array of the values at the specified indicies. 
         | 
| 79 | 
            +
              def values_at(*indices)
         | 
| 80 | 
            +
                indices.collect {|key| self[convert_key(key)]}
         | 
| 81 | 
            +
              end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
              # Returns an exact copy of the hash.
         | 
| 84 | 
            +
              def dup
         | 
| 85 | 
            +
                HashWithIndifferentAccess.new(self)
         | 
| 86 | 
            +
              end
         | 
| 87 | 
            +
             | 
| 88 | 
            +
              # Merges the instantized and the specified hashes together, giving precedence to the values from the second hash
         | 
| 89 | 
            +
              # Does not overwrite the existing hash.
         | 
| 90 | 
            +
              def merge(hash)
         | 
| 91 | 
            +
                self.dup.update(hash)
         | 
| 92 | 
            +
              end
         | 
| 93 | 
            +
             | 
| 94 | 
            +
              # Removes a specified key from the hash.
         | 
| 95 | 
            +
              def delete(key)
         | 
| 96 | 
            +
                super(convert_key(key))
         | 
| 97 | 
            +
              end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
              def stringify_keys!; self end
         | 
| 100 | 
            +
              def symbolize_keys!; self end
         | 
| 101 | 
            +
              def to_options!; self end
         | 
| 102 | 
            +
             | 
| 103 | 
            +
              # Convert to a Hash with String keys.
         | 
| 104 | 
            +
              def to_hash
         | 
| 105 | 
            +
                Hash.new(default).merge(self)
         | 
| 106 | 
            +
              end
         | 
| 107 | 
            +
             | 
| 108 | 
            +
              protected
         | 
| 109 | 
            +
                def convert_key(key)
         | 
| 110 | 
            +
                  key.kind_of?(Symbol) ? key.to_s : key
         | 
| 111 | 
            +
                end
         | 
| 112 | 
            +
             | 
| 113 | 
            +
                def convert_value(value)
         | 
| 114 | 
            +
                  case value
         | 
| 115 | 
            +
                  when Hash
         | 
| 116 | 
            +
                    value.with_indifferent_access
         | 
| 117 | 
            +
                  when Array
         | 
| 118 | 
            +
                    value.collect { |e| e.is_a?(Hash) ? e.with_indifferent_access : e }
         | 
| 119 | 
            +
                  else
         | 
| 120 | 
            +
                    value
         | 
| 121 | 
            +
                  end
         | 
| 122 | 
            +
                end
         | 
| 123 | 
            +
            end
         | 
| 124 | 
            +
             | 
| 125 | 
            +
            class Hash #:nodoc:
         | 
| 126 | 
            +
              def with_indifferent_access
         | 
| 127 | 
            +
                hash = HashWithIndifferentAccess.new(self)
         | 
| 128 | 
            +
                hash.default = self.default
         | 
| 129 | 
            +
                hash
         | 
| 130 | 
            +
              end
         | 
| 131 | 
            +
            end
         | 
| @@ -0,0 +1,43 @@ | |
| 1 | 
            +
            require "mechanize"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Webrat #:nodoc:
         | 
| 4 | 
            +
              class MechanizeSession < Session #:nodoc:
         | 
| 5 | 
            +
                
         | 
| 6 | 
            +
                attr_accessor :response
         | 
| 7 | 
            +
                alias :page :response
         | 
| 8 | 
            +
                
         | 
| 9 | 
            +
                def get(url, data, headers_argument_not_used = nil)
         | 
| 10 | 
            +
                  @response = mechanize.get(url, data)
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                def post(url, data, headers_argument_not_used = nil)
         | 
| 14 | 
            +
                  post_data = data.inject({}) do |memo, param|
         | 
| 15 | 
            +
                    case param.last
         | 
| 16 | 
            +
                    when Hash
         | 
| 17 | 
            +
                      param.last.each {|attribute, value| memo["#{param.first}[#{attribute}]"] = value }
         | 
| 18 | 
            +
                    else
         | 
| 19 | 
            +
                      memo[param.first] = param.last
         | 
| 20 | 
            +
                    end
         | 
| 21 | 
            +
                    memo
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                  @response = mechanize.post(url, post_data)
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
                
         | 
| 26 | 
            +
                def response_body
         | 
| 27 | 
            +
                  @response.content
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                def response_code
         | 
| 31 | 
            +
                  @response.code.to_i
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
                
         | 
| 34 | 
            +
                def mechanize
         | 
| 35 | 
            +
                  @mechanize = WWW::Mechanize.new
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                def_delegators :mechanize, :basic_auth
         | 
| 39 | 
            +
                  
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
            end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            Webrat.configuration.mode = :mechanize
         | 
    
        data/lib/webrat/merb.rb
    ADDED
    
    | @@ -0,0 +1,77 @@ | |
| 1 | 
            +
            require "webrat"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "cgi"
         | 
| 4 | 
            +
            gem "extlib"
         | 
| 5 | 
            +
            require "extlib"
         | 
| 6 | 
            +
            require "merb-core"
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            HashWithIndifferentAccess = Mash
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            module Webrat
         | 
| 11 | 
            +
              class MerbSession < Session #:nodoc:
         | 
| 12 | 
            +
                include Merb::Test::MakeRequest
         | 
| 13 | 
            +
                
         | 
| 14 | 
            +
                attr_accessor :response
         | 
| 15 | 
            +
                
         | 
| 16 | 
            +
                def get(url, data, headers = nil)
         | 
| 17 | 
            +
                  do_request(url, data, headers, "GET")
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
              
         | 
| 20 | 
            +
                def post(url, data, headers = nil)
         | 
| 21 | 
            +
                  do_request(url, data, headers, "POST")
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
              
         | 
| 24 | 
            +
                def put(url, data, headers = nil)
         | 
| 25 | 
            +
                  do_request(url, data, headers, "PUT")
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
              
         | 
| 28 | 
            +
                def delete(url, data, headers = nil)
         | 
| 29 | 
            +
                  do_request(url, data, headers, "DELETE")
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
                
         | 
| 32 | 
            +
                def response_body
         | 
| 33 | 
            +
                  @response.body.to_s
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
                
         | 
| 36 | 
            +
                def response_code
         | 
| 37 | 
            +
                  @response.status
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
                
         | 
| 40 | 
            +
                def do_request(url, data, headers, method)
         | 
| 41 | 
            +
                  @response = request(url, 
         | 
| 42 | 
            +
                    :params => (data && data.any?) ? data : nil, 
         | 
| 43 | 
            +
                    :headers => headers,
         | 
| 44 | 
            +
                    :method => method)
         | 
| 45 | 
            +
                  follow_redirect
         | 
| 46 | 
            +
                end
         | 
| 47 | 
            +
                
         | 
| 48 | 
            +
                def follow_redirect
         | 
| 49 | 
            +
                  self.get(@response.headers['Location'], nil, @response.headers) if @response.status == 302
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
              end
         | 
| 53 | 
            +
            end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            module Merb #:nodoc:
         | 
| 56 | 
            +
              module Test #:nodoc:
         | 
| 57 | 
            +
                module RequestHelper #:nodoc:
         | 
| 58 | 
            +
                  def request(uri, env = {})
         | 
| 59 | 
            +
                    @_webrat_session ||= Webrat::MerbSession.new
         | 
| 60 | 
            +
                    @_webrat_session.response = @_webrat_session.request(uri, env)
         | 
| 61 | 
            +
                  end
         | 
| 62 | 
            +
              
         | 
| 63 | 
            +
                  def follow_redirect
         | 
| 64 | 
            +
                    @_webrat_session.follow_redirect
         | 
| 65 | 
            +
                  end
         | 
| 66 | 
            +
                end
         | 
| 67 | 
            +
              end
         | 
| 68 | 
            +
            end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
            class Merb::Test::RspecStory #:nodoc:
         | 
| 71 | 
            +
              def browser
         | 
| 72 | 
            +
                @browser ||= Webrat::MerbSession.new
         | 
| 73 | 
            +
              end
         | 
| 74 | 
            +
            end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
            Webrat.configuration.mode = :merb
         | 
| 77 | 
            +
             | 
    
        data/lib/webrat/rack.rb
    ADDED
    
    | @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            require 'webrat'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class CGIMethods #:nodoc:
         | 
| 4 | 
            +
              def self.parse_query_parameters(params)
         | 
| 5 | 
            +
                hash = {}
         | 
| 6 | 
            +
                params.split('&').each do |p|
         | 
| 7 | 
            +
                  pair = p.split('=')
         | 
| 8 | 
            +
                  hash[pair[0]] = pair[1]
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
                hash
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
            end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            module Webrat
         | 
| 15 | 
            +
              class RackSession < Session #:nodoc:
         | 
| 16 | 
            +
                def response_body
         | 
| 17 | 
            +
                  @response.body
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                def response_code
         | 
| 21 | 
            +
                  @response.status
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
            end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            Webrat.configuration.mode = :rack
         | 
    
        data/lib/webrat/rails.rb
    ADDED
    
    | @@ -0,0 +1,96 @@ | |
| 1 | 
            +
            require "webrat"
         | 
| 2 | 
            +
            require "action_controller/integration"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Webrat
         | 
| 5 | 
            +
              class RailsSession < Session #:nodoc:
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def doc_root
         | 
| 8 | 
            +
                  File.expand_path(File.join(RAILS_ROOT, 'public'))
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
                
         | 
| 11 | 
            +
                def saved_page_dir
         | 
| 12 | 
            +
                  File.expand_path(File.join(RAILS_ROOT, "tmp"))
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
                
         | 
| 15 | 
            +
                def get(url, data, headers = nil)
         | 
| 16 | 
            +
                  do_request(:get, url, data, headers)
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
                
         | 
| 19 | 
            +
                def post(url, data, headers = nil)
         | 
| 20 | 
            +
                  do_request(:post, url, data, headers)
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
                
         | 
| 23 | 
            +
                def put(url, data, headers = nil)
         | 
| 24 | 
            +
                  do_request(:put, url, data, headers)
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
                
         | 
| 27 | 
            +
                def delete(url, data, headers = nil)
         | 
| 28 | 
            +
                  do_request(:delete, url, data, headers)
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
                
         | 
| 31 | 
            +
                def response_body
         | 
| 32 | 
            +
                  response.body
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
                
         | 
| 35 | 
            +
                def response_code
         | 
| 36 | 
            +
                  response.code.to_i
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
                
         | 
| 39 | 
            +
                def xml_content_type?
         | 
| 40 | 
            +
                  response.headers["Content-Type"].to_s =~ /xml/
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
                
         | 
| 43 | 
            +
              protected
         | 
| 44 | 
            +
                
         | 
| 45 | 
            +
                def integration_session
         | 
| 46 | 
            +
                  @context
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
                
         | 
| 49 | 
            +
                def do_request(http_method, url, data, headers) #:nodoc:
         | 
| 50 | 
            +
                  update_protocol(url)
         | 
| 51 | 
            +
                  url = normalize_url(url)
         | 
| 52 | 
            +
                  integration_session.request_via_redirect(http_method, url, data, headers)
         | 
| 53 | 
            +
                end
         | 
| 54 | 
            +
              
         | 
| 55 | 
            +
                # remove protocol, host and anchor
         | 
| 56 | 
            +
                def normalize_url(href) #:nodoc:
         | 
| 57 | 
            +
                  uri = URI.parse(href)
         | 
| 58 | 
            +
                  normalized_url = uri.path
         | 
| 59 | 
            +
                  if uri.query
         | 
| 60 | 
            +
                    normalized_url += "?" + uri.query
         | 
| 61 | 
            +
                  end
         | 
| 62 | 
            +
                  normalized_url
         | 
| 63 | 
            +
                end
         | 
| 64 | 
            +
                
         | 
| 65 | 
            +
                def update_protocol(href) #:nodoc:
         | 
| 66 | 
            +
                  if href =~ /^https:/
         | 
| 67 | 
            +
                    integration_session.https!(true)
         | 
| 68 | 
            +
                  elsif href =~ /^http:/
         | 
| 69 | 
            +
                    integration_session.https!(false)
         | 
| 70 | 
            +
                  end
         | 
| 71 | 
            +
                end
         | 
| 72 | 
            +
                
         | 
| 73 | 
            +
                def response #:nodoc:
         | 
| 74 | 
            +
                  integration_session.response
         | 
| 75 | 
            +
                end
         | 
| 76 | 
            +
                
         | 
| 77 | 
            +
              end
         | 
| 78 | 
            +
            end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
            module ActionController #:nodoc:
         | 
| 81 | 
            +
              module Integration #:nodoc:
         | 
| 82 | 
            +
                Session.class_eval do
         | 
| 83 | 
            +
                  unless instance_methods.include?("put_via_redirect")
         | 
| 84 | 
            +
                    require "webrat/rails/redirect_actions"
         | 
| 85 | 
            +
                    include Webrat::RedirectActions
         | 
| 86 | 
            +
                  end
         | 
| 87 | 
            +
                end
         | 
| 88 | 
            +
              end
         | 
| 89 | 
            +
              
         | 
| 90 | 
            +
              IntegrationTest.class_eval do
         | 
| 91 | 
            +
                include Webrat::Methods
         | 
| 92 | 
            +
                include Webrat::Matchers
         | 
| 93 | 
            +
              end
         | 
| 94 | 
            +
            end
         | 
| 95 | 
            +
             | 
| 96 | 
            +
            Webrat.configuration.mode = :rails
         |