assert 2.19.1 → 2.19.6

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 (72) hide show
  1. checksums.yaml +4 -4
  2. data/assert.gemspec +10 -7
  3. data/lib/assert.rb +18 -6
  4. data/lib/assert/actual_value.rb +8 -6
  5. data/lib/assert/assert_runner.rb +36 -17
  6. data/lib/assert/assertions.rb +83 -50
  7. data/lib/assert/cli.rb +30 -70
  8. data/lib/assert/clirb.rb +55 -0
  9. data/lib/assert/config.rb +20 -8
  10. data/lib/assert/config_helpers.rb +55 -22
  11. data/lib/assert/context.rb +14 -18
  12. data/lib/assert/context/let_dsl.rb +5 -2
  13. data/lib/assert/context/setup_dsl.rb +21 -16
  14. data/lib/assert/context/subject_dsl.rb +6 -7
  15. data/lib/assert/context/suite_dsl.rb +2 -1
  16. data/lib/assert/context/test_dsl.rb +55 -19
  17. data/lib/assert/default_suite.rb +25 -15
  18. data/lib/assert/default_view.rb +47 -30
  19. data/lib/assert/file_line.rb +6 -6
  20. data/lib/assert/macro.rb +1 -1
  21. data/lib/assert/macros/methods.rb +71 -45
  22. data/lib/assert/result.rb +111 -62
  23. data/lib/assert/runner.rb +68 -51
  24. data/lib/assert/stub.rb +42 -3
  25. data/lib/assert/suite.rb +67 -28
  26. data/lib/assert/test.rb +40 -35
  27. data/lib/assert/utils.rb +19 -10
  28. data/lib/assert/version.rb +1 -1
  29. data/lib/assert/view.rb +44 -18
  30. data/lib/assert/view_helpers.rb +100 -92
  31. data/test/helper.rb +3 -1
  32. data/test/support/factory.rb +38 -21
  33. data/test/system/stub_tests.rb +180 -144
  34. data/test/system/test_tests.rb +86 -60
  35. data/test/unit/actual_value_tests.rb +69 -50
  36. data/test/unit/assert_tests.rb +39 -22
  37. data/test/unit/assertions/assert_block_tests.rb +10 -10
  38. data/test/unit/assertions/assert_changes_tests.rb +25 -21
  39. data/test/unit/assertions/assert_empty_tests.rb +14 -12
  40. data/test/unit/assertions/assert_equal_tests.rb +26 -26
  41. data/test/unit/assertions/assert_file_exists_tests.rb +15 -13
  42. data/test/unit/assertions/assert_includes_tests.rb +10 -10
  43. data/test/unit/assertions/assert_instance_of_tests.rb +14 -14
  44. data/test/unit/assertions/assert_is_a_tests.rb +128 -0
  45. data/test/unit/assertions/assert_match_tests.rb +10 -10
  46. data/test/unit/assertions/assert_nil_tests.rb +16 -12
  47. data/test/unit/assertions/assert_raises_tests.rb +27 -20
  48. data/test/unit/assertions/assert_respond_to_tests.rb +10 -10
  49. data/test/unit/assertions/assert_same_tests.rb +24 -24
  50. data/test/unit/assertions/assert_true_false_tests.rb +32 -24
  51. data/test/unit/assertions_tests.rb +14 -9
  52. data/test/unit/config_helpers_tests.rb +15 -10
  53. data/test/unit/config_tests.rb +34 -9
  54. data/test/unit/context/setup_dsl_tests.rb +24 -14
  55. data/test/unit/context/subject_dsl_tests.rb +3 -3
  56. data/test/unit/context/suite_dsl_tests.rb +4 -4
  57. data/test/unit/context/test_dsl_tests.rb +37 -17
  58. data/test/unit/context_info_tests.rb +4 -4
  59. data/test/unit/context_tests.rb +110 -54
  60. data/test/unit/default_suite_tests.rb +10 -6
  61. data/test/unit/factory_tests.rb +2 -2
  62. data/test/unit/file_line_tests.rb +7 -7
  63. data/test/unit/macro_tests.rb +11 -11
  64. data/test/unit/result_tests.rb +47 -41
  65. data/test/unit/runner_tests.rb +29 -16
  66. data/test/unit/suite_tests.rb +37 -15
  67. data/test/unit/test_tests.rb +63 -50
  68. data/test/unit/utils_tests.rb +48 -35
  69. data/test/unit/view_helpers_tests.rb +21 -14
  70. data/test/unit/view_tests.rb +5 -5
  71. metadata +26 -11
  72. data/test/unit/assertions/assert_kind_of_tests.rb +0 -68
