assert 2.19.0 → 2.19.5

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.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +4 -2
  3. data/assert.gemspec +11 -6
  4. data/bin/assert +1 -0
  5. data/lib/assert.rb +20 -6
  6. data/lib/assert/actual_value.rb +11 -6
  7. data/lib/assert/assert_runner.rb +38 -17
  8. data/lib/assert/assertions.rb +85 -50
  9. data/lib/assert/cli.rb +32 -70
  10. data/lib/assert/clirb.rb +55 -0
  11. data/lib/assert/config.rb +22 -8
  12. data/lib/assert/config_helpers.rb +57 -22
  13. data/lib/assert/context.rb +16 -18
  14. data/lib/assert/context/let_dsl.rb +8 -2
  15. data/lib/assert/context/method_missing.rb +3 -0
  16. data/lib/assert/context/setup_dsl.rb +24 -16
  17. data/lib/assert/context/subject_dsl.rb +9 -7
  18. data/lib/assert/context/suite_dsl.rb +5 -1
  19. data/lib/assert/context/test_dsl.rb +58 -19
  20. data/lib/assert/context_info.rb +2 -0
  21. data/lib/assert/default_runner.rb +2 -0
  22. data/lib/assert/default_suite.rb +27 -15
  23. data/lib/assert/default_view.rb +49 -30
  24. data/lib/assert/factory.rb +2 -0
  25. data/lib/assert/file_line.rb +8 -6
  26. data/lib/assert/macro.rb +3 -1
  27. data/lib/assert/macros/methods.rb +73 -45
  28. data/lib/assert/result.rb +114 -62
  29. data/lib/assert/runner.rb +70 -51
  30. data/lib/assert/stub.rb +44 -3
  31. data/lib/assert/suite.rb +69 -28
  32. data/lib/assert/test.rb +43 -36
  33. data/lib/assert/utils.rb +22 -11
  34. data/lib/assert/version.rb +3 -1
  35. data/lib/assert/view.rb +46 -18
  36. data/lib/assert/view_helpers.rb +102 -92
  37. data/test/helper.rb +8 -4
  38. data/test/support/factory.rb +40 -21
  39. data/test/support/inherited_stuff.rb +2 -0
  40. data/test/system/stub_tests.rb +182 -144
  41. data/test/system/test_tests.rb +88 -60
  42. data/test/unit/actual_value_tests.rb +71 -50
  43. data/test/unit/assert_tests.rb +42 -23
  44. data/test/unit/assertions/assert_block_tests.rb +12 -10
  45. data/test/unit/assertions/assert_changes_tests.rb +27 -21
  46. data/test/unit/assertions/assert_empty_tests.rb +16 -12
  47. data/test/unit/assertions/assert_equal_tests.rb +28 -26
  48. data/test/unit/assertions/assert_file_exists_tests.rb +17 -13
  49. data/test/unit/assertions/assert_includes_tests.rb +12 -10
  50. data/test/unit/assertions/assert_instance_of_tests.rb +16 -14
  51. data/test/unit/assertions/assert_is_a_tests.rb +128 -0
  52. data/test/unit/assertions/assert_match_tests.rb +12 -10
  53. data/test/unit/assertions/assert_nil_tests.rb +18 -12
  54. data/test/unit/assertions/assert_raises_tests.rb +29 -20
  55. data/test/unit/assertions/assert_respond_to_tests.rb +12 -10
  56. data/test/unit/assertions/assert_same_tests.rb +26 -24
  57. data/test/unit/assertions/assert_true_false_tests.rb +34 -24
  58. data/test/unit/assertions_tests.rb +16 -9
  59. data/test/unit/config_helpers_tests.rb +17 -10
  60. data/test/unit/config_tests.rb +36 -9
  61. data/test/unit/context/let_dsl_tests.rb +2 -0
  62. data/test/unit/context/setup_dsl_tests.rb +26 -14
  63. data/test/unit/context/subject_dsl_tests.rb +5 -3
  64. data/test/unit/context/suite_dsl_tests.rb +6 -4
  65. data/test/unit/context/test_dsl_tests.rb +39 -17
  66. data/test/unit/context_info_tests.rb +6 -4
  67. data/test/unit/context_tests.rb +112 -54
  68. data/test/unit/default_runner_tests.rb +2 -0
  69. data/test/unit/default_suite_tests.rb +12 -6
  70. data/test/unit/factory_tests.rb +4 -2
  71. data/test/unit/file_line_tests.rb +9 -7
  72. data/test/unit/macro_tests.rb +13 -11
  73. data/test/unit/result_tests.rb +49 -41
  74. data/test/unit/runner_tests.rb +33 -18
  75. data/test/unit/suite_tests.rb +39 -15
  76. data/test/unit/test_tests.rb +65 -50
  77. data/test/unit/utils_tests.rb +52 -37
  78. data/test/unit/view_helpers_tests.rb +23 -14
  79. data/test/unit/view_tests.rb +7 -5
  80. metadata +26 -11
  81. data/test/unit/assertions/assert_kind_of_tests.rb +0 -66
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "assert"
2
4
  require "assert/context_info"
