Sha256: d886dae09f773b7185a27a095972e15b58cf5e126693bca7e90e639d25824696

Contents?: true

Size: 1.97 KB

Versions: 186

Compression:

Stored size: 1.97 KB

Contents

class EqualElementMatcher
  def initialize(element, attributes = nil, content = nil, options = {})
    @element = element
    @attributes = attributes
    @content = content
    @options = options
  end
 
  def matches?(actual)
    @actual = actual
    
    matched = true
    
    if @options[:not_closed]
      matched &&= actual =~ /^#{Regexp.quote("<" + @element)}.*#{Regexp.quote(">" + (@content || ''))}$/
    else
      matched &&= actual =~ /^#{Regexp.quote("<" + @element)}/
      matched &&= actual =~ /#{Regexp.quote("</" + @element + ">")}$/
      matched &&= actual =~ /#{Regexp.quote(">" + @content + "</")}/ if @content      
    end
    
    if @attributes
      if @attributes.empty?
        matched &&= actual.scan(/\w+\=\"(.*)\"/).size == 0
      else
        @attributes.each do |key, value|
          if value == true
            matched &&= (actual.scan(/#{Regexp.quote(key)}(\s|>)/).size == 1)
          else
            matched &&= (actual.scan(%Q{ #{key}="#{value}"}).size == 1)
          end
        end        
      end
    end
    
    !!matched
  end
 
  def failure_message
    ["Expected #{@actual.pretty_inspect}",
     "to be a '#{@element}' element with #{attributes_for_failure_message} and #{content_for_failure_message}"]
  end
 
  def negative_failure_message
    ["Expected #{@actual.pretty_inspect}",
      "not to be a '#{@element}' element with #{attributes_for_failure_message} and #{content_for_failure_message}"]
  end

  def attributes_for_failure_message
    if @attributes
      if @attributes.empty?
        "no attributes"
      else
        @attributes.inject([]) { |memo, n| memo << %Q{#{n[0]}="#{n[1]}"} }.join(" ")
      end
    else
      "any attributes"
    end
  end
 
  def content_for_failure_message
    if @content
      if @content.empty?
        "no content"
      else  
        "#{@content.inspect} as content"
      end
    else
      "any content"
    end
  end
end
 
class Object
  def equal_element(*args)
    EqualElementMatcher.new(*args)
  end
end

Version data entries

186 entries across 162 versions & 4 rubygems

Version Path
rhodes-5.5.18 lib/extensions/mspec/mspec/matchers/equal_element.rb
rhodes-5.5.17 lib/extensions/mspec/mspec/matchers/equal_element.rb
rhodes-5.5.15 lib/extensions/mspec/mspec/matchers/equal_element.rb
rhodes-5.5.0.22 lib/extensions/mspec/mspec/matchers/equal_element.rb
rhodes-5.5.2 lib/extensions/mspec/mspec/matchers/equal_element.rb
rhodes-5.5.0.7 lib/extensions/mspec/mspec/matchers/equal_element.rb
rhodes-5.5.0.3 lib/extensions/mspec/mspec/matchers/equal_element.rb
rhodes-5.5.0 lib/extensions/mspec/mspec/matchers/equal_element.rb
tauplatform-1.0.3 lib/extensions/mspec/mspec/matchers/equal_element.rb
mspec-1.9.1 lib/mspec/matchers/equal_element.rb
mspec-1.9.0 lib/mspec/matchers/equal_element.rb
tauplatform-1.0.2 lib/extensions/mspec/mspec/matchers/equal_element.rb
tauplatform-1.0.1 lib/extensions/mspec/mspec/matchers/equal_element.rb
mspec-1.8.0 lib/mspec/matchers/equal_element.rb
mspec-1.7.0 lib/mspec/matchers/equal_element.rb
mspec-1.6.0 lib/mspec/matchers/equal_element.rb
mspec-1.5.21 lib/mspec/matchers/equal_element.rb
mspec-1.5.20 lib/mspec/matchers/equal_element.rb
mspec-1.5.19 lib/mspec/matchers/equal_element.rb
mspec-1.5.18 lib/mspec/matchers/equal_element.rb