Guest User

Untitled

a guest
Feb 20th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. require 'test/unit'
  2.  
  3. class Object
  4. def try(sym, *args, &block)
  5. respond_to?(sym) ? send(sym, *args, &block) : nil
  6. end
  7. end
  8.  
  9. class Test::Unit::TestCase
  10. def self.test(name, &block)
  11. define_method("test_" + name.gsub(/[^\w]/, '_'), &block)
  12. end unless respond_to?(:test)
  13.  
  14. class Context
  15. attr_reader :before, :after, :parent_context
  16.  
  17. def initialize(test_case, name, parent_context=nil)
  18. @test_case, @name, @parent_context = test_case, name, parent_context
  19. end
  20.  
  21. def before(&block)
  22. block_given? ? (@before = block) : @before
  23. end
  24.  
  25. def after(&block)
  26. block_given? ? (@after = block) : @after
  27. end
  28.  
  29. def context(name=nil, &block)
  30. Context.new(@test_case, name, self).instance_eval(&block)
  31. end
  32.  
  33. def run_callback(position, kase)
  34. parent_context.try(:run_callback, position, kase)
  35. if callback = send(position)
  36. kase.instance_eval(&callback)
  37. end
  38. end
  39.  
  40. def name
  41. [parent_context.try(:name), @name].compact.join('_')
  42. end
  43.  
  44. def test(test_name, &block)
  45. context = self
  46. @test_case.test [name, test_name].compact.join('_') do
  47. context.run_callback(:before, self)
  48. instance_eval(&block)
  49. context.run_callback(:after, self)
  50. end
  51. end
  52. end
  53.  
  54. def self.context(name=nil, &block)
  55. Context.new(self, name).instance_eval(&block)
  56. end
  57. end
Add Comment
Please, Sign In to add comment