assert 2.18.2 → 2.19.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|