class Turn::Command

Turn - Pretty Unit Test Runner for Ruby

SYNOPSIS

turn [OPTIONS] [RUN MODE] [OUTPUT MODE] [TEST GLOBS ...]

GENERAL OPTIONS

-I, --loadpath=PATHS             add paths to $LOAD_PATH
-r, --require=LIBS               require libraries
-n, --name=PATTERN               only run tests that match PATTERN
-c, --case=PATTERN               only run test cases that match PATTERN
-b, --backtrace, --trace INT     Limit the number of lines of backtrace.
    --natural                    Show natualized test names.
    --[no-]ansi                  Force use of ANSI codes on or off.
    --log                        log results to a file
    --live                       do not use local load path

RUN MODES

--normal                     run all tests in a single process [default]
--solo                       run each test in a separate process
--cross                      run each pair of test files in a separate process

OUTPUT MODES

-O, --outline                    turn's original case/test outline mode
-P, --progress                   indicates progress with progress bar
-D, --dot, --dotted              test-unit's traditonal dot-progress mode
-R, -T, --pretty                 new pretty output mode [default]
-C, --cue                        cue for action on each failure/error
-M, --marshal                    dump output as YAML (normal run mode only)

COMMAND OPTIONS

    --debug                      turn debug mode on
    --version                    display version
-h, --help                       display this help information

Attributes

ansi[R]

Force ANSI use on or off.

decmode[R]

Decorator mode.

live[R]

Do not use local loadpath.

loadpath[R]

List of paths to add to $LOAD_PATH

log[R]

Log output.

mark[R]

Show extra information.

matchcase[R]

Only run testcases matching this pattern.

natural[R]

Use natural test case names.

outmode[R]

Output mode.

pattern[R]

Only run tests matching this pattern.

requires[R]

Libraries to require before running tests.

runmode[R]

Run mode.

trace[R]

Enable full backtrace

verbose[R]

Show extra information.

Public Class Methods

main(*argv) click to toggle source

Shortcut for new.main(*argv)

# File lib/turn/command.rb, line 42
def self.main(*argv)
  new.main(*argv)
end
new() click to toggle source
# File lib/turn/command.rb, line 92
def initialize
  @live      = nil
  @log       = nil
  @pattern   = nil
  @matchcase = nil
  @loadpath  = []
  @requires  = []
  @runmode   = nil
  @outmode   = nil
  @decmode   = nil
  @trace     = nil
  @natural   = false
  @verbose   = false
  @mark      = nil
  @ansi      = nil
end

Public Instance Methods

main(*argv) click to toggle source

Run command.

# File lib/turn/command.rb, line 256
def main(*argv)
  option_parser.parse!(argv)

  @loadpath = ['lib'] if loadpath.empty?

  tests = ARGV.empty? ? nil : argv.dup

  #config = Turn::Configuration.new do |c|
  config = Turn.config do |c|
    c.live      = live
    c.log       = log
    c.loadpath  = loadpath
    c.requires  = requires
    c.tests     = tests
    c.runmode   = runmode
    c.format    = outmode
    c.mode      = decmode
    c.pattern   = pattern
    c.matchcase = matchcase
    c.trace     = trace
    c.natural   = natural
    c.verbose   = verbose
    c.mark      = mark
    c.ansi      = ansi unless ansi.nil?
  end

  controller = Turn::Controller.new(config)

  result = controller.start

  if result
    exit (result.passed? ? 0 : -1)
  else # no tests
    exit -1
  end
end
option_parser() click to toggle source
# File lib/turn/command.rb, line 110
def option_parser
  OptionParser.new do |opts|

    opts.banner = "Turn - Pretty Unit Test Runner for Ruby"

    opts.separator " "
    opts.separator "SYNOPSIS"
    opts.separator "  turn [OPTIONS] [RUN MODE] [OUTPUT MODE] [TEST GLOBS ...]"

    opts.separator " "
    opts.separator "GENERAL OPTIONS"

    opts.on('-I', '--loadpath=PATHS', "add paths to $LOAD_PATH") do |path|
      @loadpath.concat(path.split(':'))
    end

    opts.on('-r', '--require=LIBS', "require libraries") do |lib|
      @requires.concat(lib.split(':'))
    end

    opts.on('-n', '--name=PATTERN', "only run tests that match PATTERN") do |pattern|
      if pattern =~ /\/(.*)\//
        @pattern = Regexp.new($1)
      else
        @pattern = Regexp.new(pattern, Regexp::IGNORECASE)
      end
    end

    opts.on('-c', '--case=PATTERN', "only run test cases that match PATTERN") do |pattern|
      if pattern =~ /\/(.*)\//
        @matchcase = Regexp.new($1)
      else
        @matchcase = Regexp.new(pattern, Regexp::IGNORECASE)
      end
    end

    opts.on('-m', '--mark=SECONDS', "Mark test if it exceeds runtime threshold.") do |int|
      @mark = int.to_i
    end

    opts.on('-b', '--backtrace', '--trace INT', "Limit the number of lines of backtrace.") do |int|
      @trace = int
    end

    opts.on('--natural', "Show natualized test names.") do |bool|
      @natural = bool
    end

    opts.on('-v', '--verbose', "Show extra information.") do |bool|
      @verbose = bool
    end

    opts.on('--[no-]ansi', "Force use of ANSI codes on or off.") do |bool|
      @ansi = bool
    end

    # Turn does not support Test::Unit 2.0+
    #opts.on('-u', '--testunit', "Force use of TestUnit framework") do
    #  @framework = :testunit
    #end

    opts.on('--log', "log results to a file") do #|path|
      @log = true # TODO: support path/file
    end

    opts.on('--live', "do not use local load path") do
      @live = true
    end

    opts.separator " "
    opts.separator "RUN MODES"

    opts.on('--normal', "run all tests in a single process [default]") do
      @runmode = nil
    end

    opts.on('--solo', "run each test in a separate process") do
      @runmode = :solo
    end

    opts.on('--cross', "run each pair of test files in a separate process") do
      @runmode = :cross
    end

    #opts.on('--load', "") do
    #end

    opts.separator " "
    opts.separator "OUTPUT MODES"

    opts.on('--outline', '-O', "turn's original case/test outline mode") do
      @outmode = :outline
    end

    opts.on('--progress', '-P', "indicates progress with progress bar") do
      @outmode = :progress
    end

    opts.on('--dot', '--dotted', '-D', "test-unit's traditonal dot-progress mode") do
      @outmode = :dot
    end

    opts.on('--pretty', '-R', '-T', "new pretty output mode [default]") do
      @outmode = :pretty
    end

    opts.on('--cue', '-C', "cue for action on each failure/error") do
      @outmode = :cue
    end

    opts.on('--marshal', '-M', "dump output as YAML (normal run mode only)") do
      @runmode = :marshal
      @outmode = :marshal
    end

    opts.separator " "
    opts.separator "DECORATOR MODES"

    opts.on('--topten', "show only top ten slowest tests") do
      @decmode = :topten
    end

    opts.separator " "
    opts.separator "COMMAND OPTIONS"

    opts.on('--debug', "turn debug mode on") do
      $DEBUG = true
    end

    opts.on('--warn', "turn warnings on") do
      $VERBOSE = true
    end

    opts.on_tail('--version', "display version") do
      puts VERSION
      exit
    end

    opts.on_tail('-h', '--help', "display this help information") do
      puts opts
      exit
    end
  end
end