Class: Assert::Context
- Inherits:
-
Object
- Object
- Assert::Context
- Extended by:
- LetDSL, SetupDSL, SubjectDSL, SuiteDSL, TestDSL
- Includes:
- Assertions, MethodMissing, Macros::Methods
- Defined in:
- lib/assert.rb,
lib/assert/context.rb,
lib/assert/context/let_dsl.rb,
lib/assert/context/test_dsl.rb,
lib/assert/context/setup_dsl.rb,
lib/assert/context/suite_dsl.rb,
lib/assert/context/subject_dsl.rb,
lib/assert/context/method_missing.rb
Overview
unstub all stubs automatically (see stub.rb)
Defined Under Namespace
Modules: LetDSL, MethodMissing, SetupDSL, SubjectDSL, SuiteDSL, TestDSL
Constant Summary
Constants included from Assertions
Assertions::IGNORED_ASSERTION_HELPERS
Class Method Summary collapse
-
.method_added(method_name) ⇒ Object
if a test method is added to a context manually (not using a context helper): capture any context info, build a test obj, and add it to the suite.
Instance Method Summary collapse
-
#assert(assertion, desc = nil) ⇒ Object
Check if the result is true.
-
#assert_not(assertion, fail_desc = nil) ⇒ Object
(also: #refute)
The opposite of assert.
- #assert_that(actual_value) ⇒ Object
-
#fail(message = nil) ⇒ Object
(also: #flunk)
adds a Fail result to the end of the test’s results break test execution if assert is configured to halt on failures.
-
#ignore(ignore_msg = nil) ⇒ Object
adds an Ignore result to the end of the test’s results does not break test execution.
-
#initialize(running_test, config, result_callback) ⇒ Context
constructor
A new instance of Context.
- #inspect ⇒ Object
-
#pass(pass_msg = nil) ⇒ Object
adds a Pass result to the end of the test’s results does not break test execution.
-
#pending(&block) ⇒ Object
runs block and any fails are skips and any passes are fails.
-
#skip(skip_msg = nil, called_from = nil) ⇒ Object
adds a Skip result to the end of the test’s results breaks test execution.
- #subject ⇒ Object
-
#with_backtrace(bt, &block) ⇒ Object
alter the backtraces of fail/skip results generated in the given block.
Methods included from SetupDSL
around, arounds, run_arounds, run_setups, run_teardowns, setup, setup_once, setups, teardown, teardown_once, teardowns
Methods included from SubjectDSL
Methods included from SuiteDSL
Methods included from TestDSL
should, should_eventually, test, test_eventually
Methods included from LetDSL
Methods included from Macros::Methods
Methods included from Assertions
#assert_block, #assert_empty, #assert_equal, #assert_false, #assert_file_exists, #assert_includes, #assert_instance_of, #assert_kind_of, #assert_match, #assert_nil, #assert_not_block, #assert_not_empty, #assert_not_equal, #assert_not_false, #assert_not_file_exists, #assert_not_includes, #assert_not_instance_of, #assert_not_kind_of, #assert_not_match, #assert_not_nil, #assert_not_respond_to, #assert_not_same, #assert_not_true, #assert_nothing_raised, #assert_raises, #assert_respond_to, #assert_same, #assert_true
Methods included from MethodMissing
#method_missing, #respond_to_missing?
Constructor Details
#initialize(running_test, config, result_callback) ⇒ Context
Returns a new instance of Context.
54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/assert/context.rb', line 54 def initialize(running_test, config, result_callback) @__assert_running_test__ = running_test @__assert_config__ = config @__assert_with_bt__ = [] @__assert_pending__ = 0 @__assert_result_callback__ = proc do |result| if !@__assert_with_bt__.empty? result.set_with_bt(@__assert_with_bt__.dup) end result_callback.call(result) result end end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Assert::Context::MethodMissing
Class Method Details
.method_added(method_name) ⇒ Object
if a test method is added to a context manually (not using a context helper): capture any context info, build a test obj, and add it to the suite
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/assert/context.rb', line 35 def self.method_added(method_name) if method_name.to_s =~ Suite::TEST_METHOD_REGEX klass_method_name = "#{self}##{method_name}" if self.suite.test_methods.include?(klass_method_name) puts "WARNING: redefining "#{klass_method_name}"" puts " from: #{caller_locations(1,1)}" else self.suite.test_methods << klass_method_name end self.suite.on_test(Test.for_method( method_name.to_s, ContextInfo.new(self, nil, caller_locations(1,1)), self.suite.config )) end end |
Instance Method Details
#assert(assertion, desc = nil) ⇒ Object
Check if the result is true. If so, create a new pass result, Otherwise create a new fail result with the desc and fail msg.
71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/assert/context.rb', line 71 def assert(assertion, desc = nil) if assertion pass else what = if block_given? yield else "Failed assert: assertion was "\ "`#{Assert::U.show(assertion, __assert_config__)}`." end fail((desc, what)) end end |
#assert_not(assertion, fail_desc = nil) ⇒ Object Also known as: refute
The opposite of assert. Check if the result is false. If so, create a new pass result. Otherwise create a new fail result with the desc and fail msg.
87 88 89 90 91 92 |
# File 'lib/assert/context.rb', line 87 def assert_not(assertion, fail_desc = nil) assert(!assertion, fail_desc) do "Failed assert_not: assertion was "\ "`#{Assert::U.show(assertion, __assert_config__)}`." end end |
#assert_that(actual_value) ⇒ Object
95 96 97 |
# File 'lib/assert/context.rb', line 95 def assert_that(actual_value) Assert::ActualValue.new(actual_value, context: self) end |
#fail(message = nil) ⇒ Object Also known as: flunk
adds a Fail result to the end of the test’s results break test execution if assert is configured to halt on failures
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/assert/context.rb', line 118 def fail( = nil) if @__assert_pending__ == 0 if halt_on_fail? raise Result::TestFailure, || "" else capture_result(Assert::Result::Fail, || "") end else if halt_on_fail? raise Result::TestSkipped, "Pending fail: #{ || ""}" else capture_result(Assert::Result::Skip, "Pending fail: #{ || ""}") end end end |
#ignore(ignore_msg = nil) ⇒ Object
adds an Ignore result to the end of the test’s results does not break test execution
112 113 114 |
# File 'lib/assert/context.rb', line 112 def ignore(ignore_msg = nil) capture_result(Assert::Result::Ignore, ignore_msg) end |
#inspect ⇒ Object
173 174 175 |
# File 'lib/assert/context.rb', line 173 def inspect "#<#{self.class}>" end |
#pass(pass_msg = nil) ⇒ Object
adds a Pass result to the end of the test’s results does not break test execution
101 102 103 104 105 106 107 108 |
# File 'lib/assert/context.rb', line 101 def pass(pass_msg = nil) if @__assert_pending__ == 0 capture_result(Assert::Result::Pass, pass_msg) else capture_result(Assert::Result::Fail, "Pending pass (make it "\ "not pending)") end end |
#pending(&block) ⇒ Object
runs block and any fails are skips and any passes are fails
142 143 144 145 146 147 148 149 |
# File 'lib/assert/context.rb', line 142 def pending(&block) begin @__assert_pending__ += 1 instance_eval(&block) ensure @__assert_pending__ -= 1 end end |
#skip(skip_msg = nil, called_from = nil) ⇒ Object
adds a Skip result to the end of the test’s results breaks test execution
137 138 139 |
# File 'lib/assert/context.rb', line 137 def skip(skip_msg = nil, called_from = nil) raise Result::TestSkipped, (skip_msg || ""), called_from end |
#subject ⇒ Object
167 168 169 170 171 |
# File 'lib/assert/context.rb', line 167 def subject if subj = self.class.subject instance_eval(&subj) end end |
#with_backtrace(bt, &block) ⇒ Object
alter the backtraces of fail/skip results generated in the given block
152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/assert/context.rb', line 152 def with_backtrace(bt, &block) bt ||= [] begin @__assert_with_bt__.push(bt.first) instance_eval(&block) rescue Result::TestSkipped, Result::TestFailure => e if e.assert_with_bt.nil? && !@__assert_with_bt__.empty? e.assert_with_bt = @__assert_with_bt__.dup end raise(e) ensure @__assert_with_bt__.pop end end |