assert 2.18.2 → 2.19.2
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/Gemfile +4 -2
- data/README.md +7 -6
- data/assert.gemspec +5 -2
- data/bin/assert +1 -0
- data/lib/assert.rb +2 -0
- data/lib/assert/actual_value.rb +143 -0
- data/lib/assert/assert_runner.rb +2 -0
- data/lib/assert/assertions.rb +82 -20
- data/lib/assert/cli.rb +2 -0
- data/lib/assert/config.rb +2 -0
- data/lib/assert/config_helpers.rb +2 -0
- data/lib/assert/context.rb +33 -37
- data/lib/assert/context/let_dsl.rb +16 -0
- data/lib/assert/context/method_missing.rb +22 -0
- data/lib/assert/context/setup_dsl.rb +3 -0
- data/lib/assert/context/subject_dsl.rb +26 -24
- data/lib/assert/context/suite_dsl.rb +3 -0
- data/lib/assert/context/test_dsl.rb +3 -0
- data/lib/assert/context_info.rb +2 -0
- data/lib/assert/default_runner.rb +2 -0
- data/lib/assert/default_suite.rb +2 -0
- data/lib/assert/default_view.rb +2 -0
- data/lib/assert/factory.rb +2 -0
- data/lib/assert/file_line.rb +2 -0
- data/lib/assert/macro.rb +2 -0
- data/lib/assert/macros/methods.rb +6 -4
- data/lib/assert/result.rb +8 -1
- data/lib/assert/runner.rb +2 -0
- data/lib/assert/stub.rb +45 -0
- data/lib/assert/suite.rb +9 -10
- data/lib/assert/test.rb +3 -9
- data/lib/assert/utils.rb +3 -1
- data/lib/assert/version.rb +3 -1
- data/lib/assert/view.rb +2 -0
- data/lib/assert/view_helpers.rb +2 -0
- data/test/helper.rb +28 -28
- data/test/support/factory.rb +17 -0
- data/test/support/inherited_stuff.rb +2 -0
- data/test/system/stub_tests.rb +334 -333
- data/test/system/test_tests.rb +101 -109
- data/test/unit/actual_value_tests.rb +373 -0
- data/test/unit/assert_tests.rb +79 -61
- data/test/unit/assertions/assert_block_tests.rb +32 -31
- data/test/unit/assertions/assert_changes_tests.rb +99 -0
- data/test/unit/assertions/assert_empty_tests.rb +35 -32
- data/test/unit/assertions/assert_equal_tests.rb +96 -74
- data/test/unit/assertions/assert_file_exists_tests.rb +34 -33
- data/test/unit/assertions/assert_includes_tests.rb +40 -37
- data/test/unit/assertions/assert_instance_of_tests.rb +36 -33
- data/test/unit/assertions/assert_kind_of_tests.rb +36 -33
- data/test/unit/assertions/assert_match_tests.rb +36 -33
- data/test/unit/assertions/assert_nil_tests.rb +32 -31
- data/test/unit/assertions/assert_raises_tests.rb +57 -55
- data/test/unit/assertions/assert_respond_to_tests.rb +38 -35
- data/test/unit/assertions/assert_same_tests.rb +88 -81
- data/test/unit/assertions/assert_true_false_tests.rb +62 -60
- data/test/unit/assertions_tests.rb +28 -24
- data/test/unit/config_helpers_tests.rb +45 -38
- data/test/unit/config_tests.rb +40 -34
- data/test/unit/context/let_dsl_tests.rb +12 -0
- data/test/unit/context/setup_dsl_tests.rb +72 -81
- data/test/unit/context/subject_dsl_tests.rb +17 -43
- data/test/unit/context/suite_dsl_tests.rb +17 -16
- data/test/unit/context/test_dsl_tests.rb +52 -52
- data/test/unit/context_info_tests.rb +25 -15
- data/test/unit/context_tests.rb +186 -179
- data/test/unit/default_runner_tests.rb +4 -5
- data/test/unit/default_suite_tests.rb +59 -53
- data/test/unit/factory_tests.rb +7 -3
- data/test/unit/file_line_tests.rb +35 -35
- data/test/unit/macro_tests.rb +16 -10
- data/test/unit/result_tests.rb +161 -183
- data/test/unit/runner_tests.rb +67 -65
- data/test/unit/suite_tests.rb +58 -59
- data/test/unit/test_tests.rb +120 -139
- data/test/unit/utils_tests.rb +45 -45
- data/test/unit/view_helpers_tests.rb +56 -52
- data/test/unit/view_tests.rb +24 -23
- metadata +29 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e3b20f41e3b589e8ae182a0da975229922e825b024d4bd8e35d886345728e6e7
|
4
|
+
data.tar.gz: 5e2c9057744017ab8a1da1033a15f5c3b3fab0b93f62b7b9aa9fc2bcf07f5cdf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 250ff1cbe8a89cadf674b2cb15d4ec2dce7d3de676c69b3462d06b12a4c4230766fe9a35d1ea5c1599fb7045b4cdf25c4e3d99cf862ea45bf70f20d354d073ab
|
7
|
+
data.tar.gz: de2c80f03461272a22c8f5f89f45e753fce2b0cadaed129f94b7fb3c7916df5aae1a14dec0cef2f0b37bb14e23e6898dc4a569cd7ed4a0cc9dad0adf78fde8cd
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -9,7 +9,7 @@ require "assert"
|
|
9
9
|
|
10
10
|
class MyTests < Assert::Context
|
11
11
|
test "something" do
|
12
|
-
|
12
|
+
assert_that(1).equals(1)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
```
|
@@ -33,13 +33,13 @@ Running tests in random order, seeded with "56382"
|
|
33
33
|
|
34
34
|
## What Assert is not
|
35
35
|
|
36
|
-
* **RSpec/spec-anything**: define tests using assertion statements
|
37
|
-
* **Unit/Functional/Integration/etc**: Assert is agnostic - you define whatever kinds of tests you like
|
38
|
-
* **Mock/Spec/BDD/etc**: Assert is the framework and there are a variety of 3rd party tools to do such things
|
36
|
+
* **RSpec/spec-anything**: define tests using assertion statements.
|
37
|
+
* **Unit/Functional/Integration/etc**: Assert is agnostic - you define whatever kinds of tests you like and Assert runs them in context.
|
38
|
+
* **Mock/Spec/BDD/etc**: Assert is the framework and there are a variety of 3rd party tools to do such things. Feel free to use whatever you like.
|
39
39
|
|
40
40
|
## Description
|
41
41
|
|
42
|
-
Assert is an assertion
|
42
|
+
Assert is an assertion-style testing framework, meaning you use assertion statements to define your tests and create results. Assert uses class-based contexts so if you want to nest your contexts, use inheritance.
|
43
43
|
|
44
44
|
### Features
|
45
45
|
|
@@ -50,6 +50,7 @@ Assert is an assertion style testing framework, meaning you use assertion statem
|
|
50
50
|
* class-based contexts
|
51
51
|
* multiple before/setup & after/teardown blocks
|
52
52
|
* around blocks
|
53
|
+
* `let` value declarations
|
53
54
|
* full backtrace for errors
|
54
55
|
* optionally pretty print objects in failure descriptions
|
55
56
|
* [stubbing API](https://github.com/redding/assert#stub)
|
@@ -666,4 +667,4 @@ If submitting a Pull Request, please:
|
|
666
667
|
|
667
668
|
One note: please respect that Assert itself is intended to be the flexible, base-level, framework-type logic that should change little if at all. Pull requests for niche functionality or personal testing philosphy stuff will likely not be accepted.
|
668
669
|
|
669
|
-
If you wish to extend Assert for your niche purpose/desire/philosophy, please do so in
|
670
|
+
If you wish to extend Assert for your niche purpose/desire/philosophy, please do so in its own gem (preferrably named `assert-<whatever>`) that uses Assert as a dependency.
|
data/assert.gemspec
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# -*- encoding: utf-8 -*-
|
2
4
|
lib = File.expand_path("../lib", __FILE__)
|
3
5
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
@@ -20,6 +22,7 @@ Gem::Specification.new do |gem|
|
|
20
22
|
|
21
23
|
gem.required_ruby_version = "~> 2.5"
|
22
24
|
|
23
|
-
gem.add_dependency("much-factory",
|
24
|
-
gem.add_dependency("much-
|
25
|
+
gem.add_dependency("much-factory", ["~> 0.2.0"])
|
26
|
+
gem.add_dependency("much-not-given", ["~> 0.1.1"])
|
27
|
+
gem.add_dependency("much-stub", ["~> 0.1.6"])
|
25
28
|
end
|
data/bin/assert
CHANGED
data/lib/assert.rb
CHANGED
@@ -0,0 +1,143 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "much-not-given"
|
4
|
+
require "much-stub"
|
5
|
+
|
6
|
+
module Assert; end
|
7
|
+
|
8
|
+
class Assert::ActualValue
|
9
|
+
include MuchNotGiven
|
10
|
+
|
11
|
+
def initialize(value = self.class.not_given, context:, &value_block)
|
12
|
+
@value = self.class.given?(value) ? value : value_block
|
13
|
+
@context = context
|
14
|
+
end
|
15
|
+
|
16
|
+
def returns_true(*args)
|
17
|
+
@context.assert_block(*args, &@value)
|
18
|
+
end
|
19
|
+
|
20
|
+
def does_not_return_true(*args)
|
21
|
+
@context.assert_not_block(*args, &@value)
|
22
|
+
end
|
23
|
+
|
24
|
+
def raises(*expected_exceptions)
|
25
|
+
@context.assert_raises(*expected_exceptions, &@value)
|
26
|
+
end
|
27
|
+
|
28
|
+
def does_not_raise(*expected_exceptions)
|
29
|
+
@context.assert_nothing_raised(*expected_exceptions, &@value)
|
30
|
+
end
|
31
|
+
|
32
|
+
def changes(*args)
|
33
|
+
@context.assert_changes(*args, &@value)
|
34
|
+
end
|
35
|
+
|
36
|
+
def does_not_change(*args)
|
37
|
+
@context.assert_not_changes(*args, &@value)
|
38
|
+
end
|
39
|
+
|
40
|
+
def is_a_kind_of(expected_class, *args)
|
41
|
+
@context.assert_kind_of(expected_class, @value, *args)
|
42
|
+
end
|
43
|
+
alias_method :is_kind_of, :is_a_kind_of
|
44
|
+
|
45
|
+
def is_not_a_kind_of(expected_class, *args)
|
46
|
+
@context.assert_not_kind_of(expected_class, @value, *args)
|
47
|
+
end
|
48
|
+
alias_method :is_not_kind_of, :is_not_a_kind_of
|
49
|
+
|
50
|
+
def is_an_instance_of(expected_class, *args)
|
51
|
+
@context.assert_instance_of(expected_class, @value, *args)
|
52
|
+
end
|
53
|
+
alias_method :is_instance_of, :is_an_instance_of
|
54
|
+
|
55
|
+
def is_not_an_instance_of(expected_class, *args)
|
56
|
+
@context.assert_not_instance_of(expected_class, @value, *args)
|
57
|
+
end
|
58
|
+
alias_method :is_not_instance_of, :is_not_an_instance_of
|
59
|
+
|
60
|
+
def responds_to(expected_method_name, *args)
|
61
|
+
@context.assert_responds_to(expected_method_name, @value, *args)
|
62
|
+
end
|
63
|
+
|
64
|
+
def does_not_respond_to(expected_method_name, *args)
|
65
|
+
@context.assert_not_responds_to(expected_method_name, @value, *args)
|
66
|
+
end
|
67
|
+
|
68
|
+
def is_the_same_as(expected_object, *args)
|
69
|
+
@context.assert_same(expected_object, @value, *args)
|
70
|
+
end
|
71
|
+
alias_method :is, :is_the_same_as
|
72
|
+
|
73
|
+
def is_not_the_same_as(expected_object, *args)
|
74
|
+
@context.assert_not_same(expected_object, @value, *args)
|
75
|
+
end
|
76
|
+
alias_method :is_not, :is_not_the_same_as
|
77
|
+
|
78
|
+
def equals(expected_value, *args)
|
79
|
+
@context.assert_equal(expected_value, @value, *args)
|
80
|
+
end
|
81
|
+
alias_method :is_equal_to, :equals
|
82
|
+
|
83
|
+
def does_not_equal(expected_value, *args)
|
84
|
+
@context.assert_not_equal(expected_value, @value, *args)
|
85
|
+
end
|
86
|
+
alias_method :is_not_equal_to, :does_not_equal
|
87
|
+
|
88
|
+
def matches(expected_regex, *args)
|
89
|
+
@context.assert_match(expected_regex, @value, *args)
|
90
|
+
end
|
91
|
+
|
92
|
+
def does_not_match(expected_regex, *args)
|
93
|
+
@context.assert_not_match(expected_regex, @value, *args)
|
94
|
+
end
|
95
|
+
|
96
|
+
def is_empty(*args)
|
97
|
+
@context.assert_empty(@value, *args)
|
98
|
+
end
|
99
|
+
|
100
|
+
def is_not_empty(*args)
|
101
|
+
@context.assert_not_empty(@value, *args)
|
102
|
+
end
|
103
|
+
|
104
|
+
def includes(object, *args)
|
105
|
+
@context.assert_includes(object, @value, *args)
|
106
|
+
end
|
107
|
+
|
108
|
+
def does_not_include(object, *args)
|
109
|
+
@context.assert_not_includes(object, @value, *args)
|
110
|
+
end
|
111
|
+
|
112
|
+
def is_nil(*args)
|
113
|
+
@context.assert_nil(@value, *args)
|
114
|
+
end
|
115
|
+
|
116
|
+
def is_not_nil(*args)
|
117
|
+
@context.assert_not_nil(@value, *args)
|
118
|
+
end
|
119
|
+
|
120
|
+
def is_true(*args)
|
121
|
+
@context.assert_true(@value, *args)
|
122
|
+
end
|
123
|
+
|
124
|
+
def is_not_true(*args)
|
125
|
+
@context.assert_not_true(@value, *args)
|
126
|
+
end
|
127
|
+
|
128
|
+
def is_false(*args)
|
129
|
+
@context.assert_false(@value, *args)
|
130
|
+
end
|
131
|
+
|
132
|
+
def is_not_false(*args)
|
133
|
+
@context.assert_not_false(@value, *args)
|
134
|
+
end
|
135
|
+
|
136
|
+
def is_a_file(*args)
|
137
|
+
@context.assert_file_exists(@value, *args)
|
138
|
+
end
|
139
|
+
|
140
|
+
def is_not_a_file(*args)
|
141
|
+
@context.assert_not_file_exists(@value, *args)
|
142
|
+
end
|
143
|
+
end
|
data/lib/assert/assert_runner.rb
CHANGED
data/lib/assert/assertions.rb
CHANGED
@@ -1,7 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "assert/utils"
|
2
4
|
|
3
5
|
module Assert
|
4
6
|
module Assertions
|
7
|
+
IGNORED_ASSERTION_HELPERS =
|
8
|
+
[
|
9
|
+
:assert_throws, :assert_nothing_thrown,
|
10
|
+
:assert_operator, :refute_operator,
|
11
|
+
:assert_in_epsilon, :refute_in_epsilon,
|
12
|
+
:assert_in_delta, :refute_in_delta,
|
13
|
+
:assert_send
|
14
|
+
]
|
15
|
+
|
5
16
|
def assert_block(desc = nil)
|
6
17
|
assert(yield, desc){ "Expected block to return a true value." }
|
7
18
|
end
|
@@ -25,7 +36,7 @@ module Assert
|
|
25
36
|
alias_method :refute_empty, :assert_not_empty
|
26
37
|
|
27
38
|
def assert_equal(exp, act, desc = nil)
|
28
|
-
assert(
|
39
|
+
assert(act == exp, desc) do
|
29
40
|
c = __assert_config__
|
30
41
|
exp_show = Assert::U.show_for_diff(exp, c)
|
31
42
|
act_show = Assert::U.show_for_diff(act, c)
|
@@ -40,7 +51,7 @@ module Assert
|
|
40
51
|
end
|
41
52
|
|
42
53
|
def assert_not_equal(exp, act, desc = nil)
|
43
|
-
assert(
|
54
|
+
assert(act != exp, desc) do
|
44
55
|
c = __assert_config__
|
45
56
|
exp_show = Assert::U.show_for_diff(exp, c)
|
46
57
|
act_show = Assert::U.show_for_diff(act, c)
|
@@ -189,6 +200,75 @@ module Assert
|
|
189
200
|
alias_method :assert_not_raises, :assert_nothing_raised
|
190
201
|
alias_method :assert_not_raise, :assert_nothing_raised
|
191
202
|
|
203
|
+
def assert_changes(
|
204
|
+
ruby_string_to_eval,
|
205
|
+
desc: nil,
|
206
|
+
from: Assert::ActualValue.not_given,
|
207
|
+
to: Assert::ActualValue.not_given,
|
208
|
+
&block
|
209
|
+
)
|
210
|
+
desc_msg = desc ? "#{desc}\n" : ""
|
211
|
+
from_eval = instance_eval(ruby_string_to_eval)
|
212
|
+
if Assert::ActualValue.given?(from)
|
213
|
+
assert_equal(
|
214
|
+
from,
|
215
|
+
from_eval,
|
216
|
+
"#{desc_msg}Expected `#{ruby_string_to_eval}` to change from `#{from.inspect}`."
|
217
|
+
)
|
218
|
+
end
|
219
|
+
|
220
|
+
block.call
|
221
|
+
|
222
|
+
to_eval = instance_eval(ruby_string_to_eval)
|
223
|
+
if Assert::ActualValue.given?(to)
|
224
|
+
assert_equal(
|
225
|
+
to,
|
226
|
+
to_eval,
|
227
|
+
"#{desc_msg}Expected `#{ruby_string_to_eval}` to change to `#{to.inspect}`."
|
228
|
+
)
|
229
|
+
end
|
230
|
+
|
231
|
+
if (
|
232
|
+
Assert::ActualValue.not_given?(from) &&
|
233
|
+
Assert::ActualValue.not_given?(to)
|
234
|
+
)
|
235
|
+
assert_not_equal(
|
236
|
+
from_eval,
|
237
|
+
to_eval,
|
238
|
+
"#{desc_msg}Expected `#{ruby_string_to_eval}` to change; "\
|
239
|
+
"it was `#{from_eval.inspect}` and didn't change."
|
240
|
+
)
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
def assert_not_changes(
|
245
|
+
ruby_string_to_eval,
|
246
|
+
desc: nil,
|
247
|
+
from: Assert::ActualValue.not_given,
|
248
|
+
&block
|
249
|
+
)
|
250
|
+
desc_msg = desc ? "#{desc}\n" : ""
|
251
|
+
from_eval = instance_eval(ruby_string_to_eval)
|
252
|
+
if Assert::ActualValue.given?(from)
|
253
|
+
assert_equal(
|
254
|
+
from,
|
255
|
+
from_eval,
|
256
|
+
"#{desc_msg}Expected `#{ruby_string_to_eval}` to not change from `#{from.inspect}`."
|
257
|
+
)
|
258
|
+
end
|
259
|
+
|
260
|
+
block.call
|
261
|
+
|
262
|
+
to_eval = instance_eval(ruby_string_to_eval)
|
263
|
+
assert_equal(
|
264
|
+
from_eval,
|
265
|
+
to_eval,
|
266
|
+
"#{desc_msg}Expected `#{ruby_string_to_eval}` to not change; "\
|
267
|
+
"it was `#{from_eval.inspect}` and changed to `#{to_eval.inspect}`."
|
268
|
+
)
|
269
|
+
end
|
270
|
+
alias_method :refute_changes, :assert_not_changes
|
271
|
+
|
192
272
|
def assert_respond_to(method, object, desc = nil)
|
193
273
|
assert(object.respond_to?(method), desc) do
|
194
274
|
"Expected #{Assert::U.show(object, __assert_config__)} (#{object.class})"\
|
@@ -244,24 +324,6 @@ module Assert
|
|
244
324
|
end
|
245
325
|
alias_method :refute_same, :assert_not_same
|
246
326
|
|
247
|
-
# ignored assertion helpers
|
248
|
-
|
249
|
-
IGNORED_ASSERTION_HELPERS = [
|
250
|
-
:assert_throws, :assert_nothing_thrown,
|
251
|
-
:assert_operator, :refute_operator,
|
252
|
-
:assert_in_epsilon, :refute_in_epsilon,
|
253
|
-
:assert_in_delta, :refute_in_delta,
|
254
|
-
:assert_send
|
255
|
-
]
|
256
|
-
def method_missing(method, *args, &block)
|
257
|
-
if IGNORED_ASSERTION_HELPERS.include?(method.to_sym)
|
258
|
-
ignore "The assertion `#{method}` is not supported."\
|
259
|
-
" Please use another assertion or the basic `assert`."
|
260
|
-
else
|
261
|
-
super
|
262
|
-
end
|
263
|
-
end
|
264
|
-
|
265
327
|
private
|
266
328
|
|
267
329
|
def __assert_config__
|
data/lib/assert/cli.rb
CHANGED
data/lib/assert/config.rb
CHANGED
data/lib/assert/context.rb
CHANGED
@@ -1,4 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "assert/actual_value"
|
1
4
|
require "assert/assertions"
|
5
|
+
require "assert/context/let_dsl"
|
6
|
+
require "assert/context/method_missing"
|
2
7
|
require "assert/context/setup_dsl"
|
3
8
|
require "assert/context/subject_dsl"
|
4
9
|
require "assert/context/suite_dsl"
|
@@ -10,42 +15,22 @@ require "assert/suite"
|
|
10
15
|
require "assert/utils"
|
11
16
|
|
12
17
|
module Assert
|
18
|
+
# A Context is a scope for tests to run in. Contexts have setup and teardown
|
19
|
+
# blocks, subjects, and descriptions. Tests are run in the scope of a Context
|
20
|
+
# instance. Therefore, a Context should have minimal base
|
21
|
+
# logic/methods/instance_vars. The instance should remain pure to not pollute
|
22
|
+
# test scopes.
|
13
23
|
class Context
|
14
|
-
#
|
24
|
+
# Put all logic in DSL methods to keep context instances pure.
|
15
25
|
extend SetupDSL
|
16
26
|
extend SubjectDSL
|
17
27
|
extend SuiteDSL
|
18
28
|
extend TestDSL
|
29
|
+
extend LetDSL
|
30
|
+
include MethodMissing
|
19
31
|
include Assert::Assertions
|
20
32
|
include Assert::Macros::Methods
|
21
33
|
|
22
|
-
# a Context is a scope for tests to run in. Contexts have setup and
|
23
|
-
# teardown blocks, subjects, and descriptions. Tests are run in the
|
24
|
-
# scope of a Context instance. Therefore, a Context should have
|
25
|
-
# minimal base logic/methods/instance_vars. The instance should remain
|
26
|
-
# pure to not pollute test scopes.
|
27
|
-
|
28
|
-
# if a test method is added to a context manually (not using a context helper):
|
29
|
-
# capture any context info, build a test obj, and add it to the suite
|
30
|
-
def self.method_added(method_name)
|
31
|
-
if method_name.to_s =~ Suite::TEST_METHOD_REGEX
|
32
|
-
klass_method_name = "#{self}##{method_name}"
|
33
|
-
|
34
|
-
if self.suite.test_methods.include?(klass_method_name)
|
35
|
-
puts "WARNING: redefining "#{klass_method_name}""
|
36
|
-
puts " from: #{caller_locations(1,1)}"
|
37
|
-
else
|
38
|
-
self.suite.test_methods << klass_method_name
|
39
|
-
end
|
40
|
-
|
41
|
-
self.suite.on_test(Test.for_method(
|
42
|
-
method_name.to_s,
|
43
|
-
ContextInfo.new(self, nil, caller_locations(1,1)),
|
44
|
-
self.suite.config
|
45
|
-
))
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
34
|
def initialize(running_test, config, result_callback)
|
50
35
|
@__assert_running_test__ = running_test
|
51
36
|
@__assert_config__ = config
|
@@ -61,9 +46,8 @@ module Assert
|
|
61
46
|
end
|
62
47
|
end
|
63
48
|
|
64
|
-
#
|
65
|
-
#
|
66
|
-
# all other assertion helpers use this one in the end
|
49
|
+
# Check if the result is true. If so, create a new pass result, Otherwise
|
50
|
+
# create a new fail result with the desc and fail msg.
|
67
51
|
def assert(assertion, desc = nil)
|
68
52
|
if assertion
|
69
53
|
pass
|
@@ -78,8 +62,8 @@ module Assert
|
|
78
62
|
end
|
79
63
|
end
|
80
64
|
|
81
|
-
#
|
82
|
-
# result
|
65
|
+
# The opposite of assert. Check if the result is false. If so, create a new
|
66
|
+
# pass result. Otherwise create a new fail result with the desc and fail msg.
|
83
67
|
def assert_not(assertion, fail_desc = nil)
|
84
68
|
assert(!assertion, fail_desc) do
|
85
69
|
"Failed assert_not: assertion was "\
|
@@ -88,14 +72,23 @@ module Assert
|
|
88
72
|
end
|
89
73
|
alias_method :refute, :assert_not
|
90
74
|
|
75
|
+
def assert_that(
|
76
|
+
actual_value = Assert::ActualValue.not_given,
|
77
|
+
&actual_value_block
|
78
|
+
)
|
79
|
+
Assert::ActualValue.new(actual_value, context: self, &actual_value_block)
|
80
|
+
end
|
81
|
+
|
91
82
|
# adds a Pass result to the end of the test's results
|
92
83
|
# does not break test execution
|
93
84
|
def pass(pass_msg = nil)
|
94
85
|
if @__assert_pending__ == 0
|
95
86
|
capture_result(Assert::Result::Pass, pass_msg)
|
96
87
|
else
|
97
|
-
capture_result(
|
98
|
-
|
88
|
+
capture_result(
|
89
|
+
Assert::Result::Fail,
|
90
|
+
"Pending pass (make it not pending)"
|
91
|
+
)
|
99
92
|
end
|
100
93
|
end
|
101
94
|
|
@@ -157,9 +150,12 @@ module Assert
|
|
157
150
|
end
|
158
151
|
|
159
152
|
def subject
|
160
|
-
|
161
|
-
|
153
|
+
unless instance_variable_defined?("@__assert_subject__")
|
154
|
+
@__assert_subject__ =
|
155
|
+
instance_eval(&self.class.subject) if self.class.subject
|
162
156
|
end
|
157
|
+
|
158
|
+
@__assert_subject__
|
163
159
|
end
|
164
160
|
|
165
161
|
def inspect
|