data/lib/assert/runner.rb CHANGED
@@ -14,21 +14,21 @@ module Assert
14
14
  @config = config
15
15
  end
16
16
 
17
- def runner; self; end
17
+ def runner
18
+ self
19
+ end
18
20
 
19
21
  def run
20
- self.on_start
21
- self.suite.on_start
22
- self.view.on_start
23
-
24
- if self.single_test?
25
- self.view.print "Running test: #{self.single_test_file_line}"
26
- elsif self.tests_to_run?
27
- self.view.print "Running tests in random order"
28
- end
29
- if self.tests_to_run?
30
- self.view.puts ", seeded with \"#{self.runner_seed}\""
22
+ on_start
23
+ suite.on_start
24
+ view.on_start
25
+
26
+ if single_test?
27
+ view.print "Running test: #{single_test_file_line}"
28
+ elsif tests_to_run?
29
+ view.print "Running tests in random order"
31
30
  end
31
+ view.puts ", seeded with \"#{runner_seed}\"" if tests_to_run?
32
32
 
33
33
  @current_running_test = nil
34
34
 
@@ -36,46 +36,46 @@ module Assert
36
36
  # (Ctrl+T on Macs), process it
37
37
  if Signal.list.keys.include?("INFO")
38
38
  Signal.trap("INFO") do
39
- self.on_info(@current_running_test)
40
- self.suite.on_info(@current_running_test)
41
- self.view.on_info(@current_running_test)
39
+ on_info(@current_running_test)
40
+ suite.on_info(@current_running_test)
41
+ view.on_info(@current_running_test)
42
42
  end
43
43
  end
44
44
 
45
45
  begin
46
- self.suite.start_time = Time.now
47
- self.suite.setups.each(&:call)
48
- tests_to_run.tap{ self.suite.clear_tests_to_run }.delete_if do |test|
46
+ suite.start_time = Time.now
47
+ suite.setups.each(&:call)
48
+ tests_to_run.tap{ suite.clear_tests_to_run }.delete_if do |test|
49
49
  @current_running_test = test
50
50
 
51
- self.before_test(test)
52
- self.suite.before_test(test)
53
- self.view.before_test(test)
51
+ before_test(test)
52
+ suite.before_test(test)
53
+ view.before_test(test)
54
54
  test.run do |result|
55
- self.on_result(result)
56
- self.suite.on_result(result)
57
- self.view.on_result(result)
55
+ on_result(result)
56
+ suite.on_result(result)
57
+ view.on_result(result)
58
58
  end
59
- self.after_test(test)
60
- self.suite.after_test(test)
61
- self.view.after_test(test)
59
+ after_test(test)
60
+ suite.after_test(test)
61
+ view.after_test(test)
62
62
 
63
63
  # always delete `test` from `tests_to_run` since it has been run
64
64
  true
65
65
  end
66
- self.suite.teardowns.each(&:call)
67
- self.suite.end_time = Time.now
68
- rescue Interrupt => err
69
- self.on_interrupt(err)
70
- self.suite.on_interrupt(err)
71
- self.view.on_interrupt(err)
72
- raise(err)
66
+ suite.teardowns.each(&:call)
67
+ suite.end_time = Time.now
68
+ rescue Interrupt => ex
69
+ on_interrupt(ex)
70
+ suite.on_interrupt(ex)
71
+ view.on_interrupt(ex)
72
+ raise(ex)
73
73
  end
74
74
 
75
- (self.fail_result_count + self.error_result_count).tap do
76
- self.view.on_finish
77
- self.suite.on_finish
78
- self.on_finish
75
+ (fail_result_count + error_result_count).tap do
76
+ view.on_finish
77
+ suite.on_finish
78
+ on_finish
79
79
  end
80
80
  end
81
81
 
@@ -84,24 +84,41 @@ module Assert
84
84
  # define callback handlers to do special behavior during the test run. These
85
85
  # will be called by the test runner
86
86
 
