assert 2.19.2 → 2.19.3

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 +17 -66
  8. data/lib/assert/clirb.rb +55 -0
  9. data/lib/assert/config.rb +7 -7
  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 +4 -4
  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 +10 -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
@@ -3,6 +3,7 @@
3
3
  require "benchmark"
4
4
  require "set"
5
5
  require "assert/assert_runner"
6
+ require "assert/clirb"
6
7
  require "assert/version"
7
8
 
8
9
  module Assert
@@ -24,13 +25,17 @@ module Assert
24
25
  end
25
26
 
26
27
  def self.bench(start_msg, &block)
27
- if !Assert.config.debug
28
- block.call; return
28
+ unless Assert.config.debug
29
+ block.call
30
+ return
29
31
  end
32
+
30
33
  print debug_start_msg(start_msg)
31
- RoundedMillisecondTime.new(Benchmark.measure(&block).real).tap do |time_in_ms|
32
- puts debug_finish_msg(time_in_ms)
33
- end
34
+ RoundedMillisecondTime
35
+ .new(Benchmark.measure(&block).real)
36
+ .tap do |time_in_ms|
37
+ puts debug_finish_msg(time_in_ms)
38
+ end
34
39
  end
35
40
 
36
41
  def initialize(*args)
@@ -72,13 +77,13 @@ module Assert
72
77
  puts help
73
78
  rescue CLIRB::VersionExit
74
79
  puts Assert::VERSION
75
- rescue CLIRB::Error => exception
76
- puts "#{exception.message}\n\n"
77
- puts Assert.config.debug ? exception.backtrace.join("\n") : help
80
+ rescue CLIRB::Error => ex
81
+ puts "#{ex.message}\n\n"
82
+ puts Assert.config.debug ? ex.backtrace.join("\n") : help
78
83
  exit(1)
79
- rescue StandardError => exception
80
- puts "#{exception.class}: #{exception.message}"
81
- puts exception.backtrace.join("\n")
84
+ rescue => ex
85
+ puts "#{ex.class}: #{ex.message}"
86
+ puts ex.backtrace.join("\n")
82
87
  exit(1)
83
88
  end
84
89
  exit(0)
@@ -93,63 +98,9 @@ module Assert
93
98
 
94
99
  module RoundedMillisecondTime
95
100
  ROUND_PRECISION = 3
96
- ROUND_MODIFIER = 10 ** ROUND_PRECISION
101
+ ROUND_MODIFIER = 10**ROUND_PRECISION
97
102
  def self.new(time_in_seconds)
98
103
  (time_in_seconds * 1000 * ROUND_MODIFIER).to_i / ROUND_MODIFIER.to_f
99
104
  end
100
105
  end
101
-
102
- class CLIRB # Version 1.1.0, https://github.com/redding/cli.rb
103
- Error = Class.new(RuntimeError);
104
- HelpExit = Class.new(RuntimeError); VersionExit = Class.new(RuntimeError)
105
- attr_reader :argv, :args, :opts, :data
106
-
107
- def initialize(&block)
108
- @options = []; instance_eval(&block) if block
109
- require "optparse"
110
- @data, @args, @opts = [], [], {}; @parser = OptionParser.new do |p|
111
- p.banner = ""; @options.each do |o|
112
- @opts[o.name] = o.value; p.on(*o.parser_args){ |v| @opts[o.name] = v }
113
- end
114
- p.on_tail("--version", ""){ |v| raise VersionExit, v.to_s }
115
- p.on_tail("--help", ""){ |v| raise HelpExit, v.to_s }
116
- end
117
- end
118
-
119
- def option(*args); @options << Option.new(*args); end
120
- def parse!(argv)
121
- @args = (argv || []).dup.tap do |args_list|
122
- begin; @parser.parse!(args_list)
123
- rescue OptionParser::ParseError => err; raise Error, err.message; end
124
- end; @data = @args + [@opts]
125
- end
126
- def to_s; @parser.to_s; end
127
- def inspect
128
- "#<#{self.class}:#{"0x0%x" % (object_id << 1)} @data=#{@data.inspect}>"
129
- end
130
-
131
- class Option
132
- attr_reader :name, :opt_name, :desc, :abbrev, :value, :klass, :parser_args
133
-
134
- def initialize(name, desc = nil, abbrev: nil, value: nil)
135
- @name, @desc = name, desc || ""
136
- @opt_name, @abbrev = parse_name_values(name, abbrev)
137
- @value, @klass = gvalinfo(value)
138
- @parser_args = if [TrueClass, FalseClass, NilClass].include?(@klass)
139
- ["-#{@abbrev}", "--[no-]#{@opt_name}", @desc]
140
- else
141
- ["-#{@abbrev}", "--#{@opt_name} VALUE", @klass, @desc]
142
- end
143
- end
144
-
145
- private
146
-
147
- def parse_name_values(name, custom_abbrev)
148
- [ (processed_name = name.to_s.strip.downcase).gsub("_", "-"),
149
- custom_abbrev || processed_name.gsub(/[^a-z]/, "").chars.first || "a"
150
- ]
151
- end
152
- def gvalinfo(v); v.kind_of?(Class) ? [nil,v] : [v,v.class]; end
153
- end
154
- end
155
106
  end
