dohtest 0.1.55 → 0.1.56

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bfbc04ce3b53966d24d062b84ba569837f0b31e4d3a2f62a6fd1dd3b034816fa
4
- data.tar.gz: 693a91b6c27c0b262bd2313850b9cccdb67969cec40aaf2d9797cf159dd606fe
3
+ metadata.gz: feef508b9e97ca382ecec3b01e7cb0c3ff609ab1e0e010e1d7676b94220f4840
4
+ data.tar.gz: 4fadcdffa88dc7d3d958c1f7b73a38a8897c3cfc9427ac32bc12031f2cc00fa1
5
5
  SHA512:
6
- metadata.gz: 919fdd8ddd3a2e839d83ddda295340bb335842aa610c374da1938c2e73546608432b744dbd7636af5d727f570d3ad6754d0215e1fb9aba533bab7c2c7890b8fe
7
- data.tar.gz: 30857a2fc0ab018f01e271e59186fb518e1485fed9b72d56236128663720c8df136eea427fc14771653a4b76c6cbeac24aa2cde209b18da80f86b9c4275682bc
6
+ metadata.gz: fe2f5fece8efb09b7fd77bbcf4169b992b22b73f66e876fba4763a23353763c1c291d08c9988e5852cd12710d48fe079e13f24f86e9a2995cac3941da0515d82
7
+ data.tar.gz: a36eaf21dbf9bc595fbf1a3eee95a77066d00dadc76bf5ecec20bb00ba8b81f8b809eb0a031e1f9df0d69044a90d59fd59ca0effe37edccbf43afb0ed16d5361
@@ -19,20 +19,30 @@ class TestGroup
19
19
  end
20
20
  end
21
21
 
22
+ # expected arguments:
23
+ # one or more exception classes (or modules); a class matches only exactly, not a subclass
24
+ # then optionally a regex the exception's message must match
25
+ # then optionally a failure message to display if the assertion fails
22
26
  def assert_raises(*expected)
23
27
  msg = expected.pop if expected.last.is_a?(String)
28
+ message_regex = expected.pop if expected.last.is_a?(Regexp)
29
+ if expected.empty? || !expected.all? { |elem| elem.is_a?(Module) }
30
+ raise ArgumentError, "assert_raises takes exception classes, then an optional regex, then an optional failure message; got: #{expected.inspect}"
31
+ end
32
+ failure_expected = {:classes => expected, :message_regex => message_regex}
24
33
  begin
25
34
  yield
26
35
  no_exception = true
27
36
  rescue Exception => actual_excpt
28
37
  actual_class = actual_excpt.class
29
- if expected.any? { |elem| elem.instance_of?(Module) ? actual_excpt.kind_of?(elem) : elem == actual_class }
38
+ class_matched = expected.any? { |elem| elem.instance_of?(Module) ? actual_excpt.kind_of?(elem) : elem == actual_class }
39
+ if class_matched && (message_regex.nil? || actual_excpt.message.match?(message_regex))
30
40
  @runner.assertion_passed
31
41
  else
32
- raise DohTest::Failure.new(msg, :raises, expected, actual_excpt)
42
+ raise DohTest::Failure.new(msg, :raises, failure_expected, actual_excpt)
33
43
  end
34
44
  end
35
- raise DohTest::Failure.new(msg, :raises, expected, nil) if no_exception
45
+ raise DohTest::Failure.new(msg, :raises, failure_expected, nil) if no_exception
36
46
  end
37
47
 
38
48
  def assert_instance_of(expected_class, actual_object, msg = nil)
@@ -35,17 +35,25 @@ class CaptureOutput
35
35
  add(:group_name => group_name, :test_name => test_name, :error => error, :seed => seed)
36
36
  end
37
37
 
38
- def assertion_failed(group_name, test_name, failure)
39
- add(:group_name => group_name, :test_name => test_name, :failure => failure)
38
+ def assertion_failed(group_name, test_name, failure, seed)
39
+ add(:group_name => group_name, :test_name => test_name, :failure => failure, :seed => seed)
40
40
  end
41
41
 
42
42
  def assertion_passed(group_name, test_name)
43
43
  add(:group_name => group_name, :test_name => test_name)
44
44
  end
45
45
 
46
+ def callback_failed(proc_name)
47
+ add(:proc_name => proc_name)
48
+ end
49
+
50
+ def no_tests_found
51
+ add({})
52
+ end
53
+
46
54
  private
47
55
  def add(args)
48
- args[:name] = caller.first.rpartition(':in ').last[1..-2]
56
+ args[:name] = caller_locations(1, 1).first.base_label
49
57
  @events.push(args)
