rspec_multi_matchers 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -2,17 +2,13 @@
2
2
 
3
3
  == Summary
4
4
  * test collection using each or other enumerable methods
5
- * tests fell more natural and have a friendlier failure message
5
+ * makes testing more natural and have a friendlier failure message
6
6
 
7
7
  == HomePage
8
8
  * http://github.com/gregwebs/rspec-multi-matchers
9
9
 
10
10
  == DESCRIPTION:
11
11
 
12
- * match_each
13
- * match_enum
14
- * match_in_order
15
-
16
12
  require 'rubygems'
17
13
  require 'spec'
18
14
  require 'rspec_multi_matchers'
@@ -23,6 +19,11 @@
23
19
  n.should == 1
24
20
  }
25
21
  end
22
+
23
+ # this is a new shortcut for a smaller use case
24
+ it 'should be all ones' do
25
+ [1,1,1].should each be_eql(1)
26
+ end
26
27
  end
27
28
 
28
29
  =begin output
@@ -41,7 +42,7 @@ the item line gives the index of the item being yielded to the block, and the it
41
42
  === Warning
42
43
 
43
44
  Note the use of brackets '{ ... }' instead of 'do ... end'
44
- this is necessary because 'do .. end' does not bind strong enough
45
+ this is necessary because 'do .. end' does not bind strongly enough
45
46
 
46
47
  == RELATED ARTICLES:
47
48
 
@@ -55,7 +56,7 @@ this is necessary because 'do .. end' does not bind strong enough
55
56
 
56
57
  (The MIT License)
57
58
 
58
- Copyright (c) 2008 Greg Weber
59
+ Copyright (c) 2010 Greg Weber
59
60
 
60
61
  Permission is hereby granted, free of charge, to any person obtaining