@@ -0,0 +1,55 @@
1
+ module Assert
2
+ class CLIRB # Version 1.1.0, https://github.com/redding/cli.rb
3
+ Error = Class.new(RuntimeError);
4
+ HelpExit = Class.new(RuntimeError); VersionExit = Class.new(RuntimeError)
5
+ attr_reader :argv, :args, :opts, :data
6
+
7
+ def initialize(&block)
8
+ @options = []; instance_eval(&block) if block
9
+ require "optparse"
10
+ @data, @args, @opts = [], [], {}; @parser = OptionParser.new do |p|
11
+ p.banner = ""; @options.each do |o|
12
+ @opts[o.name] = o.value; p.on(*o.parser_args){ |v| @opts[o.name] = v }
13
+ end
14
+ p.on_tail("--version", ""){ |v| raise VersionExit, v.to_s }
15
+ p.on_tail("--help", ""){ |v| raise HelpExit, v.to_s }
16
+ end
17
+ end
18
+
19
+ def option(*args); @options << Option.new(*args); end
20
+ def parse!(argv)
21
+ @args = (argv || []).dup.tap do |args_list|
22
+ begin; @parser.parse!(args_list)
23
+ rescue OptionParser::ParseError => err; raise Error, err.message; end
24
+ end; @data = @args + [@opts]
25
+ end
26
+ def to_s; @parser.to_s; end
27
+ def inspect
28
+ "#<#{self.class}:#{"0x0%x" % (object_id << 1)} @data=#{@data.inspect}>"
29
+ end
30
+
31
+ class Option
32
+ attr_reader :name, :opt_name, :desc, :abbrev, :value, :klass, :parser_args
33
+
34
+ def initialize(name, desc = nil, abbrev: nil, value: nil)
35
+ @name, @desc = name, desc || ""
36
+ @opt_name, @abbrev = parse_name_values(name, abbrev)
37
+ @value, @klass = gvalinfo(value)
38
+ @parser_args = if [TrueClass, FalseClass, NilClass].include?(@klass)
39
+ ["-#{@abbrev}", "--[no-]#{@opt_name}", @desc]
40
+ else
41
+ ["-#{@abbrev}", "--#{@opt_name} VALUE", @klass, @desc]
42
+ end
43
+ end
44
+
45
+ private
46
+
47
+ def parse_name_values(name, custom_abbrev)
48
+ [ (processed_name = name.to_s.strip.downcase).gsub("_", "-"),
49
+ custom_abbrev || processed_name.gsub(/[^a-z]/, "").chars.first || "a"
50
+ ]
51
+ end
52
+ def gvalinfo(v); v.kind_of?(Class) ? [nil,v] : [v,v.class]; end
53
+ end
54
+ end
55
+ end
@@ -11,7 +11,7 @@ module Assert
11
11
  def self.settings(*items)
12
12
  items.each do |item|
13
13
  define_method(item) do |*args|
14
- if !(value = args.size > 1 ? args : args.first).nil?
14
+ unless (value = args.size > 1 ? args : args.first).nil?
15
15
  instance_variable_set("@#{item}", value)
16
16
  end
17
17
  instance_variable_get("@#{item}")
@@ -53,30 +53,30 @@ module Assert
53
53
  @list = false