50
58
  end
51
59
  end
@@ -168,14 +168,25 @@ private
168
168
  end
169
169
 
170
170
  def display_raises_failure(failure)
171
+ classes = failure.expected.fetch(:classes)
172
+ message_regex = failure.expected.fetch(:message_regex)
173
+
174
+ if classes.size == 1
175
+ expected_str = classes.first.to_s
176
+ else
177
+ expected_str = "one of #{classes.join(',')}"
178
+ end
179
+
180
+ if message_regex
181
+ expected_str += " with message matching #{message_regex.inspect}"
182
+ end
171
183
  if failure.actual
172
- expected_str = if (failure.expected.size == 1) then failure.expected.first else "one of #{failure.expected.join(',')}" end
173
184
  @err_ios.puts colorize(:info, "expected: #{expected_str}; actual: #{failure.actual.class}: #{failure.actual.message}")
174
185
  DohTest::BacktraceParser.new(failure.actual.backtrace).relevant_stack.each do |path, line|
175
186
  @err_ios.puts "#{path}:#{line}"
176
187
  end
177
188
  else
178
- @err_ios.puts colorize(:info, "expected: #{failure.expected}, but no exception was raised")
189
+ @err_ios.puts colorize(:info, "expected: #{expected_str}, but no exception was raised")
179
190
  end
180
191
  end
181
192
 
