class QUnited::Application

Public Instance Methods

handle_options() click to toggle source

Parse and handle command line options

# File lib/qunited/application.rb, line 24
    def handle_options
      drivers = ::QUnited::Driver.constants.reject { |d| d == :Base }
      valid_drivers_string = "Valid drivers include: #{drivers.map { |d| d.to_s }.join(', ')}"

      args_empty = ARGV.empty?

      # This is a bit of a hack, but OptionParser removes the -- that separates the source
      # and test files and we need to put it back in the right place. Save the distance from
      # the end to do this later.
      double_dash_neg_index = ARGV.find_index('--') && (ARGV.find_index('--') - ARGV.size)

      optparse = OptionParser.new do |opts|
        opts.banner = <<-HELP_TEXT
Usage: qunited [OPTIONS] [JS_SOURCE_FILES...] -- [JS_TEST_FILES..]

Runs JavaScript unit tests with QUnit.

JS_SOURCE_FILES are the JavaScript files that you want to test. They will all be
loaded for running each test.

JS_TEST_FILES are files that contain the QUnit tests to run.

Options:
        HELP_TEXT

        opts.on('-d', '--driver [NAME]', 'Specify the driver to use in running the tests',
            valid_drivers_string) do |name|
          raise UsageError, 'Must specify a driver name with -d or --driver option' unless name
          names_and_drivers = Hash[drivers.map { |d| d.to_s.downcase }.zip(drivers)]
          driver = names_and_drivers[name.downcase]
          raise UsageError, "Invalid driver specified: #{name}\n#{valid_drivers_string}" unless driver
          options[:driver] = driver
        end

        opts.on('--fixtures [FILES]', 'Specify some files to include as html before running the tests') do |files|
          options[:fixture_files] = files.split(',')
        end

        opts.on_tail('-h', '--help', 'Show this message') do
          puts opts
          exit
        end
        opts.on_tail('--version', 'Print the QUnited version') do
          puts ::QUnited::VERSION
          exit
        end

        if args_empty
          puts opts
          exit 1
        end
      end.parse!

      # Put the -- back in if we had one initially and it was removed
      if double_dash_neg_index && !ARGV.include?('--')
        ARGV.insert(double_dash_neg_index, '--')
      end
    end
options() click to toggle source

Client options generally parsed from the command line

# File lib/qunited/application.rb, line 19
def options
  @options ||= {}
end
run() click to toggle source
# File lib/qunited/application.rb, line 5
def run
  handle_exceptions do
    handle_options
    run_tests
  end
end
run_tests() click to toggle source
# File lib/qunited/application.rb, line 12
def run_tests
  js_source_files, js_test_files = ARGV.join(' ').split('--').map { |file_list| file_list.split(' ') }
  passed = QUnited::Runner.new(js_source_files, js_test_files, options).run
  exit (passed ? 0 : 10)
end

Private Instance Methods

display_crash_message(ex) click to toggle source
# File lib/qunited/application.rb, line 100
    def display_crash_message(ex)
      msg = <<MSG
QUnited has aborted! If this is unexpected, you may want to open an issue at
github.com/aaronroyer/qunited to get a possible bug fixed. If you do, please
include the debug information below.
MSG
      $stderr.puts msg
      $stderr.puts ex.message
      $stderr.puts ex.backtrace
    end
handle_exceptions() { || ... } click to toggle source
# File lib/qunited/application.rb, line 85
def handle_exceptions
  begin
    yield
  rescue UsageError => ex
    $stderr.puts ex.message
    exit 1
  rescue OptionParser::InvalidOption => ex
    $stderr.puts ex.message
    exit 1
  rescue StandardError => ex
    display_crash_message ex
    exit 1
  end
end