lib/teaspoon/console.rb in teaspoon-0.8.0 vs lib/teaspoon/console.rb in teaspoon-0.9.0

- old
+ new

@@ -1,58 +1,72 @@ require "teaspoon/environment" module Teaspoon class Console - def initialize(options = {}) - @options = options + @default_options = options @suites = {} - Teaspoon::Environment.load(@options) + Teaspoon::Environment.load(options) @server = start_server rescue Teaspoon::ServerException => e abort(e.message) end + def options + @execute_options ||= {} + @default_options ||= {} + @default_options.merge(@execute_options) + end + def failures? !execute end def execute(options = {}) execute_without_handling(options) rescue Teaspoon::Failure false + rescue Teaspoon::RunnerException => e + log(e.message) + false rescue Teaspoon::Error => e abort(e.message) end - def execute_without_handling(options = {}) - @options.merge!(options) + def execute_without_handling(execute_options = {}) + @execute_options = execute_options @suites = {} - resolve(@options[:files]) + resolve(options[:files]) 0 == suites.inject(0) do |failures, suite| - export(suite) if @options.include?(:export) + export(suite) if options.include?(:export) failures += run_specs(suite) log("") # empty line for space failures end end def run_specs(suite) - raise Teaspoon::UnknownSuite, "Unknown suite: \"#{suite}\"" unless Teaspoon.configuration.suite_configs[suite.to_s] + unless Teaspoon.configuration.suite_configs[suite.to_s] + raise Teaspoon::UnknownSuite, "Unknown suite: \"#{suite}\"" + end + log("Teaspoon running #{suite} suite at #{base_url_for(suite)}") runner = Teaspoon::Runner.new(suite) driver.run_specs(runner, url_for(suite)) raise Teaspoon::Failure if Teaspoon.configuration.fail_fast && runner.failure_count > 0 runner.failure_count end def export(suite) - raise Teaspoon::UnknownSuite, "Unknown suite: \"#{suite}\"" unless Teaspoon.configuration.suite_configs[suite.to_s] + unless Teaspoon.configuration.suite_configs[suite.to_s] + raise Teaspoon::UnknownSuite, "Unknown suite: \"#{suite}\"" + end + log("Teaspoon exporting #{suite} suite at #{base_url_for(suite)}") - Teaspoon::Exporter.new(suite, url_for(suite, false), @options[:export]).export + Teaspoon::Exporter.new(suite, url_for(suite, false), options[:export]).export end protected def resolve(files = []) @@ -64,18 +78,18 @@ end end end def start_server - log("Starting the Teaspoon server...") server = Teaspoon::Server.new + log("Starting the Teaspoon server...") unless server.responsive? server.start server end def suites - return [@options[:suite]] if @options[:suite].present? + return [options[:suite]] if options[:suite].present? return @suites.keys if @suites.present? Teaspoon.configuration.suite_configs.keys end def driver @@ -85,22 +99,22 @@ rescue NameError raise Teaspoon::UnknownDriver, "Unknown driver: \"#{Teaspoon.configuration.driver}\"" end def base_url_for(suite) - ["#{@server.url}#{Teaspoon.configuration.mount_at}", suite].join('/') + ["#{@server.url}#{Teaspoon.configuration.mount_at}", suite].join("/") end def url_for(suite, console = true) - url = [base_url_for(suite), filter(suite)].compact.join('?') - url += "#{(url.include?("?") ? "&" : "?")}reporter=Console" if console + url = [base_url_for(suite), filter(suite)].compact.join("?") + url += "#{(url.include?('?') ? '&' : '?')}reporter=Console" if console url end def filter(suite) parts = [] - parts << "grep=#{URI::encode(@options[:filter])}" if @options[:filter].present? - (@suites[suite] || @options[:files] || []).flatten.each { |file| parts << "file[]=#{URI::encode(file)}" } + parts << "grep=#{URI::encode(options[:filter])}" if options[:filter].present? + (@suites[suite] || options[:files] || []).flatten.each { |file| parts << "file[]=#{URI::encode(file)}" } "#{parts.join('&')}" if parts.present? end def log(str, force = false) STDOUT.print("#{str}\n") if force || !Teaspoon.configuration.suppress_log