minitest-spec-expect 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Build Status](https://travis-ci.org/davejachimiak/minitest-spec-expect.png?branch=master)](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
|