paramesan 0.0.1 → 1.0.1
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 +5 -5
- data/README.md +131 -27
- data/lib/paramesan.rb +30 -12
- data/lib/paramesan/version.rb +1 -1
- data/paramesan.gemspec +2 -2
- metadata +11 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 033f2032789102c66626b25bb5f67222b067025ee299f6f98c55cf1a12073f4c
|
4
|
+
data.tar.gz: 31f2ca4d45936102ce65f0ee077477490d5028680888511a9c96c18c673cceb3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e2393e003a09d0d6a87e3ba5136556df1368c6ef5d3f90ee22743ae2c251ead83a43bbf26ed7d800aab58d0fd50ee274ba0e3f43c75acd9c7d4f96bb1aab13a3
|
7
|
+
data.tar.gz: ce0378ef1aff1c84fec8f0c4eae63f17d9dd86233a2893e25820a9545831bc2c17b4676f7c6244aa41c1c3c8458c6bedda41f5412f2b75e663fd8dda696fbc24
|
data/README.md
CHANGED
@@ -13,53 +13,87 @@ unit tests, which initially focused on the behavior (the process or code), then
|
|
13
13
|
and output as data that go through the process.
|
14
14
|
|
15
15
|
I looked for the equivalent in Ruby, and the closest that I found was
|
16
|
-
[param_test](https://www.ruby-toolbox.com/projects/param_test). That
|
17
|
-
|
18
|
-
|
16
|
+
[param_test](https://www.ruby-toolbox.com/projects/param_test). That uses activesupport, which is
|
17
|
+
included in Rails, but I wanted a version that ran in a pure Ruby environment, using only the
|
18
|
+
test-unit gem. I prefer that over Minitest, mainly because the latter uses notifications that don't
|
19
|
+
work especially well with Emacs.
|
19
20
|
|
20
|
-
Ergo,
|
21
|
-
tests.
|
21
|
+
Ergo, Paramesan, which as of this writing, supports a set of options for parameterized tests.
|
22
22
|
|
23
23
|
# Example
|
24
24
|
|
25
25
|
## Before
|
26
26
|
|
27
|
+
58 lines.
|
28
|
+
|
27
29
|
```ruby
|
28
30
|
require 'pvn/log/options'
|
29
31
|
require 'test/unit'
|
30
32
|
|
31
33
|
class FormatOptionTest < Test::Unit::TestCase
|
32
|
-
def assert_formatter expected,
|
33
|
-
|
34
|
-
|
35
|
-
assert_kind_of expected, fmtr.formatter, "type: #{type}"
|
36
|
-
end
|
34
|
+
def assert_formatter expected, type
|
35
|
+
fmtr = Pvn2::Log::FormatOption.new type
|
36
|
+
assert_kind_of expected, fmtr.formatter, "type: #{type}"
|
37
37
|
end
|
38
38
|
|
39
|
-
def
|
40
|
-
assert_formatter
|
39
|
+
def test_oneline_single
|
40
|
+
assert_formatter Pvn2::Log::FormatOneLine, "single"
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_oneline_si
|
44
|
+
assert_formatter Pvn2::Log::FormatOneLine, "si"
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_oneline_oneline
|
48
|
+
assert_formatter Pvn2::Log::FormatOneLine, "oneline"
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_summary_summary
|
52
|
+
assert_formatter Pvn2::Log::FormatSummary, "summary"
|
41
53
|
end
|
42
54
|
|
43
|
-
def
|
44
|
-
assert_formatter
|
55
|
+
def test_summary_su
|
56
|
+
assert_formatter Pvn2::Log::FormatSummary, "su"
|
45
57
|
end
|
46
58
|
|
47
|
-
def
|
48
|
-
assert_formatter
|
59
|
+
def test_revision_revision
|
60
|
+
assert_formatter Pvn2::Log::FormatRevision, "revision"
|
49
61
|
end
|
50
62
|
|
51
|
-
def
|
52
|
-
assert_formatter
|
63
|
+
def test_revision_author_revauthor
|
64
|
+
assert_formatter Pvn2::Log::FormatRevisionAuthor, "revauthor"
|
53
65
|
end
|
54
66
|
|
55
|
-
def
|
56
|
-
assert_formatter
|
67
|
+
def test_revision_author_revauth
|
68
|
+
assert_formatter Pvn2::Log::FormatRevisionAuthor, "revauth"
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_revision_author_revisionauthor
|
72
|
+
assert_formatter Pvn2::Log::FormatRevisionAuthor, "revisionauthor"
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_colorized_color
|
76
|
+
assert_formatter Pvn2::Log::FormatColorized, "color"
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_colorized_colorized
|
80
|
+
assert_formatter Pvn2::Log::FormatColorized, "colorized"
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_tree_tree
|
84
|
+
assert_formatter Pvn2::Log::FormatTree, "tree"
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_tree_zzz
|
88
|
+
assert_formatter Pvn2::Log::FormatTree, "zzz"
|
57
89
|
end
|
58
90
|
end
|
59
91
|
```
|
60
92
|
|
61
93
|
## After
|
62
94
|
|
95
|
+
17 lines.
|
96
|
+
|
63
97
|
```ruby
|
64
98
|
require 'pvn/log/options'
|
65
99
|
require 'test/unit'
|
@@ -67,19 +101,89 @@ require 'paramesan'
|
|
67
101
|
|
68
102
|
class FormatOptionTest < Test::Unit::TestCase
|
69
103
|
extend Paramesan
|
70
|
-
|
104
|
+
|
71
105
|
param_test [
|
72
|
-
[
|
73
|
-
[
|
74
|
-
[
|
75
|
-
[
|
76
|
-
[
|
106
|
+
[ Pvn2::Log::FormatOneLine, "oneline", "single", "si" ],
|
107
|
+
[ Pvn2::Log::FormatSummary, "summary", "sum" ],
|
108
|
+
[ Pvn2::Log::FormatRevision, "revision" ],
|
109
|
+
[ Pvn2::Log::FormatRevisionAuthor, "revisionauthor", "revauthor", "revauth" ],
|
110
|
+
[ Pvn2::Log::FormatColorized, "colorized", "color", "full" ],
|
111
|
+
[ Pvn2::Log::FormatMessage, "message" ],
|
112
|
+
[ Pvn2::Log::FormatTree, "tree", "zzz" ],
|
77
113
|
] do |exp, *types|
|
78
|
-
|
114
|
+
types.each do |type|
|
115
|
+
assert_kind_of exp, Pvn2::Log::FormatOption.new(type).formatter, "type: #{type}"
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
```
|
120
|
+
|
121
|
+
The Paramesan code generates a test method for each parameter set, as for example, with the last
|
122
|
+
test case, which fails:
|
123
|
+
|
124
|
+
```text
|
125
|
+
Error: test__Pvn2_Log_FormatTree_tree_zzz_(FormatsTest): RuntimeError: invalid format zzz not one of: author colorized full message oneline revauthor revision revisionauthor single summary tree
|
126
|
+
/opt/proj/pvn2/lib/pvn2/log/formats.rb:46:in `class_for'
|
127
|
+
/opt/proj/pvn2/lib/pvn2/log/options.rb:19:in `initialize'
|
128
|
+
/opt/proj/pvn2/test/pvn2/log/formats_test.rb:134:in `new'
|
129
|
+
/opt/proj/pvn2/test/pvn2/log/formats_test.rb:134:in `block (2 levels) in <class:FormatsTest>'
|
130
|
+
/opt/proj/pvn2/test/pvn2/log/formats_test.rb:133:in `each'
|
131
|
+
/opt/proj/pvn2/test/pvn2/log/formats_test.rb:133:in `block in <class:FormatsTest>'
|
132
|
+
/home/jpace/.rvm/gems/ruby-2.3.0/gems/paramesan-0.1.1/lib/paramesan.rb:19:in `instance_exec'
|
133
|
+
/home/jpace/.rvm/gems/ruby-2.3.0/gems/paramesan-0.1.1/lib/paramesan.rb:19:in `block (2 levels) in param_test'
|
134
|
+
```
|
135
|
+
|
136
|
+
# Common Parameters
|
137
|
+
|
138
|
+
Sometimes the same set of parameters is used in multiple tests. To do that with Paramesan, simply
|
139
|
+
define a class method returning those parameters, and adjust the param_test blocks:
|
140
|
+
|
141
|
+
```ruby
|
142
|
+
class FormatsTest < Test::Unit::TestCase
|
143
|
+
include Paramesan
|
144
|
+
|
145
|
+
def self.build_class_types_params
|
146
|
+
[
|
147
|
+
[ Pvn2::Log::FormatOneLine, "oneline", "single", "si" ],
|
148
|
+
[ Pvn2::Log::FormatSummary, "summary", "sum" ],
|
149
|
+
[ Pvn2::Log::FormatRevision, "revision" ],
|
150
|
+
[ Pvn2::Log::FormatRevisionAuthor, "revisionauthor", "revauthor", "revauth" ],
|
151
|
+
[ Pvn2::Log::FormatColorized, "colorized", "color", "full" ],
|
152
|
+
[ Pvn2::Log::FormatMessage, "message" ],
|
153
|
+
[ Pvn2::Log::FormatTree, "tree", "zzz" ],
|
154
|
+
]
|
155
|
+
end
|
156
|
+
|
157
|
+
param_test build_class_types_params do |exp, *types|
|
158
|
+
fmts = Pvn2::Log::Formats.new
|
79
159
|
types.each do |type|
|
80
160
|
assert_equal exp, fmts.class_for(type), "type: #{type}"
|
81
161
|
end
|
82
162
|
end
|
163
|
+
|
164
|
+
param_test build_class_types_params do |exp, *types|
|
165
|
+
types.each do |type|
|
166
|
+
assert_kind_of exp, Pvn2::Log::FormatOption.new(type).formatter, "type: #{type}"
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
```
|
171
|
+
|
172
|
+
# Non Arrays
|
173
|
+
|
174
|
+
The set of parameters does not have to consist of arrays. For example, using strings:
|
175
|
+
|
176
|
+
```ruby
|
177
|
+
class FormatsTest < Test::Unit::TestCase
|
178
|
+
include Paramesan
|
179
|
+
|
180
|
+
param_test %w{ abc def } do |str|
|
181
|
+
fmts = Pvn2::Log::Formats.new
|
182
|
+
expfmts = "author colorized full message oneline revauthor revision revisionauthor single summary tree"
|
183
|
+
assert_raise(RuntimeError.new "invalid format #{str} not one of: #{expfmts}") do
|
184
|
+
fmts.class_for str
|
185
|
+
end
|
186
|
+
end
|
83
187
|
end
|
84
188
|
```
|
85
189
|
|
data/lib/paramesan.rb
CHANGED
@@ -4,22 +4,40 @@
|
|
4
4
|
require "paramesan/version"
|
5
5
|
|
6
6
|
module Paramesan
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
mname = basename
|
7
|
+
module ClassMethods
|
8
|
+
def param_test paramlist, &blk
|
9
|
+
count = paramlist.count
|
10
|
+
paramlist.each_with_index do |params, idx|
|
11
|
+
name = param_test_name params, idx, count
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
mname = name.to_sym
|
14
|
+
i = 0
|
15
|
+
while instance_methods.include? mname.to_sym
|
16
|
+
i += 1
|
17
|
+
mname = name + "_#{i}"
|
18
|
+
end
|
19
|
+
|
20
|
+
define_method mname do
|
21
|
+
instance_exec(params, &blk)
|
22
|
+
end
|
17
23
|
end
|
24
|
+
end
|
18
25
|
|
19
|
-
|
20
|
-
|
21
|
-
|
26
|
+
def param_test_name params, idx, count
|
27
|
+
name = "test_" + idx.to_s + "_of_" + count.to_s + "__"
|
28
|
+
if params.kind_of?(Enumerable)
|
29
|
+
nonword = Regexp.new '[^\w]+'
|
30
|
+
elements = params.collect { |param| param.to_s.gsub nonword, '_' }
|
31
|
+
name << elements.join('_')
|
32
|
+
else
|
33
|
+
name << params.to_s
|
22
34
|
end
|
23
35
|
end
|
24
36
|
end
|
37
|
+
|
38
|
+
extend ClassMethods
|
39
|
+
|
40
|
+
def self.included other
|
41
|
+
other.extend ClassMethods
|
42
|
+
end
|
25
43
|
end
|
data/lib/paramesan/version.rb
CHANGED
data/paramesan.gemspec
CHANGED
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
28
|
spec.require_paths = ["lib"]
|
29
29
|
|
30
|
-
spec.add_development_dependency "bundler", "
|
31
|
-
spec.add_development_dependency "rake", "
|
30
|
+
spec.add_development_dependency "bundler", ">= 2.0"
|
31
|
+
spec.add_development_dependency "rake", ">= 13.0"
|
32
32
|
spec.add_development_dependency "test-unit", "~> 3.1.5"
|
33
33
|
end
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paramesan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Pace
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-10-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '2.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '13.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '13.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: test-unit
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -90,8 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
90
|
- !ruby/object:Gem::Version
|
91
91
|
version: '0'
|
92
92
|
requirements: []
|
93
|
-
|
94
|
-
rubygems_version: 2.6.3
|
93
|
+
rubygems_version: 3.0.8
|
95
94
|
signing_key:
|
96
95
|
specification_version: 4
|
97
96
|
summary: Parameterized tests
|