Sha256: 75bd018d337ea5098979bd370a89b9213365d8c5917e3dc0ccde1a084a542593
Contents?: true
Size: 2 KB
Versions: 2
Compression:
Stored size: 2 KB
Contents
# frozen_string_literal: true if defined?(::RSpec::Expectations::Version) module Capybara module RSpecMatchers module Compound include ::RSpec::Matchers::Composable def and(matcher) And.new(self, matcher) end def and_then(matcher) ::RSpec::Matchers::BuiltIn::Compound::And.new(self, matcher) end def or(matcher) Or.new(self, matcher) end class CapybaraEvaluator def initialize(actual) @actual = actual @match_results = Hash.new { |hsh, matcher| hsh[matcher] = matcher.matches?(@actual) } end def matcher_matches?(matcher) @match_results[matcher] end def reset @match_results.clear end end # @api private module Synchronizer def match(_expected, actual) @evaluator = CapybaraEvaluator.new(actual) syncer = sync_element(actual) begin syncer.synchronize do @evaluator.reset raise ::Capybara::ElementNotFound unless synchronized_match? true end rescue StandardError false end end def sync_element(el) if el.respond_to? :synchronize el elsif el.respond_to? :current_scope el.current_scope else Capybara.string(el) end end end class And < ::RSpec::Matchers::BuiltIn::Compound::And include Synchronizer private def synchronized_match? [matcher_1_matches?, matcher_2_matches?].all? end end class Or < ::RSpec::Matchers::BuiltIn::Compound::Or include Synchronizer private def synchronized_match? [matcher_1_matches?, matcher_2_matches?].any? end end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
capybara-3.10.1 | lib/capybara/rspec/compound.rb |
capybara-3.10.0 | lib/capybara/rspec/compound.rb |