rspec2-rails-views-matchers 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +1 -1
- data/README.md +10 -10
- data/Rakefile +0 -7
- data/docs/CHANGELOG.md +16 -0
- data/lib/rspec/rails/views/matchers/have_tag.rb +18 -5
- data/lib/version.rb +1 -1
- data/spec/matchers/have_tag_spec.rb +35 -2
- metadata +4 -4
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -12,23 +12,23 @@ Install
|
|
12
12
|
|
13
13
|
add to your Gemfile(in group :test :) ):
|
14
14
|
|
15
|
-
|
15
|
+
> gem 'rspec2-rails-views-matchers'
|
16
16
|
|
17
17
|
Usage
|
18
18
|
-----
|
19
19
|
|
20
20
|
some examples:
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
without_tag "p", :text => /content/i
|
29
|
-
}
|
22
|
+
> rendered.should have_tag('form',:with => {:action => user_path, :method => 'post'}) do
|
23
|
+
> with_tag "input", :with => { :name => "user[email]", :type => 'email' }
|
24
|
+
> with_tag "input#special_submit", :count => 1
|
25
|
+
> without_tag "h1", :text => 'unneeded tag'
|
26
|
+
> without_tag "p", :text => /content/i
|
27
|
+
> end
|
30
28
|
|
31
29
|
More info
|
32
30
|
---------
|
33
31
|
|
34
|
-
[
|
32
|
+
You can find [on RubyDoc](http://rubydoc.info/github/kucaahbe/rspec2-rails-views-matchers/master/RSpec/Matchers), take a look at {RSpec::Matchers#have\_tag have\_tag} method.
|
33
|
+
|
34
|
+
Also, please read {file:docs/CHANGELOG.md CHANGELOG}, it might be helpful.
|
data/Rakefile
CHANGED
@@ -1,14 +1,7 @@
|
|
1
1
|
require 'bundler'
|
2
2
|
require 'rspec/core/rake_task'
|
3
|
-
require 'rake/rdoctask'
|
4
3
|
Bundler::GemHelper.install_tasks
|
5
4
|
|
6
5
|
task :default => :spec
|
7
6
|
|
8
7
|
RSpec::Core::RakeTask.new
|
9
|
-
|
10
|
-
Rake::RDocTask.new(:rdoc) do |rd|
|
11
|
-
rd.main = "README.rdoc"
|
12
|
-
rd.rdoc_files.include("README.rdoc", "lib/**/*.rb")
|
13
|
-
rd.options << "--all"
|
14
|
-
end
|
data/docs/CHANGELOG.md
CHANGED
@@ -8,6 +8,22 @@ unreleased(TODO)
|
|
8
8
|
* add description
|
9
9
|
* raise exception when wrong parametres specified(:count and :minimum simultaneously)
|
10
10
|
* organize code
|
11
|
+
* add more matchers(have\_form,with\_input)?
|
12
|
+
|
13
|
+
0.0.3
|
14
|
+
-----
|
15
|
+
|
16
|
+
* now following will work:
|
17
|
+
|
18
|
+
> rendered.should have_tag('div') do
|
19
|
+
> with_tag('p')
|
20
|
+
> end
|
21
|
+
|
22
|
+
* tags can be specified via symbol
|
23
|
+
* classes can be specified via array or string(class-names separated by spaces), so following will work:
|
24
|
+
|
25
|
+
> '<div class="one two">'.should have_tag('div', :with => { :class => ['two', 'one'] })
|
26
|
+
> '<div class="one two">'.should have_tag('div', :with => { :class => 'two one' })
|
11
27
|
|
12
28
|
0.0.2
|
13
29
|
------
|
@@ -10,9 +10,18 @@ module RSpec
|
|
10
10
|
attr_reader :parent_scope, :current_scope
|
11
11
|
|
12
12
|
def initialize tag, options={}, &block
|
13
|
-
@tag, @options, @block = tag, options, block
|
13
|
+
@tag, @options, @block = tag.to_s, options, block
|
14
14
|
|
15
15
|
if attrs = @options.delete(:with)
|
16
|
+
if classes=attrs.delete(:class)
|
17
|
+
classes = case classes
|
18
|
+
when Array
|
19
|
+
classes.join('.')
|
20
|
+
when String
|
21
|
+
classes.gsub("\s",'.')
|
22
|
+
end
|
23
|
+
@tag << '.'+classes
|
24
|
+
end
|
16
25
|
html_attrs_string=''
|
17
26
|
attrs.each_pair { |k,v| html_attrs_string << %Q{[#{k.to_s}='#{v.to_s}']} }
|
18
27
|
@tag << html_attrs_string
|
@@ -23,7 +32,8 @@ module RSpec
|
|
23
32
|
@options[:maximum] ||= @options.delete(:max)
|
24
33
|
end
|
25
34
|
|
26
|
-
def matches?
|
35
|
+
def matches? document, &block
|
36
|
+
@block = block if block
|
27
37
|
|
28
38
|
case document
|
29
39
|
when String
|
@@ -104,11 +114,12 @@ module RSpec
|
|
104
114
|
#
|
105
115
|
# @param [String] tag css selector for tag you want to match
|
106
116
|
# @param [Hash] options options hash(see below)
|
117
|
+
# @option options [Hash] :with hash with other attributes, within this, key :class have special meaning, you may specify it as array of expected classes or string of classes separated by spaces, order does not matter
|
107
118
|
# @option options [Fixnum] :count count of matched tags(DO NOT USE :count with :minimum(:min) or :maximum(:max)*)
|
108
119
|
# @option options [Range] :count count of matched tags should be between range minimum and maximum values
|
109
|
-
# @option options [Fixnum] :minimum
|
120
|
+
# @option options [Fixnum] :minimum minimum count of elements to match
|
110
121
|
# @option options [Fixnum] :min same as :minimum
|
111
|
-
# @option options [Fixnum] :maximum
|
122
|
+
# @option options [Fixnum] :maximum maximum count of elements to match
|
112
123
|
# @option options [Fixnum] :max same as :maximum
|
113
124
|
#
|
114
125
|
#
|
@@ -116,7 +127,7 @@ module RSpec
|
|
116
127
|
# rendered.should have_tag('div')
|
117
128
|
# rendered.should have_tag('h1.header')
|
118
129
|
# rendered.should have_tag('div#footer')
|
119
|
-
# rendered.should have_tag('input#email', with => { :name => 'user[email]', :type => 'email' } )
|
130
|
+
# rendered.should have_tag('input#email', :with => { :name => 'user[email]', :type => 'email' } )
|
120
131
|
# rendered.should have_tag('div', :count => 3) # matches exactly 3 'div' tags
|
121
132
|
# rendered.should have_tag('div', :count => 3..7) # something like have_tag('div', :minimum => 3, :maximum => 7)
|
122
133
|
# rendered.should have_tag('div', :minimum => 3) # matches more(or equal) than 3 'div' tags
|
@@ -128,6 +139,8 @@ module RSpec
|
|
128
139
|
# <h1>some html document</h1>
|
129
140
|
# </body>
|
130
141
|
# </html>".should have_tag('body') { with_tag('h1', :text => 'some html document') }
|
142
|
+
# '<div class="one two">'.should have_tag('div', :with => { :class => ['two', 'one'] })
|
143
|
+
# '<div class="one two">'.should have_tag('div', :with => { :class => 'two one' })
|
131
144
|
def have_tag tag,options={}, &block
|
132
145
|
@__current_scope_for_nokogiri_matcher = NokogiriMatcher.new(tag, options, &block)
|
133
146
|
end
|
data/lib/version.rb
CHANGED
@@ -9,7 +9,7 @@ describe 'have_tag' do
|
|
9
9
|
|
10
10
|
before :each do
|
11
11
|
render_html <<HTML
|
12
|
-
<div>
|
12
|
+
<div class="class-one class-two">
|
13
13
|
some content
|
14
14
|
<div id="div">some other div</div>
|
15
15
|
<p class="paragraph">la<strong>lala</strong></p>
|
@@ -23,6 +23,7 @@ HTML
|
|
23
23
|
|
24
24
|
it "should find tags" do
|
25
25
|
rendered.should have_tag('div')
|
26
|
+
rendered.should have_tag(:div)
|
26
27
|
rendered.should have_tag('div#div')
|
27
28
|
rendered.should have_tag('p.paragraph')
|
28
29
|
rendered.should have_tag('div p strong')
|
@@ -30,6 +31,7 @@ HTML
|
|
30
31
|
|
31
32
|
it "should not find tags" do
|
32
33
|
rendered.should_not have_tag('span')
|
34
|
+
rendered.should_not have_tag(:span)
|
33
35
|
rendered.should_not have_tag('span#id')
|
34
36
|
rendered.should_not have_tag('span#class')
|
35
37
|
rendered.should_not have_tag('div div span')
|
@@ -51,11 +53,34 @@ HTML
|
|
51
53
|
|
52
54
|
it "should find tags" do
|
53
55
|
rendered.should have_tag('input#search',:with => {:type => "text"})
|
54
|
-
rendered.should have_tag(
|
56
|
+
rendered.should have_tag(:input ,:with => {:type => "submit", :value => "Save"})
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should find tags that have classes specified via array(or string)" do
|
60
|
+
rendered.should have_tag('div',:with => {:class => %w(class-one class-two)})
|
61
|
+
rendered.should have_tag('div',:with => {:class => 'class-two class-one'})
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should not find tags that have classes specified via array" do
|
65
|
+
rendered.should_not have_tag('div',:with => {:class => %w(class-other class-two)})
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should not find tags that have classes specified via array and display appropriate message" do
|
69
|
+
expect do
|
70
|
+
rendered.should have_tag('div',:with => {:class => %w(class-other class-two)})
|
71
|
+
end.should raise_spec_error(
|
72
|
+
%Q{expected following:\n#{rendered}\nto have at least 1 element matching "div.class-other.class-two", found 0.}
|
73
|
+
)
|
74
|
+
expect do
|
75
|
+
rendered.should have_tag('div',:with => {:class => 'class-other class-two'})
|
76
|
+
end.should raise_spec_error(
|
77
|
+
%Q{expected following:\n#{rendered}\nto have at least 1 element matching "div.class-other.class-two", found 0.}
|
78
|
+
)
|
55
79
|
end
|
56
80
|
|
57
81
|
it "should not find tags" do
|
58
82
|
rendered.should_not have_tag('input#search',:with => {:type => "some_other_type"})
|
83
|
+
rendered.should_not have_tag(:input, :with => {:type => "some_other_type"})
|
59
84
|
end
|
60
85
|
|
61
86
|
it "should not find tags and display appropriate message" do
|
@@ -226,6 +251,14 @@ HTML
|
|
226
251
|
}
|
227
252
|
end
|
228
253
|
|
254
|
+
it "should handle do; end" do
|
255
|
+
expect do
|
256
|
+
rendered.should have_tag('ol') do
|
257
|
+
with_tag('div')
|
258
|
+
end
|
259
|
+
end.should raise_spec_error(/have at least 1 element matching "div", found 0/)
|
260
|
+
end
|
261
|
+
|
229
262
|
it "should not find tags and display appropriate message" do
|
230
263
|
ordered_list_regexp = @ordered_list.gsub(/(\n?\s{2,}|\n\s?)/,'\n*\s*')
|
231
264
|
expect {
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec2-rails-views-matchers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- kucaahbe
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-02
|
18
|
+
date: 2011-03-02 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|