87
- def before_load(test_files); end
88
- def after_load; end
89
- def on_start; end
90
- def before_test(test); end
91
- def on_result(result); end
92
- def after_test(test); end
93
- def on_finish; end
94
- def on_info(test); end
95
- def on_interrupt(err); end
87
+ def before_load(test_files)
88
+ end
89
+
90
+ def after_load
91
+ end
92
+
93
+ def on_start
94
+ end
95
+
96
+ def before_test(test)
97
+ end
98
+
99
+ def on_result(result)
100
+ end
101
+
102
+ def after_test(test)
103
+ end
104
+
105
+ def on_finish
106
+ end
107
+
108
+ def on_info(test)
109
+ end
110
+
111
+ def on_interrupt(err)
112
+ end
96
113
 
97
114
  private
98
115
 
99
116
  def tests_to_run
100
- srand self.runner_seed
101
- if self.single_test?
102
- [self.suite.find_test_to_run(self.single_test_file_line)].compact
117
+ srand runner_seed
118
+ if single_test?
119
+ [suite.find_test_to_run(single_test_file_line)].compact
103
120
  else
104
- self.suite.sorted_tests_to_run{ rand self.tests_to_run_count }
121
+ suite.sorted_tests_to_run{ rand tests_to_run_count }
105
122
  end
106
123
  end
107
124
  end
data/lib/assert/stub.rb CHANGED
@@ -27,9 +27,9 @@ module Assert
27
27
  orig_caller = caller_locations
28
28
  begin
29
29
  MuchStub.stub_send(*args, &block)
30
- rescue MuchStub::NotStubbedError => err
31
- err.set_backtrace(orig_caller.map(&:to_s))
32
- raise err
30
+ rescue MuchStub::NotStubbedError => ex
31
+ ex.set_backtrace(orig_caller.map(&:to_s))
32
+ raise ex
33
33
  end
34
34
  end
35
35
 
@@ -44,4 +44,43 @@ module Assert
44
44
  def self.stub_spy(*args, &block)
45
45
  MuchStub.spy(*args, &block)
46
46
  end
47
+
48
+ StubCall = MuchStub::Call
49
+ class StubCall
50
+ def self.name
51
+ super.gsub("MuchStub::Call", "Assert::StubCall")
52
+ end
53
+
54
+ def self.to_s
55
+ super.gsub("MuchStub::Call", "Assert::StubCall")
56
+ end
57
+
58
+ def self.inspect
59
+ super.gsub("MuchStub::Call", "Assert::StubCall")
60
+ end
61
+
62
+ def inspect
63
+ super.gsub("MuchStub::Call", "Assert::StubCall")
64
+ end
65
+ end
66
+
67
+ StubCallSpy = MuchStub::CallSpy
68
+ class StubCallSpy
69
+ def self.name
70
+ super.gsub("MuchStub::CallSpy", "Assert::StubCallSpy")
71
+ end
72
+
73
+ def self.to_s
74
+ super.gsub("MuchStub::CallSpy", "Assert::StubCallSpy")
75
+ end
76
+
77
+ def self.inspect
78
+ super.gsub("MuchStub::CallSpy", "Assert::StubCallSpy")
79
+ end
80
+
81
+ # See MuchStub::CallSpy#inspect.
82
+ def inspect
83
+ "#<Assert::StubCallSpy:#{"0x0%x" % (__id__ << 1)}>"
84
+ end
85
+ end
47
86
  end
data/lib/assert/suite.rb CHANGED
@@ -27,21 +27,31 @@ module Assert
27
27
  @end_time = @start_time
28
28
  end
29
29
 
30
- def suite; self; end
30
+ def suite
31
+ self
32
+ end
31
33
 
32
34
  def setup(&block)
33
- self.setups << (block || proc{})
35
+ setups << (block || proc{})
34
36
  end
35
37
  alias_method :startup, :setup
36
38
 
37
39
  def teardown(&block)
38
- self.teardowns << (block || proc{})
40
+ teardowns << (block || proc{})
39
41
  end
40
42
  alias_method :shutdown, :teardown
41
43
 
42
- def tests_to_run?; @tests.size > 0; end
43
- def tests_to_run_count; @tests.size; end
44
- def clear_tests_to_run; @tests.clear; end
44
+ def tests_to_run?
45
+ @tests.any?
46
+ end
47
+
48
+ def tests_to_run_count
49
+ @tests.size
50
+ end
51
+
52
+ def clear_tests_to_run
53
+ @tests.clear
54
+ end
45
55
 