61
62
  a copy of this software and associated documentation files (the
data/lib/match_each.rb CHANGED
@@ -1,3 +1,24 @@
1
+ def each meta_or_options = nil, &block
2
+ if block or !meta_or_options
3
+ MatchEach.new meta_or_options, &block
4
+ else
5
+ each_matcher meta_or_options
6
+ end
7
+ end
8
+
9
+ RSpec::Matchers.define :each_matcher do |meta|
10
+ match do |actual|
11
+ actual.each_with_index do |i, j|
12
+ @elem = j
13
+ i.should meta_or_options
14
+ end
15
+ end
16
+
17
+ failure_message_for_should do |actual|
18
+ "at[#{@elem}] #{meta_or_options.failure_message_for_should}"
19
+ end
20
+ end
21
+
1
22
  class MatchEach
2
23
 
3
24
  class MatchEachError < Exception; end
@@ -25,7 +46,7 @@ class MatchEach
25
46
  target.each do |obj|
26
47
  begin
27
48
  @block.call(obj)
28
- rescue Spec::Expectations::ExpectationNotMetError => e
49
+ rescue RSpec::Expectations::ExpectationNotMetError => e
29
50
  @error = e
30
51
  @failure_object = obj
31
52
  return false
@@ -50,13 +71,14 @@ class MatchEach
50
71
  def failure_line
51
72
  # find 'matches?' in statck trace
52
73
  # then move back to the first line number that is not a function call
53
- error_line = nil
74
+ error_lines = []
54
75
  @error.backtrace.each do |line|
55
- if line.match(/:\d+:in\s*[`'"](.*)[`'"]\s*$/)
56
- return error_line if $1 == 'matches?'
57
- else
58
- error_line = line.match(/^[^:]+:(\d+)/)[1]
76
+ if line[/:\d+:in\s*[`'"](.*)[`'"]\s*$/, 1] == 'matches?'
77
+ error_lines.reverse_each do |line|
78
+ return line[/^[^:]+:(\d+)/, 1] if line !~ %r!rspec-multi-matchers/lib/match_each\.rb!
79
+ end
59
80
  end
81
+ error_lines.push line
60
82
  end
61
83
 
62
84
  nil # should not reach here
@@ -72,7 +94,3 @@ class MatchEach
72
94
 
73
95
  # no need for should_not, so no negative_failure_messages
74
96
  end
75
-
76
- def each(options=nil, &block)
77
- MatchEach.new options, &block
78
- end
@@ -1,8 +1,10 @@
1
+ require 'rspec'
2
+
1
3
  $:.unshift(File.dirname(__FILE__)) unless
2
4
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
5
 
4
6
  module RspecMultiMatchers
5
- VERSION = '1.1.0'
7
+ VERSION = '1.2.0'
6
8
  end
7
9
 
8
10
  require "match_each"
@@ -11,12 +11,12 @@ describe MatchEach do
11
11
  it 'should add to the inner error message' do
12
12
  begin
13
13
  2.should == 1
14
- rescue Rspec::Expectations::ExpectationNotMetError => e
14
+ rescue RSpec::Expectations::ExpectationNotMetError => e
15
15
  @line = __LINE__ + 2
16
16
  lambda{ [1,2,3].should each { |n|
17
17
  n.should == 1
18
18
  } }.should raise_error(
19
- Rspec::Expectations::ExpectationNotMetError, /^\s*line: #{@line}\s*item 1: 2\s*#{Regexp.escape(e.message)}/m)
19
+ RSpec::Expectations::ExpectationNotMetError, /^\s*line: #{@line}\s*item 1: 2\s*#{Regexp.escape(e.message)}/m)
20
20
  else fail
21
21
  end
22
22
  end
@@ -11,20 +11,20 @@ describe MatchInOrder do
11
11
 
12
12
  it "should not match the same regular expressions twice" do
13
13
  "a".should_not match_in_order(/a/,/a/)
14
- lambda{ "a".should match_in_order(/a/,/a/) }.should raise_error(Rspec::Expectations::ExpectationNotMetError, 'expected "" to match /a/' << "\n" << 'within string: "a"')
14
+ lambda{ "a".should match_in_order(/a/,/a/) }.should raise_error(RSpec::Expectations::ExpectationNotMetError, 'expected "" to match /a/' << "\n" << 'within string: "a"')
15
15
 
16
16
  "abc".should_not match_in_order(/a/,/b/,/c/,/a/)
17
- lambda{ "abc".should match_in_order(/a/,/b/,/c/,/a/) }.should raise_error(Rspec::Expectations::ExpectationNotMetError, 'expected "" to match /a/' << "\n" << 'within string: "abc"')
17
+ lambda{ "abc".should match_in_order(/a/,/b/,/c/,/a/) }.should raise_error(RSpec::Expectations::ExpectationNotMetError, 'expected "" to match /a/' << "\n" << 'within string: "abc"')
18
18
  end
19
19
 
20
20
  it "should match multiple regular expressions in order" do
21
21
  "abc".should match_in_order(/a/,/b/,/c/)
22
- lambda{ "abc".should_not match_in_order(/a/,/b/,/c/) }.should raise_error(Rspec::Expectations::ExpectationNotMetError,'expected "abc" to not match in order against: [/a/, /b/, /c/]')
22
+ lambda{ "abc".should_not match_in_order(/a/,/b/,/c/) }.should raise_error(RSpec::Expectations::ExpectationNotMetError,'expected "abc" to not match in order against: [/a/, /b/, /c/]')
23
23
 
24
24
  "abc".should_not match_in_order(/a/,/c/,/b/)
25
- lambda{ "abc".should match_in_order(/a/,/c/,/b/) }.should raise_error(Rspec::Expectations::ExpectationNotMetError,'expected "" to match /b/' << "\n" << 'within string: "abc"')
25
+ lambda{ "abc".should match_in_order(/a/,/c/,/b/) }.should raise_error(RSpec::Expectations::ExpectationNotMetError,'expected "" to match /b/' << "\n" << 'within string: "abc"')
26
26
 
27
27
  "abc".should_not match_in_order(/b/,/a/,/c/)
28
- lambda{ "abc".should match_in_order(/b/,/a/,/c/) }.should raise_error(Rspec::Expectations::ExpectationNotMetError,'expected "c" to match /a/' << "\n" << 'within string: "abc"')
28
+ lambda{ "abc".should match_in_order(/b/,/a/,/c/) }.should raise_error(RSpec::Expectations::ExpectationNotMetError,'expected "c" to match /a/' << "\n" << 'within string: "abc"')
29
29
  end
30
30
  end
@@ -12,7 +12,7 @@ shared_examples_for "each matcher" do
12
12
  end
13
13
 
14
14
  it 'should raise an error if there are no items in the enumerable object' do
15
- lambda{ [].should send(*@iterator){} }.should raise_error(@class::BlankEnumerableError)
15
+ lambda{ [].should send(*@iterator){} }.should raise_error(@class::BlankEnumerableError, /.*/)
16
16
  [false, nil].each do |f|
17
17
  @iterator.push(:empty => f)
18
18
  lambda{ [].should send(*@iterator){}}.should raise_error(@class::BlankEnumerableError)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec_multi_matchers
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
5
- prerelease:
4
+ hash: 31
5
+ prerelease: false
6
6
  segments:
7
7
  - 1
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 1.1.0
10
+ version: 1.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Greg Weber
@@ -15,12 +15,91 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-03-31 00:00:00 -07:00
18
+ date: 2011-08-24 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
22
- description: better collection testing
23
- email:
22
+ description: |
23
+ = rspec-multi-matchers
24
+
25
+ == Summary
26
+ * test collection using each or other enumerable methods
27
+ * makes testing more natural and have a friendlier failure message
28
+
29
+ == HomePage
30
+ * http://github.com/gregwebs/rspec-multi-matchers
31
+
32
+ == DESCRIPTION:
33
+
34
+ require 'rubygems'
35
+ require 'spec'
36
+ require 'rspec_multi_matchers'
37
+
38
+ describe 'array of ones' do
39
+ it 'should be all ones' do
40
+ [1,2,3].should each { |n|
41
+ n.should == 1
42
+ }
43
+ end
44
+
45
+ # this is a new shortcut for a smaller use case
46
+ it 'should be all ones' do
47
+ [1,1,1].should each be_eql(1)
48
+ end
49
+ end
50
+
51
+ =begin output
52
+ 'array of ones should fail on 2' FAILED
53
+ line: 14
54
+ item 1: 2
55
+ expected: 1,
56
+ got: 2 (using ==)
57
+ =end
58
+
59
+ As expected, the output shows expected and got fields
60
+ line is the line number of the expectiation inside the block
61
+ the item line gives the index of the item being yielded to the block, and the item itself
62
+
63
+
64
+ === Warning
65
+
66
+ Note the use of brackets '{ ... }' instead of 'do ... end'
67
+ this is necessary because 'do .. end' does not bind strongly enough
68
+
69
+ == RELATED ARTICLES:
70
+
71
+ * http://blog.thoughtfolder.com/2008-11-05-rspec-should-each-matcher.html
72
+
73
+ == INSTALL:
74
+
75
+ * gem install rspec_multi_matchers
76
+
77
+ == LICENSE:
78
+
79
+ (The MIT License)
80
+
81
+ Copyright (c) 2010 Greg Weber
82
+
83
+ Permission is hereby granted, free of charge, to any person obtaining
84
+ a copy of this software and associated documentation files (the
85
+ 'Software'), to deal in the Software without restriction, including
86
+ without limitation the rights to use, copy, modify, merge, publish,
87
+ distribute, sublicense, and/or sell copies of the Software, and to
88
+ permit persons to whom the Software is furnished to do so, subject to
89
+ the following conditions:
90
+
91
+ The above copyright notice and this permission notice shall be
92
+ included in all copies or substantial portions of the Software.
93
+
94
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
95
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
96
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
97
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
98
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
99
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
100
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
101
+
102
+ email: greg@gregweber.info
24
103
  executables: []
25
104
 
26
105
  extensions: []
@@ -41,7 +120,7 @@ files:
41
120
  - spec/shared_enum_spec.rb
42
121
  - spec/spec.opts
43
122
  has_rdoc: true
44
- homepage:
123
+ homepage: https://github.com/gregwebs/rspec-multi-matchers
45
124
  licenses: []
46
125
 
47
126
  post_install_message:
@@ -70,7 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
70
149
  requirements: []
71
150
 
72
151
  rubyforge_project:
73
- rubygems_version: 1.6.2
152
+ rubygems_version: 1.3.7
74
153
  signing_key:
75
154
  specification_version: 3
76
155
  summary: better collection testing