class RunTest::OptParse

Public Class Methods

default_options() click to toggle source
# File lib/runtest/options.rb, line 3
def self.default_options
  {
    basedir:  "src/js",
    changed:  false,
    commands: Config::Options.new,
    jest:     true,
    mocha:    true,
    verbose:  0
  }
end
parse(args, unit_testing=false) click to toggle source

Return a structure describing the Options.

# File lib/runtest/options.rb, line 17
def self.parse(args, unit_testing=false)
  # The Options specified on the command line will be collected in *Options*.
  # We set default values here.
  opt_parse = DevTools::OptParse.new({ name:     PROGRAM_NAME,
                                       version:  VERSION,
                                       defaults: default_options,
                                       testing:  unit_testing })

  opt_parse.default_options(Options.commands, {
    diff:       "git diff --name-only develop src/js | egrep \".js$\"",
    jest:       "$(npm bin)/jest",
    jest_full:  "npm run test:jest",
    mocha:      "$(npm bin)/mocha --require src/js/util/test-dom.js --compilers js:babel-core/register",
    mocha_full: "npm run test:mocha"
  })

  parser = opt_parse.parser

  parser.banner = "Usage: #{DevTools::PROGRAM} [OPTIONS] [PATTERN]"
  parser.banner += "\n\nWhere [PATTERN] is any full or partial filename."
  parser.banner += " All tests matching this filename pattern will be run."

  parser.separator ""
  parser.separator "[OPTIONS]"

  parser.separator ""
  parser.separator "Specific Options:"

  # Base directory
  parser.on("-b", "--basedir DIR", "Specify the base directory to search for tests (DEFAULT: '#{Options.basedir}')") do |dir|
    Options.basedir = dir
  end

  # Changed switch
  parser.on("-c", "--changed", "Run specs for any files that have recently been modified") do
    Options.changed = true
  end

  parser.separator ""
  parser.separator "Test Runners:"

  parser.on("-j", "--[no-]jest", "Only/Don't run Jest tests") do |jest|
    Options.jest = true; Options.mocha = false
    (Options.jest = false; Options.mocha = true) unless jest
  end

  parser.on("-m", "--[no-]mocha", "Only/Don't run Mocha tests") do |mocha|
    Options.jest = false; Options.mocha = true
    (Options.jest = true; Options.mocha = false) unless mocha
  end

  parser.separator ""
  parser.separator "Test Commands:"

  parser.on("--diff-cmd CMD", "Overwrite git diff command: '#{Options.commands.diff}'") do |cmd|
    Options.commands.diff = cmd
  end

  parser.on("--jest-cmd CMD", "Overwrite Jest command: '#{Options.commands.jest}'") do |cmd|
    Options.commands.jest = cmd
  end

  parser.on("--jest-full-cmd CMD", "Overwrite Jest full-suite command: '#{Options.commands.jest_full}'") do |cmd|
    Options.commands.jest_full = cmd
  end

  parser.on("--mocha-cmd CMD", "Overwrite Mocha command: '#{Options.commands.mocha}'") do |cmd|
    Options.commands.mocha = cmd
  end

  parser.on("--mocha-full-cmd CMD", "Overwrite Mocha command: '#{Options.commands.mocha_full}'") do |cmd|
    Options.commands.mocha_full = cmd
  end

  parser.separator ""
  parser.separator "Common Options:"

  parser.parse!(args)

  return Options
end