minispec-metadata 3.0.0 → 3.2.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 +9 -0
- data/README.md +33 -21
- data/Rakefile +2 -1
- data/lib/backwards.rb +1 -1
- data/lib/minispec-metadata.rb +7 -6
- data/lib/minispec-metadata/describe.rb +13 -3
- data/lib/minispec-metadata/it.rb +8 -4
- data/lib/minispec-metadata/tags.rb +107 -0
- data/lib/minispec-metadata/version.rb +1 -1
- data/lib/minitest/minispec_metadata_plugin.rb +25 -0
- data/lib/minitest/versions.rb +9 -0
- data/spec/describe.spec.rb +32 -33
- data/spec/it.spec.rb +5 -1
- data/spec/minispec_metadata.spec.rb +7 -7
- data/spec/regression.spec.rb +1 -1
- data/spec/tags.spec.rb +110 -0
- metadata +7 -4
- data/lib/minispec-metadata/describe_with_metadata.rb +0 -45
- data/lib/minispec-metadata/spec_with_metadata.rb +0 -66
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5bdc75e156393afb15081d9942ca420644c1a90
|
4
|
+
data.tar.gz: 50c85c9943c5d9ebf508b6f13ad80b3db146bae0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7c77884c1cb77c561aedf9cb2f6ba827a98b130f28f205977863cd8f52659cc391b6b7eb3de438ab2cc8fa9614507f6c92539b098e66bf8fece0efea301800b
|
7
|
+
data.tar.gz: 37d97040831cee14ddeb8145b5321640c026c8ddcb1d046af06bb8190f61c968fa3da61f058b6b6ba502b52310c1814a4cebff287ed55cf1ea685c145442e389
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -51,6 +51,14 @@ describe 'Usage', some: 'metadata' do
|
|
51
51
|
self.class.desc.must_equal MinispecMetadata
|
52
52
|
end
|
53
53
|
|
54
|
+
it 'treats additional descriptions as metadata too', meta: 'data' do
|
55
|
+
metadata.must_equal(
|
56
|
+
:some => 'metadata',
|
57
|
+
'additional description' => true,
|
58
|
+
:meta => 'data',
|
59
|
+
)
|
60
|
+
end
|
61
|
+
|
54
62
|
end
|
55
63
|
|
56
64
|
# Thanks to @mfpiccolo for this.
|
@@ -74,6 +82,31 @@ describe 'VCR trick' do
|
|
74
82
|
end
|
75
83
|
```
|
76
84
|
|
85
|
+
### Tags
|
86
|
+
|
87
|
+
(Only for Ruby >= 2 and Minitest >= 5)
|
88
|
+
|
89
|
+
Use the `--tag TAG` or `-tTAG` option to focus on certain tests according to metadata (will match both string/symbol as key/value).
|
90
|
+
E.g. Run only the slow tests below with option `--tag js`:
|
91
|
+
|
92
|
+
```ruby
|
93
|
+
describe 'integration tests' do
|
94
|
+
it 'runs super slow JS stuff', :js do
|
95
|
+
# Will run.
|
96
|
+
end
|
97
|
+
it 'runs fast stuff' do
|
98
|
+
# Will not run.
|
99
|
+
end
|
100
|
+
end
|
101
|
+
```
|
102
|
+
|
103
|
+
You can use `--tag` more than once to include more tags to be run (any matching tags will run).
|
104
|
+
|
105
|
+
If an exclusive tag, e.g. `~slow`, is used alone, all tests except those tagged slow will be run.
|
106
|
+
If an exclusive tag is used in addition to any inclusive tags, then the exclusive tag will just filter those included.
|
107
|
+
|
108
|
+
Note that when using `rake`, you need to wrap Minitest's options like this: `rake test TESTOPTS='--tag js'`.
|
109
|
+
|
77
110
|
## Installation
|
78
111
|
|
79
112
|
Add this line to your application's Gemfile:
|
@@ -88,27 +121,6 @@ Or install it yourself:
|
|
88
121
|
|
89
122
|
$ gem install minispec-metadata
|
90
123
|
|
91
|
-
## Additional description gotcha
|
92
|
-
|
93
|
-
In Minitest <= 4, Minitest allows 2 descriptions:
|
94
|
-
|
95
|
-
```ruby
|
96
|
-
describe 'Description 1', 'Description 2'
|
97
|
-
```
|
98
|
-
|
99
|
-
But this gem allows symbols as metadata:
|
100
|
-
|
101
|
-
```ruby
|
102
|
-
describe 'Description', :additional
|
103
|
-
```
|
104
|
-
|
105
|
-
Technically, this gem breaks Minitest behavior here.
|
106
|
-
With this gem, `:additional` is used as metadata.
|
107
|
-
But in pure Minitest, it would have been used as the additional description.
|
108
|
-
I personally have never seen anybody use the additional description,
|
109
|
-
and I think the "symbols as metadata" feature is more useful.
|
110
|
-
So I allowed this breakage of Minitest behavior.
|
111
|
-
|
112
124
|
## Compatibility
|
113
125
|
|
114
126
|
Tested with Minitest 4 and up.
|
data/Rakefile
CHANGED
data/lib/backwards.rb
CHANGED
data/lib/minispec-metadata.rb
CHANGED
@@ -1,25 +1,26 @@
|
|
1
1
|
require 'minitest/spec'
|
2
|
+
|
3
|
+
require 'minitest/versions'
|
2
4
|
require_relative 'backwards'
|
3
5
|
|
4
|
-
require
|
6
|
+
require 'minispec-metadata/version'
|
5
7
|
|
6
8
|
require 'minispec-metadata/it'
|
7
9
|
require 'minispec-metadata/describe'
|
10
|
+
require 'minispec-metadata/tags'
|
8
11
|
|
9
12
|
module MinispecMetadata
|
10
13
|
|
11
14
|
module_function
|
12
15
|
|
13
|
-
def extract_metadata
|
16
|
+
def extract_metadata(args)
|
14
17
|
metadata = {}
|
15
|
-
args.
|
18
|
+
args.each do |arg|
|
16
19
|
case arg
|
17
20
|
when Hash
|
18
21
|
metadata.merge! arg
|
19
|
-
when Symbol
|
20
|
-
metadata.merge!(arg => true)
|
21
22
|
else
|
22
|
-
|
23
|
+
metadata.merge!(arg => true)
|
23
24
|
end
|
24
25
|
end
|
25
26
|
metadata
|
@@ -2,9 +2,19 @@ module MinispecMetadata
|
|
2
2
|
module Describe
|
3
3
|
|
4
4
|
def describe(desc, *additional_desc, &block)
|
5
|
-
metadata = MinispecMetadata.extract_metadata
|
6
|
-
|
7
|
-
|
5
|
+
metadata = MinispecMetadata.extract_metadata additional_desc
|
6
|
+
|
7
|
+
# Minitest 5 allows unlimited additional_desc.
|
8
|
+
# Minitest 4 allows max 1 additional_desc.
|
9
|
+
# So we need to pass up only the number of allowed additional_desc.
|
10
|
+
additional_allowed =
|
11
|
+
if Minitest::Versions::MAJOR <= 4
|
12
|
+
additional_desc.first(1)
|
13
|
+
else
|
14
|
+
additional_desc
|
15
|
+
end
|
16
|
+
|
17
|
+
cls = super(desc, *additional_allowed.compact, &block)
|
8
18
|
cls.extend ClassMethods
|
9
19
|
|
10
20
|
cls.additional_desc = additional_desc
|
data/lib/minispec-metadata/it.rb
CHANGED
@@ -10,7 +10,7 @@ module MinispecMetadata
|
|
10
10
|
def it(description, *metadata, &block)
|
11
11
|
name = super description, &block
|
12
12
|
|
13
|
-
metadata = MinispecMetadata.extract_metadata
|
13
|
+
metadata = MinispecMetadata.extract_metadata(metadata)
|
14
14
|
|
15
15
|
self.it_descriptions[name] = description
|
16
16
|
self.metadata_by_test_name[name] = metadata
|
@@ -27,12 +27,16 @@ module MinispecMetadata
|
|
27
27
|
@it_descriptions ||= {}
|
28
28
|
end
|
29
29
|
|
30
|
+
def metadata_for_test_name(test_name)
|
31
|
+
describe_metadata.merge(
|
32
|
+
metadata_by_test_name.fetch(test_name)
|
33
|
+
)
|
34
|
+
end
|
35
|
+
|
30
36
|
end
|
31
37
|
|
32
38
|
def metadata
|
33
|
-
self.class.
|
34
|
-
self.class.metadata_by_test_name.fetch(name)
|
35
|
-
)
|
39
|
+
self.class.metadata_for_test_name(name)
|
36
40
|
end
|
37
41
|
|
38
42
|
def desc
|
@@ -0,0 +1,107 @@
|
|
1
|
+
module MinispecMetadata
|
2
|
+
|
3
|
+
module_function
|
4
|
+
|
5
|
+
def tags
|
6
|
+
@tags ||= []
|
7
|
+
end
|
8
|
+
|
9
|
+
def add_tag_string(tag_string)
|
10
|
+
tags << Tag.new(tag_string)
|
11
|
+
end
|
12
|
+
|
13
|
+
def supports_tags?
|
14
|
+
minitest_version_supports_tags? && ruby_version_supports_tags?
|
15
|
+
end
|
16
|
+
|
17
|
+
# Because of plugin system.
|
18
|
+
def minitest_version_supports_tags?
|
19
|
+
Minitest::Versions::MAJOR >= 5
|
20
|
+
end
|
21
|
+
|
22
|
+
# Because of #prepend.
|
23
|
+
def ruby_version_supports_tags?
|
24
|
+
RUBY_VERSION.to_i >= 2
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
module MinispecMetadata
|
30
|
+
|
31
|
+
module Tags
|
32
|
+
|
33
|
+
def runnable_methods
|
34
|
+
methods = super.dup
|
35
|
+
|
36
|
+
if MinispecMetadata.tags.select(&:inclusive?).any?
|
37
|
+
methods.select! do |runnable_method|
|
38
|
+
runnable_method_matches_any_inclusive_tag?(runnable_method)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
methods.reject do |runnable_method|
|
43
|
+
runnable_method_matches_any_exclusive_tag?(runnable_method)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def runnable_method_matches_any_inclusive_tag?(runnable_method)
|
48
|
+
tags = MinispecMetadata.tags.select(&:inclusive?)
|
49
|
+
runnable_method_matches_any_tags?(runnable_method, tags)
|
50
|
+
end
|
51
|
+
|
52
|
+
def runnable_method_matches_any_exclusive_tag?(runnable_method)
|
53
|
+
tags = MinispecMetadata.tags.select(&:exclusive?)
|
54
|
+
runnable_method_matches_any_tags?(runnable_method, tags)
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def runnable_method_matches_any_tags?(runnable_method, tags)
|
60
|
+
tags.any? do |tag|
|
61
|
+
metadata = metadata_for_test_name(runnable_method)
|
62
|
+
value = metadata[tag.key] || metadata[tag.key.to_sym]
|
63
|
+
matches =
|
64
|
+
if tag.value?
|
65
|
+
value.to_s == tag.value
|
66
|
+
else
|
67
|
+
!!value
|
68
|
+
end
|
69
|
+
matches
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
class Tag
|
76
|
+
|
77
|
+
def initialize(tag_string)
|
78
|
+
@tag_string = tag_string
|
79
|
+
end
|
80
|
+
|
81
|
+
def exclusive?
|
82
|
+
@tag_string.start_with? '~'
|
83
|
+
end
|
84
|
+
|
85
|
+
def inclusive?
|
86
|
+
!exclusive?
|
87
|
+
end
|
88
|
+
|
89
|
+
def key
|
90
|
+
@key ||= @tag_string[/\w+/]
|
91
|
+
end
|
92
|
+
|
93
|
+
def value
|
94
|
+
@value ||= @tag_string.split(':').last if value?
|
95
|
+
end
|
96
|
+
|
97
|
+
def value?
|
98
|
+
!!@tag_string[/:/]
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
if MinispecMetadata.supports_tags?
|
106
|
+
Minitest::Test.singleton_class.send :prepend, MinispecMetadata::Tags
|
107
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# This file gets auto required/executed by Minitest >= v5.
|
2
|
+
# Any other version won't find this file automatically.
|
3
|
+
|
4
|
+
require 'minispec-metadata'
|
5
|
+
|
6
|
+
module Minitest
|
7
|
+
|
8
|
+
def self.plugin_minispec_metadata_options(opts, options)
|
9
|
+
opts.on '-t', '--tag TAG'do |tag_string|
|
10
|
+
options[:tag_strings] ||= []
|
11
|
+
options[:tag_strings] << tag_string
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.plugin_minispec_metadata_init(options)
|
16
|
+
if RUBY_VERSION.to_i >= 2
|
17
|
+
options.fetch(:tag_strings, []).each do |tag_string|
|
18
|
+
MinispecMetadata.add_tag_string tag_string
|
19
|
+
end
|
20
|
+
else
|
21
|
+
warn 'tags requires Ruby 2. If you really want it, please open an issue.'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
data/spec/describe.spec.rb
CHANGED
@@ -72,48 +72,40 @@ describe MinispecMetadata::Describe, super_meta: 'data' do
|
|
72
72
|
|
73
73
|
end
|
74
74
|
|
75
|
-
|
75
|
+
# Only allows 1 additional description.
|
76
|
+
describe MinispecMetadata::Describe, 'additional description' do
|
76
77
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
it 'provides a method to get the descriptions' do
|
81
|
-
self.class.descs.must_equal [MinispecMetadata::Describe, 'additional description']
|
82
|
-
end
|
83
|
-
|
84
|
-
it 'provides a method to get only the additional description' do
|
85
|
-
self.class.additional_desc.must_equal ['additional description']
|
86
|
-
end
|
78
|
+
it 'provides a method to get the descriptions' do
|
79
|
+
self.class.descs.must_equal [MinispecMetadata::Describe, 'additional description']
|
80
|
+
end
|
87
81
|
|
88
|
-
|
82
|
+
it 'provides a method to get only the additional description' do
|
83
|
+
self.class.additional_desc.must_equal ['additional description']
|
84
|
+
end
|
89
85
|
|
90
|
-
|
91
|
-
self.class.additional_desc.must_be_empty
|
92
|
-
end
|
86
|
+
describe 'nested describe with no additional description' do
|
93
87
|
|
88
|
+
it 'does not inherit additional description from parent' do
|
89
|
+
self.class.additional_desc.must_be_empty
|
94
90
|
end
|
95
91
|
|
96
92
|
end
|
97
93
|
|
98
|
-
|
99
|
-
|
100
|
-
# Minitest version 5
|
101
|
-
describe MinispecMetadata::Describe, 'additional description', 'even more' do
|
102
|
-
|
103
|
-
it 'provides a method to get the descriptions' do
|
104
|
-
self.class.descs.must_equal [MinispecMetadata::Describe, 'additional description', 'even more']
|
105
|
-
end
|
106
|
-
|
107
|
-
it 'provides a method to get only the additional description' do
|
108
|
-
self.class.additional_desc.must_equal ['additional description', 'even more']
|
109
|
-
end
|
94
|
+
end
|
110
95
|
|
111
|
-
|
96
|
+
if Minitest::Versions::MAJOR >= 5
|
112
97
|
|
113
|
-
|
114
|
-
self.class.additional_desc.must_be_empty
|
115
|
-
end
|
98
|
+
describe 'stuff', 'more stuff', {even_more: 'stuff'}, :holy_cow_that_is_a_lot_of_stuff, :minitest_5 do
|
116
99
|
|
100
|
+
it 'preserves additional description but still allows any value for metadata', :more? => 'yeah' do
|
101
|
+
self.class.descs.must_equal ['stuff', 'more stuff', {even_more: 'stuff'}, :holy_cow_that_is_a_lot_of_stuff, :minitest_5]
|
102
|
+
metadata.must_equal(
|
103
|
+
'more stuff' => true,
|
104
|
+
:even_more => 'stuff',
|
105
|
+
:holy_cow_that_is_a_lot_of_stuff => true,
|
106
|
+
:more? => 'yeah',
|
107
|
+
:minitest_5 => true,
|
108
|
+
)
|
117
109
|
end
|
118
110
|
|
119
111
|
end
|
@@ -123,8 +115,15 @@ end
|
|
123
115
|
describe MinispecMetadata::Describe, 'additional description', :respect do
|
124
116
|
|
125
117
|
it 'respects additional description' do
|
126
|
-
|
127
|
-
|
118
|
+
if Minitest::Versions::MAJOR <= 4
|
119
|
+
self.class.name.must_equal 'MinispecMetadata::Describe::additional description'
|
120
|
+
else
|
121
|
+
self.class.name.must_equal 'MinispecMetadata::Describe::additional description::respect'
|
122
|
+
end
|
123
|
+
metadata.must_equal(
|
124
|
+
'additional description' => true,
|
125
|
+
:respect => true,
|
126
|
+
)
|
128
127
|
end
|
129
128
|
|
130
129
|
end
|
data/spec/it.spec.rb
CHANGED
@@ -51,7 +51,11 @@ describe MinispecMetadata::It do
|
|
51
51
|
describe 'in a nested describe', 'with no metadata' do
|
52
52
|
|
53
53
|
it 'works', works: true do
|
54
|
-
metadata.must_equal(
|
54
|
+
metadata.must_equal(
|
55
|
+
:description_meta => 'data',
|
56
|
+
'with no metadata' => true,
|
57
|
+
:works => true,
|
58
|
+
)
|
55
59
|
end
|
56
60
|
|
57
61
|
end
|
@@ -2,27 +2,27 @@ require_relative 'helper'
|
|
2
2
|
|
3
3
|
describe MinispecMetadata do
|
4
4
|
|
5
|
-
describe '#extract_metadata
|
5
|
+
describe '#extract_metadata' do
|
6
6
|
|
7
7
|
it 'extracts from a hash' do
|
8
|
-
metadata = MinispecMetadata.extract_metadata
|
8
|
+
metadata = MinispecMetadata.extract_metadata [{asdf: true}]
|
9
9
|
metadata.must_equal asdf: true
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'extracts from symbols, returns hash keys with true values' do
|
13
|
-
metadata = MinispecMetadata.extract_metadata
|
13
|
+
metadata = MinispecMetadata.extract_metadata [:asdf, :fdsa]
|
14
14
|
metadata.must_equal asdf: true, fdsa: true
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'extracts a mix' do
|
18
|
-
metadata = MinispecMetadata.extract_metadata
|
18
|
+
metadata = MinispecMetadata.extract_metadata [:asdf, {fdsa: true}]
|
19
19
|
metadata.must_equal asdf: true, fdsa: true
|
20
20
|
end
|
21
21
|
|
22
|
-
it '
|
22
|
+
it 'does not remove metadata from args' do
|
23
23
|
args = [:asdf, 'description']
|
24
|
-
metadata = MinispecMetadata.extract_metadata
|
25
|
-
args.must_equal ['description']
|
24
|
+
metadata = MinispecMetadata.extract_metadata args
|
25
|
+
args.must_equal [:asdf, 'description']
|
26
26
|
end
|
27
27
|
|
28
28
|
end
|
data/spec/regression.spec.rb
CHANGED
data/spec/tags.spec.rb
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
#require_relative 'test_tags_verifier' if ENV['TEST_TAGS'] && MinispecMetadata.supports_tags?
|
3
|
+
|
4
|
+
if MinispecMetadata.supports_tags?
|
5
|
+
|
6
|
+
module MinispecMetadata
|
7
|
+
describe Tag do
|
8
|
+
|
9
|
+
it 'captures the metadata key' do
|
10
|
+
tag = Tag.new('~sure')
|
11
|
+
tag.key.must_equal 'sure'
|
12
|
+
tag.value?.must_equal false
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'captures metadata key/value' do
|
16
|
+
tag = Tag.new('key:value')
|
17
|
+
tag.key.must_equal 'key'
|
18
|
+
tag.value.must_equal 'value'
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'captures inclusivity' do
|
22
|
+
tag = Tag.new('sure')
|
23
|
+
tag.must_be :inclusive?
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'captures exclusivity' do
|
27
|
+
tag = Tag.new('~sure')
|
28
|
+
tag.must_be :exclusive?
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
TAGS_TEST = describe Tags do
|
34
|
+
def self.passing_test(*args)
|
35
|
+
it *args do
|
36
|
+
pass
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
passing_test '1', :minitest_5
|
41
|
+
passing_test '2', 'minitest_5', :slow
|
42
|
+
passing_test '3', :minitest_4
|
43
|
+
passing_test '4', :minitest_4, 'slow'
|
44
|
+
passing_test '5', :slow, specific: 'value'
|
45
|
+
passing_test '6', 'specific' => :value, unmatched: :value
|
46
|
+
passing_test '7', 'specific' => 'value'
|
47
|
+
end
|
48
|
+
|
49
|
+
# Test the #runnable_methods of tags_test above with different sets of Tags.
|
50
|
+
describe '#runnable_methods' do
|
51
|
+
|
52
|
+
def stub_tags(tag_strings, &block)
|
53
|
+
tags = tag_strings.map { |tag_string| Tag.new(tag_string) }
|
54
|
+
MinispecMetadata.stub :tags, tags, &block
|
55
|
+
end
|
56
|
+
|
57
|
+
def strip_prefix(name)
|
58
|
+
name.sub /^test_\d{4}_/, ''
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.assert_runnable_methods_with_tags(tag_strings, expected_runnable_methods)
|
62
|
+
it "returns runnable_methods with tag_strings #{tag_strings.inspect}" do
|
63
|
+
stub_tags tag_strings do
|
64
|
+
TAGS_TEST
|
65
|
+
.runnable_methods
|
66
|
+
.map(&method(:strip_prefix))
|
67
|
+
.sort
|
68
|
+
.must_equal expected_runnable_methods
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
assert_runnable_methods_with_tags ['minitest_5'], %w[
|
74
|
+
1
|
75
|
+
2
|
76
|
+
]
|
77
|
+
|
78
|
+
assert_runnable_methods_with_tags ['~minitest_4'], %w[
|
79
|
+
1
|
80
|
+
2
|
81
|
+
5
|
82
|
+
6
|
83
|
+
7
|
84
|
+
]
|
85
|
+
|
86
|
+
assert_runnable_methods_with_tags ['specific:value'], %w[
|
87
|
+
5
|
88
|
+
6
|
89
|
+
7
|
90
|
+
]
|
91
|
+
|
92
|
+
assert_runnable_methods_with_tags ['~unmatched:value'], %w[
|
93
|
+
1
|
94
|
+
2
|
95
|
+
3
|
96
|
+
4
|
97
|
+
5
|
98
|
+
7
|
99
|
+
]
|
100
|
+
|
101
|
+
assert_runnable_methods_with_tags ['minitest_5', 'minitest_4', 'specific:value', '~unmatched:value', '~slow'], %w[
|
102
|
+
1
|
103
|
+
3
|
104
|
+
7
|
105
|
+
]
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minispec-metadata
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jared Ning
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -71,10 +71,11 @@ files:
|
|
71
71
|
- lib/backwards.rb
|
72
72
|
- lib/minispec-metadata.rb
|
73
73
|
- lib/minispec-metadata/describe.rb
|
74
|
-
- lib/minispec-metadata/describe_with_metadata.rb
|
75
74
|
- lib/minispec-metadata/it.rb
|
76
|
-
- lib/minispec-metadata/
|
75
|
+
- lib/minispec-metadata/tags.rb
|
77
76
|
- lib/minispec-metadata/version.rb
|
77
|
+
- lib/minitest/minispec_metadata_plugin.rb
|
78
|
+
- lib/minitest/versions.rb
|
78
79
|
- minispec-metadata.gemspec
|
79
80
|
- spec/describe.spec.rb
|
80
81
|
- spec/helper.rb
|
@@ -82,6 +83,7 @@ files:
|
|
82
83
|
- spec/minispec_metadata.spec.rb
|
83
84
|
- spec/readme.spec.rb
|
84
85
|
- spec/regression.spec.rb
|
86
|
+
- spec/tags.spec.rb
|
85
87
|
homepage: https://github.com/ordinaryzelig/minispec-metadata
|
86
88
|
licenses:
|
87
89
|
- MIT
|
@@ -113,3 +115,4 @@ test_files:
|
|
113
115
|
- spec/minispec_metadata.spec.rb
|
114
116
|
- spec/readme.spec.rb
|
115
117
|
- spec/regression.spec.rb
|
118
|
+
- spec/tags.spec.rb
|
@@ -1,45 +0,0 @@
|
|
1
|
-
module MinispecMetadata
|
2
|
-
module DescribeWithMetadata
|
3
|
-
|
4
|
-
def describe(desc, *_args, &block)
|
5
|
-
args = _args.dup
|
6
|
-
|
7
|
-
metadata =
|
8
|
-
case args.last
|
9
|
-
when Hash
|
10
|
-
args.pop
|
11
|
-
when Symbol
|
12
|
-
# We're changing Minitest behavior here.
|
13
|
-
# If args.first is anything but a Symbol, use it as additional_description.
|
14
|
-
# If it's a symbol, assume it is metadata.
|
15
|
-
additional_description = args.shift unless args.first.is_a?(Symbol)
|
16
|
-
args.each_with_object({}) do |arg, hash|
|
17
|
-
hash[arg] = true
|
18
|
-
end
|
19
|
-
else
|
20
|
-
{}
|
21
|
-
end
|
22
|
-
|
23
|
-
additional_description ||= args.first
|
24
|
-
description_class = super(desc, additional_description, &block)
|
25
|
-
|
26
|
-
description_class.send :define_method, :description_metadata do
|
27
|
-
super().merge(metadata)
|
28
|
-
end
|
29
|
-
|
30
|
-
description_class.send :define_method, :spec_additional_description do
|
31
|
-
additional_description
|
32
|
-
end
|
33
|
-
|
34
|
-
description_class
|
35
|
-
end
|
36
|
-
|
37
|
-
# Top-level method so all subclasses can call super.
|
38
|
-
def description_metadata
|
39
|
-
{}
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
Object.send :include, MinispecMetadata::DescribeWithMetadata
|
@@ -1,66 +0,0 @@
|
|
1
|
-
module MinispecMetadata
|
2
|
-
module SpecWithMetadata
|
3
|
-
|
4
|
-
def self.included(spec_class)
|
5
|
-
spec_class.extend(ClassMethods)
|
6
|
-
end
|
7
|
-
|
8
|
-
module ClassMethods
|
9
|
-
def it(desc = 'anonymous', *_args, &block)
|
10
|
-
args = _args.dup
|
11
|
-
|
12
|
-
_metadata =
|
13
|
-
if args.last.is_a?(Hash)
|
14
|
-
args.last
|
15
|
-
else
|
16
|
-
args.each_with_object({}) do |arg, hash|
|
17
|
-
hash[arg] = true
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
metadata =
|
22
|
-
class_variable_defined?(:@@metadata) ?
|
23
|
-
class_variable_get(:@@metadata) :
|
24
|
-
class_variable_set(:@@metadata, {})
|
25
|
-
spec_names =
|
26
|
-
class_variable_defined?(:@@spec_names) ?
|
27
|
-
class_variable_get(:@@spec_names) :
|
28
|
-
class_variable_set(:@@spec_names, {})
|
29
|
-
|
30
|
-
name = super desc, &block
|
31
|
-
|
32
|
-
metadata[name] = _metadata
|
33
|
-
spec_names[name] = desc
|
34
|
-
name
|
35
|
-
end
|
36
|
-
alias_method :specify, :it
|
37
|
-
end
|
38
|
-
|
39
|
-
def metadata
|
40
|
-
class_metadata = self.class.class_variable_get(:@@metadata).fetch(name, {})
|
41
|
-
description_metadata.merge class_metadata
|
42
|
-
end
|
43
|
-
|
44
|
-
# First arg passed to it block.
|
45
|
-
def spec_name
|
46
|
-
self.class.class_variable_get(:@@spec_names)[name]
|
47
|
-
end
|
48
|
-
|
49
|
-
# Description args passed to describe.
|
50
|
-
# Additional description is included if given.
|
51
|
-
def spec_descriptions
|
52
|
-
[spec_description, spec_additional_description].compact
|
53
|
-
end
|
54
|
-
|
55
|
-
def spec_description
|
56
|
-
self.class.desc
|
57
|
-
end
|
58
|
-
|
59
|
-
def spec_additional_description
|
60
|
-
self.class.spec_additional_description
|
61
|
-
end
|
62
|
-
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
MiniTest::Spec.send :include, MinispecMetadata::SpecWithMetadata
|