minitest-tagz 0.1.0 → 0.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/.travis.yml +2 -0
- data/README.md +46 -8
- data/lib/minitest/tagz.rb +51 -26
- data/lib/minitest/tagz/minitest_adapter.rb +47 -0
- data/lib/minitest/tagz/version.rb +1 -1
- data/minitest-tagz.gemspec +3 -2
- metadata +17 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ebe2a552b70a6c9636949552b092405b0ff8606b
|
4
|
+
data.tar.gz: 41d024c65a904fd822f0e4d15afd7864eb1c9bfd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 520e49ba6db312c4e5617390aa49ba1ee22103518c1523d2f742815eba564d596fe7c664f78ee908131b406752cbe36ba5036027b6b752b8ba2325064ca6f919
|
7
|
+
data.tar.gz: eb2615c95ca8472a814146de35fb8c18d8d0360145c08a844b3d396de6235c17359de0c420968a071e9c72f221b225105119fce69d693e8dda35c92aff8b6910
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Minitest::Tagz
|
2
2
|
|
3
|
+
[](https://travis-ci.org/backupify/minitest-tagz)
|
4
|
+
[](https://codeclimate.com/github/backupify/minitest-tagz)
|
5
|
+
[](http://badge.fury.io/rb/minitest-tagz)
|
6
|
+
|
3
7
|
yet another tags implementation for Minitest
|
4
8
|
|
5
9
|
## Installation
|
@@ -18,16 +22,27 @@ Or install it yourself as:
|
|
18
22
|
|
19
23
|
$ gem install minitest-tagz
|
20
24
|
|
21
|
-
##
|
25
|
+
## Setup
|
26
|
+
|
27
|
+
In your `test_helper.rb` you'll need to require `Minitest::Tagz`. You'll also
|
28
|
+
want to tell `Tagz` which tags you want to use. I suggest using the `TAGS` environment
|
29
|
+
variable:
|
22
30
|
|
23
31
|
```rb
|
24
|
-
# spec_helper.rb
|
25
32
|
require 'minitest/tagz'
|
26
|
-
|
27
|
-
Minitest::Tagz.patch_minitest
|
28
33
|
Minitest::Tagz.choose_tags(*ENV['TAGS'].split(',')) if ENV['TAGS']
|
34
|
+
```
|
35
|
+
|
36
|
+
This wil let you do this like: `bundle exec rake test TAGS=fast,login` to run all
|
37
|
+
tests with the fast and login tags.
|
29
38
|
|
30
|
-
|
39
|
+
## Usage
|
40
|
+
|
41
|
+
`Minitest::Tagz` works with both `Minitest::Test` and `Minitest::Spec`. You can declare
|
42
|
+
tags by using the `tag` helper.
|
43
|
+
|
44
|
+
```rb
|
45
|
+
# Using Minitest::Spec
|
31
46
|
class MySpec < Minitest::Spec
|
32
47
|
tag :fast, :unit
|
33
48
|
it 'should run' do
|
@@ -44,8 +59,31 @@ class MySpec < Minitest::Spec
|
|
44
59
|
end
|
45
60
|
end
|
46
61
|
|
47
|
-
#
|
48
|
-
|
62
|
+
# Using Minitest::Test
|
63
|
+
class MyTest < Minitest::Test
|
64
|
+
tag :fast
|
65
|
+
def test_my_stuff
|
66
|
+
assert true
|
67
|
+
end
|
68
|
+
end
|
69
|
+
```
|
70
|
+
|
71
|
+
With `Minitest::Spec` adding tags to a `describe` will add the tags to all of the
|
72
|
+
tests in the block:
|
73
|
+
|
74
|
+
```rb
|
75
|
+
class MySpec < Minitest::Spec
|
76
|
+
tag :login
|
77
|
+
describe 'all tests in this are tagged with :login' do
|
78
|
+
it 'tests this' do
|
79
|
+
assert true
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'also tests this' do
|
83
|
+
assert true
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
49
87
|
```
|
50
88
|
|
51
89
|
## Development
|
@@ -56,7 +94,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
56
94
|
|
57
95
|
## Contributing
|
58
96
|
|
59
|
-
1. Fork it ( https://github.com/
|
97
|
+
1. Fork it ( https://github.com/backupify/minitest-tagz/fork )
|
60
98
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
61
99
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
62
100
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/lib/minitest/tagz.rb
CHANGED
@@ -1,49 +1,74 @@
|
|
1
|
-
require
|
1
|
+
require 'minitest/tagz/version'
|
2
|
+
require 'minitest/tagz/minitest_adapter'
|
2
3
|
|
3
4
|
module Minitest
|
4
5
|
module Tagz
|
5
6
|
class << self
|
7
|
+
# Pick the tags you want to test
|
6
8
|
def choose_tags(*tags)
|
7
|
-
@chosen_tags = tags.map(&:to_sym).compact
|
9
|
+
@chosen_tags = tags.map(&:to_sym).compact.to_set
|
8
10
|
end
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
-
|
12
|
+
# Create a tag on a test
|
13
|
+
def declare_tags(*pending_tags)
|
14
|
+
@pending_tags = pending_tags
|
13
15
|
end
|
14
16
|
|
15
|
-
|
16
|
-
|
17
|
+
# Record the given tags with the object
|
18
|
+
def apply_tags(namespace, obj)
|
19
|
+
if @pending_tags
|
20
|
+
# TODO
|
21
|
+
tags["#{namespace}::#{obj}"] += @pending_tags
|
22
|
+
@pending_tags = nil
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def record_blanket_tags
|
27
|
+
if @pending_tags
|
28
|
+
# TODO
|
29
|
+
self.blanket_tags = @pending_tags
|
30
|
+
@pending_tags = nil
|
31
|
+
end
|
17
32
|
end
|
18
|
-
end
|
19
33
|
|
20
|
-
|
21
|
-
|
22
|
-
|
34
|
+
def apply_blanket_tags(namespace, obj)
|
35
|
+
unless blanket_tags.empty?
|
36
|
+
tags["#{namespace}::#{obj}"] += @blanket_tags
|
37
|
+
end
|
23
38
|
end
|
24
39
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
40
|
+
# Select all the testables with matching tags
|
41
|
+
def filter(namespace, enum)
|
42
|
+
enum.select {|obj| has_matching_tags?(namespace, obj)}
|
43
|
+
end
|
44
|
+
|
45
|
+
def reset_blanket_tags
|
46
|
+
@blanket_tags = []
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
# Check if object has matching tags
|
52
|
+
def has_matching_tags?(namespace, obj)
|
53
|
+
obj_tags = tags["#{namespace}::#{obj}"] || []
|
54
|
+
chosen_tags.all? { |tag| obj_tags.include?(tag) }
|
55
|
+
end
|
56
|
+
|
57
|
+
def chosen_tags
|
58
|
+
@chosen_tags ||= Set.new
|
29
59
|
end
|
30
60
|
|
31
61
|
def tags
|
32
|
-
@tags ||=
|
62
|
+
@tags ||= Hash.new([])
|
33
63
|
end
|
34
64
|
|
35
|
-
def
|
36
|
-
|
37
|
-
runnables.select do |runnable|
|
38
|
-
Minitest::Tagz.has_matching_tags?(tags[runnable])
|
39
|
-
end
|
65
|
+
def blanket_tags
|
66
|
+
@blanket_tags ||= reset_blanket_tags
|
40
67
|
end
|
41
|
-
end
|
42
68
|
|
43
|
-
|
44
|
-
|
69
|
+
def blanket_tags=(arg)
|
70
|
+
@blanket_tags = arg
|
71
|
+
end
|
45
72
|
end
|
46
|
-
|
47
|
-
patch_minitest
|
48
73
|
end
|
49
74
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Minitest
|
2
|
+
module Tagz
|
3
|
+
module MinitestAdapter
|
4
|
+
module Base
|
5
|
+
def tag(*tags)
|
6
|
+
Tagz.declare_tags(*tags)
|
7
|
+
end
|
8
|
+
|
9
|
+
def method_added(name)
|
10
|
+
return unless name[/^test_/]
|
11
|
+
Tagz.apply_tags(self, name)
|
12
|
+
end
|
13
|
+
|
14
|
+
def runnable_methods
|
15
|
+
Tagz.filter(self, super)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
module Spec
|
20
|
+
def describe(*args, &block)
|
21
|
+
Tagz.record_blanket_tags
|
22
|
+
super
|
23
|
+
apply_blanket_tags_recursively
|
24
|
+
Tagz.reset_blanket_tags
|
25
|
+
end
|
26
|
+
|
27
|
+
def apply_blanket_tags_recursively
|
28
|
+
test_methods_in_describe = instance_methods.select {|m| m[/^test/]}
|
29
|
+
test_methods_in_describe.each do |runnable|
|
30
|
+
Tagz.apply_blanket_tags(self, runnable)
|
31
|
+
end
|
32
|
+
|
33
|
+
children.each do |child|
|
34
|
+
child.apply_blanket_tags_recursively
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
if defined?(Minitest)
|
43
|
+
::Minitest::Test.singleton_class.prepend(Minitest::Tagz::MinitestAdapter::Base)
|
44
|
+
if defined?(Minitest::Spec)
|
45
|
+
::Minitest::Spec.singleton_class.prepend(Minitest::Tagz::MinitestAdapter::Spec)
|
46
|
+
end
|
47
|
+
end
|
data/minitest-tagz.gemspec
CHANGED
@@ -19,9 +19,10 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
20
|
spec.require_paths = ["lib"]
|
21
21
|
|
22
|
-
spec.
|
22
|
+
spec.add_dependency "minitest", "~> 5"
|
23
|
+
|
24
|
+
spec.add_development_dependency "bundler"
|
23
25
|
spec.add_development_dependency "rake", "~> 10.0"
|
24
|
-
spec.add_development_dependency "minitest"
|
25
26
|
spec.add_development_dependency "guard"
|
26
27
|
spec.add_development_dependency "guard-minitest"
|
27
28
|
end
|
metadata
CHANGED
@@ -1,57 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minitest-tagz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Bodah
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: minitest
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
20
|
-
type: :
|
19
|
+
version: '5'
|
20
|
+
type: :runtime
|
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: '5'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '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: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
47
|
+
version: '10.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
54
|
+
version: '10.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: guard
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -99,6 +99,7 @@ files:
|
|
99
99
|
- bin/console
|
100
100
|
- bin/setup
|
101
101
|
- lib/minitest/tagz.rb
|
102
|
+
- lib/minitest/tagz/minitest_adapter.rb
|
102
103
|
- lib/minitest/tagz/version.rb
|
103
104
|
- minitest-tagz.gemspec
|
104
105
|
homepage: https://github.com/backupify/minitest-tagz
|