54
54
  @debug = false
55
55
 
56
- self.apply(settings || {})
56
+ apply(settings || {})
57
57
  end
58
58
 
59
59
  def apply(settings)
60
60
  settings.keys.each do |name|
61
- if !settings[name].nil? && self.respond_to?(name.to_s)
62
- self.send(name.to_s, settings[name])
61
+ if !settings[name].nil? && respond_to?(name.to_s)
62
+ send(name.to_s, settings[name])
63
63
  end
64
64
  end
65
65
  @single_test_file_line = nil
66
66
  end
67
67
 
68
68
  def single_test?
69
- !self.single_test.empty?
69
+ !single_test.empty?
70
70
  end
71
71
 
72
72
  def single_test_file_line
73
73
  @single_test_file_line ||= Assert::FileLine.parse(
74
- File.expand_path(self.single_test, Dir.pwd)
74
+ File.expand_path(single_test, Dir.pwd),
75
75
  )
76
76
  end
77
77
 
78
78
  def single_test_file_path
79
- self.single_test_file_line.file if self.single_test_file_line
79
+ single_test_file_line&.file
80
80
  end
81
81
  end
82
82
  end
@@ -2,35 +2,68 @@
2
2
 
3
3
  module Assert
4
4
  module ConfigHelpers
5
- def runner; self.config.runner; end
6
- def suite; self.config.suite; end
7
- def view; self.config.view; end
5
+ def runner
6
+ config.runner
7
+ end
8
+
9
+ def suite
10
+ config.suite
11
+ end
12
+
13
+ def view
14
+ config.view
15
+ end
8
16
 
9
17
  def runner_seed
10
- self.config.runner_seed
18
+ config.runner_seed
11
19
  end
12
20
 
13
21
  def single_test?
14
- self.config.single_test?
22
+ config.single_test?
15
23
  end
16
24
 
17
25
  def single_test_file_line
18
- self.config.single_test_file_line
26
+ config.single_test_file_line
19
27
  end
20
28
 
21
- def tests_to_run?; self.config.suite.tests_to_run?; end
22
- def tests_to_run_count; self.config.suite.tests_to_run_count; end
29
+ def tests_to_run?
30
+ config.suite.tests_to_run?
31
+ end
23
32
 
24
- def test_count; self.config.suite.test_count; end
25
- def result_count; self.config.suite.result_count; end
26
- def pass_result_count; self.config.suite.pass_result_count; end
27
- def fail_result_count; self.config.suite.fail_result_count; end
28
- def error_result_count; self.config.suite.error_result_count; end
29
- def skip_result_count; self.config.suite.skip_result_count; end
30
- def ignore_result_count; self.config.suite.ignore_result_count; end
33
+ def tests_to_run_count
34
+ config.suite.tests_to_run_count
35
+ end
36
+
37
+ def test_count
38
+ config.suite.test_count
39
+ end
40
+
41
+ def result_count
42
+ config.suite.result_count
43
+ end
44
+
45
+ def pass_result_count
46
+ config.suite.pass_result_count
47
+ end
48
+
49
+ def fail_result_count
50
+ config.suite.fail_result_count
51
+ end
52
+
53
+ def error_result_count
54
+ config.suite.error_result_count
55
+ end
56
+
57
+ def skip_result_count
58
+ config.suite.skip_result_count
59
+ end
60
+
61
+ def ignore_result_count
62
+ config.suite.ignore_result_count
63
+ end
31
64
 
32
65
  def all_pass?
33
- self.pass_result_count == self.result_count
66
+ pass_result_count == result_count
34
67
  end
35
68
 
36
69
  def formatted_run_time(run_time, format = "%.6f")
@@ -46,29 +79,29 @@ module Assert
46
79
  end
47
80
 
48
81
  def formatted_suite_run_time(format = "%.6f")
49
- formatted_run_time(self.config.suite.run_time, format)
82
+ formatted_run_time(config.suite.run_time, format)
50
83
  end
51
84
 
52
85
  def formatted_suite_test_rate(format = "%.6f")
53
- formatted_test_rate(self.config.suite.test_rate, format)
86
+ formatted_test_rate(config.suite.test_rate, format)
54
87
  end
55
88
 
