module Subtle::Sur::Test

  1. data/sur/test.rb

Methods

Public Class

  1. run

Public Class methods

run (config, args)
Subtle::Sur::Test::run {{{

Run test for every file in args

@param [Array] config Config values @param [Array] args Args array

@example

Subtle::Sur::Test::Subtle.new.run(args)
=> nil
[show source]
# File data/sur/test.rb, line 410
def self.run(config, args)
  args.each do |arg|
    # Load sublet
    if File.exist?(arg)
      begin
        sublet = Subtle::Sur::Test::Sublet.new

        # Eval sublet in anonymous module
        sublet.instance_eval(File.read(arg))
      rescue => err
        puts ">>> WARNING: Cannot load sublet: %s" % [
          err.message
        ]

        unless error.is_a?(RuntimeError)
          puts error.backtrace
        end

        next
      end

      # Check if sublet exists
      unless sublet.nil?
        methods = []
        dummy   = Subtle::Sur::Test::Dummy.new

        # Apply config values
        sublet.config = parse_config(config)

        # Configure and run sublet
        sublet.__configure(sublet)
        sublet.__run(sublet) if sublet.respond_to?(:__run)

        # Sanitize
        if !sublet.instance_variable_defined?("@interval") or
            0 >= sublet.interval
          sublet.interval = 60
        end

        # Collect events
        Subtle::Sur::Test::Sublet::EVENTS.each do |k, v|
          name = ("__%s" % [ k ]).to_sym

          if sublet.respond_to?(name)
            methods.push({
              :name      => k,
              :arity     => sublet.method(name).arity,
              :singleton => false
            })
          end
        end

        # Collect hooks
        Subtle::Sur::Test::Sublet::HOOKS.each do |k|
          name = ("__%s" % [ k ]).to_sym

          if sublet.respond_to?(name)
            methods.push({
              :name      => k,
              :arity     => sublet.method(name).arity,
              :singleton => false
            })
          end
        end

        # Collect singleton methods
        sublet.singleton_methods.each do |k|
          methods.push({
            :name      => k,
            :arity     => sublet.method(k).arity,
            :singleton => true
          })
        end

        begin
          puts "------------------"
          puts " %s" % [ sublet.name ]
          puts "------------------"

          # Show instance variables
          sublet.instance_variables.each do |v|
            puts " %s = %s" % [ v, sublet.instance_variable_get(v) ]
          end

          puts "------------------"

          # Show method list
          i = 1
          methods.each do |m|
            puts " (%d) %s %s" % [
              i,
              m[:name],
              (m[:singleton] ? "(helper)" : "")
            ]

            i += 1
          end

          puts " (0) Quit"
          puts "------------------"
          puts ">>> Select one method:\n"
          printf ">>> "

          num = STDIN.readline.to_i

          begin
            if 0 < num and methods.size >= num
              meth = methods[num - 1]
              name = meth[:singleton] ? meth[:name] :
                ("__%s" % [ meth[:name] ]).to_sym

              # Check proc arity
              case meth[:arity]
                when 2 then
                  sublet.send(name, sublet, dummy)
                when 4 then
                  sublet.send(name, sublet, 5, 5, 1)
                when 0 then
                  sublet.send(name)
                else
                  sublet.send(name, sublet)
              end
            end
          rescue => error
            puts ">>> ERROR: #{error}"

            unless error.is_a?(RuntimeError)
              puts error.backtrace
            end
          end
        end while(0 != num)
      end
    end
  end
end