mirror of
https://github.com/teamcapybara/capybara.git
synced 2022-11-09 12:08:07 -05:00
267 lines
7.6 KiB
Ruby
267 lines
7.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'minitest/spec'
|
|
|
|
module Capybara
|
|
module Minitest
|
|
module Expectations
|
|
##
|
|
# Expectation that there is an ancestor
|
|
#
|
|
# @!method must_have_ancestor
|
|
# See {Capybara::Node::Matchers#has_ancestor?}
|
|
|
|
##
|
|
# Expectation that there is button
|
|
#
|
|
# @!method must_have_button
|
|
# See {Capybara::Node::Matchers#has_button?}
|
|
|
|
##
|
|
# Expectation that there is no button
|
|
#
|
|
# @!method wont_have_button
|
|
# See {Capybara::Node::Matchers#has_no_button?}
|
|
|
|
##
|
|
# Expectation that there is checked_field
|
|
#
|
|
# @!method must_have_checked_field
|
|
# See {Capybara::Node::Matchers#has_checked_field?}
|
|
|
|
##
|
|
# Expectation that there is no checked_field
|
|
#
|
|
# @!method wont_have_checked_field
|
|
# See {Capybara::Node::Matchers#has_no_checked_field?}
|
|
|
|
##
|
|
# Expectation that there is unchecked_field
|
|
#
|
|
# @!method must_have_unchecked_field
|
|
# See {Capybara::Node::Matchers#has_unchecked_field?}
|
|
|
|
##
|
|
# Expectation that there is no unchecked_field
|
|
#
|
|
# @!method wont_have_unchecked_field
|
|
# See {Capybara::Node::Matchers#has_no_unchecked_field?}
|
|
|
|
##
|
|
# Expectation that page content does match
|
|
#
|
|
# @!method must_have_content
|
|
# See {Capybara::Node::Matchers#has_content?}
|
|
|
|
##
|
|
# Expectation that page content does not match
|
|
#
|
|
# @!method wont_have_content
|
|
# See {Capybara::Node::Matchers#has_no_content?}
|
|
|
|
##
|
|
# Expectation that there is css
|
|
#
|
|
# @!method must_have_css
|
|
# See {Capybara::Node::Matchers#has_css?}
|
|
|
|
##
|
|
# Expectation that there is no css
|
|
#
|
|
# @!method wont_have_css
|
|
# See {Capybara::Node::Matchers#has_no_css?}
|
|
|
|
##
|
|
# Expectation that current path matches
|
|
#
|
|
# @!method must_have_current_path
|
|
# See {Capybara::SessionMatchers#has_current_path?}
|
|
|
|
##
|
|
# Expectation that current page does not match
|
|
#
|
|
# @!method wont_have_current_path
|
|
# See {Capybara::SessionMatchers#has_no_current_path?}
|
|
|
|
##
|
|
# Expectation that there is field
|
|
#
|
|
# @!method must_have_field
|
|
# See {Capybara::Node::Matchers#has_field?}
|
|
|
|
##
|
|
# Expectation that there is no field
|
|
#
|
|
# @!method wont_have_field
|
|
# See {Capybara::Node::Matchers#has_no_field?}
|
|
|
|
##
|
|
# Expectation that there is link
|
|
#
|
|
# @!method must_have_link
|
|
# See {Capybara::Node::Matchers#has_link?}
|
|
|
|
##
|
|
# Expectation that there is no link
|
|
#
|
|
# @!method wont_have_link
|
|
# See {Capybara::Node::Matchers#has_no_link?}
|
|
|
|
##
|
|
# Expectation that page text does match
|
|
#
|
|
# @!method must_have_text
|
|
# See {Capybara::Node::Matchers#has_text?}
|
|
|
|
##
|
|
# Expectation that page text does not match
|
|
#
|
|
# @!method wont_have_text
|
|
# See {Capybara::Node::Matchers#has_no_text?}
|
|
|
|
##
|
|
# Expectation that page title does match
|
|
#
|
|
# @!method must_have_title
|
|
# See {Capybara::Node::DocumentMatchers#has_title?}
|
|
|
|
##
|
|
# Expectation that page title does not match
|
|
#
|
|
# @!method wont_have_title
|
|
# See {Capybara::Node::DocumentMatchers#has_no_title?}
|
|
|
|
##
|
|
# Expectation that there is select
|
|
#
|
|
# @!method must_have_select
|
|
# See {Capybara::Node::Matchers#has_select?}
|
|
|
|
##
|
|
# Expectation that there is no select
|
|
#
|
|
# @!method wont_have_select
|
|
# See {Capybara::Node::Matchers#has_no_select?}
|
|
|
|
##
|
|
# Expectation that there is a selector
|
|
#
|
|
# @!method must_have_selector
|
|
# See {Capybara::Node::Matchers#has_selector?}
|
|
|
|
##
|
|
# Expectation that there is no selector
|
|
#
|
|
# @!method wont_have_selector
|
|
# See {Capybara::Node::Matchers#has_no_selector?}
|
|
|
|
##
|
|
# Expectation that all of the provided selectors are present
|
|
#
|
|
# @!method must_have_all_of_selectors
|
|
# See {Capybara::Node::Matchers#assert_all_of_selectors}
|
|
|
|
##
|
|
# Expectation that none of the provided selectors are present
|
|
#
|
|
# @!method must_have_none_of_selectors
|
|
# See {Capybara::Node::Matchers#assert_none_of_selectors}
|
|
|
|
##
|
|
# Expectation that any of the provided selectors are present
|
|
#
|
|
# @!method must_have_any_of_selectors
|
|
# See {Capybara::Node::Matchers#assert_any_of_selectors}
|
|
|
|
##
|
|
# Expectation that there is a sibling
|
|
#
|
|
# @!method must_have_sibling
|
|
# See {Capybara::Node::Matchers#has_sibling?}
|
|
|
|
##
|
|
# Expectation that element has style
|
|
#
|
|
# @!method must_match_style
|
|
# See {Capybara::Node::Matchers#matches_style?}
|
|
|
|
##
|
|
# Expectation that there is table
|
|
#
|
|
# @!method must_have_table
|
|
# See {Capybara::Node::Matchers#has_table?}
|
|
|
|
##
|
|
# Expectation that there is no table
|
|
#
|
|
# @!method wont_have_table
|
|
# See {Capybara::Node::Matchers#has_no_table?}
|
|
|
|
##
|
|
# Expectation that there is xpath
|
|
#
|
|
# @!method must_have_xpath
|
|
# See {Capybara::Node::Matchers#has_xpath?}
|
|
|
|
##
|
|
# Expectation that there is no xpath
|
|
#
|
|
# @!method wont_have_xpath
|
|
# See {Capybara::Node::Matchers#has_no_xpath?}
|
|
|
|
# This currently doesn't work for Ruby 2.8 due to Minitest not forwarding keyword args separately
|
|
# %w[text content title current_path].each do |assertion|
|
|
# infect_an_assertion "assert_#{assertion}", "must_have_#{assertion}", :reverse
|
|
# infect_an_assertion "refute_#{assertion}", "wont_have_#{assertion}", :reverse
|
|
# end
|
|
|
|
# rubocop:disable Style/MultilineBlockChain
|
|
(%w[text content title current_path
|
|
selector xpath css link button field select table checked_field unchecked_field
|
|
ancestor sibling].flat_map do |assertion|
|
|
[%W[assert_#{assertion} must_have_#{assertion}],
|
|
%W[refute_#{assertion} wont_have_#{assertion}]]
|
|
end + [%w[assert_all_of_selectors must_have_all_of_selectors],
|
|
%w[assert_none_of_selectors must_have_none_of_selectors],
|
|
%w[assert_any_of_selectors must_have_any_of_selectors],
|
|
%w[assert_matches_style must_match_style]] +
|
|
%w[selector xpath css].flat_map do |assertion|
|
|
[%W[assert_matches_#{assertion} must_match_#{assertion}],
|
|
%W[refute_matches_#{assertion} wont_match_#{assertion}]]
|
|
end).each do |(meth, new_name)|
|
|
class_eval <<-ASSERTION, __FILE__, __LINE__ + 1
|
|
def #{new_name} *args, **kw_args, &block
|
|
::Minitest::Expectation.new(self, ::Minitest::Spec.current).#{new_name}(*args, **kw_args, &block)
|
|
end
|
|
ASSERTION
|
|
|
|
::Minitest::Expectation.class_eval <<-ASSERTION, __FILE__, __LINE__ + 1
|
|
def #{new_name} *args, **kw_args, &block
|
|
raise "Calling ##{new_name} outside of test." unless ctx
|
|
ctx.#{meth}(target, *args, **kw_args, &block)
|
|
end
|
|
ASSERTION
|
|
end
|
|
# rubocop:enable Style/MultilineBlockChain
|
|
|
|
##
|
|
# @deprecated
|
|
def must_have_style(...)
|
|
warn 'must_have_style is deprecated, please use must_match_style'
|
|
must_match_style(...)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
class Capybara::Session
|
|
include Capybara::Minitest::Expectations unless ENV['MT_NO_EXPECTATIONS']
|
|
end
|
|
|
|
class Capybara::Node::Base
|
|
include Capybara::Minitest::Expectations unless ENV['MT_NO_EXPECTATIONS']
|
|
end
|
|
|
|
class Capybara::Node::Simple
|
|
include Capybara::Minitest::Expectations unless ENV['MT_NO_EXPECTATIONS']
|
|
end
|