rspec-power_assert 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.
- checksums.yaml +4 -4
- data/.rspec +1 -0
- data/README.md +171 -31
- data/lib/rspec/power_assert.rb +97 -11
- data/lib/rspec/power_assert/version.rb +1 -1
- data/spec/rspec/power_assert_spec.rb +31 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5693810a622bd1930d357d53d757219f3f1f0659
|
4
|
+
data.tar.gz: b31892819f2ad71874546590b8c856b51e9a0cd1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f9756ee18ab14800437c0fad0e43f9aa08a089d74760a5b711efa6480c8e69567107262a94f820e91e3bc4d3a81e096611cd9208417fd257fa5bab7b7bd15432
|
7
|
+
data.tar.gz: db669065a59ce0894ee10f9dcdf99c0551824cb0af74dc0cafbbcd8ac4a1efc184250c3361082d633f437794c111b91dd01b9fab92647be2a47f6a5e921541ee
|
data/.rspec
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,8 @@
|
|
1
1
|
# Rspec::PowerAssert
|
2
|
+
[](http://badge.fury.io/rb/rspec-power_assert)
|
3
|
+
|
4
|
+
## Support
|
5
|
+
- RSpec 2.14 or later
|
2
6
|
|
3
7
|
## Installation
|
4
8
|
|
@@ -18,53 +22,137 @@ Or install it yourself as:
|
|
18
22
|
|
19
23
|
## Usage
|
20
24
|
|
21
|
-
|
25
|
+
First, add require option to `.rspec`
|
26
|
+
|
27
|
+
```
|
28
|
+
-r power_assert
|
29
|
+
```
|
30
|
+
|
31
|
+
Use `ExampleGroup.it_is_asserted_by` or `ExampleGroup#is_asserted_by`
|
32
|
+
|
22
33
|
```ruby
|
23
|
-
describe
|
24
|
-
|
25
|
-
let(:array) { [1, 2, 3] }
|
26
|
-
subject { %w(a b c) }
|
34
|
+
describe Object do
|
35
|
+
it_is_asserted_by { a == b }
|
27
36
|
|
28
|
-
|
29
|
-
|
30
|
-
|
37
|
+
it do
|
38
|
+
is_asserted_by { a == b }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
```
|
31
42
|
|
32
|
-
|
33
|
-
is_asserted_by { subject.map(&:upcase) == array }
|
34
|
-
end
|
43
|
+
## Config
|
35
44
|
|
36
|
-
|
37
|
-
upcased = subject.map(&:upcase)
|
38
|
-
upcased.pop
|
39
|
-
is_asserted_by { upcased == @array }
|
40
|
-
end
|
45
|
+
### verbose_successful_report
|
41
46
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
47
|
+
```ruby
|
48
|
+
RSpec::PowerAssert.verbose_successful_report = true
|
49
|
+
```
|
50
|
+
|
51
|
+
If it set true, Successful Example reports with `power_assert` outputs.
|
52
|
+
If it set false, Successful Example reports without `power_assert` outputs.
|
53
|
+
|
54
|
+
Default is *true*.
|
46
55
|
|
47
|
-
|
48
|
-
|
49
|
-
|
56
|
+
## Sample
|
57
|
+
### spec sample
|
58
|
+
```ruby
|
59
|
+
describe Rspec::PowerAssert do
|
60
|
+
describe Array do
|
61
|
+
describe "#map" do
|
62
|
+
let(:array) { [1, 2, 3] }
|
63
|
+
subject { %w(a b c) }
|
64
|
+
|
65
|
+
before do
|
66
|
+
@array = [1, 2, 3]
|
67
|
+
end
|
68
|
+
|
69
|
+
it do
|
70
|
+
is_asserted_by { subject.map(&:upcase) == array }
|
71
|
+
end
|
72
|
+
|
73
|
+
it do
|
74
|
+
is_asserted_by {
|
75
|
+
subject.map(&:upcase) == array
|
76
|
+
}
|
77
|
+
end
|
78
|
+
|
79
|
+
it do
|
80
|
+
is_asserted_by { subject.map(&:upcase) == %w(A B C) }
|
81
|
+
end
|
82
|
+
|
83
|
+
it do
|
84
|
+
is_asserted_by {
|
85
|
+
subject.map(&:upcase) == %w(A B C)
|
86
|
+
}
|
87
|
+
end
|
88
|
+
|
89
|
+
it do
|
90
|
+
upcased = subject.map(&:upcase)
|
91
|
+
upcased.pop
|
92
|
+
is_asserted_by { upcased == @array }
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should transform array" do
|
96
|
+
is_expected.to eq %w(a b c)
|
97
|
+
is_asserted_by { subject.map(&:upcase) == %w(A B C) }
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should transform array (failed)" do
|
101
|
+
is_asserted_by { subject.map(&:upcase) == %w(A B) }
|
102
|
+
end
|
103
|
+
|
104
|
+
it_is_asserted_by { subject.map(&:upcase) == %w(A B C) }
|
105
|
+
|
106
|
+
it_is_asserted_by { subject.map(&:upcase) == %w(A B) }
|
107
|
+
|
108
|
+
it_is_asserted_by do
|
109
|
+
subject.map(&:upcase) == %w(A B C)
|
110
|
+
end
|
111
|
+
|
112
|
+
it_is_asserted_by "succ each element" do
|
113
|
+
subject.map(&:succ) == ["b", "c", "e"] + @array
|
114
|
+
end
|
50
115
|
end
|
51
116
|
end
|
52
117
|
end
|
53
118
|
```
|
54
119
|
|
55
|
-
### output
|
120
|
+
### output sample
|
56
121
|
```
|
57
122
|
Rspec::PowerAssert
|
58
123
|
Array
|
59
124
|
#map
|
60
125
|
example at ./spec/rspec/power_assert_spec.rb:13 (FAILED - 1)
|
61
126
|
example at ./spec/rspec/power_assert_spec.rb:17 (FAILED - 2)
|
62
|
-
|
127
|
+
should
|
128
|
+
be asserted by { subject.map(&:upcase) == %w(A B C) }
|
129
|
+
| | |
|
130
|
+
| | true
|
131
|
+
| ["A", "B", "C"]
|
132
|
+
["a", "b", "c"]
|
133
|
+
should
|
134
|
+
be asserted by { subject.map(&:upcase) == %w(A B C) }
|
63
135
|
| | |
|
64
136
|
| | true
|
65
137
|
| ["A", "B", "C"]
|
66
138
|
["a", "b", "c"]
|
139
|
+
example at ./spec/rspec/power_assert_spec.rb:33 (FAILED - 3)
|
67
140
|
should transform array
|
141
|
+
should transform array (failed) (FAILED - 4)
|
142
|
+
should
|
143
|
+
be asserted by { subject.map(&:upcase) == %w(A B C) }
|
144
|
+
| | |
|
145
|
+
| | true
|
146
|
+
| ["A", "B", "C"]
|
147
|
+
["a", "b", "c"]
|
148
|
+
example at ./spec/rspec/power_assert_spec.rb:50 (FAILED - 5)
|
149
|
+
should
|
150
|
+
be asserted by { subject.map(&:upcase) == %w(A B C) }
|
151
|
+
| | |
|
152
|
+
| | true
|
153
|
+
| ["A", "B", "C"]
|
154
|
+
["a", "b", "c"]
|
155
|
+
succ each element (FAILED - 6)
|
68
156
|
|
69
157
|
Failures:
|
70
158
|
|
@@ -76,26 +164,78 @@ Failures:
|
|
76
164
|
| | false
|
77
165
|
| ["A", "B", "C"]
|
78
166
|
["a", "b", "c"]
|
79
|
-
# ./lib/rspec/power_assert.rb:
|
167
|
+
# ./lib/rspec/power_assert.rb:57:in `handle_result_and_message'
|
168
|
+
# ./lib/rspec/power_assert.rb:31:in `is_asserted_by'
|
80
169
|
# ./spec/rspec/power_assert_spec.rb:14:in `block (4 levels) in <top (required)>'
|
81
170
|
|
82
171
|
2) Rspec::PowerAssert Array#map
|
172
|
+
Failure/Error: is_asserted_by {
|
173
|
+
subject.map(&:upcase) == array
|
174
|
+
| | | |
|
175
|
+
| | | [1, 2, 3]
|
176
|
+
| | false
|
177
|
+
| ["A", "B", "C"]
|
178
|
+
["a", "b", "c"]
|
179
|
+
# ./lib/rspec/power_assert.rb:57:in `handle_result_and_message'
|
180
|
+
# ./lib/rspec/power_assert.rb:31:in `is_asserted_by'
|
181
|
+
# ./spec/rspec/power_assert_spec.rb:18:in `block (4 levels) in <top (required)>'
|
182
|
+
|
183
|
+
3) Rspec::PowerAssert Array#map
|
83
184
|
Failure/Error: is_asserted_by { upcased == @array }
|
84
185
|
is_asserted_by { upcased == @array }
|
85
186
|
| | |
|
86
187
|
| | [1, 2, 3]
|
87
188
|
| false
|
88
189
|
["A", "B"]
|
89
|
-
# ./lib/rspec/power_assert.rb:
|
90
|
-
# ./
|
91
|
-
|
92
|
-
|
93
|
-
4
|
190
|
+
# ./lib/rspec/power_assert.rb:57:in `handle_result_and_message'
|
191
|
+
# ./lib/rspec/power_assert.rb:31:in `is_asserted_by'
|
192
|
+
# ./spec/rspec/power_assert_spec.rb:36:in `block (4 levels) in <top (required)>'
|
193
|
+
|
194
|
+
4) Rspec::PowerAssert Array#map should transform array (failed)
|
195
|
+
Failure/Error: is_asserted_by { subject.map(&:upcase) == %w(A B) }
|
196
|
+
is_asserted_by { subject.map(&:upcase) == %w(A B) }
|
197
|
+
| | |
|
198
|
+
| | false
|
199
|
+
| ["A", "B", "C"]
|
200
|
+
["a", "b", "c"]
|
201
|
+
# ./lib/rspec/power_assert.rb:57:in `handle_result_and_message'
|
202
|
+
# ./lib/rspec/power_assert.rb:31:in `is_asserted_by'
|
203
|
+
# ./spec/rspec/power_assert_spec.rb:45:in `block (4 levels) in <top (required)>'
|
204
|
+
|
205
|
+
5) Rspec::PowerAssert Array#map
|
206
|
+
Failure/Error: it_is_asserted_by { subject.map(&:upcase) == %w(A B) }
|
207
|
+
it_is_asserted_by { subject.map(&:upcase) == %w(A B) }
|
208
|
+
| | |
|
209
|
+
| | false
|
210
|
+
| ["A", "B", "C"]
|
211
|
+
["a", "b", "c"]
|
212
|
+
# ./lib/rspec/power_assert.rb:57:in `handle_result_and_message'
|
213
|
+
# ./lib/rspec/power_assert.rb:44:in `evaluate_example'
|
214
|
+
# ./spec/rspec/power_assert_spec.rb:50:in `block in it_is_asserted_by'
|
215
|
+
|
216
|
+
6) Rspec::PowerAssert Array#map succ each element
|
217
|
+
Failure/Error: it_is_asserted_by "succ each element" do
|
218
|
+
subject.map(&:succ) == ["b", "c", "e"] + @array
|
219
|
+
| | | |
|
220
|
+
| | | [1, 2, 3]
|
221
|
+
| | false
|
222
|
+
| ["b", "c", "d"]
|
223
|
+
["a", "b", "c"]
|
224
|
+
# ./lib/rspec/power_assert.rb:57:in `handle_result_and_message'
|
225
|
+
# ./lib/rspec/power_assert.rb:44:in `evaluate_example'
|
226
|
+
# ./spec/rspec/power_assert_spec.rb:56:in `block in it_is_asserted_by'
|
227
|
+
|
228
|
+
Finished in 0.01725 seconds (files took 0.12235 seconds to load)
|
229
|
+
11 examples, 6 failures
|
94
230
|
|
95
231
|
Failed examples:
|
96
232
|
|
97
233
|
rspec ./spec/rspec/power_assert_spec.rb:13 # Rspec::PowerAssert Array#map
|
98
234
|
rspec ./spec/rspec/power_assert_spec.rb:17 # Rspec::PowerAssert Array#map
|
235
|
+
rspec ./spec/rspec/power_assert_spec.rb:33 # Rspec::PowerAssert Array#map
|
236
|
+
rspec ./spec/rspec/power_assert_spec.rb:44 # Rspec::PowerAssert Array#map should transform array (failed)
|
237
|
+
rspec ./spec/rspec/power_assert_spec.rb:50 # Rspec::PowerAssert Array#map
|
238
|
+
rspec ./spec/rspec/power_assert_spec.rb:56 # Rspec::PowerAssert Array#map succ each element
|
99
239
|
```
|
100
240
|
|
101
241
|
## Contributing
|
data/lib/rspec/power_assert.rb
CHANGED
@@ -2,21 +2,64 @@ require "rspec/power_assert/version"
|
|
2
2
|
require "rspec/core"
|
3
3
|
require "power_assert"
|
4
4
|
|
5
|
+
module PowerAssert
|
6
|
+
class << self
|
7
|
+
def rspec_start(assertion_proc, assertion_method: nil)
|
8
|
+
yield RSpecContext.new(assertion_proc, assertion_method)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class RSpecContext < Context
|
13
|
+
# hack for context changing
|
14
|
+
def do_yield
|
15
|
+
@trace.enable do
|
16
|
+
@base_caller_length = caller_locations.length + 2
|
17
|
+
yield
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
private_constant :RSpecContext
|
22
|
+
end
|
23
|
+
|
5
24
|
module RSpec
|
6
25
|
module PowerAssert
|
26
|
+
@verbose_successful_report = true
|
27
|
+
|
28
|
+
def self.verbose_successful_report
|
29
|
+
!!@verbose_successful_report
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.verbose_successful_report=(verbose)
|
33
|
+
@verbose_successful_report = verbose
|
34
|
+
end
|
35
|
+
|
7
36
|
def is_asserted_by(&blk)
|
8
|
-
result =
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
37
|
+
result, msg = ::PowerAssert.start(blk, assertion_method: __method__) do |tp|
|
38
|
+
[tp.yield, tp.message_proc.call]
|
39
|
+
end
|
40
|
+
|
41
|
+
handle_result_and_message(result, msg, __method__)
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def evaluate_example(method_name, &blk)
|
47
|
+
# hack for context changing
|
48
|
+
pr = -> { self.instance_exec(&blk) }
|
49
|
+
|
50
|
+
result, msg = ::PowerAssert.rspec_start(pr, assertion_method: method_name) do |tp|
|
51
|
+
[tp.yield, tp.message_proc.call]
|
13
52
|
end
|
14
53
|
|
54
|
+
handle_result_and_message(result, msg, method_name)
|
55
|
+
end
|
56
|
+
|
57
|
+
def handle_result_and_message(result, msg, method_name)
|
15
58
|
if result
|
16
|
-
RSpec::Matchers.last_matcher = DummyAssertionMatcher.new(msg)
|
59
|
+
RSpec::Matchers.last_matcher = DummyAssertionMatcher.new(msg, method_name.to_s)
|
17
60
|
|
18
61
|
if RSpec::Matchers.respond_to?(:last_should=)
|
19
|
-
RSpec::Matchers.last_should =
|
62
|
+
RSpec::Matchers.last_should = :should # for RSpec 2
|
20
63
|
else
|
21
64
|
RSpec::Matchers.last_expectation_handler = DummyExpectationHandler # for RSpec 3
|
22
65
|
end
|
@@ -28,23 +71,66 @@ module RSpec
|
|
28
71
|
# for generating description
|
29
72
|
class DummyExpectationHandler
|
30
73
|
def self.verb
|
31
|
-
""
|
74
|
+
"should"
|
32
75
|
end
|
33
76
|
end
|
77
|
+
private_constant :DummyExpectationHandler
|
34
78
|
|
35
|
-
# for generating description
|
36
79
|
class DummyAssertionMatcher
|
37
|
-
|
80
|
+
INDENT_LEVEL = 12
|
81
|
+
|
82
|
+
def initialize(msg, method_name)
|
38
83
|
@msg = msg
|
84
|
+
@assertion_method = method_name
|
39
85
|
end
|
40
86
|
|
41
87
|
def description
|
42
|
-
|
88
|
+
if @msg =~ /^(\s*)#{@assertion_method}/
|
89
|
+
output = @msg.sub(/^(\s*#{@assertion_method})/, "#{display_message}")
|
90
|
+
offset = display_message.length - $1.length
|
91
|
+
else
|
92
|
+
output = @msg.sub(/^(\s*)(\S.*?)$/, "#{display_message} { \\2 }")
|
93
|
+
offset = display_message.length + 3 - $1.length
|
94
|
+
end
|
95
|
+
|
96
|
+
"#{$/}#{build_message(output, offset)}"
|
97
|
+
end
|
98
|
+
|
99
|
+
private
|
100
|
+
|
101
|
+
def build_message(output, offset)
|
102
|
+
if RSpec::PowerAssert.verbose_successful_report
|
103
|
+
output.each_line.with_index.map do |l, idx|
|
104
|
+
next l if idx == 0
|
105
|
+
|
106
|
+
if offset > 1
|
107
|
+
" " * offset + l
|
108
|
+
else
|
109
|
+
l.each_char.drop(offset.abs).join
|
110
|
+
end
|
111
|
+
end.join
|
112
|
+
else
|
113
|
+
output.each_line.first
|
114
|
+
end
|
43
115
|
end
|
116
|
+
|
117
|
+
def display_message
|
118
|
+
" " * INDENT_LEVEL + "be asserted by"
|
119
|
+
end
|
120
|
+
end
|
121
|
+
private_constant :DummyAssertionMatcher
|
122
|
+
end
|
123
|
+
|
124
|
+
module PowerAssertExtensions
|
125
|
+
def it_is_asserted_by(description = nil, &blk)
|
126
|
+
file, lineno = blk.source_location
|
127
|
+
cmd = description ? "it(description)" : "specify"
|
128
|
+
eval %{#{cmd} do evaluate_example("#{__method__}", &blk) end}, binding, file, lineno
|
44
129
|
end
|
45
130
|
end
|
46
131
|
end
|
47
132
|
|
48
133
|
RSpec.configure do |config|
|
134
|
+
config.extend RSpec::PowerAssertExtensions
|
49
135
|
config.include RSpec::PowerAssert
|
50
136
|
end
|
@@ -15,20 +15,47 @@ describe Rspec::PowerAssert do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
it do
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
is_asserted_by {
|
19
|
+
subject.map(&:upcase) == array
|
20
|
+
}
|
21
21
|
end
|
22
22
|
|
23
23
|
it do
|
24
|
-
is_expected.to eq %w(a b c)
|
25
24
|
is_asserted_by { subject.map(&:upcase) == %w(A B C) }
|
26
25
|
end
|
27
26
|
|
27
|
+
it do
|
28
|
+
is_asserted_by {
|
29
|
+
subject.map(&:upcase) == %w(A B C)
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
it do
|
34
|
+
upcased = subject.map(&:upcase)
|
35
|
+
upcased.pop
|
36
|
+
is_asserted_by { upcased == @array }
|
37
|
+
end
|
38
|
+
|
28
39
|
it "should transform array" do
|
29
40
|
is_expected.to eq %w(a b c)
|
30
41
|
is_asserted_by { subject.map(&:upcase) == %w(A B C) }
|
31
42
|
end
|
43
|
+
|
44
|
+
it "should transform array (failed)" do
|
45
|
+
is_asserted_by { subject.map(&:upcase) == %w(A B) }
|
46
|
+
end
|
47
|
+
|
48
|
+
it_is_asserted_by { subject.map(&:upcase) == %w(A B C) }
|
49
|
+
|
50
|
+
it_is_asserted_by { subject.map(&:upcase) == %w(A B) }
|
51
|
+
|
52
|
+
it_is_asserted_by do
|
53
|
+
subject.map(&:upcase) == %w(A B C)
|
54
|
+
end
|
55
|
+
|
56
|
+
it_is_asserted_by "succ each element" do
|
57
|
+
subject.map(&:succ) == ["b", "c", "e"] + @array
|
58
|
+
end
|
32
59
|
end
|
33
60
|
end
|
34
61
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-power_assert
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- joker1007
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: power_assert
|