class Shindo::Tests

def tests(description, tags = [], &block)

def tests(description, tags = [], &block)
  return self if Thread.main[:exit] || Thread.current[:reload]
  tags = [*tags]
  @tag_stack.push(tags)
  @befores.push([])
  @afters.push([])
  @description = nil
  description ||= 'Shindo.tests'
  description = "[bold]#{description}[normal]"
  unless tags.empty?
    description << " (#{tags.join(', ')})"
  end
  @description_stack.push(description)
  # if the test includes +tags and discludes -tags, evaluate it
  if (@if_tagged.empty? || !(@if_tagged & @tag_stack.flatten).empty?) &&
      (@unless_tagged.empty? || (@unless_tagged & @tag_stack.flatten).empty?)
    if block_given?
      begin
        display_description(description)
        Formatador.indent { instance_eval(&block) }
      rescue => error
        display_error(error)
      end
    else
      @description = description
    end
  else
    display_description("[light_black]#{description}[/]")
  end
  @description_stack.pop
  @afters.pop
  @befores.pop
  @tag_stack.pop
  Thread.exit if Thread.main[:exit] || Thread.current[:reload]
  self
end