rspec-parameterized 0.3.2 → 0.4.0
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/CHANGELOG.md +4 -3
- data/README.md +75 -0
- data/lib/rspec/parameterized.rb +30 -3
- data/lib/rspec/parameterized/version.rb +1 -1
- data/spec/parametarized_spec.rb +125 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2e6be52e986b05c5db18dc2355e2ee393b0ee954
|
4
|
+
data.tar.gz: 191bb660e0afdc89f466f1213a4ce756ba9566e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7cce6711e56fb75d458b75b1fc4a9d47f7908395040bfc0eec9b809b66b5cbe0f5ec8663747b1b40e053286aafccfd9884eb4d2c97358414cc09191cfe74cef7
|
7
|
+
data.tar.gz: 9a5e59b1d28cd1bf826346c61d0953daba8bb6f198966d03024c98f1570a02e50b79f6ed5a89032fb805b7a50131ff5ceea8159965d59dc5c8cfd94ccf8c183f
|
data/CHANGELOG.md
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
-
## [
|
4
|
-
|
5
|
-
[Full Changelog](https://github.com/tomykaira/rspec-parameterized/compare/v0.3.1...HEAD)
|
3
|
+
## [v0.3.2](https://github.com/tomykaira/rspec-parameterized/tree/v0.3.2) (2016-12-26)
|
4
|
+
[Full Changelog](https://github.com/tomykaira/rspec-parameterized/compare/v0.3.1...v0.3.2)
|
6
5
|
|
7
6
|
**Merged pull requests:**
|
8
7
|
|
8
|
+
- Fix deprecation warning on ruby 2.4.0 [\#40](https://github.com/tomykaira/rspec-parameterized/pull/40) ([sue445](https://github.com/sue445))
|
9
|
+
- Add release note for v0.3.1 [\#39](https://github.com/tomykaira/rspec-parameterized/pull/39) ([sue445](https://github.com/sue445))
|
9
10
|
- Add rubygems version badge [\#38](https://github.com/tomykaira/rspec-parameterized/pull/38) ([sue445](https://github.com/sue445))
|
10
11
|
|
11
12
|
## [v0.3.1](https://github.com/tomykaira/rspec-parameterized/tree/v0.3.1) (2016-08-17)
|
data/README.md
CHANGED
@@ -72,6 +72,81 @@ describe "plus" do
|
|
72
72
|
end
|
73
73
|
end
|
74
74
|
end
|
75
|
+
|
76
|
+
# Verbose Syntax
|
77
|
+
# For complex inputs or if you just want to be super explicit
|
78
|
+
describe "Verbose syntax" do
|
79
|
+
where do
|
80
|
+
{
|
81
|
+
"positive integers" => {
|
82
|
+
a: 1,
|
83
|
+
b: 2,
|
84
|
+
answer: 3,
|
85
|
+
},
|
86
|
+
"negative_integers" => {
|
87
|
+
a: -1,
|
88
|
+
b: -2,
|
89
|
+
answer: -3,
|
90
|
+
},
|
91
|
+
"mixed_integers" => {
|
92
|
+
a: 3,
|
93
|
+
b: -3,
|
94
|
+
answer: 0,
|
95
|
+
},
|
96
|
+
}
|
97
|
+
end
|
98
|
+
|
99
|
+
with_them do
|
100
|
+
it "should do additions" do
|
101
|
+
expect(a + b).to eq answer
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
# It's also possible to override each combination name using magic variable :case_name
|
107
|
+
# Output:
|
108
|
+
# Custom test case name
|
109
|
+
# positive integers
|
110
|
+
# should do additions
|
111
|
+
# negative integers
|
112
|
+
# should do additions
|
113
|
+
# mixed integers
|
114
|
+
# should do additions
|
115
|
+
describe "Custom names for regular syntax" do
|
116
|
+
where(:case_name, :a, :b, :answer) do
|
117
|
+
[
|
118
|
+
["positive integers", 6, 2, 8],
|
119
|
+
["negative integers", -1, -2, -3],
|
120
|
+
[ "mixed integers", -5, 3, -2],
|
121
|
+
]
|
122
|
+
end
|
123
|
+
|
124
|
+
with_them do
|
125
|
+
it "should do additions" do
|
126
|
+
expect(a + b).to eq answer
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
# Or :case_names lambda for hash syntax
|
131
|
+
# Output:
|
132
|
+
# when hash arguments
|
133
|
+
# 1 + 5 + 2
|
134
|
+
# sum is even
|
135
|
+
# 1 + 5 + 4
|
136
|
+
# sum is even
|
137
|
+
# 1 + 7 + 2
|
138
|
+
# sum is even
|
139
|
+
# ...
|
140
|
+
describe "Custom naming for hash syntax" do
|
141
|
+
where(case_names: ->(a, b, c){"#{a} + #{b} + #{c}"}, a: [1, 3], b: [5, 7, 9], c: [2, 4])
|
142
|
+
|
143
|
+
with_them do
|
144
|
+
it "sum is even" do
|
145
|
+
expect(a + b + c).to be_even
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
75
150
|
```
|
76
151
|
|
77
152
|
I was inspired by [udzura's mock](https://gist.github.com/1881139).
|
data/lib/rspec/parameterized.rb
CHANGED
@@ -40,12 +40,22 @@ module RSpec
|
|
40
40
|
def where(*args, &b)
|
41
41
|
|
42
42
|
if args.size == 1 && args[0].instance_of?(Hash)
|
43
|
+
naming_func = args.first.delete(:case_names)
|
43
44
|
params = args[0]
|
44
45
|
first, *rest = params.values
|
46
|
+
arg_names = params.keys
|
47
|
+
arg_values = first.product(*rest)
|
45
48
|
|
46
|
-
|
47
|
-
|
49
|
+
if naming_func && naming_func.respond_to?(:call)
|
50
|
+
arg_names << :case_name
|
51
|
+
arg_values.map! { |row| row << naming_func.call(*row) }
|
52
|
+
end
|
53
|
+
|
54
|
+
set_parameters(arg_names) {
|
55
|
+
arg_values
|
48
56
|
}
|
57
|
+
elsif args.size == 0
|
58
|
+
set_verbose_parameters(&b)
|
49
59
|
else
|
50
60
|
set_parameters(args, &b)
|
51
61
|
end
|
@@ -99,7 +109,7 @@ module RSpec
|
|
99
109
|
|
100
110
|
param_sets.each do |param_set|
|
101
111
|
pairs = [parameter.arg_names, param_set].transpose.to_h
|
102
|
-
pretty_params = pairs.map {|name, val| "#{name}: #{params_inspect(val)}"}.join(", ")
|
112
|
+
pretty_params = pairs.has_key?(:case_name) ? pairs[:case_name] : pairs.map {|name, val| "#{name}: #{params_inspect(val)}"}.join(", ")
|
103
113
|
describe(pretty_params, *args) do
|
104
114
|
pairs.each do |name, val|
|
105
115
|
let(name) { val }
|
@@ -135,6 +145,23 @@ module RSpec
|
|
135
145
|
return obj.inspect
|
136
146
|
end
|
137
147
|
end
|
148
|
+
|
149
|
+
def set_verbose_parameters(&block)
|
150
|
+
arguments_hash = yield
|
151
|
+
arg_names = arguments_hash.values.reduce(Set.new) { |memo, pairs| memo | pairs.keys }.to_a
|
152
|
+
arg_values = []
|
153
|
+
arguments_hash.each do |name, values_hash|
|
154
|
+
row = [name]
|
155
|
+
arg_names.each do |argument_name|
|
156
|
+
row << values_hash[argument_name]
|
157
|
+
end
|
158
|
+
arg_values << row
|
159
|
+
end
|
160
|
+
arg_names.unshift(:case_name)
|
161
|
+
set_parameters(arg_names) {
|
162
|
+
arg_values
|
163
|
+
}
|
164
|
+
end
|
138
165
|
end
|
139
166
|
end
|
140
167
|
|
data/spec/parametarized_spec.rb
CHANGED
@@ -66,6 +66,131 @@ describe RSpec::Parameterized do
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
+
describe "Verbose syntax" do
|
70
|
+
where do
|
71
|
+
{
|
72
|
+
"positive integers" => {
|
73
|
+
a: 1,
|
74
|
+
b: 2,
|
75
|
+
answer: 3,
|
76
|
+
},
|
77
|
+
"negative_integers" => {
|
78
|
+
a: -1,
|
79
|
+
b: -2,
|
80
|
+
answer: -3,
|
81
|
+
},
|
82
|
+
"mixed_integers" => {
|
83
|
+
a: 3,
|
84
|
+
b: -3,
|
85
|
+
answer: 0,
|
86
|
+
},
|
87
|
+
}
|
88
|
+
end
|
89
|
+
|
90
|
+
with_them do
|
91
|
+
it "should do additions" do
|
92
|
+
expect(a + b).to eq answer
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should have custom name" do |example|
|
96
|
+
expect(example.metadata[:example_group][:description]).to eq case_name
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context "lambda parameter" do
|
101
|
+
where do
|
102
|
+
{
|
103
|
+
"integers" => {
|
104
|
+
a: 1,
|
105
|
+
b: 2,
|
106
|
+
answer: -> {expect(subject).to eq 3},
|
107
|
+
},
|
108
|
+
"strings" => {
|
109
|
+
a: "hello ",
|
110
|
+
b: "world",
|
111
|
+
answer: -> {expect(subject).to include "lo wo"},
|
112
|
+
},
|
113
|
+
"arrays" => {
|
114
|
+
a: [1, 2, 3],
|
115
|
+
b: [4, 5, 6],
|
116
|
+
answer: -> {expect(subject.size).to eq 6}
|
117
|
+
}
|
118
|
+
}
|
119
|
+
end
|
120
|
+
|
121
|
+
with_them do
|
122
|
+
subject {a + b}
|
123
|
+
it "should do additions" do
|
124
|
+
self.instance_exec(&answer)
|
125
|
+
end
|
126
|
+
|
127
|
+
it "should have custom name" do |example|
|
128
|
+
expect(example.metadata[:example_group][:description]).to eq(case_name)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
describe "Custom test case name" do
|
135
|
+
context "when regular arguments" do
|
136
|
+
where(:case_name, :a, :b, :answer) do
|
137
|
+
[
|
138
|
+
["positive integers", 6, 2, 8],
|
139
|
+
["negative integers", -1, -2, -3],
|
140
|
+
[ "mixed integers", -5, 3, -2],
|
141
|
+
]
|
142
|
+
end
|
143
|
+
|
144
|
+
with_them do
|
145
|
+
it "should do additions" do
|
146
|
+
expect(a + b).to eq answer
|
147
|
+
end
|
148
|
+
|
149
|
+
it "should have custom test name" do |example|
|
150
|
+
expect(example.metadata[:example_group][:description]).to eq case_name
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
context "when hash arguments" do
|
156
|
+
where(case_names: ->(a, b, c){"#{a} + #{b} + #{c}"}, a: [1, 3], b: [5, 7, 9], c: [2, 4])
|
157
|
+
|
158
|
+
with_them do
|
159
|
+
it "sum is even" do
|
160
|
+
expect(a + b + c).to be_even
|
161
|
+
end
|
162
|
+
|
163
|
+
it "should have custom names" do |example|
|
164
|
+
expect(example.metadata[:example_group][:description]).to include "+"
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
if RUBY_VERSION >= "2,1"
|
170
|
+
context "when arguments are separated with pipe (using TableSyntax)" do
|
171
|
+
using RSpec::Parameterized::TableSyntax
|
172
|
+
|
173
|
+
where(:case_name, :a, :b, :answer) do
|
174
|
+
"integers" | 1 | 2 | 3
|
175
|
+
"strings" | "hello " | "world" | "hello world"
|
176
|
+
"arrays" | [1, 2, 3] | [4, 5, 6] | [1, 2, 3, 4, 5, 6]
|
177
|
+
"giant numbers" | 100000000000000000000 | 100000000000000000000 | 200000000000000000000
|
178
|
+
end
|
179
|
+
|
180
|
+
with_them do
|
181
|
+
it "a plus b is answer" do
|
182
|
+
expect(a + b).to eq answer
|
183
|
+
end
|
184
|
+
|
185
|
+
it "should have custom test name" do |example|
|
186
|
+
expect(example.metadata[:example_group][:description]).to eq case_name
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
end
|
193
|
+
|
69
194
|
if RUBY_VERSION >= "2.1"
|
70
195
|
describe "table separated with pipe (using TableSyntax)" do
|
71
196
|
using RSpec::Parameterized::TableSyntax
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-parameterized
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tomykaira
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-06-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -145,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
145
|
version: '0'
|
146
146
|
requirements: []
|
147
147
|
rubyforge_project:
|
148
|
-
rubygems_version: 2.6.
|
148
|
+
rubygems_version: 2.6.12
|
149
149
|
signing_key:
|
150
150
|
specification_version: 4
|
151
151
|
summary: RSpec::Parameterized supports simple parameterized test syntax in rspec.
|