minitest-spec-expect 0.0.2 → 0.1.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 +7 -0
- data/.travis.yml +7 -0
- data/CHANGELOG.md +4 -0
- data/README.md +17 -19
- data/Rakefile +5 -2
- data/lib/minitest/spec/expect.rb +33 -8
- data/lib/minitest/spec/expect/version.rb +1 -1
- data/lib/minitest/spec/expect_syntax.rb +8 -12
- data/lib/minitest/spec/expect_syntax_for_arg.rb +9 -0
- data/lib/minitest/spec/expect_syntax_for_block.rb +19 -0
- data/spec/integration_spec.rb +6 -2
- data/spec/kernel_spec.rb +46 -0
- metadata +13 -9
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6a50c5c9f12125db25fb9e4987a71522e32bf0d5
|
4
|
+
data.tar.gz: 63509bc103ada84823b2614234a69b22388a687a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a9ef9c3cc729a0749f296c3fd37930a5e240a4904a3dcf3d423bf052302f51f9524c312b18c32f011bd232fca2baea3904a942bc863dc1555b27cf96e2a1b428
|
7
|
+
data.tar.gz: dc346ef3e862b222b1bc6adfc3707517a5a3bb9de42c03c4d304cd6797dcd97e9a9e549d6785b8ab97a9acd59c056c61e4978812461ce589df490f22fb6a1721
|
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# minitest-spec-expect
|
2
|
-
|
3
|
-
|
2
|
+
|
3
|
+
[](https://travis-ci.org/davejachimiak/minitest-spec-expect)
|
4
|
+
|
5
|
+
Expect syntax for [MiniTest](http://docs.seattlerb.org/minitest/index.html). Made out of love for
|
6
|
+
both rspec2's expect syntax and MiniTest's lightweight feel.
|
4
7
|
## Install
|
5
8
|
In your Gemfile:
|
6
9
|
```ruby
|
@@ -15,7 +18,7 @@ Then require it in the file that you require `minitest/autorun`:
|
|
15
18
|
require 'minitest/spec/expect'
|
16
19
|
```
|
17
20
|
## Usage
|
18
|
-
Wrap the object under test in an `expect()` object. Then call a
|
21
|
+
Wrap the object under test in an `expect()` object. Then call a MiniTest expectation on it,
|
19
22
|
substituting `must` and `wont` with `to` and `to_not`.
|
20
23
|
|
21
24
|
For example:
|
@@ -47,10 +50,8 @@ describe Integer do
|
|
47
50
|
end
|
48
51
|
```
|
49
52
|
## API
|
50
|
-
Please see the
|
51
|
-
|
52
|
-
on implementations for the `must` and `wont` methods transposed to `to` and `to_not` methods transposed
|
53
|
-
here.
|
53
|
+
Please see the MiniTest [expectation](http://docs.seattlerb.org/minitest/Minitest/Expectations.html)
|
54
|
+
docs for details on corresponding `must_*` and `wont_*` methods.
|
54
55
|
### `#*be`
|
55
56
|
```ruby
|
56
57
|
expect(1).to_be :<, 2
|
@@ -90,8 +91,8 @@ an_object = Object.new
|
|
90
91
|
expect(Object.new).to_not_be_same_as an_object
|
91
92
|
```
|
92
93
|
### `#to_be_silent`
|
93
|
-
(`#must_be_silent` availble with Minitest 5.0)
|
94
94
|
```ruby
|
95
|
+
expect { '' }.to_be_silent
|
95
96
|
expect(->{''}).to_be_silent
|
96
97
|
```
|
97
98
|
### `#*be_within_epsilon`
|
@@ -111,16 +112,17 @@ expect(['tim', 'eric']).to_not_include 'brule'
|
|
111
112
|
```
|
112
113
|
### `#*match`
|
113
114
|
```ruby
|
114
|
-
expect(/(fart)*/
|
115
|
-
expect(
|
115
|
+
expect('fartfartfartfart').to_match /(fart)*/
|
116
|
+
expect('bart').to_not_match /fart/
|
116
117
|
```
|
117
118
|
### `#to_output`
|
118
|
-
(`#must_output` availble with Minitest 5.0)
|
119
119
|
```ruby
|
120
|
+
expect { puts 'barf' }.to_output "barf\n"
|
120
121
|
expect(->{ puts 'barf' }).to_output "barf\n"
|
121
122
|
```
|
122
123
|
### `#to_raise`
|
123
124
|
```ruby
|
125
|
+
expect { raise RuntimeError }.to_raise RuntimeError
|
124
126
|
expect(->{ raise RuntimeError }).to_raise RuntimeError
|
125
127
|
```
|
126
128
|
### `#*respond_to`
|
@@ -130,19 +132,15 @@ expect(Object.new).to_not_respond_to :fart_factory
|
|
130
132
|
```
|
131
133
|
### `#*throw`
|
132
134
|
```ruby
|
135
|
+
expect { throw StandardError }.to_throw StandardError
|
133
136
|
expect(->{ throw StandardError }).to_throw StandardError
|
134
137
|
```
|
135
138
|
## Contribute
|
136
139
|
1. Fork the repo.
|
137
140
|
2. Create a branch.
|
138
|
-
3.
|
139
|
-
|
140
|
-
|
141
|
-
##### A note on the current specs
|
142
|
-
The specs at `spec/integration_spec.rb` test a couple of minitest expectations that aren't included
|
143
|
-
in previous minitest versions to 5.0. To install the newest minitest, do `$ sudo gem install
|
144
|
-
minitest`. Because of the way Ruby installs and loads its native libraries, `sudo` before
|
145
|
-
`gem install` is necessary, unfortunately.
|
141
|
+
3. Code.
|
142
|
+
4. Ensure the specs are green (`$ rake`)
|
143
|
+
5. Open a pull request.
|
146
144
|
|
147
145
|
## License
|
148
146
|
The MIT License (MIT)
|
data/Rakefile
CHANGED
data/lib/minitest/spec/expect.rb
CHANGED
@@ -1,21 +1,46 @@
|
|
1
1
|
module Kernel
|
2
|
-
def expect
|
3
|
-
|
2
|
+
def expect arg=NO_ARG, &block
|
3
|
+
raise_errors arg, block
|
4
|
+
MiniTest::Spec::Expect.create arg, &block
|
4
5
|
end
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def raise_errors object, block
|
10
|
+
if object == NO_ARG
|
11
|
+
raise ArgumentError, 'must pass an argument or a block' if !block
|
12
|
+
else
|
13
|
+
raise ArgumentError, 'cannot handle both an argument and a block' if block
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
NO_ARG = Object.new
|
5
18
|
end
|
6
19
|
|
7
20
|
require 'minitest/spec'
|
8
21
|
|
9
22
|
class MiniTest::Spec::Expect
|
10
|
-
|
23
|
+
OBJECT_UNDER_TEST = 'object'
|
11
24
|
|
12
|
-
|
25
|
+
attr_reader OBJECT_UNDER_TEST
|
13
26
|
|
14
|
-
|
27
|
+
class_eval <<-EOM
|
28
|
+
def initialize #{OBJECT_UNDER_TEST}
|
29
|
+
@#{OBJECT_UNDER_TEST} = #{OBJECT_UNDER_TEST}
|
30
|
+
end
|
31
|
+
EOM
|
15
32
|
|
16
|
-
def
|
17
|
-
|
33
|
+
def self.create arg, &block
|
34
|
+
block ? ForBlock.new(block) : ForArg.new(arg)
|
18
35
|
end
|
19
36
|
|
20
|
-
|
37
|
+
class ForArg < self
|
38
|
+
require 'minitest/spec/expect_syntax_for_arg'
|
39
|
+
MiniTest::Spec::ExpectSyntaxForArg.new(self).set_expectations
|
40
|
+
end
|
41
|
+
|
42
|
+
class ForBlock < self
|
43
|
+
require 'minitest/spec/expect_syntax_for_block'
|
44
|
+
MiniTest::Spec::ExpectSyntaxForBlock.new(self).set_expectations
|
45
|
+
end
|
21
46
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
class MiniTest::Spec::ExpectSyntax
|
2
|
-
TRANSPOSITIONS = {'must' => 'to', 'wont' => 'to_not'}
|
2
|
+
TRANSPOSITIONS = { 'must' => 'to', 'wont' => 'to_not' }
|
3
|
+
TRANSPOSITION_REGEXP = Regexp.union TRANSPOSITIONS.keys
|
3
4
|
|
4
5
|
attr_reader :expect_class
|
5
6
|
|
@@ -8,15 +9,15 @@ class MiniTest::Spec::ExpectSyntax
|
|
8
9
|
end
|
9
10
|
|
10
11
|
def set_expectations
|
11
|
-
|
12
|
-
set_expectation
|
12
|
+
expectation_names.each do |expectation_name|
|
13
|
+
set_expectation expectation_name
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
16
17
|
private
|
17
18
|
|
18
|
-
def
|
19
|
-
|
19
|
+
def expectation_names
|
20
|
+
raise NotImplementedError
|
20
21
|
end
|
21
22
|
|
22
23
|
def set_expectation expectation_name
|
@@ -28,17 +29,12 @@ class MiniTest::Spec::ExpectSyntax
|
|
28
29
|
def expect_method expectation_name
|
29
30
|
"""
|
30
31
|
def #{expect_method_name expectation_name } *args
|
31
|
-
#{expect_class::
|
32
|
+
#{expect_class::OBJECT_UNDER_TEST}.#{expectation_name} *args
|
32
33
|
end
|
33
34
|
"""
|
34
35
|
end
|
35
36
|
|
36
37
|
def expect_method_name expectation_name
|
37
|
-
|
38
|
-
string = memo.empty? ? expectation_name.to_s : memo
|
39
|
-
|
40
|
-
string.gsub transposition.first, transposition.last
|
41
|
-
end
|
38
|
+
expectation_name.to_s.gsub TRANSPOSITION_REGEXP, TRANSPOSITIONS
|
42
39
|
end
|
43
40
|
end
|
44
|
-
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'minitest/spec/expect_syntax'
|
2
|
+
|
3
|
+
class MiniTest::Spec::ExpectSyntaxForBlock < MiniTest::Spec::ExpectSyntax
|
4
|
+
BLOCK_PASSING_EXPECTATION_REGEXES = [/silent/, /output/, /raise/, /throw/]
|
5
|
+
|
6
|
+
private
|
7
|
+
|
8
|
+
def expectation_names
|
9
|
+
MiniTest::Expectations.instance_methods.select do |method|
|
10
|
+
detect_block_passing_expectation method
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def detect_block_passing_expectation method
|
15
|
+
BLOCK_PASSING_EXPECTATION_REGEXES.detect do |regex|
|
16
|
+
regex.match method
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/spec/integration_spec.rb
CHANGED
@@ -65,6 +65,7 @@ describe 'expect syntax' do
|
|
65
65
|
end
|
66
66
|
|
67
67
|
it 'supports must_be_silent as to_be_silent' do
|
68
|
+
expect { '' }.to_be_silent
|
68
69
|
expect(->{''}).to_be_silent
|
69
70
|
end
|
70
71
|
|
@@ -93,18 +94,20 @@ describe 'expect syntax' do
|
|
93
94
|
end
|
94
95
|
|
95
96
|
it 'supports must_match as to_match' do
|
96
|
-
expect(/(fart)*/
|
97
|
+
expect('fartfartfartfart').to_match /(fart)*/
|
97
98
|
end
|
98
99
|
|
99
100
|
it 'supports wont_match as to_not_match' do
|
100
|
-
expect(
|
101
|
+
expect('bart').to_not_match /fart/
|
101
102
|
end
|
102
103
|
|
103
104
|
it 'supports must_output as to_output' do
|
105
|
+
expect { puts 'barf' }.to_output "barf\n"
|
104
106
|
expect(->{ puts 'barf' }).to_output "barf\n"
|
105
107
|
end
|
106
108
|
|
107
109
|
it 'supports must_raise as to_raise' do
|
110
|
+
expect { raise RuntimeError }.to_raise RuntimeError
|
108
111
|
expect(->{ raise RuntimeError }).to_raise RuntimeError
|
109
112
|
end
|
110
113
|
|
@@ -117,6 +120,7 @@ describe 'expect syntax' do
|
|
117
120
|
end
|
118
121
|
|
119
122
|
it 'supports must_throw as to_throw' do
|
123
|
+
expect { throw StandardError }.to_throw StandardError
|
120
124
|
expect(->{ throw StandardError }).to_throw StandardError
|
121
125
|
end
|
122
126
|
end
|
data/spec/kernel_spec.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
$:.unshift File.expand_path("../../lib", __FILE__)
|
2
|
+
|
3
|
+
require 'minitest/spec/expect'
|
4
|
+
require 'minitest/autorun'
|
5
|
+
|
6
|
+
describe Kernel do
|
7
|
+
describe '#expect' do
|
8
|
+
it 'explodes if nothing is passed to it' do
|
9
|
+
->{ expect }.must_raise ArgumentError, 'must pass an argument or a block'
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'explodes if both an arg and a block passed to it' do
|
13
|
+
->{ expect(:straw_man) { :cinder } }.
|
14
|
+
must_raise ArgumentError, 'cannot handle both an argument and a block'
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'when a block is passed' do
|
18
|
+
before do
|
19
|
+
expectations = MiniTest::Expectations.instance_methods
|
20
|
+
block_expectation_regexes = [/silent/, /output/, /raise/, /throw/]
|
21
|
+
|
22
|
+
non_block_expectations = expectations.reject do |method|
|
23
|
+
block_expectation_regexes.detect do |regex|
|
24
|
+
method.to_s.match regex
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
transpositions = { 'must' => 'to', 'wont' => 'to_not' }
|
29
|
+
|
30
|
+
@non_block_expect_methods = non_block_expectations.map do |expectation|
|
31
|
+
non_block_expect_method = transpositions.inject('') do |memo, transposition|
|
32
|
+
string = memo.empty? ? expectation.to_s : memo
|
33
|
+
|
34
|
+
string.gsub transposition.first, transposition.last
|
35
|
+
end.to_sym
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
it "won't respond to non-block-passing expectations" do
|
40
|
+
@non_block_expect_methods.each do |method|
|
41
|
+
expect { :muscular_son }.wont_respond_to method
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minitest-spec-expect
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Dave Jachimiak
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-05-
|
11
|
+
date: 2013-05-23 00:00:00.000000000 Z
|
13
12
|
dependencies: []
|
14
13
|
description: Expect syntax for minitest specs.
|
15
14
|
email: dave.jachimiak@gmail.com
|
@@ -18,36 +17,41 @@ extensions: []
|
|
18
17
|
extra_rdoc_files: []
|
19
18
|
files:
|
20
19
|
- .gitignore
|
20
|
+
- .travis.yml
|
21
|
+
- CHANGELOG.md
|
21
22
|
- README.md
|
22
23
|
- Rakefile
|
23
24
|
- lib/minitest/spec/expect.rb
|
24
25
|
- lib/minitest/spec/expect/version.rb
|
25
26
|
- lib/minitest/spec/expect_syntax.rb
|
27
|
+
- lib/minitest/spec/expect_syntax_for_arg.rb
|
28
|
+
- lib/minitest/spec/expect_syntax_for_block.rb
|
26
29
|
- minitest-spec-expect.gemspec
|
27
30
|
- spec/integration_spec.rb
|
31
|
+
- spec/kernel_spec.rb
|
28
32
|
homepage: http://github.com/davejachimiak/minitest-spec-expect
|
29
33
|
licenses: []
|
34
|
+
metadata: {}
|
30
35
|
post_install_message:
|
31
36
|
rdoc_options: []
|
32
37
|
require_paths:
|
33
38
|
- lib
|
34
39
|
required_ruby_version: !ruby/object:Gem::Requirement
|
35
|
-
none: false
|
36
40
|
requirements:
|
37
|
-
- -
|
41
|
+
- - '>='
|
38
42
|
- !ruby/object:Gem::Version
|
39
43
|
version: '0'
|
40
44
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
45
|
requirements:
|
43
|
-
- -
|
46
|
+
- - '>='
|
44
47
|
- !ruby/object:Gem::Version
|
45
48
|
version: '0'
|
46
49
|
requirements: []
|
47
50
|
rubyforge_project:
|
48
|
-
rubygems_version:
|
51
|
+
rubygems_version: 2.0.2
|
49
52
|
signing_key:
|
50
|
-
specification_version:
|
53
|
+
specification_version: 4
|
51
54
|
summary: Use the expect syntax with transposed minitest expectations.
|
52
55
|
test_files:
|
53
56
|
- spec/integration_spec.rb
|
57
|
+
- spec/kernel_spec.rb
|