@@ -0,0 +1,25 @@
1
+ require 'dohtest/group_runner'
2
+ require 'dohtest/capture_output'
3
+
4
+ module DohTest
5
+
6
+ # runs a test group with CaptureOutput, so a Minitest::Test can check the events it reports
7
+ module GroupRunnerHelper
8
+ def verify_event(expected_pairs, event)
9
+ expected_pairs.each_pair do |key, value|
10
+ assert_equal(value, event[key])
11
+ end
12
+ end
13
+
14
+ def run_group(group_klass, config_overrides = {})
15
+ @group_klass = group_klass
16
+ @output = CaptureOutput.new
17
+ @runner = GroupRunner.new(@group_klass, @output, DohTest.config.merge(config_overrides))
18
+ @runner.run
19
+ @events = @output.events
20
+ assert_equal({:name => 'group_begin', :group_name => @group_klass.to_s}, @events.shift)
21
+ verify_event({:name => 'group_end', :group_name => @group_klass.to_s}, @events.last)
22
+ end
23
+ end
24
+
25
+ end
@@ -0,0 +1,239 @@
1
+ require 'dohroot'; Doh.find_root_from_file
2
+ require 'minitest/autorun'
3
+ require 'dohtest/group_runner'
4
+ require 'dohtest/capture_output'
5
+ require File.join(Doh.root, 'test/support/group_runner_helper')
6
+
7
+ module DohTest
8
+
9
+ class TestAssertions < Minitest::Test
10
+ include GroupRunnerHelper
11
+
12
+ def verify_passed(group_klass)
13
+ run_group(group_klass)
14
+ assert_equal(4, @events.size)
15
+ assert_equal('test_begin', @events.shift[:name])
16
+ assert_equal('assertion_passed', @events.shift[:name])
17
+ assert_equal('test_end', @events.shift[:name])
18
+ verify_event({:tests_ran => 1, :tests_skipped => 0, :assertions_passed => 1, :assertions_failed => 0}, @events.shift)
19
+ end
20
+
21
+ def run_failed_group(group_klass)
22
+ run_group(group_klass)
23
+ assert_equal(4, @events.size)
24
+ assert_equal('test_begin', @events.shift[:name])
25
+ event = @events.shift
26
+ assert_equal('assertion_failed', event[:name])
27
+ assert_equal('test_end', @events.shift[:name])
28
+ verify_event({:tests_ran => 1, :tests_skipped => 0, :assertions_passed => 0, :assertions_failed => 1}, @events.shift)
29
+ assert_equal(:raises, event[:failure].assert)
30
+ return event[:failure]
31
+ end
32
+
33
+ def verify_argument_error(group_klass)
34
+ run_group(group_klass)
35
+ assert_equal(4, @events.size)
36
+ assert_equal('test_begin', @events.shift[:name])
37
+ event = @events.shift
38
+ assert_equal('test_error', event[:name])
39
+ assert_equal(ArgumentError, event[:error].class)
40
+ assert_equal('test_end', @events.shift[:name])
41
+ verify_event({:tests_ran => 1, :tests_skipped => 0, :assertions_passed => 0, :assertions_failed => 0}, @events.shift)
42
+ end
43
+
44
+ class RaisesClass < DohTest::TestGroup
45
+ def test_raises
46
+ assert_raises(ArgumentError) { raise ArgumentError }
47
+ end
48
+ end
49
+
50
+ def test_raises_class
51
+ verify_passed(RaisesClass)
52
+ end
53
+
54
+ class RaisesOneOfSeveralClasses < DohTest::TestGroup
55
+ def test_raises
56
+ assert_raises(TypeError, ArgumentError) { raise ArgumentError }
57
+ end
58
+ end
59
+
60
+ def test_raises_one_of_several_classes
61
+ verify_passed(RaisesOneOfSeveralClasses)
62
+ end
63
+
64
+ module TaggedError; end
65
+ class TaggedRuntimeError < RuntimeError
66
+ include TaggedError
67
+ end
68
+
69
+ class RaisesModule < DohTest::TestGroup
70
+ def test_raises
71
+ assert_raises(TaggedError) { raise TaggedRuntimeError }
72
+ end
73
+ end
74
+
75
+ def test_raises_module
76
+ verify_passed(RaisesModule)
77
+ end
78
+
79
+ class RaisesWrongClass < DohTest::TestGroup
80
+ def test_raises
81
+ assert_raises(TypeError) { raise ArgumentError }
82
+ end
83
+ end
84
+
85
+ def test_raises_wrong_class
86
+ failure = run_failed_group(RaisesWrongClass)
87
+ assert_equal(ArgumentError, failure.actual.class)
88
+ end
89
+
90
+ class RaisesSubclass < DohTest::TestGroup
91
+ def test_raises
92
+ assert_raises(StandardError) { raise ArgumentError }
93
+ end
94
+ end
95
+
96
+ def test_raises_subclass
97
+ failure = run_failed_group(RaisesSubclass)
98
+ assert_equal(ArgumentError, failure.actual.class)
99
+ end
100
+
101
+ class RaisesNothing < DohTest::TestGroup
102
+ def test_raises
103
+ assert_raises(ArgumentError) { nil }
104
+ end
105
+ end
106
+
107
+ def test_raises_nothing
108
+ failure = run_failed_group(RaisesNothing)
109
+ assert_nil(failure.actual)
110
+ end
111
+
112
+ class RaisesMatchingMessage < DohTest::TestGroup
113
+ def test_raises
114
+ assert_raises(ArgumentError, /abc/) { raise ArgumentError, 'xx abc xx' }
115
+ end
116
+ end
117
+
118
+ def test_raises_matching_message
119
+ verify_passed(RaisesMatchingMessage)
120
+ end
121
+
122
+ class RaisesNonMatchingMessage < DohTest::TestGroup
123
+ def test_raises
124
+ assert_raises(ArgumentError, /abc/) { raise ArgumentError, 'xyz' }
125
+ end
126
+ end
127
+
128
+ def test_raises_non_matching_message
129
+ failure = run_failed_group(RaisesNonMatchingMessage)
130
+ assert_equal('xyz', failure.actual.message)
131
+ assert_equal({:classes => [ArgumentError], :message_regex => /abc/}, failure.expected)
132
+ end
133
+
134
+ class RaisesMatchingMessageWrongClass < DohTest::TestGroup
135
+ def test_raises
136
+ assert_raises(TypeError, /abc/) { raise ArgumentError, 'abc' }
137
+ end
138
+ end
139
+
140
+ def test_raises_matching_message_wrong_class
141
+ failure = run_failed_group(RaisesMatchingMessageWrongClass)
142
+ assert_equal(ArgumentError, failure.actual.class)
143
+ end
144
+
145
+ class RaisesNothingWithRegex < DohTest::TestGroup
146
+ def test_raises
147
+ assert_raises(ArgumentError, /abc/) { nil }
148
+ end
149
+ end
150
+
151
+ def test_raises_nothing_with_regex
152
+ failure = run_failed_group(RaisesNothingWithRegex)
153
+ assert_nil(failure.actual)
154
+ end
155
+
156
+ class RaisesWithFailureMessage < DohTest::TestGroup
157
+ def test_raises
158
+ assert_raises(TypeError, 'custom message') { raise ArgumentError }
159
+ end
160
+ end
161
+
162
+ def test_raises_with_failure_message
163
+ failure = run_failed_group(RaisesWithFailureMessage)
164
+ assert_equal('custom message', failure.message)
165
+ end
166
+
167
+ class RaisesWithRegexAndFailureMessage < DohTest::TestGroup
168
+ def test_raises
169
+ assert_raises(ArgumentError, /abc/, 'custom message') { raise ArgumentError, 'xyz' }
170
+ end
171
+ end
172
+
173
+ def test_raises_with_regex_and_failure_message
174
+ failure = run_failed_group(RaisesWithRegexAndFailureMessage)
175
+ assert_equal('custom message', failure.message)
176
+ end
177
+
178
+ class RaisesNoArguments < DohTest::TestGroup
179
+ def test_raises
180
+ assert_raises { nil }
181
+ end
182
+ end
183
+
184
+ def test_raises_no_arguments
185
+ verify_argument_error(RaisesNoArguments)
186
+ end
187
+
188
+ class RaisesOnlyRegex < DohTest::TestGroup
189
+ def test_raises
190
+ assert_raises(/abc/) { nil }
191
+ end
192
+ end
193
+
194
+ def test_raises_only_regex
195
+ verify_argument_error(RaisesOnlyRegex)
196
+ end
197
+
198
+ class RaisesOnlyFailureMessage < DohTest::TestGroup
199
+ def test_raises
200
+ assert_raises('custom message') { nil }
201
+ end
202
+ end
203
+
204
+ def test_raises_only_failure_message
205
+ verify_argument_error(RaisesOnlyFailureMessage)
206
+ end
207
+
208
+ class RaisesRegexBeforeClass < DohTest::TestGroup
209
+ def test_raises
210
+ assert_raises(/abc/, ArgumentError) { nil }
211
+ end
212
+ end
213
+
214
+ def test_raises_regex_before_class
215
+ verify_argument_error(RaisesRegexBeforeClass)
216
+ end
217
+
218
+ class RaisesRegexAfterFailureMessage < DohTest::TestGroup
219
+ def test_raises
220
+ assert_raises(ArgumentError, 'custom message', /abc/) { nil }
221
+ end
222
+ end
223
+
224
+ def test_raises_regex_after_failure_message
225
+ verify_argument_error(RaisesRegexAfterFailureMessage)
226
+ end
227
+
228
+ class RaisesNonClassArgument < DohTest::TestGroup
229
+ def test_raises
230
+ assert_raises(ArgumentError, 5) { nil }
231
+ end
232
+ end
233
+
234
+ def test_raises_non_class_argument
235
+ verify_argument_error(RaisesNonClassArgument)
236
+ end
237
+ end
238
+
239
+ end
@@ -2,27 +2,12 @@ require 'dohroot'; Doh.find_root_from_file
2
2
  require 'minitest/autorun'