46
56
  def find_test_to_run(file_line)
47
57
  @tests.find{ |t| t.file_line == file_line }
@@ -51,32 +61,46 @@ module Assert
51
61
  @tests.sort.sort_by(&sort_by_proc)
52
62
  end
53
63
 
54
- def test_count; end
55
- def result_count; end
56
- def pass_result_count; end
57
- def fail_result_count; end
58
- def error_result_count; end
59
- def skip_result_count; end
60
- def ignore_result_count; end
64
+ def test_count
65
+ end
66
+
67
+ def result_count
68
+ end
69
+
70
+ def pass_result_count
71
+ end
72
+
73
+ def fail_result_count
74
+ end
75
+
76
+ def error_result_count
77
+ end
78
+
79
+ def skip_result_count
80
+ end
81
+
82
+ def ignore_result_count
83
+ end
61
84
 
62
85
  def run_time
63
86
  @end_time - @start_time
64
87
  end
65
88
 
66
89
  def test_rate
67
- get_rate(self.test_count, self.run_time)
90
+ get_rate(test_count, run_time)
68
91
  end
69
92
 
70
93
  def result_rate
71
- get_rate(self.result_count, self.run_time)
94
+ get_rate(result_count, run_time)
72
95
  end
73
96
 
74
97
  # Callbacks
75
98
 
76
- # define callback handlers to do special behavior during the test run. These
77
- # will be called by the test runner
99
+ # define callback handlers to do special behavior during the test run.
100
+ # These will be called by the test runner.
78
101
 
79
- def before_load(test_files); end
102
+ def before_load(test_files)
103
+ end
80
104
 
81
105
  # this is required to load tests into the suite, be sure to `super` if you
82
106
  # override this method
@@ -84,19 +108,34 @@ module Assert
84
108
  @tests << test
85
109
  end
86
110
 
87
- def after_load; end
88
- def on_start; end
89
- def before_test(test); end
90
- def on_result(result); end
91
- def after_test(test); end
92
- def on_finish; end
93
- def on_info(test); end
94
- def on_interrupt(err); end
111
+ def after_load
112
+ end
113
+
114
+ def on_start
115
+ end
116
+
117
+ def before_test(test)
118
+ end
119
+
120
+ def on_result(result)
121
+ end
122
+
123
+ def after_test(test)
124
+ end
125
+
126
+ def on_finish
127
+ end
128
+
129
+ def on_info(test)
130
+ end
131
+
132
+ def on_interrupt(err)
133
+ end
95
134
 
96
135
  def inspect
97
136
  "#<#{self.class}:#{"0x0%x" % (object_id << 1)}"\
98
- " test_count=#{self.test_count.inspect}"\
99
- " result_count=#{self.result_count.inspect}>"
137
+ " test_count=#{test_count.inspect}"\
138
+ " result_count=#{result_count.inspect}>"
100
139
  end
101
140
  end
102
141
  end
data/lib/assert/test.rb CHANGED
@@ -9,16 +9,16 @@ module Assert
9
9
  # Test is some code/method to run in the scope of a Context that may
10
10
  # produce results.
11
11
  def self.name_file_line_context_data(ci, name)
