Module: Dfect
- Included in:
- Object
- Defined in:
- lib/dfect.rb,
lib/dfect/mini.rb,
lib/dfect/spec.rb,
lib/dfect/unit.rb,
lib/dfect/inochi.rb
Constant Summary
- D =
Allows before and after hooks to be specified via the following method syntax when this module is mixed-in:
D .<< { puts "before all nested tests" } D .< { puts "before each nested test" } D .> { puts "after each nested test" } D .>> { puts "after all nested tests" }
self
- PROJECT =
Official name of this project.
"Dfect"
- TAGLINE =
Short single-line description of this project.
"Assertion testing library for Ruby"
- WEBSITE =
Address of this project’s official home page.
"http://snk.tuxfamily.org/lib/dfect/"
- VERSION =
Number of this release of this project.
"2.1.0"
- RELDATE =
Date of this release of this project.
"2010-03-31"
- INSTDIR =
Location of this release of this project.
File.('../../..', __FILE__)
- RUNTIME =
RubyGems required by this project during runtime.
{}
- DEVTIME =
RubyGems required by this project during development.
{ "inochi" => [ "~> 2" ], # for managing this project }
Class Attribute Summary
-
+ (Object) options
Hash of choices that affect how Dfect operates.
-
+ (Object) report
readonly
Hash of test results, assembled by Dfect.run.
Class Method Summary
-
+ (Object) <(&block)
Registers the given block to be executed before each nested test inside this test.
-
+ (Object) <<(&block)
Registers the given block to be executed before all nested tests inside this test.
-
+ (Object) >(&block)
Registers the given block to be executed after each nested test inside this test.
-
+ (Object) >>(&block)
Registers the given block to be executed after all nested tests inside this test.
-
+ (Object) C(symbol, message = nil, &block)
Asserts that the given symbol is thrown when the given block is executed.
-
+ (Object) C!(symbol, message = nil, &block)
Asserts that the given symbol is not thrown when the given block is executed.
-
+ (Boolean) C?(symbol, message = nil, &block)
Returns true if the given symbol is thrown when the given block is executed.
-
+ (Object) D(*description, &block)
Defines a new test composed of the given description and the given block to execute.
-
+ (Object) D!(*description, &block)
Defines a new test that is explicitly insulated from the tests that contain it and also from the top-level Ruby environment.
-
+ (Object) E(*kinds_then_message, &block)
Asserts that one of the given kinds of exceptions is raised when the given block is executed.
-
+ (Object) E!(*kinds_then_message, &block)
Asserts that one of the given kinds of exceptions is not raised when the given block is executed.
-
+ (Boolean) E?(*kinds_then_message, &block)
Returns true if one of the given kinds of exceptions is raised when the given block is executed.
-
+ (Boolean) F?(message = nil, &block)
Returns true if the result of the given block is either nil or false.
-
+ (Object) info
Returns the details of the failure that is currently being debugged by the user.
-
+ (Object) inspect
Description of this release of this project.
-
+ (Object) L(*messages)
Adds the given messages to the report inside the section of the currently running test.
- + (Object) require(gem_name_or_library)
-
+ (Object) run(continue = true)
Executes all tests defined thus far and stores the results in Dfect.report.
-
+ (Object) S(identifier, &block)
Mechanism for sharing code between tests.
-
+ (Object) S!(identifier, &block)
Shares the given code block under the given identifier and then immediately injects that code block into the closest insulated Dfect test that contains the call to this method.
-
+ (Boolean) S?(identifier)
Checks whether any code has been shared under the given identifier.
-
+ (Object) stop
Stops the execution of the Dfect.run method or raises an exception if that method is not currently executing.
-
+ (Object) T(condition = nil, message = nil, &block)
(also: F!)
Asserts that the given condition or the result of the given block is neither nil nor false and returns that result.
-
+ (Object) T!(condition = nil, message = nil, &block)
(also: F)
Asserts that the given condition or the result of the given block is either nil or false and returns that result.
-
+ (Boolean) T?(condition = nil, message = nil, &block)
Returns true if the given condition or the result of the given block is neither nil nor false.
Instance Method Summary
Class Attribute Details
+ (Object) options
Hash of choices that affect how Dfect operates.
- :debug
- Launch an interactive debugger during assertion failures so the user can
investigate them.
The default value is $DEBUG.
- :quiet
- Do not print the report after executing all tests.
The default value is false.
88 89 90 |
# File 'lib/dfect.rb', line 88 def @options end |
+ (Object) report (readonly)
Hash of test results, assembled by Dfect.run.
- :trace
- Hierarchical trace of all tests executed, where each test is represented by
its description, is mapped to an Array of nested tests, and may contain
zero or more assertion failures.
Assertion failures are represented as a Hash:
- :fail
- Description of the assertion failure.
- :code
- Source code surrounding the point of failure.
- :vars
- Local variables visible at the point of failure.
- :call
- Stack trace leading to the point of failure.
- :stats
- Hash of counts of major events in test execution:
- :time
- Number of seconds elapsed for test execution.
- :pass
- Number of assertions that held true.
- :fail
- Number of assertions that did not hold true.
- :error
- Number of exceptions that were not rescued.
70 71 72 |
# File 'lib/dfect.rb', line 70 def report @report end |
Class Method Details
+ (Object) <(&block)
177 178 179 180 181 182 183 184 185 |
# File 'lib/dfect.rb', line 177 def <(*args, &block) if args.empty? raise ArgumentError, 'block must be given' unless block @suite.before_each << block else # the < method is being used as a check for inheritance super end end |
+ (Object) <<(&block)
Registers the given block to be executed before all nested tests inside this test.
216 217 218 219 |
# File 'lib/dfect.rb', line 216 def << &block raise ArgumentError, 'block must be given' unless block @suite.before_all << block end |
+ (Object) >(&block)
Registers the given block to be executed after each nested test inside this test.
199 200 201 202 |
# File 'lib/dfect.rb', line 199 def > &block raise ArgumentError, 'block must be given' unless block @suite.after_each << block end |
+ (Object) >>(&block)
Registers the given block to be executed after all nested tests inside this test.
233 234 235 236 |
# File 'lib/dfect.rb', line 233 def >> &block raise ArgumentError, 'block must be given' unless block @suite.after_all << block end |
+ (Object) C(symbol, message = nil, &block)
Asserts that the given symbol is thrown when the given block is executed.
469 470 471 |
# File 'lib/dfect.rb', line 469 def C symbol, = nil, &block assert_catch :assert, symbol, , &block end |
+ (Object) C!(symbol, message = nil, &block)
Asserts that the given symbol is not thrown when the given block is executed.
495 496 497 |
# File 'lib/dfect.rb', line 495 def C! symbol, = nil, &block assert_catch :negate, symbol, , &block end |
+ (Boolean) C?(symbol, message = nil, &block)
Returns true if the given symbol is thrown when the given block is executed. Otherwise, returns false.
517 518 519 |
# File 'lib/dfect.rb', line 517 def C? symbol, = nil, &block assert_catch :sample, symbol, , &block end |
+ (Object) D(*description, &block)
Defines a new test composed of the given description and the given block to execute.
This test may contain nested tests.
Tests at the outer-most level are automatically insulated from the top-level Ruby environment.
122 123 124 |
# File 'lib/dfect.rb', line 122 def D *description, &block create_test @tests.empty?, *description, &block end |
+ (Object) D!(*description, &block)
Defines a new test that is explicitly insulated from the tests that contain it and also from the top-level Ruby environment.
This test may contain nested tests.
159 160 161 |
# File 'lib/dfect.rb', line 159 def D! *description, &block create_test true, *description, &block end |
+ (Object) E(*kinds_then_message, &block)
Asserts that one of the given kinds of exceptions is raised when the given block is executed.
376 377 378 |
# File 'lib/dfect.rb', line 376 def E *, &block assert_raise :assert, *, &block end |
+ (Object) E!(*kinds_then_message, &block)
Asserts that one of the given kinds of exceptions is not raised when the given block is executed.
403 404 405 |
# File 'lib/dfect.rb', line 403 def E! *, &block assert_raise :negate, *, &block end |
+ (Boolean) E?(*kinds_then_message, &block)
Returns true if one of the given kinds of exceptions is raised when the given block is executed. Otherwise, returns false.
437 438 439 |
# File 'lib/dfect.rb', line 437 def E? *, &block assert_raise :sample, *, &block end |
+ (Boolean) F?(message = nil, &block)
Returns true if the result of the given block is either nil or false. Otherwise, returns false.
335 336 337 |
# File 'lib/dfect.rb', line 335 def F? = nil, &block not T? , &block end |
+ (Object) info
Returns the details of the failure that is currently being debugged by the user.
675 676 677 |
# File 'lib/dfect.rb', line 675 def info @trace.last end |
+ (Object) inspect
Description of this release of this project.
31 32 33 |
# File 'lib/dfect/inochi.rb', line 31 def self.inspect "#{PROJECT} #{VERSION} (#{RELDATE})" end |
+ (Object) L(*messages)
Adds the given messages to the report inside the section of the currently running test.
You can think of “L” as “to log something”.
539 540 541 |
# File 'lib/dfect.rb', line 539 def L * @trace.concat end |
+ (Object) require(gem_name_or_library)
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/dfect/inochi.rb', line 85 def self.require gem_name_or_library # prepare the correct version of the gem for loading if respond_to? :gem gem_name = gem_name_or_library.to_s.sub(%r{/.*$}, '') if gem_version = RUNTIME[gem_name] || DEVTIME[gem_name] begin gem gem_name, *gem_version rescue LoadError => error warn "#{self.inspect}: #{error}" end end end # do the loading super end |
+ (Object) run(continue = true)
Executes all tests defined thus far and stores the results in Dfect.report.
636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 |
# File 'lib/dfect.rb', line 636 def run continue = true # clear previous results unless continue @stats.clear @trace.clear @tests.clear end # make new results start = Time.now catch(:stop_dfect_execution) { execute } finish = Time.now @stats[:time] = finish - start # print new results unless @stats.key? :fail or @stats.key? :error # # show execution trace only if all tests passed. # otherwise, we will be repeating already printed # failure details and obstructing the developer! # display @trace end display @stats end |
+ (Object) S(identifier, &block)
Mechanism for sharing code between tests.
If a block is given, it is shared under the given identifier. Otherwise, the code block that was previously shared under the given identifier is injected into the closest insulated Dfect test that contains the call to this method.
572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 |
# File 'lib/dfect.rb', line 572 def S identifier, &block if block_given? if already_shared = @share[identifier] raise ArgumentError, "A code block #{already_shared.inspect} has already been shared under the identifier #{identifier.inspect}." end @share[identifier] = block elsif block = @share[identifier] if @tests.empty? raise "Cannot inject code block #{block.inspect} shared under identifier #{identifier.inspect} outside of a Dfect test." else # find the closest insulated parent test; this should always # succeed because root-level tests are insulated by default test = @tests.reverse.find {|t| t.sandbox } test.sandbox.instance_eval(&block) end else raise ArgumentError, "No code block is shared under identifier #{identifier.inspect}." end end |
+ (Object) S!(identifier, &block)
Shares the given code block under the given identifier and then immediately injects that code block into the closest insulated Dfect test that contains the call to this method.
615 616 617 618 619 |
# File 'lib/dfect.rb', line 615 def S! identifier, &block raise 'block must be given' unless block_given? S identifier, &block S identifier end |
+ (Boolean) S?(identifier)
Checks whether any code has been shared under the given identifier.
624 625 626 |
# File 'lib/dfect.rb', line 624 def S? identifier @share.key? identifier end |
+ (Object) stop
Stops the execution of the Dfect.run method or raises an exception if that method is not currently executing.
667 668 669 |
# File 'lib/dfect.rb', line 667 def stop throw :stop_dfect_execution end |
+ (Object) T(condition = nil, message = nil, &block) Also known as: F!
Asserts that the given condition or the result of the given block is neither nil nor false and returns that result.
263 264 265 |
# File 'lib/dfect.rb', line 263 def T condition = nil, = nil, &block assert_yield :assert, condition, , &block end |
+ (Object) T!(condition = nil, message = nil, &block) Also known as: F
Asserts that the given condition or the result of the given block is either nil or false and returns that result.
286 287 288 |
# File 'lib/dfect.rb', line 286 def T! condition = nil, = nil, &block assert_yield :negate, condition, , &block end |
+ (Boolean) T?(condition = nil, message = nil, &block)
Returns true if the given condition or the result of the given block is neither nil nor false. Otherwise, returns false.
311 312 313 |
# File 'lib/dfect.rb', line 311 def T? condition = nil, = nil, &block assert_yield :sample, condition, , &block end |
Instance Method Details
- (Object) after(what, &block)
21 22 23 24 25 26 27 28 29 30 |
# File 'lib/dfect/spec.rb', line 21 def after what, &block meth = case what when :each then :> when :all then :>> else raise ArgumentError, what end send meth, &block end |
- (Object) before(what, &block)
10 11 12 13 14 15 16 17 18 19 |
# File 'lib/dfect/spec.rb', line 10 def before what, &block meth = case what when :each then :< when :all then :<< else raise ArgumentError, what end send meth, &block end |