Fixed bug where Scope was creating a new DOM rather than re-using the existing DOM. [#105 state:resolved]

This commit is contained in:
Zach Dennis 2009-01-17 16:59:12 -05:00
parent ebd9d8ed52
commit cdf9908f9e
3 changed files with 49 additions and 13 deletions

View File

@ -68,6 +68,8 @@
* Bug fixes * Bug fixes
* Fixed bug where Scope was creating a new DOM rather than re-using the existing DOM.
[#105] (Zach Dennis)
* Support Rails > v2.2 by using ActionController::RequestParser for param parsing [#107] * Support Rails > v2.2 by using ActionController::RequestParser for param parsing [#107]
(Marcello Nuccio) (Marcello Nuccio)
* Raise a Webrat::NotFoundError if the scope passed to #within doesn't exist [#90] * Raise a Webrat::NotFoundError if the scope passed to #within doesn't exist [#90]

View File

@ -31,7 +31,7 @@ module Webrat
@session = session @session = session
instance_eval(&block) if block_given? instance_eval(&block) if block_given?
if @selector && scoped_element.nil? if @selector && scoped_dom.nil?
raise Webrat::NotFoundError.new("The scope was not found on the page: #{@selector.inspect}") raise Webrat::NotFoundError.new("The scope was not found on the page: #{@selector.inspect}")
end end
end end
@ -316,17 +316,7 @@ module Webrat
return dom return dom
end end
def scoped_dom #:nodoc: def scoped_dom
source = Webrat::XML.to_html(scoped_element)
if @session.xml_content_type?
Webrat::XML.xml_document(source)
else
Webrat::XML.html_document(source)
end
end
def scoped_element
Webrat::XML.css_at(@scope.dom, @selector) Webrat::XML.css_at(@scope.dom, @selector)
end end

View File

@ -59,7 +59,6 @@ describe "within" do
end end
it "should work when the scope is inside the form" do it "should work when the scope is inside the form" do
pending "needs bug fix" do
with_html <<-HTML with_html <<-HTML
<html> <html>
<form id="form2" action="/form2"> <form id="form2" action="/form2">
@ -77,6 +76,51 @@ describe "within" do
end end
submit_form "form2" submit_form "form2"
end
it "should work when the form submission occurs inside a scope" do
with_html <<-HTML
<html>
<body>
<div>
<form id="form2" action="/form2">
<label for="email">Email</label><input id="email" type="text" class="email2" name="email" />
<input type="submit" value="Add" />
</form>
</div>
</body>
</html>
HTML
webrat_session.should_receive(:get).with("/form2", "email" => "test@example.com")
within "form[@action='/form2']" do
fill_in "Email", :with => "test@example.com"
click_button "Add"
end
end
it "should work when there are multiple forms with the same label text" do
with_html <<-HTML
<html>
<body>
<div>
<form id="form1" action="/form1">
<label for="email1">Email</label><input id="email1" type="text" class="email1" name="email1" />
<input type="submit" value="Add" />
</form>
<form id="form2" action="/form2">
<label for="email2">Email</label><input id="email2" type="text" class="email2" name="email2" />
<input type="submit" value="Add" />
</form>
</div>
</body>
</html>
HTML
webrat_session.should_receive(:get).with("/form2", "email2" => "test@example.com")
within "form[@action='/form2']" do
fill_in "Email", :with => "test@example.com"
click_button "Add"
end end
end end