3
5
 
@@ -6,20 +8,20 @@ require "assert/context"
6
8
  class Assert::ContextInfo
7
9
  class UnitTests < Assert::Context
8
10
  desc "Assert::ContextInfo"
9
- subject { unit_class }
11
+ subject{ unit_class }
10
12
 
11
- let(:unit_class) { Assert::ContextInfo }
13
+ let(:unit_class){ Assert::ContextInfo }
12
14
  end
13
15
 
14
16
  class InitTests < UnitTests
15
17
  desc "when init"
16
- subject { unit_class.new(context1, nil, @caller.first) }
18
+ subject{ unit_class.new(context1, nil, @caller.first) }
17
19
 
18
20
  setup do
19
21
  @caller = caller
20
22
  end
21
23
 
22
- let(:context1) { Assert::Context }
24
+ let(:context1){ Assert::Context }
23
25
 
24
26
  should have_readers :called_from, :klass, :file
25
27
  should have_imeths :test_name
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "assert"
2
4
  require "assert/context"
3
5
 
@@ -8,9 +10,9 @@ require "assert/utils"
8
10
  class Assert::Context
9
11
  class UnitTests < Assert::Context
10
12
  desc "Assert::Context"
11
- subject { unit_class }
13
+ subject{ unit_class }
12
14
 
13
- let(:unit_class) { Assert::Context }
15
+ let(:unit_class){ Assert::Context }
14
16
 
15
17
  # DSL methods
16
18
  should have_imeths :description, :desc, :describe, :subject, :suite, :let
@@ -25,20 +27,23 @@ class Assert::Context
25
27
 
26
28
  class InitTests < UnitTests
27
29
  desc "when init"
28
- subject { context_class1.new(test1, test1.config, result_callback1) }
30
+ subject{ context_class1.new(test1, test1.config, result_callback1) }
29
31
 
30
32
  setup do
31
33
  @callback_result = nil
32
34
  end
33
35
 
34
- let(:test1) { Factory.test }
35
- let(:context_class1) { test1.context_class }
36
- let(:test_results1) { [] }
37
- let(:result_callback1) {
38
- proc { |result| @callback_result = result; test_results1 << result }
39
- }
40
- let(:halt_config1) { Assert::Config.new(:halt_on_fail => true) }
41
- let(:msg1) { Factory.string }
36
+ let(:test1){ Factory.test }
37
+ let(:context_class1){ test1.context_class }
38
+ let(:test_results1){ [] }
39
+ let(:result_callback1) do
40
+ proc do |result|
41
+ @callback_result = result
42
+ test_results1 << result
43
+ end
44
+ end
45
+ let(:halt_config1){ Assert::Config.new(halt_on_fail: true) }
46
+ let(:msg1){ Factory.string }
42
47
 
43
48
  should have_imeths :assert, :assert_not, :refute, :assert_that
