mirror of
https://github.com/teamcapybara/capybara.git
synced 2022-11-09 12:08:07 -05:00
skip_if value does not need to be included in valid values for filter
This commit is contained in:
parent
1c8406e5e7
commit
5542d127b0
2 changed files with 24 additions and 14 deletions
|
@ -17,14 +17,24 @@ module Capybara
|
|||
end
|
||||
|
||||
def matches?(node, value)
|
||||
return true if skip?(value)
|
||||
|
||||
if @options.has_key?(:valid_values) && !Array(@options[:valid_values]).include?(value)
|
||||
warn "Invalid value #{value.inspect} passed to filter #{@name}"
|
||||
end
|
||||
if @options.has_key?(:skip_if) && value == @options[:skip_if]
|
||||
true
|
||||
else
|
||||
@block.call(node, value)
|
||||
msg = "Invalid value #{value.inspect} passed to filter #{@name} - "
|
||||
if default?
|
||||
warn msg + "defaulting to #{default}"
|
||||
value = default
|
||||
else
|
||||
warn msg + "skipping"
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
@block.call(node, value)
|
||||
end
|
||||
|
||||
def skip?(value)
|
||||
@options.has_key?(:skip_if) && value == @options[:skip_if]
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -119,7 +129,7 @@ Capybara.add_selector(:field) do
|
|||
xpath { |locator| XPath::HTML.field(locator) }
|
||||
filter(:checked, boolean: true) { |node, value| not(value ^ node.checked?) }
|
||||
filter(:unchecked, boolean: true) { |node, value| (value ^ node.checked?) }
|
||||
filter(:disabled, default: false, valid_values: [true, false, :all], skip_if: :all) { |node, value| not(value ^ node.disabled?) }
|
||||
filter(:disabled, default: false, boolean: true, skip_if: :all) { |node, value| not(value ^ node.disabled?) }
|
||||
filter(:readonly, boolean: true) { |node, value| not(value ^ node[:readonly]) }
|
||||
filter(:with) { |node, with| node.value == with.to_s }
|
||||
filter(:type) do |node, type|
|
||||
|
@ -166,14 +176,14 @@ end
|
|||
|
||||
Capybara.add_selector(:button) do
|
||||
xpath { |locator| XPath::HTML.button(locator) }
|
||||
filter(:disabled, default: false, valid_values: [true, false, :all], skip_if: :all) { |node, value| not(value ^ node.disabled?) }
|
||||
filter(:disabled, default: false, boolean: true, skip_if: :all) { |node, value| not(value ^ node.disabled?) }
|
||||
describe { |options| " that is disabled" if options[:disabled] == true }
|
||||
end
|
||||
|
||||
Capybara.add_selector(:fillable_field) do
|
||||
label "field"
|
||||
xpath { |locator| XPath::HTML.fillable_field(locator) }
|
||||
filter(:disabled, default: false, valid_values: [true, false, :all], skip_if: :all) { |node, value| not(value ^ node.disabled?) }
|
||||
filter(:disabled, default: false, boolean: true, skip_if: :all) { |node, value| not(value ^ node.disabled?) }
|
||||
describe { |options| " that is disabled" if options[:disabled] == true }
|
||||
end
|
||||
|
||||
|
@ -183,7 +193,7 @@ Capybara.add_selector(:radio_button) do
|
|||
filter(:checked, boolean: true) { |node, value| not(value ^ node.checked?) }
|
||||
filter(:unchecked, boolean: true) { |node, value| (value ^ node.checked?) }
|
||||
filter(:option) { |node, value| node.value == value.to_s }
|
||||
filter(:disabled, default: false, valid_values: [true, false, :all], skip_if: :all) { |node, value| not(value ^ node.disabled?) }
|
||||
filter(:disabled, default: false, boolean: true, skip_if: :all) { |node, value| not(value ^ node.disabled?) }
|
||||
describe do |options|
|
||||
desc, states = "", []
|
||||
desc << " with value #{options[:option].inspect}" if options[:option]
|
||||
|
@ -200,7 +210,7 @@ Capybara.add_selector(:checkbox) do
|
|||
filter(:checked, boolean: true) { |node, value| not(value ^ node.checked?) }
|
||||
filter(:unchecked, boolean: true) { |node, value| (value ^ node.checked?) }
|
||||
filter(:option) { |node, value| node.value == value.to_s }
|
||||
filter(:disabled, default: false, valid_values: [true, false, :all], skip_if: :all) { |node, value| not(value ^ node.disabled?) }
|
||||
filter(:disabled, default: false, boolean: true, skip_if: :all) { |node, value| not(value ^ node.disabled?) }
|
||||
describe do |options|
|
||||
desc, states = "", []
|
||||
desc << " with value #{options[:option].inspect}" if options[:option]
|
||||
|
@ -224,7 +234,7 @@ Capybara.add_selector(:select) do
|
|||
actual = node.all(:xpath, './/option').select { |option| option.selected? }.map { |option| option.text }
|
||||
[selected].flatten.sort == actual.sort
|
||||
end
|
||||
filter(:disabled, default: false, valid_values: [true, false, :all], skip_if: :all) { |node, value| not(value ^ node.disabled?) }
|
||||
filter(:disabled, default: false, boolean: true, skip_if: :all) { |node, value| not(value ^ node.disabled?) }
|
||||
describe do |options|
|
||||
desc = ""
|
||||
desc << " with options #{options[:options].inspect}" if options[:options]
|
||||
|
@ -242,7 +252,7 @@ end
|
|||
Capybara.add_selector(:file_field) do
|
||||
label "file field"
|
||||
xpath { |locator| XPath::HTML.file_field(locator) }
|
||||
filter(:disabled, default: false, valid_values: [true, false, :all], skip_if: :all) { |node, value| not(value ^ node.disabled?) }
|
||||
filter(:disabled, default: false, boolean: true, skip_if: :all) { |node, value| not(value ^ node.disabled?) }
|
||||
describe { |options| " that is disabled" if options[:disabled] == true}
|
||||
end
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ Capybara::SpecHelper.spec '#find_field' do
|
|||
|
||||
it "should warn if filter option is invalid" do
|
||||
expect_any_instance_of(Kernel).to receive(:warn).
|
||||
with('Invalid value nil passed to filter disabled')
|
||||
with('Invalid value nil passed to filter disabled - defaulting to false')
|
||||
@session.find_field('Dog', disabled: nil)
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue