lib/jasmine/headless/options.rb in jasmine-headless-webkit-0.8.4 vs lib/jasmine/headless/options.rb in jasmine-headless-webkit-0.9.0.rc1
- old
+ new
@@ -11,20 +11,25 @@
DEFAULT_OPTIONS = {
:colors => false,
:remove_html_file => true,
:runner_output_filename => false,
:jasmine_config => 'spec/javascripts/support/jasmine.yml',
- :report => false,
:do_list => false,
:full_run => true,
:enable_cache => true,
- :files => []
+ :files => [],
+ :reporters => [ [ 'Console' ] ],
+ :quiet => false,
+ :use_server => false,
+ :server_port => nil
}
DEFAULTS_FILE = File.join(Dir.pwd, '.jasmine-headless-webkit')
GLOBAL_DEFAULTS_FILE = File.expand_path('~/.jasmine-headless-webkit')
+ REPORT_DEPRECATED_MESSAGE = "--report is deprecated. Use --format HeadlessFileReporter --out <filename>"
+
def self.from_command_line
options = new
options.process_command_line_args
options[:files] = ARGV
options
@@ -33,10 +38,11 @@
def initialize(opts = {})
@options = DEFAULT_OPTIONS.dup
srand
@options[:seed] = rand(10000)
read_defaults_files
+
opts.each { |k, v| @options[k] = v if v }
end
def process_option(*args)
opt, arg = args.flatten[0..1]
@@ -51,21 +57,38 @@
when '--no-cache'
@options[:enable_cache] = false
when '--keep'
@options[:remove_html_file] = false
when '--report'
- @options[:report] = arg
+ warn REPORT_DEPRECATED_MESSAGE
+
+ add_reporter('File', arg)
+ add_reporter('Console')
when '--runner-out'
@options[:runner_output_filename] = arg
when '--jasmine-config', '-j'
@options[:jasmine_config] = arg
when '--no-full-run'
@options[:full_run] = false
when '--list', '-l'
@options[:do_list] = true
+ when '--quiet', '-q'
+ @options[:quiet] = true
when '--seed'
@options[:seed] = arg.to_i
+ when '--format', '-f'
+ add_reporter(arg)
+ when '--use-server'
+ @options[:use_server] = true
+ when '--server-port'
+ @options[:server_port] = arg.to_i
+ when '--out'
+ add_reporter_file(arg)
+ when '-h', '--help'
+ print_help
+
+ exit
end
end
def read_defaults_files
[ GLOBAL_DEFAULTS_FILE, DEFAULTS_FILE ].each do |file|
@@ -78,20 +101,105 @@
def process_command_line_args
command_line_args = GetoptLong.new(
[ '--colors', '-c', GetoptLong::NO_ARGUMENT ],
[ '--no-colors', GetoptLong::NO_ARGUMENT ],
[ '--cache', GetoptLong::NO_ARGUMENT ],
- [ '--no-t stcache', GetoptLong::NO_ARGUMENT ],
+ [ '--no-cache', GetoptLong::NO_ARGUMENT ],
[ '--keep', GetoptLong::NO_ARGUMENT ],
[ '--runner-out', GetoptLong::REQUIRED_ARGUMENT ],
[ '--report', GetoptLong::REQUIRED_ARGUMENT ],
[ '--jasmine-config', '-j', GetoptLong::REQUIRED_ARGUMENT ],
[ '--no-full-run', GetoptLong::NO_ARGUMENT ],
[ '--list', '-l', GetoptLong::NO_ARGUMENT ],
- [ '--seed', GetoptLong::REQUIRED_ARGUMENT ]
+ [ '--seed', GetoptLong::REQUIRED_ARGUMENT ],
+ [ '--format', '-f', GetoptLong::REQUIRED_ARGUMENT ],
+ [ '--out', GetoptLong::REQUIRED_ARGUMENT ],
+ [ '--use-server', GetoptLong::NO_ARGUMENT ],
+ [ '--server-port', GetoptLong::REQUIRED_ARGUMENT ],
+ [ '-h', '--help', GetoptLong::NO_ARGUMENT ],
+ [ '-q', '--quiet', GetoptLong::NO_ARGUMENT ]
)
command_line_args.each { |*args| process_option(*args) }
+ end
+
+ def reporters
+ file_index = 0
+
+ @options[:reporters].collect do |reporter, file|
+ output = [ reporter ]
+ if file
+ output << "report:#{file_index}"
+ output << file
+ file_index += 1
+ else
+ output << "stdout"
+ end
+
+ output
+ end
+ end
+
+ def file_reporters
+ reporters.find_all { |reporter| reporter[1]["report:"] }
+ end
+
+ private
+ def add_reporter(name, file = nil)
+ if !@added_reporter
+ @options[:reporters] = []
+ @added_reporter = true
+ end
+
+ if (parts = name.split(':')).length == 2
+ name, file = parts
+ end
+
+ @options[:reporters] << [ name ]
+
+ add_reporter_file(file) if file
+ end
+
+ def add_reporter_file(file)
+ @options[:reporters].last << file
+ end
+
+ def print_help
+ options = [
+ [ '-c, --colors', 'Enable colors (default: disabled)' ],
+ [ '-nc, --no-colors', 'Disable colors' ],
+ [ '--cache', 'Enable cache (default: enabled)' ],
+ [ '--no-cache', 'Disable cache' ],
+ [ '--keep', 'Keep runner files on failure' ],
+ [ '--runner-out <filename>', 'Write runner to specified filename' ],
+ [ '-j, --jasmine-config <config file>', 'Jasmine Yaml config to use' ],
+ [ '--no-full-run', 'Do not perform a full spec run after a successful targeted spec run' ],
+ [ '--use-server', 'Load tests from an HTTP server instead of from filesystem' ],
+ [ '-l, --list', 'List files in the order they will be required' ],
+ [ '--seed <seed>', 'Random order seed for spec file ordering' ],
+ [ '-f, --format <reporter<:filename>>', 'Specify an output reporter and possibly output filename' ],
+ [ '--out <filename>', 'Specify output filename for last defined reporter' ],
+ [ '-q, --quiet', "Silence most non-test related warnings" ],
+ [ '-h, --help', "You're looking at it" ]
+ ]
+
+ longest_length = options.collect(&:first).collect(&:length).max
+
+ puts <<-HELP
+Usage: #{$0} [ options ] [ spec files ]
+
+Options:
+#{options.collect { |option, description| " #{option.ljust(longest_length)} #{description}" }.join("\n")}
+
+Available reporters:
+ Console Write out spec results to the console in a progress format (default)
+ Verbose Write out spec results to the console in a verbose format
+ File Write spec results in jasmine-headless-webkit ReportFile format
+ Tap Write spec results in TAP format
+
+Add reporters to the jasmine.HeadlessReporter object to access them
+ (ex: jasmine.HeadlessReporter.Teamcity for the Teamcity reporter)
+HELP
end
end
end
end