Module: MrProper

Defined in:
lib/mrproper/dsl.rb,
lib/mrproper/base.rb,
lib/mrproper/errors.rb,
lib/mrproper/data_block.rb

Defined Under Namespace

Classes: DSL, DataBlock, FalsableProperty

Instance Method Summary collapse

Instance Method Details

#properties(name, &block) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/mrproper/base.rb', line 3

def properties(name, &block)
  dsl = MrProper::DSL.new
  dsl.instance_eval(&block)
  Class.new(Test::Unit::TestCase).class_eval do
    eval("def self.name; #{name.inspect}; end")
    dsl.properties.each do |message, test_block|
      define_method "test_property: #{message.inspect}" do
        dsl.data_blocks.each do |data_block|
          data_block.data.each do |data|
            begin
              instance_exec(data, &test_block)
            rescue Test::Unit::AssertionFailedError, MiniTest::Assertion => e
              raise FalsableProperty.new("Property #{message.inspect} is falsable for data #{data.inspect}\n#{e.message}")
            end
          end
        end
      end
    end
  end
end