3
3
  require 'dohtest/group_runner'
4
4
  require 'dohtest/capture_output'
5
+ require File.join(Doh.root, 'test/support/group_runner_helper')
5
6
 
6
7
  module DohTest
7
8
 
8
9
  class TestGroupRunner < Minitest::Test
9
- def verify_event(expected_pairs, event)
10
- expected_pairs.each_pair do |key, value|
11
- assert_equal(value, event[key])
12
- end
13
- end
14
-
15
- def run_group(group_klass, grepstr = nil)
16
- @group_klass = group_klass
17
- @output = CaptureOutput.new
18
- config = if grepstr then DohTest.config.merge({:grep => grepstr}) else nil end
19
- @runner = GroupRunner.new(@group_klass, @output, config)
20
- @runner.run
21
- @events = @output.events
22
- assert_equal({:name => 'group_begin', :group_name => @group_klass.to_s}, @events.shift)
23
- verify_event({:name => 'group_end', :group_name => @group_klass.to_s}, @events.last)
24
- end
25
-
10
+ include GroupRunnerHelper
26
11
 
27
12
  class EmptyTestGroup < DohTest::TestGroup; end
28
13
  def test_empty_group
@@ -120,6 +105,39 @@ class TestGroupRunner < Minitest::Test
120
105
  assert(@group_klass.class_variable_get(:@@ran_after))
121
106
  end
122
107
 
