All tests passing now. Yay!
This commit is contained in:
parent
effc446daf
commit
7afa0f0561
|
@ -177,11 +177,28 @@ module Webrat
|
||||||
|
|
||||||
class RadioField < Field
|
class RadioField < Field
|
||||||
|
|
||||||
|
def to_param
|
||||||
|
return nil if @value.nil?
|
||||||
|
super
|
||||||
|
end
|
||||||
|
|
||||||
|
def choose
|
||||||
|
other_options.each do |option|
|
||||||
|
option.unset
|
||||||
|
end
|
||||||
|
|
||||||
|
set(@element["value"] || "on")
|
||||||
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
|
def other_options
|
||||||
|
@form.fields.select { |f| f.name == name }
|
||||||
|
end
|
||||||
|
|
||||||
def default_value
|
def default_value
|
||||||
if @element["checked"] == "checked"
|
if @element["checked"] == "checked"
|
||||||
@element["value"]
|
@element["value"] || "on"
|
||||||
else
|
else
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
|
@ -29,6 +29,18 @@ module Webrat
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def fields
|
||||||
|
return @fields if @fields
|
||||||
|
|
||||||
|
@fields = []
|
||||||
|
|
||||||
|
(@element / "input, textarea, select").each do |field_element|
|
||||||
|
@fields << Field.class_for_element(field_element).new(self, field_element)
|
||||||
|
end
|
||||||
|
|
||||||
|
@fields
|
||||||
|
end
|
||||||
|
|
||||||
def submit
|
def submit
|
||||||
Page.new(@page.session, form_action, form_method, params)
|
Page.new(@page.session, form_action, form_method, params)
|
||||||
end
|
end
|
||||||
|
@ -65,18 +77,6 @@ module Webrat
|
||||||
fields.select { |f| field_types.include?(f.class) }
|
fields.select { |f| field_types.include?(f.class) }
|
||||||
end
|
end
|
||||||
|
|
||||||
def fields
|
|
||||||
return @fields if @fields
|
|
||||||
|
|
||||||
@fields = []
|
|
||||||
|
|
||||||
(@element / "input, textarea, select").each do |field_element|
|
|
||||||
@fields << Field.class_for_element(field_element).new(self, field_element)
|
|
||||||
end
|
|
||||||
|
|
||||||
@fields
|
|
||||||
end
|
|
||||||
|
|
||||||
def params
|
def params
|
||||||
all_params = {}
|
all_params = {}
|
||||||
|
|
||||||
|
|
|
@ -58,11 +58,9 @@ module Webrat
|
||||||
#
|
#
|
||||||
# Example:
|
# Example:
|
||||||
# chooses 'First Option'
|
# chooses 'First Option'
|
||||||
def chooses(field)
|
def chooses(label)
|
||||||
radio = find_field_by_name_or_label(field)
|
field = find_field(label, RadioField)
|
||||||
flunk("Could not find radio button #{field.inspect}") if radio.nil?
|
field.choose
|
||||||
flunk("Input #{radio.inspect} is not a radio button") unless radio['type'] == 'radio'
|
|
||||||
add_form_data(radio, radio["value"] || "on")
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Verifies that a an option element exists on the current page with the specified
|
# Verifies that a an option element exists on the current page with the specified
|
||||||
|
|
|
@ -7,7 +7,6 @@ module Webrat
|
||||||
end
|
end
|
||||||
|
|
||||||
def matches_text?(text)
|
def matches_text?(text)
|
||||||
# require "rubygems"; require "ruby-debug"; Debugger.start; debugger
|
|
||||||
@element.innerHTML =~ /^\W*#{Regexp.escape(text.to_s)}\b/i
|
@element.innerHTML =~ /^\W*#{Regexp.escape(text.to_s)}\b/i
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,78 +1,89 @@
|
||||||
# require File.dirname(__FILE__) + "/helper"
|
require File.dirname(__FILE__) + "/helper"
|
||||||
#
|
|
||||||
# class ChoosesTest < Test::Unit::TestCase
|
class ChoosesTest < Test::Unit::TestCase
|
||||||
#
|
|
||||||
# def setup
|
def setup
|
||||||
# @session = ActionController::Integration::Session.new
|
@session = ActionController::Integration::Session.new
|
||||||
# @session.stubs(:assert_response)
|
@session.stubs(:assert_response)
|
||||||
# @session.stubs(:get_via_redirect)
|
@session.stubs(:get_via_redirect)
|
||||||
# @session.stubs(:response).returns(@response=mock)
|
@session.stubs(:response).returns(@response=mock)
|
||||||
# end
|
end
|
||||||
#
|
|
||||||
# def test_should_fail_if_no_radio_buttons_found
|
def test_should_fail_if_no_radio_buttons_found
|
||||||
# @response.stubs(:body).returns(<<-EOS)
|
@response.stubs(:body).returns(<<-EOS)
|
||||||
# <form method="post" action="/login">
|
<form method="post" action="/login">
|
||||||
# </form>
|
</form>
|
||||||
# EOS
|
EOS
|
||||||
#
|
|
||||||
# assert_raises RuntimeError do
|
assert_raises RuntimeError do
|
||||||
# @session.chooses "first option"
|
@session.chooses "first option"
|
||||||
# end
|
end
|
||||||
# end
|
end
|
||||||
#
|
|
||||||
# def test_should_fail_if_input_is_not_a_radio_button
|
def test_should_fail_if_input_is_not_a_radio_button
|
||||||
# @response.stubs(:body).returns(<<-EOS)
|
@response.stubs(:body).returns(<<-EOS)
|
||||||
# <form method="post" action="/login">
|
<form method="post" action="/login">
|
||||||
# <input type="text" name="first_option" />
|
<input type="text" name="first_option" />
|
||||||
# </form>
|
</form>
|
||||||
# EOS
|
EOS
|
||||||
#
|
|
||||||
# assert_raises RuntimeError do
|
assert_raises RuntimeError do
|
||||||
# @session.chooses "first_option"
|
@session.chooses "first_option"
|
||||||
# end
|
end
|
||||||
# end
|
end
|
||||||
#
|
|
||||||
# def test_should_check_rails_style_radio_buttons
|
def test_should_check_rails_style_radio_buttons
|
||||||
# @response.stubs(:body).returns(<<-EOS)
|
@response.stubs(:body).returns(<<-EOS)
|
||||||
# <form method="get" action="/login">
|
<form method="get" action="/login">
|
||||||
# <input id="user_gender_male" name="user[gender]" type="radio" value="M" />
|
<input id="user_gender_male" name="user[gender]" type="radio" value="M" />
|
||||||
# <label for="user_gender_male">Male</label>
|
<label for="user_gender_male">Male</label>
|
||||||
# <input id="user_gender_female" name="user[gender]" type="radio" value="F" />
|
<input id="user_gender_female" name="user[gender]" type="radio" value="F" />
|
||||||
# <label for="user_gender_female">Female</label>
|
<label for="user_gender_female">Female</label>
|
||||||
# <input type="submit" />
|
<input type="submit" />
|
||||||
# </form>
|
</form>
|
||||||
# EOS
|
EOS
|
||||||
# @session.expects(:get_via_redirect).with("/login", "user" => {"gender" => "M"})
|
@session.expects(:get_via_redirect).with("/login", "user" => {"gender" => "M"})
|
||||||
# @session.chooses "Male"
|
@session.chooses "Male"
|
||||||
# @session.clicks_button
|
@session.clicks_button
|
||||||
# end
|
end
|
||||||
#
|
|
||||||
# def test_should_only_submit_last_chosen_value
|
def test_should_only_submit_last_chosen_value
|
||||||
# @response.stubs(:body).returns(<<-EOS)
|
@response.stubs(:body).returns(<<-EOS)
|
||||||
# <form method="get" action="/login">
|
<form method="get" action="/login">
|
||||||
# <input id="user_gender_male" name="user[gender]" type="radio" value="M" />
|
<input id="user_gender_male" name="user[gender]" type="radio" value="M" />
|
||||||
# <label for="user_gender_male">Male</label>
|
<label for="user_gender_male">Male</label>
|
||||||
# <input id="user_gender_female" name="user[gender]" type="radio" value="F" />
|
<input id="user_gender_female" name="user[gender]" type="radio" value="F" />
|
||||||
# <label for="user_gender_female">Female</label>
|
<label for="user_gender_female">Female</label>
|
||||||
# <input type="submit" />
|
<input type="submit" />
|
||||||
# </form>
|
</form>
|
||||||
# EOS
|
EOS
|
||||||
# @session.expects(:get_via_redirect).with("/login", "user" => {"gender" => "M"})
|
@session.expects(:get_via_redirect).with("/login", "user" => {"gender" => "M"})
|
||||||
# @session.chooses "Female"
|
@session.chooses "Female"
|
||||||
# @session.chooses "Male"
|
@session.chooses "Male"
|
||||||
# @session.clicks_button
|
@session.clicks_button
|
||||||
# end
|
end
|
||||||
#
|
|
||||||
# def test_should_result_in_the_value_on_being_posted_if_not_specified
|
def test_should_result_in_the_value_on_being_posted_if_not_specified
|
||||||
# @response.stubs(:body).returns(<<-EOS)
|
@response.stubs(:body).returns(<<-EOS)
|
||||||
# <form method="post" action="/login">
|
<form method="post" action="/login">
|
||||||
# <input type="radio" name="first_option" />
|
<input type="radio" name="first_option" />
|
||||||
# <input type="submit" />
|
<input type="submit" />
|
||||||
# </form>
|
</form>
|
||||||
# EOS
|
EOS
|
||||||
# @session.expects(:post_via_redirect).with("/login", "first_option" => "on")
|
@session.expects(:post_via_redirect).with("/login", "first_option" => "on")
|
||||||
# @session.chooses "first_option"
|
@session.chooses "first_option"
|
||||||
# @session.clicks_button
|
@session.clicks_button
|
||||||
# end
|
end
|
||||||
#
|
|
||||||
# end
|
def test_should_result_in_the_value_on_being_posted_if_not_specified_and_checked_by_default
|
||||||
|
@response.stubs(:body).returns(<<-EOS)
|
||||||
|
<form method="post" action="/login">
|
||||||
|
<input type="radio" name="first_option" checked="checked"/>
|
||||||
|
<input type="submit" />
|
||||||
|
</form>
|
||||||
|
EOS
|
||||||
|
@session.expects(:post_via_redirect).with("/login", "first_option" => "on")
|
||||||
|
@session.clicks_button
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
Loading…
Reference in New Issue