From 53f304ad325f59ccd623f3f8aeedc1738e86c65a Mon Sep 17 00:00:00 2001
From: Thomas Walpole
Date: Thu, 29 Dec 2016 15:49:36 -0800
Subject: [PATCH] Add support for fieldset disabled attribute to rack-test
driver
---
lib/capybara/rack_test/node.rb | 4 ++--
lib/capybara/spec/session/fill_in_spec.rb | 2 +-
lib/capybara/spec/session/find_field_spec.rb | 1 +
lib/capybara/spec/session/node_spec.rb | 13 +++++++++++
lib/capybara/spec/views/form.erb | 24 ++++++++++++++++++++
5 files changed, 41 insertions(+), 3 deletions(-)
diff --git a/lib/capybara/rack_test/node.rb b/lib/capybara/rack_test/node.rb
index 0a142920..ff8be6b2 100644
--- a/lib/capybara/rack_test/node.rb
+++ b/lib/capybara/rack_test/node.rb
@@ -91,9 +91,9 @@ class Capybara::RackTest::Node < Capybara::Driver::Node
def disabled?
if %w(option optgroup).include? tag_name
- string_node.disabled? || find_xpath("parent::*")[0].disabled?
+ string_node.disabled? || (find_xpath("parent::optgroup")[0] || find_xpath("parent::select")[0]).disabled?
else
- string_node.disabled?
+ !!(string_node.disabled? || ((fieldset = find_xpath("parent::fieldset")[0]) && fieldset.disabled?))
end
end
diff --git a/lib/capybara/spec/session/fill_in_spec.rb b/lib/capybara/spec/session/fill_in_spec.rb
index ddc11f23..d6124625 100644
--- a/lib/capybara/spec/session/fill_in_spec.rb
+++ b/lib/capybara/spec/session/fill_in_spec.rb
@@ -100,7 +100,7 @@ Capybara::SpecHelper.spec "#fill_in" do
expect(extract_results(@session)['password']).to eq('supasikrit')
end
- it "should fill in a field based on current value", twtw: true do
+ it "should fill in a field based on current value" do
@session.fill_in(currently_with: 'John', with: 'Thomas')
@session.click_button('awesome')
expect(extract_results(@session)['first_name']).to eq('Thomas')
diff --git a/lib/capybara/spec/session/find_field_spec.rb b/lib/capybara/spec/session/find_field_spec.rb
index 851e85aa..5720eab9 100644
--- a/lib/capybara/spec/session/find_field_spec.rb
+++ b/lib/capybara/spec/session/find_field_spec.rb
@@ -62,6 +62,7 @@ Capybara::SpecHelper.spec '#find_field' do
context "with :disabled option" do
it "should find disabled fields when true" do
expect(@session.find_field("Disabled Checkbox", disabled: true)[:name]).to eq("form[disabled_checkbox]")
+ expect(@session.find_field("form_disabled_fieldset_child", disabled: true)[:name]).to eq("form[disabled_fieldset_child]")
end
it "should not find disabled fields when false" do
diff --git a/lib/capybara/spec/session/node_spec.rb b/lib/capybara/spec/session/node_spec.rb
index 77049e3e..d7d78c30 100644
--- a/lib/capybara/spec/session/node_spec.rb
+++ b/lib/capybara/spec/session/node_spec.rb
@@ -169,6 +169,19 @@ Capybara::SpecHelper.spec "node" do
expect(@session.find('//select[@id="form_title"]/option[1]')).not_to be_disabled
end
+ it "should see enabled options in disabled optgroup as disabled" do
+ @session.visit('/form')
+ expect(@session.find('//option', text: "A.B.1")).to be_disabled
+ expect(@session.find('//option', text: "A.2")).not_to be_disabled
+ end
+
+ it "should see inputs in a disabled select as disabled" do
+ @session.visit('/form')
+ expect(@session.find('//input[@id="form_disabled_fieldset_child"]')).to be_disabled
+ expect(@session.find('//input[@id="form_enabled_fieldset_child"]')).not_to be_disabled
+ end
+
+
it "should be boolean" do
@session.visit('/form')
expect(@session.find('//select[@id="form_disabled_select"]/option').disabled?).to be true
diff --git a/lib/capybara/spec/views/form.erb b/lib/capybara/spec/views/form.erb
index 6fa96046..29e60f75 100644
--- a/lib/capybara/spec/views/form.erb
+++ b/lib/capybara/spec/views/form.erb
@@ -343,6 +343,30 @@ New line after and before textarea tag