Sha256: e3e557a342c7e359eb35be1370803aa90994587bb9daacaece5468e00447c023

Contents?: true

Size: 1.96 KB

Versions: 13

Compression:

Stored size: 1.96 KB

Contents

module Matest
  class ExampleGroup
    attr_reader :scope_block
    attr_reader :specs
    attr_reader :lets
    attr_reader :statuses

    attr_accessor :printer
    
    def initialize(scope_block)
      @scope_block = scope_block
      @specs       = []
      @lets        = []
      @statuses    = []
    end

    def spec(description=nil, &block)
      current_example = block_given? ? block : ->(*) { Matest::SkipMe.new }
      specs << Example.new(current_example, description, lets)
    end

    def execute!
      instance_eval(&scope_block)
      specs.shuffle.each do |spec, desc|
        res = run_spec(spec)
        printer.print(res)
      end

    end

    def xspec(description=nil, &block)
      spec(description)
    end

    alias :it :spec
    alias :xit :xspec

    alias :test :spec
    alias :xtest :xspec

    alias :example :spec
    alias :xexample :xspec


    def self.let(var_name, &block)
      define_method(var_name) do
        instance_variable_set(:"@#{var_name}", block.call)
      end
    end

    def let(var_name, bang=false, &block)
      lets << Let.new(var_name, block, bang=false)
    end

    def let!(var_name, &block)
      lets << Let.new(var_name, block, bang=true)
    end

    def run_spec(spec)
      status = begin
                 result = spec.call
                 status_class = case result
                                when true
                                  Matest::SpecPassed
                                when false
                                  Matest::SpecFailed
                                when Matest::SkipMe
                                  Matest::SpecSkipped
                                else
                                  Matest::NotANaturalAssertion
                                end
                 status_class.new(spec, result)
               rescue Exception => e
                 Matest::ExceptionRaised.new(spec, e, spec.description)
               end
      @statuses << status
      status
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
matest-1.6.0 lib/matest/example_group.rb
matest-1.5.6 lib/matest/example_group.rb
matest-1.5.5 lib/matest/example_group.rb
matest-1.5.4 lib/matest/example_group.rb
matest-1.5.3 lib/matest/example_group.rb
matest-1.5.2 lib/matest/example_group.rb
matest-1.5.1 lib/matest/example_group.rb
matest-1.5.0 lib/matest/example_group.rb
matest-1.4.1 lib/matest/example_group.rb
matest-1.4.0 lib/matest/example_group.rb
matest-1.3.2 lib/matest/example_group.rb
matest-1.3.1 lib/matest/example_group.rb
matest-1.3.0 lib/matest/example_group.rb