rspec-xunit 0.4.0 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d48b5d54ba47473aa22ac7ec656b7b3f772b6cbeb64d1bd4fc2f6717d0cf0775
4
- data.tar.gz: 8cd92f78030c96d6d2c73b2fb0dc6853ec1a2b399af134160263a9fcc0ba56be
3
+ metadata.gz: 713f3c53c0bd3aad430437522e74b80d908906ab961722eb20d9a69b22172dde
4
+ data.tar.gz: 04d407dfa15abe6a3916a9352d456a0b6397beebadfb6add22246889cca546ba
5
5
  SHA512:
6
- metadata.gz: cbb7e89e1e735e8d593edf2c01b4b406a8af76ea2e59c81e4943e9ca72567460d431a61181c4826039dcf6fe7bfd7b0511f235c5b3e40a83b18f9022ab2c9e73
7
- data.tar.gz: 70df062dddc7f78a23f67b7bb15429aa75459c65abeb4920f76048987662bf554790bc468f1974eca43f5081474527435f0774463a7e3c5f41aefa577cb45910
6
+ metadata.gz: e34fc54d2bc49c960802fbb767c53a3d30d4021f0fc02d9992d20b8c93eeca98a69f769f7361097f88919b132672cfea0284a24d7663bbc62fc475ca2dc2e353
7
+ data.tar.gz: 8e8e894a5ecefd0d7aba030909924a578c61ea707466354961bcce8c8b091a9c2ba0f5422362b3fc7b6cfff9d2ce4e8b4ea9bf0464b94eb58172851454030b27
data/Gemfile CHANGED
@@ -4,3 +4,5 @@ source 'https://rubygems.org'
4
4
 
5
5
  # Specify your gem's dependencies in rspec-xunit.gemspec
6
6
  gemspec
7
+
8
+ gem 'rspec-mocks'
data/README.md CHANGED
@@ -138,7 +138,7 @@ end
138
138
  We have the aliases of `assert_raise` and `assert_raises` to
139
139
  `assert_raise_error` for that extra bittersweet xUnit feel. 🤤
140
140
 
141
- Some block-level assertions, though are hard to convert. Take this example,
141
+ Some block-level assertions are hard to convert. Take this example,
142
142
  for example 😉:
143
143
 
144
144
  ```ruby
@@ -154,13 +154,13 @@ end
154
154
  ```
155
155
 
156
156
  We cannot translate `change { Session.count }.by(1)` to a nice assertion. This
157
- is where the `assert` fall-back comes in:
157
+ is where the `assert!` fall-back comes in:
158
158
 
159
159
  ```ruby
160
160
  test "user authentication" do
161
161
  user = create :user
162
162
 
163
- assert {
163
+ assert! {
164
164
  assert_valid? login
165
165
  }.to change { Session.count }.by(1)
166
166
  end
@@ -176,3 +176,8 @@ method on the asserted object.
176
176
  ```ruby
177
177
  assert_empty? object_responding_to_empty_question_mark