44
49
  should have_imeths :pass, :ignore, :fail, :flunk, :skip
@@ -46,7 +51,8 @@ class Assert::Context
46
51
 
47
52
  should "collect context info" do
48
53
  test = @__assert_running_test__
49
- assert_that(test.context_info.file).matches(/test\/unit\/context_tests.rb$/)
54
+ assert_that(test.context_info.file)
55
+ .matches(%r{test/unit/context_tests.rb$})
50
56
  assert_that(test.context_info.klass).equals(self.class)
51
57
  end
52
58
 
@@ -58,7 +64,9 @@ class Assert::Context
58
64
  with_backtrace(caller) do
59
65
  assert_that(result.with_bt_set?).is_true
60
66
 
61
- exp = Assert::Result::Backtrace.to_s(exp_with_bt+[(result.backtrace.filtered.first)])
67
+ exp =
68
+ Assert::Result::Backtrace.to_s(exp_with_bt +
69
+ [(result.backtrace.filtered.first)])
62
70
  assert_that(result.trace).equals(exp)
63
71
  assert_that(result.src_line).equals(exp_with_bt.first)
64
72
  end
@@ -69,7 +77,8 @@ class Assert::Context
69
77
  assert_that(result.with_bt_set?).is_false
70
78
 
71
79
  assert_that(result.trace).equals(result.src_line)
72
- assert_that(result.src_line).equals(result.backtrace.filtered.first.to_s)
80
+ assert_that(result.src_line)
81
+ .equals(result.backtrace.filtered.first.to_s)
73
82
  end
74
83
  end
75
84
  end
@@ -78,7 +87,12 @@ class Assert::Context
78
87
  desc "skip method"
79
88
 
80
89
  setup do
81
- begin; subject.skip(msg1); rescue StandardError => @exception; end
90
+ @exception =
91
+ begin
92
+ subject.skip(msg1)
93
+ rescue => ex
94
+ ex
95
+ end
82
96
  @result = Factory.skip_result(@exception)
83
97
  end
84
98
 
@@ -96,7 +110,12 @@ class Assert::Context
96
110
  assert_that(@exception.backtrace.size).does_not_equal(1)
97
111
 
98
112
  called_from = Factory.string
99
- begin; subject.skip(msg1, called_from); rescue StandardError => exception; end
113
+ exception =
114
+ begin
115
+ subject.skip(msg1, called_from)
116
+ rescue => ex
117
+ ex
118
+ end
100
119
  assert_that(exception.backtrace.size).equals(1)
101
120
  assert_that(exception.backtrace.first).equals(called_from)
102
121
  end
@@ -178,14 +197,20 @@ class Assert::Context
178
197
 
179
198
  class HaltOnFailTests < InitTests
180
199
  desc "failing when halting on fails"
181
- subject { context_class1.new(test1, halt_config1, result_callback1) }
200
+ subject{ context_class1.new(test1, halt_config1, result_callback1) }
182
201
 
183
202
  should "raise an exception with the failure's message" do
184
- begin; subject.fail(msg1); rescue StandardError => err; end
185
- assert_that(err).is_kind_of(Assert::Result::TestFailure)
186
- assert_that(err.message).equals(msg1)
187
-
188
- result = Assert::Result::Fail.for_test(Factory.test("something"), err)
203
+ exception =
204
+ begin
205
+ subject.fail(msg1)
206
+ rescue => ex
207
+ ex
208
+ end
209
+ assert_that(exception).is_kind_of(Assert::Result::TestFailure)
210
+ assert_that(exception.message).equals(msg1)
211
+
212
+ result =
213
+ Assert::Result::Fail.for_test(Factory.test("something"), exception)
189
214
  assert_that(result.message).equals(msg1)
190
215
  end
191
216
 
@@ -197,7 +222,7 @@ class Assert::Context
197
222
  class AssertTests < InitTests
198
223
  desc "assert method"
199
224
 
