rspec-when 0.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 +7 -0
- data/README.md +45 -0
- data/lib/rspec/expectations/when_expectation_extensions.rb +11 -0
- data/lib/rspec/expectations/when_expectation_target.rb +92 -0
- data/lib/rspec/when.rb +3 -0
- metadata +73 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 63b5e2cc54a288d461b1fbfecc5e6415e4d6cc39
|
4
|
+
data.tar.gz: 0980ba0c3c700c501d6f92e68fa13a7ea755809c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8869c96cc00b12d1d9b3fbd25003a7402dfba007499fea695af368d1027f5c9234279989fbe3569681aadea1d4e3841691891c8168b67d34bc5b1fee6066d7f7
|
7
|
+
data.tar.gz: af92ba4fa7a1c544a22062e94959cab594607eab294bf6eebf5982dd4ffd38436e925b74278dbedf95b8ff1a77bfe45d90cf0097fad5f8f0a4a0359fc8d2ab85
|
data/README.md
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# RSpec when syntax
|
2
|
+
|
3
|
+
RSpec::When lets you describe both optional expectations and expectations
|
4
|
+
with inverses. This helps DRY up otherwise complicated or repetitive tests.
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
```sh
|
9
|
+
$ gem install rspec-when
|
10
|
+
```
|
11
|
+
|
12
|
+
## Usage
|
13
|
+
|
14
|
+
#### Plain `when` syntax
|
15
|
+
|
16
|
+
```rb
|
17
|
+
expect(user).when(an_admin).to have_all_access
|
18
|
+
```
|
19
|
+
|
20
|
+
Provides syntactic sugar for
|
21
|
+
|
22
|
+
```rb
|
23
|
+
if an_admin
|
24
|
+
expect(user).to have_all_access
|
25
|
+
end
|
26
|
+
```
|
27
|
+
|
28
|
+
#### Compound `when.with_inverse` syntax
|
29
|
+
|
30
|
+
```rb
|
31
|
+
expect(user).when(an_admin).with_inverse.to have_all_access
|
32
|
+
```
|
33
|
+
|
34
|
+
Provides syntactic sugar for
|
35
|
+
|
36
|
+
```rb
|
37
|
+
if an_admin
|
38
|
+
expect(user).to have_all_access
|
39
|
+
else
|
40
|
+
expect(user).not_to have_all_access
|
41
|
+
end
|
42
|
+
```
|
43
|
+
|
44
|
+
Typical usage is when abstracting common expectations into a helper method to
|
45
|
+
DRY up tests where testing the inverse expectation is also required.
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module RSpec
|
2
|
+
module Expectations
|
3
|
+
# DSL extension to expectation target allowing optional expectations
|
4
|
+
module WhenExpectationExtensions
|
5
|
+
def when(expected)
|
6
|
+
WhenExpectationTarget.new @target, expected
|
7
|
+
end
|
8
|
+
end
|
9
|
+
ExpectationTarget.include WhenExpectationExtensions
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
module RSpec
|
2
|
+
module Expectations
|
3
|
+
# Wraps the target of an expectation and allowing of optional expectations
|
4
|
+
# as well as testing expectation inverses
|
5
|
+
#
|
6
|
+
# @example
|
7
|
+
# expect(something).when(flag) # => WhenExpectationTarget testing when `flag`
|
8
|
+
#
|
9
|
+
# # `when` used with `to`
|
10
|
+
# expect(actual).when(flag).to eq(3)
|
11
|
+
# # is the equivalent of
|
12
|
+
# if flag
|
13
|
+
# expect(actual).to eq(3)
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# # `when` used with `with_inverse` and `to`
|
17
|
+
# expect(actual).when(flag).with_inverse.to eq(3)
|
18
|
+
# # is the equivalent of
|
19
|
+
# if flag
|
20
|
+
# expect(actual).to eq(3)
|
21
|
+
# else
|
22
|
+
# expect(actual).not_to eq(3)
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
# @note `WhenExpectationTarget` is not intended to be instantiated
|
26
|
+
# directly. Use `expect(target).when(flag)` instead
|
27
|
+
|
28
|
+
class WhenExpectationTarget < ExpectationTarget
|
29
|
+
# @return [Object] the target of the expectation
|
30
|
+
attr_reader :target
|
31
|
+
|
32
|
+
# @return [Boolean] is the target expected?
|
33
|
+
attr_reader :when_expected
|
34
|
+
|
35
|
+
def initialize(value, when_expected)
|
36
|
+
@target = value
|
37
|
+
@when_expected = when_expected
|
38
|
+
@with_inverse = false
|
39
|
+
end
|
40
|
+
|
41
|
+
# Indicates whether the inverse of the expectation should be applied
|
42
|
+
# should the `when` flag be false
|
43
|
+
def with_inverse
|
44
|
+
@with_inverse = true
|
45
|
+
self
|
46
|
+
end
|
47
|
+
|
48
|
+
alias_method :expect_to, :to
|
49
|
+
alias_method :expect_not_to, :not_to
|
50
|
+
|
51
|
+
# When expected, it will run the given expectation, passing if `matcher` returns true.
|
52
|
+
# When not expected and we're also testing the inverse, it will run the given expectation,
|
53
|
+
# passing if `matcher` returns false.
|
54
|
+
# @example
|
55
|
+
# expect(value).when(flag).to eq(5)
|
56
|
+
# expect(value).when(flag).with_inverse.to eq(5)
|
57
|
+
# expect { perform }.when(flag).to raise_error
|
58
|
+
# @param [Matcher]
|
59
|
+
# matcher
|
60
|
+
# @param [String or Proc] message optional message to display when the expectation fails
|
61
|
+
# @return [Boolean] true if the expectation succeeds (else raises)
|
62
|
+
# @see RSpec::Matchers
|
63
|
+
def to(matcher = nil, message = nil, &block)
|
64
|
+
if @when_expected
|
65
|
+
super
|
66
|
+
elsif @with_inverse
|
67
|
+
expect_not_to matcher, message, &block
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# When expected, it will run the given expectation, passing if `matcher` returns false.
|
72
|
+
# When not expected and we're also testing the inverse, it will run the given expectation,
|
73
|
+
# passing if `matcher` returns true.
|
74
|
+
# @example
|
75
|
+
# expect(value).when(flag).not_to eq(5)
|
76
|
+
# expect(value).when(flag).with_inverse.not_to eq(5)
|
77
|
+
# @param [Matcher]
|
78
|
+
# matcher
|
79
|
+
# @param [String or Proc] message optional message to display when the expectation fails
|
80
|
+
# @return [Boolean] false if the negative expectation succeeds (else raises)
|
81
|
+
# @see RSpec::Matchers
|
82
|
+
def not_to(matcher = nil, message = nil, &block)
|
83
|
+
if @when_expected
|
84
|
+
super
|
85
|
+
elsif @with_inverse
|
86
|
+
expect_to matcher, message, &block
|
87
|
+
end
|
88
|
+
end
|
89
|
+
alias to_not not_to
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
data/lib/rspec/when.rb
ADDED
metadata
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rspec-when
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Andrew Bromwich
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-06-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec-expectations
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.0'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '4.0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '2.0'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '4.0'
|
33
|
+
description:
|
34
|
+
email: a.bromwich@gmail.com
|
35
|
+
executables: []
|
36
|
+
extensions: []
|
37
|
+
extra_rdoc_files:
|
38
|
+
- README.md
|
39
|
+
files:
|
40
|
+
- README.md
|
41
|
+
- lib/rspec/expectations/when_expectation_extensions.rb
|
42
|
+
- lib/rspec/expectations/when_expectation_target.rb
|
43
|
+
- lib/rspec/when.rb
|
44
|
+
homepage: http://github.com/abrom/rspec-when
|
45
|
+
licenses:
|
46
|
+
- MIT
|
47
|
+
metadata: {}
|
48
|
+
post_install_message:
|
49
|
+
rdoc_options:
|
50
|
+
- "--main"
|
51
|
+
- README.md
|
52
|
+
- "--markup"
|
53
|
+
- markdown
|
54
|
+
require_paths:
|
55
|
+
- lib
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
requirements: []
|
67
|
+
rubyforge_project:
|
68
|
+
rubygems_version: 2.4.8
|
69
|
+
signing_key:
|
70
|
+
specification_version: 4
|
71
|
+
summary: RSpec extension for when syntax
|
72
|
+
test_files: []
|
73
|
+
has_rdoc:
|