12
- { :name => ci.test_name(name),
13
- :file_line => ci.called_from
12
+ { name: ci.test_name(name),
13
+ file_line: ci.called_from,
14
14
  }
15
15
  end
16
16
 
17
17
  def self.for_block(name, context_info, config, &block)
18
- self.new(self.name_file_line_context_data(context_info, name).merge({
19
- :context_info => context_info,
20
- :config => config,
21
- :code => block
18
+ new(name_file_line_context_data(context_info, name).merge({
19
+ context_info: context_info,
20
+ config: config,
21
+ code: block,
22
22
  }))
23
23
  end
24
24
 
@@ -31,8 +31,13 @@ module Assert
31
31
  @file_line ||= FileLine.parse((@build_data[:file_line] || "").to_s)
32
32
  end
33
33
 
34
- def file_name; self.file_line.file; end
35
- def line_num; self.file_line.line.to_i; end
34
+ def file_name
35
+ file_line.file
36
+ end
37
+
38
+ def line_num
39
+ file_line.line.to_i
40
+ end
36
41
 
37
42
  def name
38
43
  @name ||= (@build_data[:name] || "")
@@ -51,7 +56,7 @@ module Assert
51
56
  end
52
57
 
53
58
  def context_class
54
- self.context_info.klass
59
+ context_info.klass
55
60
  end
56
61
 
57
62
  def config
@@ -64,22 +69,22 @@ module Assert
64
69
 
65
70
  def run(&result_callback)
66
71
  @result_callback = result_callback || proc{ |result| } # noop by default
67
- scope = self.context_class.new(self, self.config, @result_callback)
72
+ scope = context_class.new(self, config, @result_callback)
68
73
  start_time = Time.now
69
74
  capture_output do
70
- self.context_class.run_arounds(scope){ run_test(scope) }
75
+ context_class.run_arounds(scope){ run_test(scope) }
71
76
  end
72
77
  @result_callback = nil
73
78
  @run_time = Time.now - start_time
74
79
  end
75
80
 
76
- def <=>(other_test)
77
- self.name <=> other_test.name
81
+ def <=>(other)
82
+ name <=> other.name
78
83
  end
79
84
 
80
85
  def inspect
81
86
  attributes_string = ([:name, :context_info].collect do |attr|
82
- "@#{attr}=#{self.send(attr).inspect}"
87
+ "@#{attr}=#{send(attr).inspect}"
83
88
  end).join(" ")
84
89
  "#<#{self.class}:#{"0x0%x" % (object_id << 1)} #{attributes_string}>"
85
90
  end
@@ -89,33 +94,33 @@ module Assert
89
94
  def run_test(scope)
90
95
  begin
91
96
  # run any assert style "setup do" setups
92
- self.context_class.run_setups(scope)
97
+ context_class.run_setups(scope)
93
98
  # run any test/unit style "def setup" setups
94
99
  scope.setup if scope.respond_to?(:setup)
95
100
  # run the code block
96
- scope.instance_eval(&(self.code || proc{}))
97
- rescue Result::TestFailure => err
98
- capture_result(Result::Fail, err)
99
- rescue Result::TestSkipped => err
100
- capture_result(Result::Skip, err)
101
- rescue SignalException => err
102
- raise(err)
103
- rescue Exception => err
104
- capture_result(Result::Error, err)
101
+ scope.instance_eval(&(code || proc{}))
102
+ rescue Result::TestFailure => ex
103
+ capture_result(Result::Fail, ex)
104
+ rescue Result::TestSkipped => ex
105
+ capture_result(Result::Skip, ex)
106
+ rescue SignalException => ex
107
+ raise(ex)
108
+ rescue => ex
109
+ capture_result(Result::Error, ex)
105
110
  ensure
106
111
  begin
107
112
  # run any assert style "teardown do" teardowns
108
- self.context_class.run_teardowns(scope)
113
+ context_class.run_teardowns(scope)
109
114
  # run any test/unit style "def teardown" teardowns
110
115
  scope.teardown if scope.respond_to?(:teardown)
111
- rescue Result::TestFailure => err
112
- capture_result(Result::Fail, err)
113
- rescue Result::TestSkipped => err
114
- capture_result(Result::Skip, err)
115
- rescue SignalException => err
116
- raise(err)
117
- rescue Exception => err
118
- capture_result(Result::Error, err)
116
+ rescue Result::TestFailure => ex
117
+ capture_result(Result::Fail, ex)
118
+ rescue Result::TestSkipped => ex
119
+ capture_result(Result::Skip, ex)
120
+ rescue SignalException => ex
121
+ raise(ex)
122
+ rescue => ex
123
+ capture_result(Result::Error, ex)
119
124
  end
120
125
  end
121
126
  end
@@ -125,7 +130,7 @@ module Assert
125
130
  end
126
131
 
127
132
  def capture_output(&block)
128
- if self.config.capture_output == true
133
+ if config.capture_output == true
129
134
  orig_stdout = $stdout.clone
130
135
  $stdout = capture_io
131
136
  block.call
@@ -136,7 +141,7 @@ module Assert
136
141
  end
137
142
 
138
143
  def capture_io
139
- StringIO.new(self.output, "a+")
144
+ StringIO.new(output, "a+")
140
145
  end
141
146
  end
142
147
  end