200
- let(:what_failed) { Factory.string }
225
+ let(:what_failed){ Factory.string }
201
226
 
202
227
  should "return a pass result given a `true` assertion" do
203
228
  result = subject.assert(true, msg1){ what_failed }
@@ -211,7 +236,8 @@ class Assert::Context
211
236
  end
212
237
 
213
238
  should "pp the assertion value in the fail message by default" do
214
- exp_def_what = "Failed assert: assertion was `#{Assert::U.show(false, test1.config)}`."
239
+ exp_def_what =
240
+ "Failed assert: assertion was `#{Assert::U.show(false, test1.config)}`."
215
241
  result = subject.assert(false, msg1)
216
242
 
217
243
  assert_that(result.message).equals([msg1, exp_def_what].join("\n"))
@@ -246,7 +272,9 @@ class Assert::Context
246
272
  end
247
273
 
248
274
  should "pp the assertion value in the fail message by default" do
249
- exp_def_what = "Failed assert_not: assertion was `#{Assert::U.show(true, test1.config)}`."
275
+ exp_def_what =
276
+ "Failed assert_not: "\
277
+ "assertion was `#{Assert::U.show(true, test1.config)}`."
250
278
  result = subject.assert_not(true, msg1)
251
279
 
252
280
  assert_that(result.message).equals([msg1, exp_def_what].join("\n"))
@@ -265,32 +293,32 @@ class Assert::Context
265
293
  desc "`assert_that` method"
266
294
 
267
295
  setup do
268
- Assert.stub_tap_on_call(Assert::ActualValue, :new) { |_, call|
296
+ Assert.stub_tap_on_call(Assert::ActualValue, :new) do |_, call|
269
297
  @actual_value_new_call = call
270
- }
298
+ end
271
299
  end
272
300
 
273
- let(:actual_value) { Factory.string }
301
+ let(:actual_value){ Factory.string }
274
302
 
275
303
  should "build an Assert::ActualValue" do
276
304
  assert_instance_of Assert::ActualValue, subject.assert_that(actual_value)
277
305
  assert_equal [actual_value], @actual_value_new_call.pargs
278
- assert_equal({ context: subject }, @actual_value_new_call.kargs)
306
+ assert_equal({ context: subject }, @actual_value_new_call.kargs)
279
307
  end
280
308
  end
281
309
 
282
310
  class SubjectTests < InitTests
283
311
  desc "subject method"
284
- subject { context_class1.new(test1, test1.config, proc{ |result| }) }
312
+ subject{ context_class1.new(test1, test1.config, proc{ |result| }) }
285
313
 
286
314
  setup do
287
315
  expected = expected1
288
- context_class1.subject { @something = expected }
316
+ context_class1.subject{ @something = expected }
289
317
  @subject = subject.subject
290
318
  end
291
319
 
292
- let(:context_class1) { Factory.modes_off_context_class }
293
- let(:expected1) { Factory.string }
320
+ let(:context_class1){ Factory.modes_off_context_class }
321
+ let(:expected1){ Factory.string }
294
322
 
295
323
  should "instance evaluate the block set with the class setup method" do
296
324
  assert_that(@subject).equals(expected1)
@@ -300,8 +328,17 @@ class Assert::Context
300
328
  class PendingTests < InitTests
301
329
  desc "`pending` method"
302
330
 
303
- let(:block2) { proc { fail; pass; } }
304
- let(:block1) { block = block2; proc { pending(&block) } } # test nesting
331
+ let(:block2) do
332
+ proc do
333
+ fail # rubocop:disable Style/SignalException
334
+ pass # rubocop:disable Lint/UnreachableCode
335
+ end
336
+ end
337
+ # test nesting
338
+ let(:block1) do
339
+ block = block2
340
+ proc{ pending(&block) }
341
+ end
305
342
 
306
343
  should "make fails skips and make passes fails" do
307
344
  subject.fail "not affected"
@@ -324,29 +361,42 @@ class Assert::Context
324
361
 
325
362
  class PendingWithHaltOnFailTests < PendingTests
