filter type should not need to specify value - default to true

This commit is contained in:
Thomas Walpole 2016-08-29 11:40:53 -07:00
parent 64571d0d9f
commit d6972e79a7
3 changed files with 15 additions and 11 deletions

View File

@ -2,10 +2,10 @@
require 'capybara/selector/selector'
Capybara::Selector::FilterSet.add(:_field) do
filter(:checked, boolean: true) { |node, value| not(value ^ node.checked?) }
filter(:unchecked, boolean: true) { |node, value| (value ^ node.checked?) }
filter(:disabled, default: false, boolean: true, skip_if: :all) { |node, value| not(value ^ node.disabled?) }
filter(:multiple, boolean: true) { |node, value| !(value ^ node.multiple?) }
filter(:checked, :boolean) { |node, value| not(value ^ node.checked?) }
filter(:unchecked, :boolean) { |node, value| (value ^ node.checked?) }
filter(:disabled, :boolean, default: false, skip_if: :all) { |node, value| not(value ^ node.disabled?) }
filter(:multiple, :boolean) { |node, value| !(value ^ node.multiple?) }
describe do |options|
desc, states = String.new, []
@ -47,7 +47,7 @@ Capybara.add_selector(:field) do
filter_set(:_field) # checked/unchecked/disabled/multiple
filter(:readonly, boolean: true) { |node, value| not(value ^ node.readonly?) }
filter(:readonly, :boolean) { |node, value| not(value ^ node.readonly?) }
filter(:with) do |node, with|
with.is_a?(Regexp) ? node.value =~ with : node.value == with.to_s
end
@ -126,7 +126,7 @@ Capybara.add_selector(:button) do
res_xpath
end
filter(:disabled, default: false, boolean: true, skip_if: :all) { |node, value| not(value ^ node.disabled?) }
filter(:disabled, :boolean, default: false, skip_if: :all) { |node, value| not(value ^ node.disabled?) }
describe do |options|
desc = String.new
@ -142,7 +142,7 @@ Capybara.add_selector(:link_or_button) do
self.class.all.values_at(:link, :button).map {|selector| selector.xpath.call(locator, options)}.reduce(:+)
end
filter(:disabled, default: false, boolean: true, skip_if: :all) { |node, value| node.tag_name == "a" or not(value ^ node.disabled?) }
filter(:disabled, :boolean, default: false, skip_if: :all) { |node, value| node.tag_name == "a" or not(value ^ node.disabled?) }
describe { |options| " that is disabled" if options[:disabled] }
end
@ -246,8 +246,8 @@ Capybara.add_selector(:option) do
xpath
end
filter(:disabled, boolean: true) { |node, value| not(value ^ node.disabled?) }
filter(:selected, boolean: true) { |node, value| not(value ^ node.selected?) }
filter(:disabled, :boolean) { |node, value| not(value ^ node.disabled?) }
filter(:selected, :boolean) { |node, value| not(value ^ node.selected?) }
describe do |options|
desc = String.new

View File

@ -12,7 +12,9 @@ module Capybara
instance_eval(&block)
end
def filter(name, options={}, &block)
def filter(name, *types_and_options, &block)
options = types_and_options.last.is_a?(Hash) ? types_and_options.pop.dup : {}
types_and_options.each { |k| options[k] = true}
filters[name] = Filter.new(name, block, options)
end

View File

@ -77,7 +77,9 @@ module Capybara
@match and @match.call(locator)
end
def filter(name, options={}, &block)
def filter(name, *types_and_options, &block)
options = types_and_options.last.is_a?(Hash) ? types_and_options.pop.dup : {}
types_and_options.each { |k| options[k] = true}
custom_filters[name] = Filter.new(name, block, options)
end