Detect if the document is XML or HTML using the Content-Type when in Rails mode
This commit is contained in:
parent
a205b6fa44
commit
5cf23cbda3
|
@ -279,13 +279,25 @@ module Webrat
|
|||
|
||||
def page_dom #:nodoc:
|
||||
return @response.dom if @response.respond_to?(:dom)
|
||||
dom = Webrat::XML.document(@response_body)
|
||||
|
||||
if @session.xml_content_type?
|
||||
dom = Webrat::XML.xml_document(@response_body)
|
||||
else
|
||||
dom = Webrat::XML.html_document(@response_body)
|
||||
end
|
||||
|
||||
Webrat.define_dom_method(@response, dom)
|
||||
return dom
|
||||
end
|
||||
|
||||
def scoped_dom #:nodoc:
|
||||
Webrat::XML.document("<html>" + Webrat::XML.to_html(Webrat::XML.css_search(@scope.dom, @selector).first) + "</html>")
|
||||
source = Webrat::XML.to_html(Webrat::XML.css_search(@scope.dom, @selector).first)
|
||||
|
||||
if @session.xml_content_type?
|
||||
Webrat::XML.xml_document(source)
|
||||
else
|
||||
Webrat::XML.html_document(source)
|
||||
end
|
||||
end
|
||||
|
||||
def locate_field(field_locator, *field_types) #:nodoc:
|
||||
|
|
|
@ -204,6 +204,10 @@ module Webrat
|
|||
page_scope.dom
|
||||
end
|
||||
|
||||
def xml_content_type?
|
||||
false
|
||||
end
|
||||
|
||||
def_delegators :current_scope, :fill_in, :fills_in
|
||||
def_delegators :current_scope, :set_hidden_field
|
||||
def_delegators :current_scope, :submit_form
|
||||
|
|
|
@ -12,6 +12,22 @@ module Webrat #:nodoc:
|
|||
Webrat.rexml_document(Webrat.hpricot_document(stringlike).to_html)
|
||||
end
|
||||
end
|
||||
|
||||
def self.html_document(stringlike) #:nodoc:
|
||||
if Webrat.configuration.parse_with_nokogiri?
|
||||
Webrat.html_nokogiri_document(stringlike)
|
||||
else
|
||||
Webrat.rexml_document(Webrat.hpricot_document(stringlike).to_html)
|
||||
end
|
||||
end
|
||||
|
||||
def self.xml_document(stringlike) #:nodoc:
|
||||
if Webrat.configuration.parse_with_nokogiri?
|
||||
Webrat.xml_nokogiri_document(stringlike)
|
||||
else
|
||||
Webrat.rexml_document(Webrat.hpricot_document(stringlike).to_html)
|
||||
end
|
||||
end
|
||||
|
||||
def self.to_html(element)
|
||||
if Webrat.configuration.parse_with_nokogiri?
|
||||
|
|
|
@ -18,6 +18,38 @@ module Webrat
|
|||
end
|
||||
end
|
||||
|
||||
def self.html_nokogiri_document(stringlike) #:nodoc:
|
||||
return stringlike.dom if stringlike.respond_to?(:dom)
|
||||
|
||||
if Nokogiri::HTML::Document === stringlike
|
||||
stringlike
|
||||
elsif Nokogiri::XML::NodeSet === stringlike
|
||||
stringlike
|
||||
elsif StringIO === stringlike
|
||||
Nokogiri::HTML(stringlike.string)
|
||||
elsif stringlike.respond_to?(:body)
|
||||
Nokogiri::HTML(stringlike.body.to_s)
|
||||
else
|
||||
Nokogiri::HTML(stringlike.to_s)
|
||||
end
|
||||
end
|
||||
|
||||
def self.xml_nokogiri_document(stringlike) #:nodoc:
|
||||
return stringlike.dom if stringlike.respond_to?(:dom)
|
||||
|
||||
if Nokogiri::HTML::Document === stringlike
|
||||
stringlike
|
||||
elsif Nokogiri::XML::NodeSet === stringlike
|
||||
stringlike
|
||||
elsif StringIO === stringlike
|
||||
Nokogiri::XML(stringlike.string)
|
||||
elsif stringlike.respond_to?(:body)
|
||||
Nokogiri::XML(stringlike.body.to_s)
|
||||
else
|
||||
Nokogiri::XML(stringlike.to_s)
|
||||
end
|
||||
end
|
||||
|
||||
def self.define_dom_method(object, dom) #:nodoc:
|
||||
object.meta_class.send(:define_method, :dom) do
|
||||
dom
|
||||
|
|
|
@ -36,6 +36,10 @@ module Webrat
|
|||
response.code.to_i
|
||||
end
|
||||
|
||||
def xml_content_type?
|
||||
response.headers["Content-Type"].to_s =~ /xml/
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def integration_session
|
||||
|
|
Loading…
Reference in New Issue