178
178
  ```
179
+
180
+ ### Stubs & Mocks
181
+
182
+ To write stubs and mocks in xUnit fashion, use `stub` instead of `allow` and
183
+ `mock` instead of `expect`. Everything else is the same.
@@ -9,11 +9,11 @@ module RSpec
9
9
  # Assertion match converts RSpec matchers into an XUnit friendly
10
10
  # assertions.
11
11
  #
12
- # For example: `assertion_match :eq` will create an `assert_eq` method
13
- # behaving in the same way as:
12
+ # For example, `assertion_match :eq` will create two methods:
14
13
  #
15
- # `expect(action).to eq(expected)`
16
- def assertion_match(matcher, suffix = guess_assertion_suffix(matcher))
14
+ # - `assert_eq` roughly `expect(action).to eq(expected)`
15
+ # - `assert_not_eq` roughly `expect(action).to_not eq(expected)`
16
+ def assertion_match(matcher, suffix = matcher)
17
17
  define_method "assert_#{suffix}" do |value, *args, &block|
18
18
  begin
19
19
  expect(value).to send(matcher, *args, &block)
@@ -21,16 +21,25 @@ module RSpec
21
21
  raise e, e.message, adjust_for_better_failure_message(e.backtrace), cause: nil
22
22
  end
23
23
  end
24
+
25
+ define_method "assert_not_#{suffix}" do |value, *args, &block|
26
+ begin
27
+ expect(value).to_not send(matcher, *args, &block)
28
+ rescue Expectations::ExpectationNotMetError => e
29
+ raise e, e.message, adjust_for_better_failure_message(e.backtrace), cause: nil
30
+ end
31
+ end
24
32
  end
25
33
 
26
34
  # Assertion match block converts RSpec block matchers into XUnit
27
35
  # friendly assertions.
28
36
  #
29
- # For example: `assertion_match_block :raises, :raise_error` will
30
- # create an `assert_raises` method behaving in the same way as:
37
+ # For example, `assertion_match_block :raises, :raise_error` will
38
+ # generate two methods:
31
39
  #
32
- # `expect { bloc }.to raise_error`
33
- def assertion_match_block(matcher, suffix = guess_assertion_suffix(matcher))
40
+ # - `assert_raises` roughly `expect { bloc }.to raise_error`
41
+ # - `assert_not_raises` roughly `expect { bloc }.to_not raise_error`
42
+ def assertion_match_block(matcher, suffix = matcher)
34
43
  define_method "assert_#{suffix}" do |*args, &block|
35
44
  begin
36
45
  expect(&block).to send(matcher, *args)
@@ -38,75 +47,84 @@ module RSpec
38
47
  raise e, e.message, adjust_for_better_failure_message(e.backtrace), cause: nil
39
48
  end
40
49
  end
41
- end
42
-
43
- private
44
-
45
- MATCHER_CRUFT_REGEX = /((?:be_)|(?:have_))(.*)/.freeze
46
50
 
47
- def guess_assertion_suffix(matcher_name)
48
- MATCHER_CRUFT_REGEX.match(matcher_name) do |match|
49
- match[2]
50
- end || matcher_name
51
+ define_method "assert_not_#{suffix}" do |*args, &block|
52
+ begin
53
+ expect(&block).to_not send(matcher, *args)
54
+ rescue Expectations::ExpectationNotMetError => e
55
+ raise e, e.message, adjust_for_better_failure_message(e.backtrace), cause: nil
56
+ end
57
+ end
51
58
  end
52
59
  end
53
60
 
54
- assertion_match :be_truthy
55
- assertion_match :be_falsy
56
- assertion_match :be_nil
57
- assertion_match :be
58
- assertion_match :be_a
61
+ # Useful aliaises.
62
+ assertion_match :be_truthy, :truthy
63
+ assertion_match :be_falsy, :falsy
64
+ assertion_match :be_nil, :nil
59
65
  assertion_match :be_a, :is_a
60
- assertion_match :be_kind_of
61
- assertion_match :be_instance_of
62
- assertion_match :be_between
63
- assertion_match :be_within
64
- assertion_match :contain_exactly
65
- assertion_match :cover
66
- assertion_match :end_with
67
- assertion_match :eq
68
- assertion_match :equal
69
- assertion_match :eql
70
- assertion_match :exist
71
- assertion_match :have_attributes
72
- assertion_match :include
73
- assertion_match :all
74
- assertion_match :match
75
- assertion_match :match_array
76
- assertion_match :respond_to
77
- assertion_match :satisfy
78
- assertion_match :start_with
79
- assertion_match :throw_symbol
80
- assertion_match :throw_symbol, :throw
81
- assertion_match :yield_control
82
- assertion_match :yield_with_no_args
83
- assertion_match :yield_successive_args
84
-
85
- assertion_match_block :change
86
- assertion_match_block :raise_error
66
+ assertion_match :be_kind_of, :kind_of
67
+ assertion_match :be_instance_of, :instance_of
68
+ assertion_match :be_between, :between
69
+ assertion_match :be_within, :within
70
+
87
71
  assertion_match_block :raise_error, :raise
88
72
  assertion_match_block :raise_error, :raises
89
- assertion_match_block :output
73
+
74
+ # Exceptions to the block matcher rule.
75
+ assertion_match :satisfy
90
76
 
91
77
  # Assert is an alias to `expect`. Use it when all else fails or doesn't
92
78
  # feel right. The `change` assertion with a block is a good example:
93
79
  #
80
+ # `assert! { block }.to change { value }` or
94
81
  # `assert { block }.to change { value }`
95
- def assert(value = Expectations::ExpectationTarget::UndefinedValue, &block)
82
+ def assert!(value = Expectations::ExpectationTarget::UndefinedValue, &block)
83
+ Expectations::ExpectationTarget.for(value, block)
84
+ end
85
+
86
+ alias assert assert!
87
+
88
+ # Mock is an XUnit alternative to the `expect` based mocking syntax.
89
+ #
90
+ # `mock(Post).to receive(:comments)`
91
+ def mock(value = Expectations::ExpectationTarget::UndefinedValue, &block)
96
92
  Expectations::ExpectationTarget.for(value, block)
97
93
  end
98
94
 
95
+ # Stub is an XUnit alternative to the `allow` based mocking syntax.
96
+ def stub(target)
97
+ RSpec::Mocks::AllowanceTarget.new(target)
98
+ end
99
+
99
100
  private
100
101
 
102
+ ASSERTION_REGEX = /^assert_(.*)$/.freeze
101
103
  ASSERTION_PREDICATE_REGEX = /^assert_(.*)\?$/.freeze
102
104
 
103
105
  def method_missing(method, *args, &block)
104
- ASSERTION_PREDICATE_REGEX.match(method.to_s) do |match|
106
+ return if ASSERTION_PREDICATE_REGEX.match(method.to_s) do |match|
105
107
  value = args.shift
106
108
  matcher = "be_#{match[1]}"
107
109
 
108
110
  expect(value).to Matchers::BuiltIn::BePredicate.new(matcher, *args, &block)
109
- end || super
111
+ end
112
+
113
+ return if ASSERTION_REGEX.match(method.to_s) do |match|
114
+ matcher = match[1]
115
+
116
+ RSpec::XUnit::Assertions.module_eval do
117
+ if block.nil?
118
+ assertion_match matcher
119
+ else
120
+ assertion_match_block matcher
121
+ end
122
+ end
123
+
124
+ send "assert_#{match[1]}", *args, &block
125
+ end
126
+
127
+ super
110
128
  end
111
129
 
112
130
  def respond_to_missing?(method, *)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RSpec
4
4
  module XUnit
5
- VERSION = '0.4.0'
5
+ VERSION = '0.5.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-xunit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genadi Samokovarov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-08-10 00:00:00.000000000 Z
11
+ date: 2020-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec-core