From beddbaf5c7efbd0891a3bdb042c033bc6643ce16 Mon Sep 17 00:00:00 2001 From: Rajan Agaskar & Ryan Dy Date: Wed, 14 Oct 2009 10:28:23 -0700 Subject: [PATCH] update jasmine runner to take focus spec --- contrib/ruby/jasmine_runner.rb | 67 ++++++++++++++++++++++++++-------- contrib/ruby/run.html | 4 ++ 2 files changed, 56 insertions(+), 15 deletions(-) diff --git a/contrib/ruby/jasmine_runner.rb b/contrib/ruby/jasmine_runner.rb index 6d27b6b..98f241a 100644 --- a/contrib/ruby/jasmine_runner.rb +++ b/contrib/ruby/jasmine_runner.rb @@ -61,25 +61,32 @@ module Jasmine end class RunAdapter - def initialize(spec_files_or_proc, jasmine_files = nil, stylesheets = []) - @spec_files_or_proc = spec_files_or_proc - @jasmine_files = jasmine_files || [ + def initialize(spec_files_or_proc, options = {}) + @spec_files_or_proc = Jasmine.files(spec_files_or_proc) + @jasmine_files = options[:jasmine_files] || [ "/__JASMINE_ROOT__/lib/" + File.basename(Dir.glob("#{Jasmine.root}/lib/jasmine*.js").first), "/__JASMINE_ROOT__/lib/TrivialReporter.js", "/__JASMINE_ROOT__/lib/json2.js" ] - @stylesheets = ["/__JASMINE_ROOT__/lib/jasmine.css"] + stylesheets + @stylesheets = ["/__JASMINE_ROOT__/lib/jasmine.css"] + (Jasmine.files(options[:stylesheets])) + @spec_helpers = Jasmine.files(options[:spec_helpers]) end def call(env) + run + end + + def run + stylesheets = @stylesheets + spec_helpers = @spec_helpers spec_files = @spec_files_or_proc - spec_files = spec_files.call if spec_files.respond_to?(:call) jasmine_files = @jasmine_files jasmine_files = jasmine_files.call if jasmine_files.respond_to?(:call) css_files = @stylesheets + body = ERB.new(File.read(File.join(File.dirname(__FILE__), "run.html"))).result(binding) [ 200, @@ -87,6 +94,8 @@ module Jasmine body ] end + + end class Redirect @@ -113,13 +122,36 @@ module Jasmine end end - class SimpleServer - def self.start(port, spec_files_or_proc, mappings, jasmine_files = nil, stylesheets = []) - require 'thin' + class FocusedSuite + def initialize(spec_files_or_proc, options) + @spec_files_or_proc = Jasmine.files(spec_files_or_proc) + @options = options + end + def call(env) + spec_files = @spec_files_or_proc + matching_specs = spec_files.select {|spec_file| spec_file =~ /#{Regexp.escape(env["PATH_INFO"])}/ }.compact + if !matching_specs.empty? + run_adapter = Jasmine::RunAdapter.new(matching_specs, @options) + run_adapter.run + else + [ + 200, + { 'Content-Type' => 'application/javascript' }, + "document.write('

Couldn\\'t find any specs matching #{env["PATH_INFO"]}!

');" + ] + end + end + + end + + class SimpleServer + def self.start(port, spec_files_or_proc, mappings, options) + require 'thin' config = { + '/suites' => Jasmine::FocusedSuite.new(spec_files_or_proc, options), '/run.html' => Jasmine::Redirect.new('/'), - '/' => Jasmine::RunAdapter.new(spec_files_or_proc, jasmine_files, stylesheets) + '/' => Jasmine::RunAdapter.new(spec_files_or_proc, options) } mappings.each do |from, to| config[from] = Rack::File.new(to) @@ -180,15 +212,13 @@ module Jasmine end class Runner - def initialize(selenium_jar_path, spec_files, dir_mappings, jasmine_files = nil, options={}) + def initialize(selenium_jar_path, spec_files, dir_mappings, options={}) @selenium_jar_path = selenium_jar_path @spec_files = spec_files @dir_mappings = dir_mappings - @jasmine_files = jasmine_files - @browser = options[:browser] || 'firefox' - @stylesheets = options[:stylesheets] || [] - + @options = options + @browser = options[:browser] ? options[:browser].delete(:browser) : 'firefox' @selenium_pid = nil @jasmine_server_pid = nil end @@ -216,7 +246,7 @@ module Jasmine @jasmine_server_pid = fork do Process.setpgrp - Jasmine::SimpleServer.start(@jasmine_server_port, @spec_files, @dir_mappings, @jasmine_files, @stylesheets) + Jasmine::SimpleServer.start(@jasmine_server_port, @spec_files, @dir_mappings, @options) exit! 0 end puts "jasmine server started. pid is #{@jasmine_server_pid}" @@ -246,4 +276,11 @@ module Jasmine @client.eval_js(script) end end + + def self.files(f) + result = f + result = result.call if result.respond_to?(:call) + result || [] + end + end diff --git a/contrib/ruby/run.html b/contrib/ruby/run.html index ec6e89f..4eee83b 100644 --- a/contrib/ruby/run.html +++ b/contrib/ruby/run.html @@ -11,6 +11,10 @@ <% end %> + <% spec_helpers.each do |spec_helper| %> + + <% end %> +