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