56
89
  def formatted_suite_result_rate(format = "%.6f")
57
- formatted_result_rate(self.config.suite.result_rate, format)
90
+ formatted_result_rate(config.suite.result_rate, format)
58
91
  end
59
92
 
60
93
  def show_test_profile_info?
61
- !!self.config.profile
94
+ !!config.profile
62
95
  end
63
96
 
64
97
  def show_test_verbose_info?
65
- !!self.config.verbose
98
+ !!config.verbose
66
99
  end
67
100
 
68
101
  # return a list of result type symbols that have actually occurred
69
102
  def ocurring_result_types
70
103
  @result_types ||= [:pass, :fail, :ignore, :skip, :error].select do |sym|
71
- self.send("#{sym}_result_count") > 0
104
+ send("#{sym}_result_count") > 0
72
105
  end
73
106
  end
74
107
 
@@ -38,7 +38,7 @@ module Assert
38
38
  @__assert_pending__ = 0
39
39
 
40
40
  @__assert_result_callback__ = proc do |result|
41
- if !@__assert_with_bt__.empty?
41
+ unless @__assert_with_bt__.empty?
42
42
  result.set_with_bt(@__assert_with_bt__.dup)
43
43
  end
44
44
  result_callback.call(result)
@@ -63,7 +63,8 @@ module Assert
63
63
  end
64
64
 
65
65
  # The opposite of assert. Check if the result is false. If so, create a new
66
- # pass result. Otherwise create a new fail result with the desc and fail msg.
66
+ # pass result. Otherwise create a new fail result with the desc and
67
+ # fail msg.
67
68
  def assert_not(assertion, fail_desc = nil)
68
69
  assert(!assertion, fail_desc) do
69
70
  "Failed assert_not: assertion was "\
@@ -74,8 +75,7 @@ module Assert
74
75
 
75
76
  def assert_that(
76
77
  actual_value = Assert::ActualValue.not_given,
77
- &actual_value_block
78
- )
78
+ &actual_value_block)
79
79
  Assert::ActualValue.new(actual_value, context: self, &actual_value_block)
80
80
  end
81
81
 
@@ -87,7 +87,7 @@ module Assert
87
87
  else
88
88
  capture_result(
89
89
  Assert::Result::Fail,
90
- "Pending pass (make it not pending)"
90
+ "Pending pass (make it not pending)",
91
91
  )
92
92
  end
93
93
  end
@@ -107,12 +107,10 @@ module Assert
107
107
  else
108
108
  capture_result(Assert::Result::Fail, message || "")
109
109
  end
110
+ elsif halt_on_fail?
111
+ raise Result::TestSkipped, "Pending fail: #{message || ""}"
110
112
  else
111
- if halt_on_fail?
112
- raise Result::TestSkipped, "Pending fail: #{message || ""}"
113
- else
114
- capture_result(Assert::Result::Skip, "Pending fail: #{message || ""}")
115
- end
113
+ capture_result(Assert::Result::Skip, "Pending fail: #{message || ""}")
116
114
  end
117
115
  end
118
116
  alias_method :flunk, :fail
@@ -139,11 +137,11 @@ module Assert
139
137
  begin
140
138
  @__assert_with_bt__.push(bt.first)
141
139
  instance_eval(&block)
142
- rescue Result::TestSkipped, Result::TestFailure => e
143
- if e.assert_with_bt.nil? && !@__assert_with_bt__.empty?
144
- e.assert_with_bt = @__assert_with_bt__.dup
140
+ rescue Result::TestSkipped, Result::TestFailure => ex
141
+ if ex.assert_with_bt.nil? && !@__assert_with_bt__.empty?
142
+ ex.assert_with_bt = @__assert_with_bt__.dup
145
143
  end
146
- raise(e)
144
+ raise(ex)
147
145
  ensure
148
146
  @__assert_with_bt__.pop
149
147
  end
@@ -178,12 +176,10 @@ module Assert
178
176
 
179
177
  def capture_result(result_klass, msg)
180
178
  @__assert_result_callback__.call(
181
- result_klass.for_test(@__assert_running_test__, msg, caller_locations)
179
+ result_klass.for_test(@__assert_running_test__, msg, caller_locations),
182
180
  )
183
181
  end
184
182
 