326
363
  desc "when halting on fails"
327
- subject { context_class1.new(test1, halt_config1, result_callback1) }
364
+ subject{ context_class1.new(test1, halt_config1, result_callback1) }
328
365
 
329
366
  should "make fails skips and stop the test" do
330
- begin; subject.pending(&block1); rescue StandardError => err; end
331
- assert_that(err).is_kind_of(Assert::Result::TestSkipped)
332
- assert_that(err.message).includes("Pending fail")
333
-
334
- assert_that(test_results1.size).equals(0) # it halted before the pending pass
367
+ exception =
368
+ begin
369
+ subject.pending(&block1)
370
+ rescue => ex
371
+ ex
372
+ end
373
+ assert_that(exception).is_kind_of(Assert::Result::TestSkipped)
374
+ assert_that(exception.message).includes("Pending fail")
375
+
376
+ # it halted before the pending pass
377
+ assert_that(test_results1.size).equals(0)
335
378
  end
336
379
  end
337
380
 
338
381
  class WithBacktraceTests < InitTests
339
382
  desc "`with_backtrace` method"
340
383
 
341
- let(:from_bt1) { ["called_from_here", Factory.string] }
342
- let(:from_block1) { proc { ignore; fail; pass; skip "todo"; } }
384
+ let(:from_bt1){ ["called_from_here", Factory.string] }
385
+ let(:from_block1) do
386
+ proc do
387
+ ignore
388
+ fail # rubocop:disable Style/SignalException
389
+ pass # rubocop:disable Lint/UnreachableCode
390
+ skip "todo"
391
+ end
392
+ end
343
393
 
344
394
  should "alter non-error block results' bt with given bt's first line" do
345
395
  subject.fail "not affected"
346
396
  begin
347
397
  subject.with_backtrace(from_bt1, &from_block1)
348
- rescue Assert::Result::TestSkipped => e
349
- test_results1 << Assert::Result::Skip.for_test(test1, e)
398
+ rescue Assert::Result::TestSkipped => ex
399
+ test_results1 << Assert::Result::Skip.for_test(test1, ex)
350
400
  end
351
401
 
352
402
  assert_that(test_results1.size).equals(5)
@@ -365,21 +415,29 @@ class Assert::Context
365
415
  class WithNestedBacktraceTests < InitTests
366
416
  desc "`with_backtrace` method nested"
367
417
 
368
- let(:from_bt1) { ["called_from_here 1", Factory.string] }
369
- let(:from_bt2) { ["called_from_here 2", Factory.string] }
370
- let(:from_block2) { proc { ignore; fail; pass; skip "todo"; } }
371
- let(:from_block1) {
418
+ let(:from_bt1){ ["called_from_here 1", Factory.string] }
419
+ let(:from_bt2){ ["called_from_here 2", Factory.string] }
420
+ let(:from_block2) do
421
+ proc do
422
+ ignore
423
+ fail # rubocop:disable Style/SignalException
424
+ pass # rubocop:disable Lint/UnreachableCode
425
+ skip "todo"
426
+ end
427
+ end
428
+ let(:from_block1) do
372
429
  from_bt = from_bt2
373
430
  from_block = from_block2
374
- proc { with_backtrace(from_bt, &from_block) }
375
- }
431
+ proc{ with_backtrace(from_bt, &from_block) }
432
+ end
376
433
 
377
- should "alter non-error block results' bt with nested wbt accrued first lines" do
434
+ should "alter non-error block results' bt with nested wbt accrued "\
435
+ "first lines" do
378
436
  subject.fail "not affected"
379
437
  begin
380
438
  subject.with_backtrace(from_bt1, &from_block1)
381
- rescue Assert::Result::TestSkipped => e
382
- test_results1 << Assert::Result::Skip.for_test(test1, e)
439
+ rescue Assert::Result::TestSkipped => ex
440
+ test_results1 << Assert::Result::Skip.for_test(test1, ex)
383
441
  end
384
442
 
