assert 2.3.3 → 2.4.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.
- data/README.md +84 -0
- data/lib/assert.rb +10 -3
- data/lib/assert/assertions.rb +58 -36
- data/lib/assert/cli.rb +5 -1
- data/lib/assert/context.rb +5 -4
- data/lib/assert/result.rb +1 -1
- data/lib/assert/test.rb +1 -1
- data/lib/assert/utils.rb +70 -0
- data/lib/assert/version.rb +1 -1
- data/test/helper.rb +2 -1
- data/test/support/diff_a.txt +3 -0
- data/test/support/diff_b.txt +3 -0
- data/test/unit/assert_tests.rb +11 -1
- data/test/unit/assertions/assert_empty_tests.rb +4 -2
- data/test/unit/assertions/assert_equal_tests.rb +66 -4
- data/test/unit/assertions/assert_file_exists_tests.rb +4 -2
- data/test/unit/assertions/assert_includes_tests.rb +4 -2
- data/test/unit/assertions/assert_instance_of_tests.rb +4 -2
- data/test/unit/assertions/assert_kind_of_tests.rb +4 -2
- data/test/unit/assertions/assert_match_tests.rb +4 -2
- data/test/unit/assertions/assert_nil_tests.rb +4 -2
- data/test/unit/assertions/assert_respond_to_tests.rb +4 -2
- data/test/unit/assertions/assert_same_tests.rb +6 -4
- data/test/unit/context_tests.rb +35 -17
- data/test/unit/result_tests.rb +2 -1
- data/test/unit/test_tests.rb +1 -1
- data/test/unit/utils_tests.rb +154 -0
- metadata +12 -5
data/README.md
CHANGED
@@ -250,6 +250,90 @@ Assert.configure do |config|
|
|
250
250
|
end
|
251
251
|
```
|
252
252
|
|
253
|
+
### Pretty Printing values in fail messages
|
254
|
+
|
255
|
+
By default, Assert uses `inspect` when outputting value details in failure messages. At times you may want to pretty-print complex objects as their inspect value is not very human-readable. You can tell Assert to pretty print the assertion objects instead.
|
256
|
+
|
257
|
+
In user/local settings file:
|
258
|
+
|
259
|
+
```ruby
|
260
|
+
Assert.configure do |config|
|
261
|
+
config.pp_objects true
|
262
|
+
end
|
263
|
+
```
|
264
|
+
|
265
|
+
Using the CLI:
|
266
|
+
|
267
|
+
```sh
|
268
|
+
$ assert [-p|--pp-objects|--no-pp-objects]
|
269
|
+
```
|
270
|
+
|
271
|
+
#### Default pretty print processor
|
272
|
+
|
273
|
+
Assert uses the stdlib's `PP.pp` to pretty print objects by default. This is provided by the `Assert::Utils.stdlib_pp_proc` util.
|
274
|
+
|
275
|
+
Using the default `inspect` (no pretty print):
|
276
|
+
|
277
|
+
```
|
278
|
+
$ assert
|
279
|
+
|
280
|
+
FAIL: a test that fails should fail
|
281
|
+
Expected nil, not {:now_usec=>164055, :string=>"a really really really really really really really really long string", :now=>Thu Nov 14 10:28:49 -0600 2013}.
|
282
|
+
```
|
283
|
+
|
284
|
+
Using the default pretty printing (`Assert::Utils.stdlib_pp_proc`):
|
285
|
+
|
286
|
+
```
|
287
|
+
$ assert -p
|
288
|
+
|
289
|
+
FAIL: a test that fails should fail
|
290
|
+
Expected nil, not
|
291
|
+
{:now_usec=>45127,
|
292
|
+
:string=>
|
293
|
+
"a really really really really really really really really long string",
|
294
|
+
:now=>Thu Nov 14 10:28:35 -0600 2013}
|
295
|
+
.
|
296
|
+
```
|
297
|
+
|
298
|
+
You can customize the width used by `PP.pp` by overriding the default `pp_proc` setting:
|
299
|
+
|
300
|
+
```ruby
|
301
|
+
# set PP.pp width used to 1
|
302
|
+
Assert.configure do |config|
|
303
|
+
config.pp_proc Assert::Utils.stdlib_pp_proc(1)
|
304
|
+
end
|
305
|
+
```
|
306
|
+
```
|
307
|
+
$ assert -p
|
308
|
+
|
309
|
+
FAIL: a test that fails should fail
|
310
|
+
Expected nil, not
|
311
|
+
{:now_usec=>
|
312
|
+
984698,
|
313
|
+
:string=>
|
314
|
+
"a really really really really really really really really long string",
|
315
|
+
:now=>
|
316
|
+
Thu Nov 14 10:30:52 -0600 2013}
|
317
|
+
.
|
318
|
+
```
|
319
|
+
|
320
|
+
You can provide you own custom pretty-print processor if you like:
|
321
|
+
|
322
|
+
```ruby
|
323
|
+
# set not a very useful pretty print processor
|
324
|
+
Assert.configure do |config|
|
325
|
+
config.pp_proc Proc.new{ |obj| "herp derp" }
|
326
|
+
end
|
327
|
+
```
|
328
|
+
```
|
329
|
+
$ assert -p
|
330
|
+
|
331
|
+
FAIL: a test that fails should fail
|
332
|
+
Expected nil, not herp derp.
|
333
|
+
```
|
334
|
+
|
335
|
+
Use this if you prefer a 3rd-party tool (like awesome_print or something) over the stdlib `PP.pp` for pretty printing.
|
336
|
+
|
253
337
|
## Viewing Test Results
|
254
338
|
|
255
339
|
`Assert::View::DefaultView` is the default handler for viewing test results. Its output goes something like this:
|
data/lib/assert.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'singleton'
|
2
2
|
require 'assert/version'
|
3
3
|
|
4
|
+
require 'assert/utils'
|
4
5
|
require 'assert/view'
|
5
6
|
require 'assert/suite'
|
6
7
|
require 'assert/runner'
|
@@ -33,8 +34,8 @@ module Assert
|
|
33
34
|
end
|
34
35
|
|
35
36
|
settings :view, :suite, :runner, :test_dir, :test_helper, :changed_files
|
36
|
-
settings :runner_seed, :
|
37
|
-
settings :debug
|
37
|
+
settings :runner_seed, :pp_proc, :use_diff_proc, :run_diff_proc
|
38
|
+
settings :capture_output, :halt_on_fail, :changed_only, :pp_objects, :debug
|
38
39
|
|
39
40
|
def initialize
|
40
41
|
@view = Assert::View::DefaultView.new($stdout)
|
@@ -45,10 +46,16 @@ module Assert
|
|
45
46
|
@changed_files = Assert::AssertRunner::DEFAULT_CHANGED_FILES_PROC
|
46
47
|
|
47
48
|
# default option values
|
48
|
-
@runner_seed
|
49
|
+
@runner_seed = begin; srand; srand % 0xFFFF; end.to_i
|
50
|
+
@pp_proc = Assert::U.stdlib_pp_proc
|
51
|
+
@use_diff_proc = Assert::U.default_use_diff_proc
|
52
|
+
@run_diff_proc = Assert::U.syscmd_diff_proc
|
53
|
+
|
54
|
+
# mode flags
|
49
55
|
@capture_output = false
|
50
56
|
@halt_on_fail = true
|
51
57
|
@changed_only = false
|
58
|
+
@pp_objects = false
|
52
59
|
@debug = false
|
53
60
|
end
|
54
61
|
|
data/lib/assert/assertions.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
|
+
require 'assert/utils'
|
2
|
+
|
1
3
|
module Assert
|
4
|
+
|
2
5
|
module Assertions
|
3
6
|
|
4
7
|
def assert_block(desc = nil)
|
@@ -12,53 +15,69 @@ module Assert
|
|
12
15
|
|
13
16
|
def assert_empty(collection, desc = nil)
|
14
17
|
assert(collection.empty?, desc) do
|
15
|
-
"Expected #{collection
|
18
|
+
"Expected #{Assert::U.show(collection)} to be empty."
|
16
19
|
end
|
17
20
|
end
|
18
21
|
|
19
22
|
def assert_not_empty(collection, desc = nil)
|
20
23
|
assert(!collection.empty?, desc) do
|
21
|
-
"Expected #{collection
|
24
|
+
"Expected #{Assert::U.show(collection)} to not be empty."
|
22
25
|
end
|
23
26
|
end
|
24
27
|
alias_method :refute_empty, :assert_not_empty
|
25
28
|
|
26
|
-
def assert_equal(
|
27
|
-
assert(
|
28
|
-
|
29
|
+
def assert_equal(exp, act, desc = nil)
|
30
|
+
assert(act == exp, desc) do
|
31
|
+
exp_show = Assert::U.show_for_diff(exp)
|
32
|
+
act_show = Assert::U.show_for_diff(act)
|
33
|
+
|
34
|
+
if Assert.config.use_diff_proc.call(exp_show, act_show)
|
35
|
+
"Expected does not equal actual, diff:\n"\
|
36
|
+
"#{Assert.config.run_diff_proc.call(exp_show, act_show)}"
|
37
|
+
else
|
38
|
+
"Expected #{Assert::U.show(exp)}, not #{Assert::U.show(act)}."
|
39
|
+
end
|
29
40
|
end
|
30
41
|
end
|
31
42
|
|
32
|
-
def assert_not_equal(
|
33
|
-
assert(
|
34
|
-
|
43
|
+
def assert_not_equal(exp, act, desc = nil)
|
44
|
+
assert(act != exp, desc) do
|
45
|
+
exp_show = Assert::U.show_for_diff(exp)
|
46
|
+
act_show = Assert::U.show_for_diff(act)
|
47
|
+
|
48
|
+
if Assert.config.use_diff_proc.call(exp_show, act_show)
|
49
|
+
"Expected equals actual, diff:\n"\
|
50
|
+
"#{Assert.config.run_diff_proc.call(exp_show, act_show)}"
|
51
|
+
else
|
52
|
+
"#{Assert::U.show(act)} not expected to equal #{Assert::U.show(exp)}."
|
53
|
+
end
|
35
54
|
end
|
36
55
|
end
|
37
56
|
alias_method :refute_equal, :assert_not_equal
|
38
57
|
|
39
58
|
def assert_file_exists(file_path, desc = nil)
|
40
59
|
assert(File.exists?(File.expand_path(file_path)), desc) do
|
41
|
-
"Expected #{file_path
|
60
|
+
"Expected #{Assert::U.show(file_path)} to exist."
|
42
61
|
end
|
43
62
|
end
|
44
63
|
|
45
64
|
def assert_not_file_exists(file_path, desc = nil)
|
46
65
|
assert(!File.exists?(File.expand_path(file_path)), desc) do
|
47
|
-
"Expected #{file_path
|
66
|
+
"Expected #{Assert::U.show(file_path)} to not exist."
|
48
67
|
end
|
49
68
|
end
|
50
69
|
alias_method :refute_file_exists, :assert_not_file_exists
|
51
70
|
|
52
71
|
def assert_includes(object, collection, desc = nil)
|
53
72
|
assert(collection.include?(object), desc) do
|
54
|
-
"Expected #{collection
|
73
|
+
"Expected #{Assert::U.show(collection)} to include #{Assert::U.show(object)}."
|
55
74
|
end
|
56
75
|
end
|
57
76
|
alias_method :assert_included, :assert_includes
|
58
77
|
|
59
78
|
def assert_not_includes(object, collection, desc = nil)
|
60
79
|
assert(!collection.include?(object), desc) do
|
61
|
-
"Expected #{collection
|
80
|
+
"Expected #{Assert::U.show(collection)} to not include #{Assert::U.show(object)}."
|
62
81
|
end
|
63
82
|
end
|
64
83
|
alias_method :assert_not_included, :assert_not_includes
|
@@ -67,52 +86,52 @@ module Assert
|
|
67
86
|
|
68
87
|
def assert_instance_of(klass, instance, desc = nil)
|
69
88
|
assert(instance.instance_of?(klass), desc) do
|
70
|
-
"Expected #{instance
|
89
|
+
"Expected #{Assert::U.show(instance)} (#{instance.class}) to be an instance of #{klass}."
|
71
90
|
end
|
72
91
|
end
|
73
92
|
|
74
93
|
def assert_not_instance_of(klass, instance, desc = nil)
|
75
94
|
assert(!instance.instance_of?(klass), desc) do
|
76
|
-
"#{instance
|
95
|
+
"#{Assert::U.show(instance)} (#{instance.class}) not expected to be an instance of #{klass}."
|
77
96
|
end
|
78
97
|
end
|
79
98
|
alias_method :refute_instance_of, :assert_not_instance_of
|
80
99
|
|
81
100
|
def assert_kind_of(klass, instance, desc=nil)
|
82
101
|
assert(instance.kind_of?(klass), desc) do
|
83
|
-
"Expected #{instance
|
102
|
+
"Expected #{Assert::U.show(instance)} (#{instance.class}) to be a kind of #{klass}."
|
84
103
|
end
|
85
104
|
end
|
86
105
|
|
87
106
|
def assert_not_kind_of(klass, instance, desc=nil)
|
88
107
|
assert(!instance.kind_of?(klass), desc) do
|
89
|
-
"#{instance
|
108
|
+
"#{Assert::U.show(instance)} not expected to be a kind of #{klass}."
|
90
109
|
end
|
91
110
|
end
|
92
111
|
alias_method :refute_kind_of, :assert_not_kind_of
|
93
112
|
|
94
|
-
def assert_match(
|
95
|
-
|
96
|
-
assert(
|
97
|
-
"Expected #{
|
113
|
+
def assert_match(exp, act, desc=nil)
|
114
|
+
exp_regex = String === exp && String === act ? /#{Regexp.escape(exp)}/ : exp
|
115
|
+
assert(act =~ exp_regex, desc) do
|
116
|
+
"Expected #{Assert::U.show(act)} to match #{Assert::U.show(exp)}."
|
98
117
|
end
|
99
118
|
end
|
100
119
|
|
101
|
-
def assert_not_match(
|
102
|
-
exp = String ===
|
103
|
-
assert(
|
104
|
-
"#{
|
120
|
+
def assert_not_match(exp, act, desc=nil)
|
121
|
+
exp = String === exp && String === act ? /#{Regexp.escape(exp)}/ : exp
|
122
|
+
assert(act !~ exp, desc) do
|
123
|
+
"#{Assert::U.show(act)} not expected to match #{Assert::U.show(exp)}."
|
105
124
|
end
|
106
125
|
end
|
107
126
|
alias_method :refute_match, :assert_not_match
|
108
127
|
alias_method :assert_no_match, :assert_not_match
|
109
128
|
|
110
129
|
def assert_nil(object, desc=nil)
|
111
|
-
assert(object.nil?, desc){ "Expected nil, not #{object
|
130
|
+
assert(object.nil?, desc){ "Expected nil, not #{Assert::U.show(object)}." }
|
112
131
|
end
|
113
132
|
|
114
133
|
def assert_not_nil(object, desc=nil)
|
115
|
-
assert(!object.nil?, desc){ "Expected #{object
|
134
|
+
assert(!object.nil?, desc){ "Expected #{Assert::U.show(object)} to not be nil." }
|
116
135
|
end
|
117
136
|
alias_method :refute_nil, :assert_not_nil
|
118
137
|
|
@@ -133,29 +152,31 @@ module Assert
|
|
133
152
|
|
134
153
|
def assert_respond_to(method, object, desc=nil)
|
135
154
|
assert(object.respond_to?(method), desc) do
|
136
|
-
"Expected #{object
|
155
|
+
"Expected #{Assert::U.show(object)} (#{object.class}) to respond to `#{method}`."
|
137
156
|
end
|
138
157
|
end
|
139
158
|
alias_method :assert_responds_to, :assert_respond_to
|
140
159
|
|
141
160
|
def assert_not_respond_to(method, object, desc=nil)
|
142
161
|
assert(!object.respond_to?(method), desc) do
|
143
|
-
"#{object
|
162
|
+
"#{Assert::U.show(object)} (#{object.class}) not expected to respond to `#{method}`."
|
144
163
|
end
|
145
164
|
end
|
146
165
|
alias_method :assert_not_responds_to, :assert_not_respond_to
|
147
166
|
alias_method :refute_respond_to, :assert_not_respond_to
|
148
167
|
alias_method :refute_responds_to, :assert_not_respond_to
|
149
168
|
|
150
|
-
def assert_same(
|
151
|
-
assert(
|
152
|
-
"Expected #{
|
169
|
+
def assert_same(exp, act, desc=nil)
|
170
|
+
assert(act.equal?(exp), desc) do
|
171
|
+
"Expected #{Assert::U.show(act)} (#{act.object_id})"\
|
172
|
+
" to be the same as #{Assert::U.show(exp)} (#{exp.object_id})."
|
153
173
|
end
|
154
174
|
end
|
155
175
|
|
156
|
-
def assert_not_same(
|
157
|
-
assert(!
|
158
|
-
"#{
|
176
|
+
def assert_not_same(exp, act, desc=nil)
|
177
|
+
assert(!act.equal?(exp), desc) do
|
178
|
+
"#{Assert::U.show(act)} (#{act.object_id})"\
|
179
|
+
" not expected to be the same as #{Assert::U.show(exp)} (#{exp.object_id})."
|
159
180
|
end
|
160
181
|
end
|
161
182
|
alias_method :refute_same, :assert_not_same
|
@@ -213,8 +234,8 @@ module Assert
|
|
213
234
|
if @exception
|
214
235
|
backtrace = Assert::Result::Backtrace.new(@exception.backtrace)
|
215
236
|
[ raised_msg,
|
216
|
-
"Class:
|
217
|
-
"Message:
|
237
|
+
"Class: `#{@exception.class}`",
|
238
|
+
"Message: `#{@exception.message.inspect}`",
|
218
239
|
"---Backtrace---",
|
219
240
|
backtrace.filtered.to_s,
|
220
241
|
"---------------"
|
@@ -238,4 +259,5 @@ module Assert
|
|
238
259
|
end
|
239
260
|
|
240
261
|
end
|
262
|
+
|
241
263
|
end
|
data/lib/assert/cli.rb
CHANGED
@@ -25,6 +25,7 @@ module Assert
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def initialize(*args)
|
28
|
+
@args = args
|
28
29
|
@cli = CLIRB.new do
|
29
30
|
option 'runner_seed', 'Use a given seed to run tests', {
|
30
31
|
:abbrev => 's', :value => Fixnum
|
@@ -38,14 +39,17 @@ module Assert
|
|
38
39
|
option 'changed_only', 'only run test files with changes', {
|
39
40
|
:abbrev => 'c'
|
40
41
|
}
|
42
|
+
option 'pp_objects', 'pretty-print objects in fail messages', {
|
43
|
+
:abbrev => 'p'
|
44
|
+
}
|
41
45
|
# show loaded test files, cli err backtraces, etc
|
42
46
|
option 'debug', 'run in debug mode'
|
43
47
|
end
|
44
|
-
@cli.parse!(args)
|
45
48
|
end
|
46
49
|
|
47
50
|
def run
|
48
51
|
begin
|
52
|
+
@cli.parse!(@args)
|
49
53
|
Assert::AssertRunner.new(@cli.args, @cli.opts).run
|
50
54
|
rescue CLIRB::HelpExit
|
51
55
|
puts help
|
data/lib/assert/context.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'assert/utils'
|
1
2
|
require 'assert/suite'
|
2
3
|
require 'assert/assertions'
|
3
4
|
require 'assert/result'
|
@@ -174,19 +175,19 @@ module Assert
|
|
174
175
|
# check if the assertion is a truthy value, if so create a new pass result, otherwise
|
175
176
|
# create a new fail result with the desc and what failed msg.
|
176
177
|
# all other assertion helpers use this one in the end
|
177
|
-
def assert(assertion,
|
178
|
+
def assert(assertion, desc = nil)
|
178
179
|
if assertion
|
179
180
|
pass
|
180
181
|
else
|
181
|
-
|
182
|
-
fail(fail_message(
|
182
|
+
what = block_given? ? yield : "Failed assert: assertion was `#{Assert::U.show(assertion)}`."
|
183
|
+
fail(fail_message(desc, what))
|
183
184
|
end
|
184
185
|
end
|
185
186
|
|
186
187
|
# the opposite of assert, check if the assertion is a false value, if so create a new pass
|
187
188
|
# result, otherwise create a new fail result with the desc and it's what failed msg
|
188
189
|
def assert_not(assertion, fail_desc = nil)
|
189
|
-
assert(!assertion, fail_desc){ "Failed assert_not: assertion was
|
190
|
+
assert(!assertion, fail_desc){ "Failed assert_not: assertion was `#{Assert::U.show(assertion)}`." }
|
190
191
|
end
|
191
192
|
alias_method :refute, :assert_not
|
192
193
|
|
data/lib/assert/result.rb
CHANGED
data/lib/assert/test.rb
CHANGED
@@ -78,7 +78,7 @@ module Assert
|
|
78
78
|
attributes_string = ([ :name, :context_info, :results ].collect do |attr|
|
79
79
|
"@#{attr}=#{self.send(attr).inspect}"
|
80
80
|
end).join(" ")
|
81
|
-
"#<#{self.class} #{attributes_string}>"
|
81
|
+
"#<#{self.class}:#{'0x0%x' % (object_id << 1)} #{attributes_string}>"
|
82
82
|
end
|
83
83
|
|
84
84
|
protected
|
data/lib/assert/utils.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'assert'
|
2
|
+
|
3
|
+
module Assert
|
4
|
+
|
5
|
+
module Utils
|
6
|
+
|
7
|
+
# show objects in a human-readable manner. Either inspects or pretty-prints
|
8
|
+
# them depending on settings.
|
9
|
+
|
10
|
+
def self.show(obj)
|
11
|
+
out = Assert.config.pp_objects ? Assert.config.pp_proc.call(obj) : obj.inspect
|
12
|
+
out = out.encode(Encoding.default_external) if defined?(Encoding)
|
13
|
+
out
|
14
|
+
end
|
15
|
+
|
16
|
+
# show objects in a human-readable manner and make the output diff-able. This
|
17
|
+
# expands on the basic `show` util by escaping newlines and making object id
|
18
|
+
# hex-values generic.
|
19
|
+
|
20
|
+
def self.show_for_diff(obj)
|
21
|
+
show(obj).gsub(/\\n/, "\n").gsub(/:0x[a-fA-F0-9]{4,}/m, ':0xXXXXXX')
|
22
|
+
end
|
23
|
+
|
24
|
+
# open a tempfile and yield it
|
25
|
+
|
26
|
+
def self.tempfile(name, content)
|
27
|
+
require "tempfile"
|
28
|
+
Tempfile.open(name) do |tmpfile|
|
29
|
+
tmpfile.puts(content); tmpfile.flush
|
30
|
+
yield tmpfile if block_given?
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Get a proc that uses stdlib `PP.pp` to pretty print objects
|
35
|
+
|
36
|
+
def self.stdlib_pp_proc(width = nil)
|
37
|
+
require 'pp'
|
38
|
+
Proc.new{ |obj| "\n#{PP.pp(obj, '', width || 79).strip}\n" }
|
39
|
+
end
|
40
|
+
|
41
|
+
# Return true if if either show output has newlines or is bigger than 29 chars
|
42
|
+
|
43
|
+
def self.default_use_diff_proc
|
44
|
+
Proc.new do |exp_show_output, act_show_output|
|
45
|
+
exp_show_output.include?("\n") || exp_show_output.size > 29 ||
|
46
|
+
act_show_output.include?("\n") || act_show_output.size > 29
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.syscmd_diff_proc(syscmd = "diff --unified=-1")
|
51
|
+
Proc.new do |exp_show_output, act_show_output|
|
52
|
+
result = ""
|
53
|
+
tempfile('exp_show_output', exp_show_output) do |a|
|
54
|
+
tempfile('act_show_output', act_show_output) do |b|
|
55
|
+
result = `#{syscmd} #{a.path} #{b.path}`
|
56
|
+
result.sub!(/^\-\-\- .+/, "--- expected")
|
57
|
+
result.sub!(/^\+\+\+ .+/, "+++ actual")
|
58
|
+
result = "--- expected\n+++ actual" if result.empty?
|
59
|
+
end
|
60
|
+
end
|
61
|
+
result
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
# alias for brevity
|
68
|
+
U = Utils
|
69
|
+
|
70
|
+
end
|
data/lib/assert/version.rb
CHANGED
data/test/helper.rb
CHANGED
@@ -2,7 +2,8 @@
|
|
2
2
|
# put any test helpers here
|
3
3
|
|
4
4
|
# add the root dir to the load path
|
5
|
-
|
5
|
+
ROOT_PATH = File.expand_path("../..", __FILE__)
|
6
|
+
$LOAD_PATH.unshift(ROOT_PATH)
|
6
7
|
|
7
8
|
# require pry for debugging (`binding.pry`)
|
8
9
|
require 'pry'
|
data/test/unit/assert_tests.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
require 'assert'
|
2
|
+
|
2
3
|
require 'assert/view/default_view'
|
3
4
|
require 'assert/runner'
|
4
5
|
require 'assert/suite'
|
6
|
+
require 'assert/utils'
|
5
7
|
|
6
8
|
module Assert
|
7
9
|
|
@@ -31,7 +33,8 @@ module Assert
|
|
31
33
|
subject { Config }
|
32
34
|
|
33
35
|
should have_imeths :suite, :view, :runner, :test_dir, :test_helper, :changed_files
|
34
|
-
should have_imeths :runner_seed, :
|
36
|
+
should have_imeths :runner_seed, :pp_proc, :use_diff_proc, :run_diff_proc
|
37
|
+
should have_imeths :capture_output, :halt_on_fail, :changed_only, :pp_objects
|
35
38
|
should have_imeths :debug, :apply
|
36
39
|
|
37
40
|
should "default the view, suite, and runner" do
|
@@ -40,6 +43,13 @@ module Assert
|
|
40
43
|
assert_kind_of Assert::Runner, subject.runner
|
41
44
|
end
|
42
45
|
|
46
|
+
should "default the optional values" do
|
47
|
+
assert_not_nil subject.runner_seed
|
48
|
+
assert_not_nil subject.pp_proc
|
49
|
+
assert_not_nil subject.use_diff_proc
|
50
|
+
assert_not_nil subject.run_diff_proc
|
51
|
+
end
|
52
|
+
|
43
53
|
end
|
44
54
|
|
45
55
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'assert'
|
2
2
|
require 'assert/assertions'
|
3
3
|
|
4
|
+
require 'assert/utils'
|
5
|
+
|
4
6
|
module Assert::Assertions
|
5
7
|
|
6
8
|
class AssertEmptyTests < Assert::Context
|
@@ -23,7 +25,7 @@ module Assert::Assertions
|
|
23
25
|
end
|
24
26
|
|
25
27
|
should "have a fail message with custom and generic explanations" do
|
26
|
-
exp = "#{@args[1]}\nExpected #{@args[0]
|
28
|
+
exp = "#{@args[1]}\nExpected #{Assert::U.show(@args[0])} to be empty."
|
27
29
|
assert_equal exp, subject.fail_results.first.message
|
28
30
|
end
|
29
31
|
|
@@ -49,7 +51,7 @@ module Assert::Assertions
|
|
49
51
|
end
|
50
52
|
|
51
53
|
should "have a fail message with custom and generic explanations" do
|
52
|
-
exp = "#{@args[1]}\nExpected #{@args[0]
|
54
|
+
exp = "#{@args[1]}\nExpected #{Assert::U.show(@args[0])} to not be empty."
|
53
55
|
assert_equal exp, subject.fail_results.first.message
|
54
56
|
end
|
55
57
|
|
@@ -1,10 +1,12 @@
|
|
1
1
|
require 'assert'
|
2
2
|
require 'assert/assertions'
|
3
3
|
|
4
|
+
require 'assert/utils'
|
5
|
+
|
4
6
|
module Assert::Assertions
|
5
7
|
|
6
8
|
class AssertEqualTests < Assert::Context
|
7
|
-
desc "
|
9
|
+
desc "`assert_equal`"
|
8
10
|
setup do
|
9
11
|
desc = @desc = "assert equal fail desc"
|
10
12
|
args = @args = [ '1', '2', desc ]
|
@@ -23,14 +25,14 @@ module Assert::Assertions
|
|
23
25
|
end
|
24
26
|
|
25
27
|
should "have a fail message with custom and generic explanations" do
|
26
|
-
exp = "#{@args[2]}\nExpected #{@args[0]
|
28
|
+
exp = "#{@args[2]}\nExpected #{Assert::U.show(@args[0])}, not #{Assert::U.show(@args[1])}."
|
27
29
|
assert_equal exp, subject.fail_results.first.message
|
28
30
|
end
|
29
31
|
|
30
32
|
end
|
31
33
|
|
32
34
|
class AssertNotEqualTests < Assert::Context
|
33
|
-
desc "
|
35
|
+
desc "`assert_not_equal`"
|
34
36
|
setup do
|
35
37
|
desc = @desc = "assert not equal fail desc"
|
36
38
|
args = @args = [ '1', '1', desc ]
|
@@ -50,7 +52,67 @@ module Assert::Assertions
|
|
50
52
|
|
51
53
|
should "have a fail message with custom and generic explanations" do
|
52
54
|
exp = "#{@args[2]}\n"\
|
53
|
-
"#{@args[1]
|
55
|
+
"#{Assert::U.show(@args[1])} not expected to equal #{Assert::U.show(@args[0])}."
|
56
|
+
assert_equal exp, subject.fail_results.first.message
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
class DiffTests < Assert::Context
|
62
|
+
desc "with objects that should use diff when showing"
|
63
|
+
setup do
|
64
|
+
@exp_obj = "I'm a\nstring"
|
65
|
+
@act_obj = "I am a \nstring"
|
66
|
+
|
67
|
+
@exp_obj_show = Assert::U.show_for_diff(@exp_obj)
|
68
|
+
@act_obj_show = Assert::U.show_for_diff(@act_obj)
|
69
|
+
|
70
|
+
@orig_use_diff_proc = Assert.config.use_diff_proc
|
71
|
+
@orig_run_diff_proc = Assert.config.run_diff_proc
|
72
|
+
|
73
|
+
Assert.config.use_diff_proc(Assert::U.default_use_diff_proc)
|
74
|
+
Assert.config.run_diff_proc(Assert::U.syscmd_diff_proc)
|
75
|
+
end
|
76
|
+
teardown do
|
77
|
+
Assert.config.use_diff_proc(@orig_use_diff_proc)
|
78
|
+
Assert.config.run_diff_proc(@orig_run_diff_proc)
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
class AssertEqualDiffTests < DiffTests
|
84
|
+
desc "`assert_equal`"
|
85
|
+
setup do
|
86
|
+
exp_obj, act_obj = @exp_obj, @act_obj
|
87
|
+
@test = Factory.test do
|
88
|
+
assert_equal(exp_obj, act_obj)
|
89
|
+
end
|
90
|
+
@test.run
|
91
|
+
end
|
92
|
+
subject{ @test }
|
93
|
+
|
94
|
+
should "include diff output in the fail messages" do
|
95
|
+
exp = "Expected does not equal actual, diff:\n"\
|
96
|
+
"#{Assert::U.syscmd_diff_proc.call(@exp_obj_show, @act_obj_show)}"
|
97
|
+
assert_equal exp, subject.fail_results.first.message
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
class AssertNotEqualDiffTests < DiffTests
|
103
|
+
desc "`assert_not_equal`"
|
104
|
+
setup do
|
105
|
+
exp_obj, act_obj = @exp_obj, @act_obj
|
106
|
+
@test = Factory.test do
|
107
|
+
assert_not_equal(exp_obj, exp_obj)
|
108
|
+
end
|
109
|
+
@test.run
|
110
|
+
end
|
111
|
+
subject{ @test }
|
112
|
+
|
113
|
+
should "include diff output in the fail messages" do
|
114
|
+
exp = "Expected equals actual, diff:\n"\
|
115
|
+
"#{Assert::U.syscmd_diff_proc.call(@exp_obj_show, @exp_obj_show)}"
|
54
116
|
assert_equal exp, subject.fail_results.first.message
|
55
117
|
end
|
56
118
|
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'assert'
|
2
2
|
require 'assert/assertions'
|
3
3
|
|
4
|
+
require 'assert/utils'
|
5
|
+
|
4
6
|
module Assert::Assertions
|
5
7
|
|
6
8
|
class AssertFileExistsTests < Assert::Context
|
@@ -23,7 +25,7 @@ module Assert::Assertions
|
|
23
25
|
end
|
24
26
|
|
25
27
|
should "have a fail message with custom and generic explanations" do
|
26
|
-
exp = "#{@args[1]}\nExpected #{@args[0]
|
28
|
+
exp = "#{@args[1]}\nExpected #{Assert::U.show(@args[0])} to exist."
|
27
29
|
assert_equal exp, subject.fail_results.first.message
|
28
30
|
end
|
29
31
|
|
@@ -49,7 +51,7 @@ module Assert::Assertions
|
|
49
51
|
end
|
50
52
|
|
51
53
|
should "have a fail message with custom and generic explanations" do
|
52
|
-
exp = "#{@args[1]}\nExpected #{@args[0]
|
54
|
+
exp = "#{@args[1]}\nExpected #{Assert::U.show(@args[0])} to not exist."
|
53
55
|
assert_equal exp, subject.fail_results.first.message
|
54
56
|
end
|
55
57
|
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'assert'
|
2
2
|
require 'assert/assertions'
|
3
3
|
|
4
|
+
require 'assert/utils'
|
5
|
+
|
4
6
|
module Assert::Assertions
|
5
7
|
|
6
8
|
class AssertIncludesTests < Assert::Context
|
@@ -24,7 +26,7 @@ module Assert::Assertions
|
|
24
26
|
|
25
27
|
should "have a fail message with custom and generic explanations" do
|
26
28
|
exp = "#{@args[2]}\n"\
|
27
|
-
"Expected #{@args[1]
|
29
|
+
"Expected #{Assert::U.show(@args[1])} to include #{Assert::U.show(@args[0])}."
|
28
30
|
assert_equal exp, subject.fail_results.first.message
|
29
31
|
end
|
30
32
|
|
@@ -51,7 +53,7 @@ module Assert::Assertions
|
|
51
53
|
|
52
54
|
should "have a fail message with custom and generic explanations" do
|
53
55
|
exp = "#{@args[2]}\n"\
|
54
|
-
"Expected #{@args[1]
|
56
|
+
"Expected #{Assert::U.show(@args[1])} to not include #{Assert::U.show(@args[0])}."
|
55
57
|
assert_equal exp, subject.fail_results.first.message
|
56
58
|
end
|
57
59
|
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'assert'
|
2
2
|
require 'assert/assertions'
|
3
3
|
|
4
|
+
require 'assert/utils'
|
5
|
+
|
4
6
|
module Assert::Assertions
|
5
7
|
|
6
8
|
class AssertInstanceOfTests < Assert::Context
|
@@ -23,7 +25,7 @@ module Assert::Assertions
|
|
23
25
|
end
|
24
26
|
|
25
27
|
should "have a fail message with custom and generic explanations" do
|
26
|
-
exp = "#{@args[2]}\nExpected #{@args[1]
|
28
|
+
exp = "#{@args[2]}\nExpected #{Assert::U.show(@args[1])} (#{@args[1].class}) to"\
|
27
29
|
" be an instance of #{@args[0]}."
|
28
30
|
assert_equal exp, subject.fail_results.first.message
|
29
31
|
end
|
@@ -50,7 +52,7 @@ module Assert::Assertions
|
|
50
52
|
end
|
51
53
|
|
52
54
|
should "have a fail message with custom and generic explanations" do
|
53
|
-
exp = "#{@args[2]}\n#{@args[1]
|
55
|
+
exp = "#{@args[2]}\n#{Assert::U.show(@args[1])} (#{@args[1].class}) not expected to"\
|
54
56
|
" be an instance of #{@args[0]}."
|
55
57
|
assert_equal exp, subject.fail_results.first.message
|
56
58
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'assert'
|
2
2
|
require 'assert/assertions'
|
3
3
|
|
4
|
+
require 'assert/utils'
|
5
|
+
|
4
6
|
module Assert::Assertions
|
5
7
|
|
6
8
|
class AssertKindOfTests < Assert::Context
|
@@ -23,7 +25,7 @@ module Assert::Assertions
|
|
23
25
|
end
|
24
26
|
|
25
27
|
should "have a fail message with custom and generic explanations" do
|
26
|
-
exp = "#{@args[2]}\nExpected #{@args[1]
|
28
|
+
exp = "#{@args[2]}\nExpected #{Assert::U.show(@args[1])} (#{@args[1].class}) to"\
|
27
29
|
" be a kind of #{@args[0]}."
|
28
30
|
assert_equal exp, subject.fail_results.first.message
|
29
31
|
end
|
@@ -50,7 +52,7 @@ module Assert::Assertions
|
|
50
52
|
end
|
51
53
|
|
52
54
|
should "have a fail message with custom and generic explanations" do
|
53
|
-
exp = "#{@args[2]}\n#{@args[1]
|
55
|
+
exp = "#{@args[2]}\n#{Assert::U.show(@args[1])} not expected to be a kind of #{@args[0]}."
|
54
56
|
assert_equal exp, subject.fail_results.first.message
|
55
57
|
end
|
56
58
|
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'assert'
|
2
2
|
require 'assert/assertions'
|
3
3
|
|
4
|
+
require 'assert/utils'
|
5
|
+
|
4
6
|
module Assert::Assertions
|
5
7
|
|
6
8
|
class AssertMatchTests < Assert::Context
|
@@ -23,7 +25,7 @@ module Assert::Assertions
|
|
23
25
|
end
|
24
26
|
|
25
27
|
should "have a fail message with custom and generic explanations" do
|
26
|
-
exp = "#{@args[2]}\nExpected #{@args[1]
|
28
|
+
exp = "#{@args[2]}\nExpected #{Assert::U.show(@args[1])} to match #{Assert::U.show(@args[0])}."
|
27
29
|
assert_equal exp, subject.fail_results.first.message
|
28
30
|
end
|
29
31
|
|
@@ -49,7 +51,7 @@ module Assert::Assertions
|
|
49
51
|
end
|
50
52
|
|
51
53
|
should "have a fail message with custom and generic explanations" do
|
52
|
-
exp = "#{@args[2]}\n#{@args[1]
|
54
|
+
exp = "#{@args[2]}\n#{Assert::U.show(@args[1])} not expected to match #{Assert::U.show(@args[0])}."
|
53
55
|
assert_equal exp, subject.fail_results.first.message
|
54
56
|
end
|
55
57
|
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'assert'
|
2
2
|
require 'assert/assertions'
|
3
3
|
|
4
|
+
require 'assert/utils'
|
5
|
+
|
4
6
|
module Assert::Assertions
|
5
7
|
|
6
8
|
class AssertNilTests < Assert::Context
|
@@ -23,7 +25,7 @@ module Assert::Assertions
|
|
23
25
|
end
|
24
26
|
|
25
27
|
should "have a fail message with custom and generic explanations" do
|
26
|
-
exp = "#{@args[1]}\nExpected nil, not #{@args[0]
|
28
|
+
exp = "#{@args[1]}\nExpected nil, not #{Assert::U.show(@args[0])}."
|
27
29
|
assert_equal exp, subject.fail_results.first.message
|
28
30
|
end
|
29
31
|
|
@@ -49,7 +51,7 @@ module Assert::Assertions
|
|
49
51
|
end
|
50
52
|
|
51
53
|
should "have a fail message with custom and generic explanations" do
|
52
|
-
exp = "#{@args[1]}\nExpected #{@args[0]
|
54
|
+
exp = "#{@args[1]}\nExpected #{Assert::U.show(@args[0])} to not be nil."
|
53
55
|
assert_equal exp, subject.fail_results.first.message
|
54
56
|
end
|
55
57
|
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'assert'
|
2
2
|
require 'assert/assertions'
|
3
3
|
|
4
|
+
require 'assert/utils'
|
5
|
+
|
4
6
|
module Assert::Assertions
|
5
7
|
|
6
8
|
class AssertRespondToTest < Assert::Context
|
@@ -24,7 +26,7 @@ module Assert::Assertions
|
|
24
26
|
|
25
27
|
should "have a fail message with custom and generic explanations" do
|
26
28
|
exp = "#{@args[2]}\n"\
|
27
|
-
"Expected #{@args[1]
|
29
|
+
"Expected #{Assert::U.show(@args[1])} (#{@args[1].class})"\
|
28
30
|
" to respond to `#{@args[0]}`."
|
29
31
|
assert_equal exp, subject.fail_results.first.message
|
30
32
|
end
|
@@ -52,7 +54,7 @@ module Assert::Assertions
|
|
52
54
|
|
53
55
|
should "have a fail message with custom and generic explanations" do
|
54
56
|
exp = "#{@args[2]}\n"\
|
55
|
-
"#{@args[1]
|
57
|
+
"#{Assert::U.show(@args[1])} (#{@args[1].class})"\
|
56
58
|
" not expected to respond to `#{@args[0]}`."
|
57
59
|
assert_equal exp, subject.fail_results.first.message
|
58
60
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'assert'
|
2
2
|
require 'assert/assertions'
|
3
3
|
|
4
|
+
require 'assert/utils'
|
5
|
+
|
4
6
|
module Assert::Assertions
|
5
7
|
|
6
8
|
class AssertSameTest < Assert::Context
|
@@ -25,8 +27,8 @@ module Assert::Assertions
|
|
25
27
|
|
26
28
|
should "have a fail message with custom and generic explanations" do
|
27
29
|
exp = "#{@args[2]}\n"\
|
28
|
-
"Expected #{@args[1]
|
29
|
-
" to be the same as #{@args[0]
|
30
|
+
"Expected #{Assert::U.show(@args[1])} (#{@args[1].object_id})"\
|
31
|
+
" to be the same as #{Assert::U.show(@args[0])} (#{@args[0].object_id})."
|
30
32
|
assert_equal exp, subject.fail_results.first.message
|
31
33
|
end
|
32
34
|
|
@@ -54,8 +56,8 @@ module Assert::Assertions
|
|
54
56
|
|
55
57
|
should "have a fail message with custom and generic explanations" do
|
56
58
|
exp = "#{@args[2]}\n"\
|
57
|
-
"#{@args[1]
|
58
|
-
" to be the same as #{@args[0]
|
59
|
+
"#{Assert::U.show(@args[1])} (#{@args[1].object_id}) not expected"\
|
60
|
+
" to be the same as #{Assert::U.show(@args[0])} (#{@args[0].object_id})."
|
59
61
|
assert_equal exp, subject.fail_results.first.message
|
60
62
|
end
|
61
63
|
|
data/test/unit/context_tests.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
require 'assert'
|
2
2
|
require 'assert/context'
|
3
3
|
|
4
|
+
require 'assert/utils'
|
5
|
+
|
4
6
|
class Assert::Context
|
5
7
|
|
6
|
-
class
|
8
|
+
class UnitTests < Assert::Context
|
7
9
|
desc "Assert context"
|
8
10
|
setup do
|
9
11
|
@test = Factory.test
|
@@ -27,7 +29,7 @@ class Assert::Context
|
|
27
29
|
|
28
30
|
end
|
29
31
|
|
30
|
-
class SkipTests <
|
32
|
+
class SkipTests < UnitTests
|
31
33
|
desc "skip method"
|
32
34
|
setup do
|
33
35
|
@skip_msg = "I need to implement this in the future."
|
@@ -44,7 +46,7 @@ class Assert::Context
|
|
44
46
|
|
45
47
|
end
|
46
48
|
|
47
|
-
class IgnoreTests <
|
49
|
+
class IgnoreTests < UnitTests
|
48
50
|
desc "ignore method"
|
49
51
|
setup do
|
50
52
|
@ignore_msg = "Ignore this for now, will do later."
|
@@ -59,7 +61,7 @@ class Assert::Context
|
|
59
61
|
|
60
62
|
end
|
61
63
|
|
62
|
-
class PassTests <
|
64
|
+
class PassTests < UnitTests
|
63
65
|
desc "pass method"
|
64
66
|
setup do
|
65
67
|
@pass_msg = "That's right, it works."
|
@@ -74,7 +76,7 @@ class Assert::Context
|
|
74
76
|
|
75
77
|
end
|
76
78
|
|
77
|
-
class FlunkTests <
|
79
|
+
class FlunkTests < UnitTests
|
78
80
|
desc "flunk method"
|
79
81
|
setup do
|
80
82
|
@flunk_msg = "It flunked."
|
@@ -89,7 +91,7 @@ class Assert::Context
|
|
89
91
|
|
90
92
|
end
|
91
93
|
|
92
|
-
class FailTests <
|
94
|
+
class FailTests < UnitTests
|
93
95
|
desc "fail method"
|
94
96
|
setup do
|
95
97
|
@result = @context.fail
|
@@ -137,7 +139,7 @@ class Assert::Context
|
|
137
139
|
|
138
140
|
end
|
139
141
|
|
140
|
-
class AssertTests <
|
142
|
+
class AssertTests < UnitTests
|
141
143
|
desc "assert method"
|
142
144
|
setup do
|
143
145
|
@fail_desc = "my fail desc"
|
@@ -153,6 +155,17 @@ class Assert::Context
|
|
153
155
|
should "return a fail result given a `false` assertion" do
|
154
156
|
result = subject.assert(false, @fail_desc){ @what_failed }
|
155
157
|
assert_kind_of Assert::Result::Fail, result
|
158
|
+
end
|
159
|
+
|
160
|
+
should "pp the assertion value in the fail message by default" do
|
161
|
+
exp_default_what = "Failed assert: assertion was `#{Assert::U.show(false)}`."
|
162
|
+
result = subject.assert(false, @fail_desc)
|
163
|
+
|
164
|
+
assert_equal [@fail_desc, exp_default_what].join("\n"), result.message
|
165
|
+
end
|
166
|
+
|
167
|
+
should "use a custom fail message if one is given" do
|
168
|
+
result = subject.assert(false, @fail_desc){ @what_failed }
|
156
169
|
assert_equal [@fail_desc, @what_failed].join("\n"), result.message
|
157
170
|
end
|
158
171
|
|
@@ -166,23 +179,28 @@ class Assert::Context
|
|
166
179
|
|
167
180
|
end
|
168
181
|
|
169
|
-
class AssertNotTests <
|
182
|
+
class AssertNotTests < UnitTests
|
170
183
|
desc "assert_not method"
|
171
184
|
setup do
|
172
185
|
@fail_desc = "my fail desc"
|
173
|
-
|
186
|
+
end
|
187
|
+
|
188
|
+
should "return a pass result given a `false` assertion" do
|
189
|
+
result = subject.assert_not(false, @fail_desc)
|
190
|
+
assert_kind_of Assert::Result::Pass, result
|
191
|
+
assert_nil result.message
|
174
192
|
end
|
175
193
|
|
176
194
|
should "return a fail result given a `true` assertion" do
|
177
195
|
result = subject.assert_not(true, @fail_desc)
|
178
196
|
assert_kind_of Assert::Result::Fail, result
|
179
|
-
assert_equal [@fail_desc, @what_failed].join("\n"), result.message
|
180
197
|
end
|
181
198
|
|
182
|
-
should "
|
183
|
-
|
184
|
-
|
185
|
-
|
199
|
+
should "pp the assertion value in the fail message by default" do
|
200
|
+
exp_default_what = "Failed assert_not: assertion was `#{Assert::U.show(true)}`."
|
201
|
+
result = subject.assert_not(true, @fail_desc)
|
202
|
+
|
203
|
+
assert_equal [@fail_desc, exp_default_what].join("\n"), result.message
|
186
204
|
end
|
187
205
|
|
188
206
|
should "return a fail result given a \"truthy\" assertion" do
|
@@ -195,7 +213,7 @@ class Assert::Context
|
|
195
213
|
|
196
214
|
end
|
197
215
|
|
198
|
-
class SubjectTests <
|
216
|
+
class SubjectTests < UnitTests
|
199
217
|
desc "subject method"
|
200
218
|
setup do
|
201
219
|
expected = @expected = "amazing"
|
@@ -213,7 +231,7 @@ class Assert::Context
|
|
213
231
|
|
214
232
|
end
|
215
233
|
|
216
|
-
class WithBacktraceTests <
|
234
|
+
class WithBacktraceTests < UnitTests
|
217
235
|
desc "with_backtrace method"
|
218
236
|
setup do
|
219
237
|
@from_bt = ['called_from_here']
|
@@ -240,7 +258,7 @@ class Assert::Context
|
|
240
258
|
|
241
259
|
end
|
242
260
|
|
243
|
-
class InspectTests <
|
261
|
+
class InspectTests < UnitTests
|
244
262
|
desc "inspect method"
|
245
263
|
setup do
|
246
264
|
@expected = "#<#{@context.class}>"
|
data/test/unit/result_tests.rb
CHANGED
@@ -61,7 +61,8 @@ module Assert::Result
|
|
61
61
|
end
|
62
62
|
|
63
63
|
should "show only its class and message when inspected" do
|
64
|
-
exp = "#<#{subject.class}
|
64
|
+
exp = "#<#{subject.class}:#{'0x0%x' % (subject.object_id << 1)}"\
|
65
|
+
" @message=#{subject.message.inspect}>"
|
65
66
|
assert_equal exp, subject.inspect
|
66
67
|
end
|
67
68
|
|
data/test/unit/test_tests.rb
CHANGED
@@ -39,7 +39,7 @@ class Assert::Test
|
|
39
39
|
attrs_string = [:name, :context_info, :results].collect do |method|
|
40
40
|
"@#{method}=#{subject.send(method).inspect}"
|
41
41
|
end.join(" ")
|
42
|
-
expected = "#<#{subject.class} #{attrs_string}>"
|
42
|
+
expected = "#<#{subject.class}:#{'0x0%x' % (subject.object_id << 1)} #{attrs_string}>"
|
43
43
|
assert_equal expected, subject.inspect
|
44
44
|
end
|
45
45
|
|
@@ -0,0 +1,154 @@
|
|
1
|
+
require 'assert'
|
2
|
+
require 'assert/utils'
|
3
|
+
|
4
|
+
require 'tempfile'
|
5
|
+
|
6
|
+
module Assert::Utils
|
7
|
+
|
8
|
+
class UnitTests < Assert::Context
|
9
|
+
desc "Assert::Utils"
|
10
|
+
subject{ Assert::Utils }
|
11
|
+
setup do
|
12
|
+
@objs = [ 1, 'hi there', Hash.new, [:a, :b]]
|
13
|
+
end
|
14
|
+
|
15
|
+
should have_imeths :show, :show_for_diff
|
16
|
+
should have_imeths :tempfile
|
17
|
+
should have_imeths :stdlib_pp_proc, :default_use_diff_proc, :syscmd_diff_proc
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
class ShowTests < UnitTests
|
22
|
+
desc "`show`"
|
23
|
+
setup do
|
24
|
+
@orig_pp_objs = Assert.config.pp_objects
|
25
|
+
@orig_pp_proc = Assert.config.pp_proc
|
26
|
+
@new_pp_proc = Proc.new{ |input| 'herp derp' }
|
27
|
+
end
|
28
|
+
teardown do
|
29
|
+
Assert.config.pp_proc(@orig_pp_proc)
|
30
|
+
Assert.config.pp_objects(@orig_pp_objs)
|
31
|
+
end
|
32
|
+
|
33
|
+
should "use `inspect` to show objs when `pp_objects` setting is false" do
|
34
|
+
Assert.config.pp_objects(false)
|
35
|
+
|
36
|
+
@objs.each do |obj|
|
37
|
+
assert_equal obj.inspect, subject.show(obj)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
should "use `pp_proc` to show objs when `pp_objects` setting is true" do
|
42
|
+
Assert.config.pp_objects(true)
|
43
|
+
Assert.config.pp_proc(@new_pp_proc)
|
44
|
+
|
45
|
+
@objs.each do |obj|
|
46
|
+
assert_equal @new_pp_proc.call(obj), subject.show(obj)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
class ShowForDiffTests < UnitTests
|
53
|
+
desc "`show_for_diff`"
|
54
|
+
setup do
|
55
|
+
@w_newlines = { :string => "herp derp, derp herp\nherpderpedia" }
|
56
|
+
@w_obj_id = Struct.new(:a, :b).new('aye', 'bee')
|
57
|
+
end
|
58
|
+
|
59
|
+
should "call show, escaping newlines" do
|
60
|
+
exp_out = "{:string=>\"herp derp, derp herp\nherpderpedia\"}"
|
61
|
+
assert_equal exp_out, subject.show_for_diff(@w_newlines)
|
62
|
+
end
|
63
|
+
|
64
|
+
should "make any obj ids generic" do
|
65
|
+
exp_out = "#<struct #<Class:0xXXXXXX> a=\"aye\", b=\"bee\">"
|
66
|
+
assert_equal exp_out, subject.show_for_diff(@w_obj_id)
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
class TempfileTests < UnitTests
|
72
|
+
desc "`tempfile`"
|
73
|
+
|
74
|
+
should "require tempfile, open a tempfile, write the given content, and yield it" do
|
75
|
+
subject.tempfile('a-name', 'some-content') do |tmpfile|
|
76
|
+
assert_equal false, (require 'tempfile')
|
77
|
+
assert tmpfile
|
78
|
+
assert_kind_of Tempfile, tmpfile
|
79
|
+
|
80
|
+
tmpfile.pos = 0
|
81
|
+
assert_equal "some-content\n", tmpfile.read
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
class StdlibPpProcTests < UnitTests
|
88
|
+
desc "`stdlib_pp_proc`"
|
89
|
+
|
90
|
+
should "build a pp proc that uses stdlib `PP.pp` to pretty print objects" do
|
91
|
+
exp_obj_pps = @objs.map{ |o| "\n#{PP.pp(o, '', 79).strip}\n" }
|
92
|
+
act_obj_pps = @objs.map{ |o| subject.stdlib_pp_proc.call(o) }
|
93
|
+
assert_equal exp_obj_pps, act_obj_pps
|
94
|
+
|
95
|
+
cust_width = 1
|
96
|
+
exp_obj_pps = @objs.map{ |o| "\n#{PP.pp(o, '', cust_width).strip}\n" }
|
97
|
+
act_obj_pps = @objs.map{ |o| subject.stdlib_pp_proc(cust_width).call(o) }
|
98
|
+
assert_equal exp_obj_pps, act_obj_pps
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
class DefaultUseDiffProcTests < UnitTests
|
104
|
+
desc "`default_use_diff_proc`"
|
105
|
+
setup do
|
106
|
+
@longer = "i am a really long string output; use diff when working with me"
|
107
|
+
@newlines = "i have\n newlines"
|
108
|
+
end
|
109
|
+
|
110
|
+
should "be true if either output has newlines or is bigger than 29 chars" do
|
111
|
+
proc = subject.default_use_diff_proc
|
112
|
+
|
113
|
+
assert_not proc.call('', '')
|
114
|
+
assert proc.call(@longer, '')
|
115
|
+
assert proc.call(@newlines, '')
|
116
|
+
assert proc.call('', @longer)
|
117
|
+
assert proc.call('', @newlines)
|
118
|
+
assert proc.call(@longer, @newlines)
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
class SyscmdDiffProc < UnitTests
|
124
|
+
desc "`syscmd_diff_proc`"
|
125
|
+
setup do
|
126
|
+
@diff_a_file = File.join(ROOT_PATH, 'test/support/diff_a.txt')
|
127
|
+
@diff_b_file = File.join(ROOT_PATH, 'test/support/diff_b.txt')
|
128
|
+
|
129
|
+
@diff_a = File.read(@diff_a_file)
|
130
|
+
@diff_b = File.read(@diff_b_file)
|
131
|
+
end
|
132
|
+
|
133
|
+
should "use the diff syscmd to output the diff between the exp/act show output" do
|
134
|
+
exp_diff_out = `diff --unified=-1 #{@diff_a_file} #{@diff_b_file}`.tap do |out|
|
135
|
+
out.sub!(/^\-\-\- .+/, "--- expected")
|
136
|
+
out.sub!(/^\+\+\+ .+/, "+++ actual")
|
137
|
+
end
|
138
|
+
|
139
|
+
assert_equal exp_diff_out, subject.syscmd_diff_proc.call(@diff_a, @diff_b)
|
140
|
+
end
|
141
|
+
|
142
|
+
should "allow you to specify a custom syscmd" do
|
143
|
+
cust_syscmd = 'diff'
|
144
|
+
exp_diff_out = `#{cust_syscmd} #{@diff_a_file} #{@diff_b_file}`.tap do |out|
|
145
|
+
out.sub!(/^\-\-\- .+/, "--- expected")
|
146
|
+
out.sub!(/^\+\+\+ .+/, "+++ actual")
|
147
|
+
end
|
148
|
+
|
149
|
+
assert_equal exp_diff_out, subject.syscmd_diff_proc(cust_syscmd).call(@diff_a, @diff_b)
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: assert
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 2.
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
version: 2.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Kelly Redding
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2013-11-
|
19
|
+
date: 2013-11-20 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: ansi
|
@@ -63,6 +63,7 @@ files:
|
|
63
63
|
- lib/assert/runner.rb
|
64
64
|
- lib/assert/suite.rb
|
65
65
|
- lib/assert/test.rb
|
66
|
+
- lib/assert/utils.rb
|
66
67
|
- lib/assert/version.rb
|
67
68
|
- lib/assert/view.rb
|
68
69
|
- lib/assert/view/base.rb
|
@@ -71,6 +72,8 @@ files:
|
|
71
72
|
- lib/assert/view/helpers/common.rb
|
72
73
|
- log/.gitkeep
|
73
74
|
- test/helper.rb
|
75
|
+
- test/support/diff_a.txt
|
76
|
+
- test/support/diff_b.txt
|
74
77
|
- test/support/inherited_stuff.rb
|
75
78
|
- test/system/running_tests.rb
|
76
79
|
- test/unit/assert_tests.rb
|
@@ -96,6 +99,7 @@ files:
|
|
96
99
|
- test/unit/runner_tests.rb
|
97
100
|
- test/unit/suite_tests.rb
|
98
101
|
- test/unit/test_tests.rb
|
102
|
+
- test/unit/utils_tests.rb
|
99
103
|
- test/unit/view_tests.rb
|
100
104
|
- tmp/.gitkeep
|
101
105
|
homepage: http://github.com/redding/assert
|
@@ -133,6 +137,8 @@ specification_version: 3
|
|
133
137
|
summary: Test::Unit style testing framework, just better than Test::Unit.
|
134
138
|
test_files:
|
135
139
|
- test/helper.rb
|
140
|
+
- test/support/diff_a.txt
|
141
|
+
- test/support/diff_b.txt
|
136
142
|
- test/support/inherited_stuff.rb
|
137
143
|
- test/system/running_tests.rb
|
138
144
|
- test/unit/assert_tests.rb
|
@@ -158,4 +164,5 @@ test_files:
|
|
158
164
|
- test/unit/runner_tests.rb
|
159
165
|
- test/unit/suite_tests.rb
|
160
166
|
- test/unit/test_tests.rb
|
167
|
+
- test/unit/utils_tests.rb
|
161
168
|
- test/unit/view_tests.rb
|