assert 2.19.1 → 2.19.6

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