Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Makes have_tag work outside of Merb.
  • Loading branch information
adkron committed Jan 24, 2009
1 parent 0a02105 commit 483559f
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 1 deletion.
1 change: 1 addition & 0 deletions History.txt
Expand Up @@ -37,6 +37,7 @@

* Minor enhancements

* have_tag and the corresponding asserts work outside of merb, including selenium mode. (Amos King)
* Create tmp/pids directory if directory does not exist. (Amos King)
* Added Selenium grid configuration and support. (Amos King && Cornel Borcean)
* Support passing an ActiveRecord model to #within when in Rails mode [#68] (Luke Melia)
Expand Down
2 changes: 1 addition & 1 deletion lib/webrat/selenium/matchers.rb
@@ -1,4 +1,4 @@
require "webrat/selenium/matchers/have_xpath"
require "webrat/selenium/matchers/have_selector"
# require "webrat/core/matchers/have_tag"
require "webrat/selenium/matchers/have_tag"
require "webrat/selenium/matchers/have_content"
72 changes: 72 additions & 0 deletions lib/webrat/selenium/matchers/have_tag.rb
@@ -0,0 +1,72 @@
module Webrat
module Selenium
module Matchers

class HaveTag < HaveSelector #:nodoc:
# ==== Returns
# String:: The failure message.
def failure_message
"expected following output to contain a #{tag_inspect} tag:\n#{@document}"
end

# ==== Returns
# String:: The failure message to be displayed in negative matches.
def negative_failure_message
"expected following output to omit a #{tag_inspect}:\n#{@document}"
end

def tag_inspect
options = @expected.last.dup
content = options.delete(:content)

html = "<#{@expected.first}"
options.each do |k,v|
html << " #{k}='#{v}'"
end

if content
html << ">#{content}</#{@expected.first}>"
else
html << "/>"
end

html
end

def query
options = @expected.last.dup
selector = @expected.first.to_s

selector << ":contains('#{options.delete(:content)}')" if options[:content]

options.each do |key, value|
selector << "[#{key}='#{value}']"
end

Nokogiri::CSS::Parser.parse(selector).map { |ast| ast.to_xpath }
end
end

def have_tag(name, attributes = {}, &block)
HaveTag.new([name, attributes], &block)
end

alias_method :match_tag, :have_tag

# Asserts that the body of the response contains
# the supplied tag with the associated selectors
def assert_have_tag(name, attributes = {})
ht = HaveTag.new([name, attributes])
assert ht.matches?(response), ht.failure_message
end

# Asserts that the body of the response
# does not contain the supplied string or regepx
def assert_have_no_tag(name, attributes = {})
ht = HaveTag.new([name, attributes])
assert !ht.matches?(response), ht.negative_failure_message
end

end
end
end

0 comments on commit 483559f

Please sign in to comment.