flowerbox/lib/flowerbox.rb

158 lines
3.5 KiB
Ruby
Raw Normal View History

2012-02-22 16:47:07 +00:00
require "flowerbox/version"
2012-03-02 18:28:52 +00:00
require 'flowerbox-delivery'
2012-03-08 13:54:27 +00:00
require 'rainbow'
2012-02-22 16:47:07 +00:00
module Flowerbox
2012-03-13 17:21:32 +00:00
module CoreExt
autoload :Module, 'flowerbox/core_ext/module'
end
2012-03-02 18:28:52 +00:00
autoload :Runner, 'flowerbox/runner'
2012-02-22 16:47:07 +00:00
module Runner
autoload :Node, 'flowerbox/runner/node'
2012-02-23 21:12:00 +00:00
autoload :Selenium, 'flowerbox/runner/selenium'
2012-03-02 18:28:52 +00:00
autoload :Firefox, 'flowerbox/runner/firefox'
autoload :Chrome, 'flowerbox/runner/chrome'
2012-02-23 21:12:00 +00:00
autoload :Base, 'flowerbox/runner/base'
2012-02-22 16:47:07 +00:00
end
2012-03-02 18:28:52 +00:00
autoload :TestEnvironment, 'flowerbox/test_environment'
module TestEnvironment
2012-03-08 13:54:27 +00:00
autoload :Base, 'flowerbox/test_environment/base'
2012-03-02 18:28:52 +00:00
autoload :Jasmine, 'flowerbox/test_environment/jasmine'
2012-03-08 13:54:27 +00:00
autoload :Cucumber, 'flowerbox/test_environment/cucumber'
2012-03-02 18:28:52 +00:00
end
autoload :Rack, 'flowerbox/rack'
2012-03-02 20:04:41 +00:00
autoload :ResultSet, 'flowerbox/result_set'
autoload :GatheredResult, 'flowerbox/gathered_result'
autoload :Result, 'flowerbox/result'
2012-03-13 17:21:32 +00:00
autoload :Reporter, 'flowerbox/reporter'
2012-03-02 20:04:41 +00:00
2012-02-22 16:47:07 +00:00
class << self
2012-03-13 17:21:32 +00:00
attr_writer :reporters
def reset!
@spec_patterns = nil
@spec_files = nil
@asset_paths = nil
@reporters = nil
end
2012-02-22 16:47:07 +00:00
def spec_patterns
@spec_patterns ||= []
end
def asset_paths
@asset_paths ||= []
end
2012-03-13 17:21:32 +00:00
def reporters
@reporters ||= []
end
2012-02-22 16:47:07 +00:00
def test_with(what)
2012-03-02 18:28:52 +00:00
self.test_environment = Flowerbox::TestEnvironment.for(what)
2012-02-22 16:47:07 +00:00
end
2012-03-02 18:28:52 +00:00
def run_with(*whats)
2012-03-03 16:28:03 +00:00
self.runner_environment = whats.flatten.collect { |what| Flowerbox::Runner.for(what.to_s) }
2012-02-23 21:12:00 +00:00
end
2012-02-22 16:47:07 +00:00
2012-03-13 17:21:32 +00:00
def report_with(*whats)
self.reporters = whats.flatten.collect { |what| Flowerbox::Reporter.for(what.to_s) }
end
2012-02-23 21:12:00 +00:00
def path
Pathname(File.expand_path('../..', __FILE__))
2012-02-22 16:47:07 +00:00
end
2012-02-23 21:12:00 +00:00
attr_accessor :test_environment, :runner_environment, :bare_coffeescript
2012-02-22 16:47:07 +00:00
def configure
yield self
2012-03-02 18:28:52 +00:00
if spec_patterns.empty?
spec_patterns << "**/*_spec*"
spec_patterns << "*/*_spec*"
end
2012-03-13 17:21:32 +00:00
if reporters.empty?
reporters << Flowerbox::Reporter.for(:progress)
end
2012-03-02 18:28:52 +00:00
end
def bare_coffeescript
@bare_coffeescript ||= true
end
2012-03-03 16:28:03 +00:00
def run(dir, options = {})
2012-03-13 17:21:32 +00:00
reset!
2012-03-02 18:28:52 +00:00
load File.join(dir, 'spec_helper.rb')
2012-03-03 16:28:03 +00:00
if options[:runners]
Flowerbox.run_with(options[:runners].split(','))
end
2012-03-02 18:28:52 +00:00
require 'coffee_script'
require 'tilt/coffee'
Tilt::CoffeeScriptTemplate.default_bare = Flowerbox.bare_coffeescript
2012-03-02 20:04:41 +00:00
result_set = ResultSet.new
2012-03-13 17:21:32 +00:00
time = 0
realtime = Time.now.to_i
2012-03-02 20:04:41 +00:00
Flowerbox.runner_environment.each do |env|
2012-03-08 15:14:29 +00:00
env.ensure_configured!
2012-03-08 13:54:27 +00:00
result_set << env.run(build_sprockets_for(dir), spec_files_for(dir), options)
2012-03-13 17:21:32 +00:00
time += env.time
2012-03-02 18:28:52 +00:00
end
2012-03-13 17:21:32 +00:00
result_set.print(:time => time, :realtime => Time.now.to_i - realtime)
2012-03-02 20:04:41 +00:00
result_set.exitstatus
2012-03-02 18:28:52 +00:00
end
def build_sprockets_for(dir)
sprockets = Flowerbox::Delivery::SprocketsHandler.new(
:asset_paths => [
Flowerbox.path.join("lib/assets/javascripts"),
Flowerbox.path.join("vendor/assets/javascripts"),
dir,
Flowerbox.asset_paths
].flatten
)
sprockets.add('flowerbox')
sprockets.add('json2')
Flowerbox.test_environment.inject_into(sprockets)
sprockets
end
def spec_files_for(dir)
return @spec_files if @spec_files
@spec_files = []
Flowerbox.spec_patterns.each do |pattern|
Dir[File.join(dir, pattern)].each do |file|
2012-03-13 17:21:32 +00:00
@spec_files << File.expand_path(file)
2012-03-02 18:28:52 +00:00
end
end
@spec_files
2012-02-22 16:47:07 +00:00
end
end
end