108
+ class AssertionFailureGroup < DohTest::TestGroup
109
+ def test_failed_assertion
110
+ assert_equal(1, 2)
111
+ end
112
+ end
113
+
114
+ def test_assertion_failure
115
+ run_group(AssertionFailureGroup)
116
+ assert_equal(4, @events.size)
117
+ assert_equal('test_begin', @events.shift[:name])
118
+ event = @events.shift
119
+ assert_equal('assertion_failed', event[:name])
120
+ assert_equal(:equal, event[:failure].assert)
121
+ assert_equal('test_end', @events.shift[:name])
122
+ verify_event({:tests_ran => 1, :tests_skipped => 0, :assertions_passed => 0, :assertions_failed => 1}, @events.shift)
123
+ end
124
+
125
+ class CallbackFailureGroup < DohTest::TestGroup
126
+ def test_pass
127
+ assert(true)
128
+ end
129
+ end
130
+
131
+ def test_callback_failure
132
+ run_group(CallbackFailureGroup, :pre_group_callback => [proc { false }])
133
+ assert_equal(5, @events.size)
134
+ assert_equal('callback_failed', @events.shift[:name])
135
+ assert_equal('test_begin', @events.shift[:name])
136
+ assert_equal('assertion_passed', @events.shift[:name])
137
+ assert_equal('test_end', @events.shift[:name])
138
+ verify_event({:tests_ran => 1, :tests_skipped => 0, :assertions_passed => 1, :assertions_failed => 0}, @events.shift)
139
+ end
140
+
123
141
  class GreppingWithPass < DohTest::TestGroup
124
142
  def test_blah
125
143
  assert(true)
@@ -146,22 +164,22 @@ class TestGroupRunner < Minitest::Test
146
164
  end
147
165
 
148
166
  def test_grepping_with_pass_grep_blah
149
- run_group(GreppingWithPass, 'blah')
167
+ run_group(GreppingWithPass, :grep => 'blah')
150
168
  verify_event({:tests_ran => 4, :tests_skipped => 1, :assertions_passed => 13, :assertions_failed => 0}, @events.last)
151
169
  end
152
170
 
153
171
  def test_grepping_with_pass_grep_blee
154
- run_group(GreppingWithPass, 'blee')
172
+ run_group(GreppingWithPass, :grep => 'blee')
155
173
  verify_event({:tests_ran => 2, :tests_skipped => 3, :assertions_passed => 6, :assertions_failed => 0}, @events.last)
156
174
  end
157
175
 
158
176
  def test_grepping_with_pass_grep_bloo
159
- run_group(GreppingWithPass, 'bloo')
177
+ run_group(GreppingWithPass, :grep => 'bloo')
160
178
  verify_event({:tests_ran => 1, :tests_skipped => 4, :assertions_passed => 5, :assertions_failed => 0}, @events.last)
161
179
  end
162
180
 
163
181
  def test_grepping_with_pass_grep_zzz
164
- run_group(GreppingWithPass, 'zzz')
182
+ run_group(GreppingWithPass, :grep => 'zzz')
165
183
  verify_event({:tests_ran => 0, :tests_skipped => 5, :assertions_passed => 0, :assertions_failed => 0}, @events.last)
166
184
  end
167
185
  end
@@ -0,0 +1,20 @@
1
+ require 'dohroot'; Doh.find_root_from_file
2
+ require 'minitest/autorun'
3
+ require 'dohtest/master_runner'
4
+ require 'dohtest/capture_output'
5
+
6
+ module DohTest
7
+
8
+ class TestMasterRunner < Minitest::Test
9
+ def test_no_tests_found
10
+ output = CaptureOutput.new
11
+ runner = MasterRunner.new(output, DohTest.config.merge(:test_files => [], :seed => 1))
12
+ assert_equal(1, runner.run)
13
+ events = output.events
14
+ assert_equal(2, events.size)
15
+ assert_equal('run_begin', events.shift[:name])
16
+ assert_equal('no_tests_found', events.shift[:name])
17
+ end
18
+ end
19
+
20
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dohtest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.55
4
+ version: 0.1.56
5
5
  platform: ruby
6
6
  authors:
7
7
  - ATPSoft
@@ -62,9 +62,12 @@ files:
62
62
  - lib/dohtest/master_runner.rb
63
63
  - lib/dohtest/stream_output.rb
64
64
  - lib/dohtest/test_group.rb
65
+ - test/support/group_runner_helper.rb
66
+ - test/test_assertions.rb
65
67
  - test/test_backtrace_parser.rb
66
68
  - test/test_exit_codes.rb
67
69
  - test/test_group_runner.rb
70
+ - test/test_master_runner.rb
68
71
  homepage: https://github.com/atpsoft/dohtest
69
72
  licenses:
70
73
  - MIT
@@ -87,6 +90,9 @@ rubygems_version: 4.0.17
87
90
  specification_version: 4
88
91
  summary: minimalist unit test framework
89
92
  test_files:
93
+ - test/support/group_runner_helper.rb
94
+ - test/test_assertions.rb
90
95
  - test/test_backtrace_parser.rb
91
96
  - test/test_exit_codes.rb
92
97
  - test/test_group_runner.rb
98
+ - test/test_master_runner.rb