185
- def __assert_config__
186
- @__assert_config__
187
- end
183
+ attr_reader :__assert_config__
188
184
  end
189
185
  end
@@ -5,9 +5,12 @@ class Assert::Context; end
5
5
 
6
6
  module Assert::Context::LetDSL
7
7
  def let(name, &block)
8
- self.send(:define_method, name, &-> {
8
+ send(:define_method, name, &->{
9
9
  unless instance_variable_defined?("@__assert_let_#{name}__")
10
- instance_variable_set("@__assert_let_#{name}__", instance_eval(&block))
10
+ instance_variable_set(
11
+ "@__assert_let_#{name}__",
12
+ instance_eval(&block),
13
+ )
11
14
  end
12
15
 
13
16
  instance_variable_get("@__assert_let_#{name}__")
@@ -5,28 +5,28 @@ module Assert; end
5
5
  class Assert::Context
6
6
  module SetupDSL
7
7
  def setup_once(&block)
8
- self.suite.setup(&block)
8
+ suite.setup(&block)
9
9
  end
10
10
  alias_method :before_once, :setup_once
11
11
  alias_method :startup, :setup_once
12
12
 
13
13
  def teardown_once(&block)
14
- self.suite.teardown(&block)
14
+ suite.teardown(&block)
15
15
  end
16
16
  alias_method :after_once, :teardown_once
17
17
  alias_method :shutdown, :teardown_once
18
18
 
19
19
  def around(&block)
20
- self.arounds << block
20
+ arounds << block
21
21
  end
22
22
 
23
23
  def setup(method_name = nil, &block)
24
- self.setups << (block || method_name)
24
+ setups << (block || method_name)
25
25
  end
26
26
  alias_method :before, :setup
27
27
 
28
28
  def teardown(method_name = nil, &block)
29
- self.teardowns << (block || method_name)
29
+ teardowns << (block || method_name)
30
30
  end
31
31
  alias_method :after, :teardown
32
32
 
@@ -43,12 +43,13 @@ class Assert::Context
43
43
  end
44
44
 
45
45
  def run_arounds(scope, &run_block)
46
- context_block = self.arounds.compact.reverse.inject(run_block) do |run_b, around_b|
47
- Proc.new{ scope.instance_exec(run_b, &around_b) }
48
- end
46
+ context_block =
47
+ arounds.compact.reverse.inject(run_block) do |run_b, around_b|
48
+ Proc.new{ scope.instance_exec(run_b, &around_b) }
49
+ end
49
50
 
50
- if self.superclass.respond_to?(:run_arounds)
51
- self.superclass.run_arounds(scope, &context_block)
51
+ if superclass.respond_to?(:run_arounds)
52
+ superclass.run_arounds(scope, &context_block)
52
53
  else
53
54
  context_block.call
54
55
  end
@@ -56,20 +57,24 @@ class Assert::Context
56
57
 
57
58
  def run_setups(scope)
58
59
  # setup the parent...
59
- self.superclass.run_setups(scope) if self.superclass.respond_to?(:run_setups)
60
+ superclass.run_setups(scope) if superclass.respond_to?(:run_setups)
60
61
  # ... before you setup the child
61
- self.setups.compact.each do |setup|
62
- setup.kind_of?(::Proc) ? scope.instance_eval(&setup) : scope.send(setup)
62
+ setups.compact.each do |setup|
63
+ setup.is_a?(::Proc) ? scope.instance_eval(&setup) : scope.send(setup)
63
64
  end
64
65
  end
65
66
 
66
67
  def run_teardowns(scope)
67
68
  # teardown the child...
68
- self.teardowns.compact.each do |teardown|
69
- teardown.kind_of?(::Proc) ? scope.instance_eval(&teardown) : scope.send(teardown)
69
+ teardowns.compact.each do |teardown|
70
+ if teardown.is_a?(::Proc)
71
+ scope.instance_eval(&teardown)
72
+ else
73
+ scope.send(teardown)
74
+ end
70
75
  end
71
76
  # ... before the parent
72
- self.superclass.run_teardowns(scope) if self.superclass.respond_to?(:run_teardowns)
77
+ superclass.run_teardowns(scope) if superclass.respond_to?(:run_teardowns)
73
78
  end
74
79
  end
75
80
  end