385
443
  assert_that(test_results1.size).equals(5)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "assert"
2
4
  require "assert/default_runner"
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "assert"
2
4
  require "assert/default_suite"
3
5
 
@@ -6,18 +8,22 @@ require "assert/suite"
6
8
  class Assert::DefaultSuite
7
9
  class UnitTests < Assert::Context
8
10
  desc "Assert::DefaultSuite"
9
- subject { unit_class }
11
+ subject{ unit_class }
10
12
 
11
- let(:unit_class) { Assert::DefaultSuite }
13
+ let(:unit_class){ Assert::DefaultSuite }
12
14
  end
13
15
 
14
16
  class InitTests < UnitTests
15
17
  desc "when init"
16
- subject { unit_class.new(config1) }
18
+ subject{ unit_class.new(config1) }
19
+
20
+ let(:ci1){ Factory.context_info(Factory.modes_off_context_class) }
21
+ let(:test1){ Factory.test(Factory.string, ci1){} }
22
+ let(:config1){ Factory.modes_off_config }
17
23
 
18
- let(:ci1) { Factory.context_info(Factory.modes_off_context_class) }
19
- let(:test1) { Factory.test(Factory.string, ci1) { } }
20
- let(:config1) { Factory.modes_off_config }
24
+ should have_readers :test_count, :result_count, :pass_result_count
25
+ should have_readers :fail_result_count, :error_result_count
26
+ should have_readers :skip_result_count, :ignore_result_count
21
27
 
22
28
  should "be a Suite" do
23
29
  assert_that(subject).is_kind_of(Assert::Suite)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "assert"
2
4
  require "assert/factory"
3
5
 
@@ -6,9 +8,9 @@ require "much-factory"
6
8
  module Assert::Factory
7
9
  class UnitTests < Assert::Context
8
10
  desc "Assert::Factory"
9
- subject { unit_class }
11
+ subject{ unit_class }
10
12
 
11
- let(:unit_class) { Assert::Factory }
13
+ let(:unit_class){ Assert::Factory }
12
14
 
13
15
  should "include and extend MuchFactory" do
14
16
  assert_that(subject).includes(MuchFactory)
@@ -1,22 +1,24 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "assert"
2
4
  require "assert/file_line"
3
5
 
4
6
  class Assert::FileLine
5
7
  class UnitTests < Assert::Context
6
8
  desc "Assert::FileLine"
7
- subject { unit_class }
9
+ subject{ unit_class }
8
10
 
9
- let(:unit_class) { Assert::FileLine }
11
+ let(:unit_class){ Assert::FileLine }
10
12
 
11
- let(:file1) { "#{Factory.path}_tests.rb" }
12
- let(:line1) { Factory.integer.to_s }
13
+ let(:file1){ "#{Factory.path}_tests.rb" }
14
+ let(:line1){ Factory.integer.to_s }
13
15
 
14
16
  should have_imeths :parse
15
17
 
16
18
  should "know how to parse and init from a file line path string" do
17
19
  file_line_path = [
18
20
  "#{file1}:#{line1}",
19
- "#{file1}:#{line1} #{Factory.string}"
21
+ "#{file1}:#{line1} #{Factory.string}",
20
22
  ].sample
21
23
  file_line = subject.parse(file_line_path)
22
24
 
@@ -45,7 +47,7 @@ class Assert::FileLine
45
47
 
46
48
  class InitTests < UnitTests
47
49
  desc "when init"
48
- subject { unit_class.new(file1, line1) }
50
+ subject{ unit_class.new(file1, line1) }
49
51
 
50
52
  should have_readers :file, :line
51
53
 
@@ -71,7 +73,7 @@ class Assert::FileLine
71
73
  no = unit_class.new("#{Factory.path}_tests.rb", Factory.integer.to_s)
72
74
 
73
75
  assert_that(subject).equals(yes)
74
- assert_not_equal no, subject
76
+ assert_not_equal no, subject
75
77
  end
76
78
  end
77
79
  end