From 268cb0c6c5b4e6d2f46bccf2c8c92fe00c28584a Mon Sep 17 00:00:00 2001 From: Christian Williams & Kim Eric Mittler Date: Wed, 2 Sep 2009 12:16:16 -0700 Subject: [PATCH] Jasmine::Runner arranges for jasmine.js, json.js, and TrivialReporter.js to be included, so callers should remove those files. --- contrib/ruby/jasmine_runner.rb | 30 ++++++++++++++++++++++++++++-- contrib/ruby/run.html | 13 ++++++++++--- examples/ruby/Rakefile | 10 ++-------- examples/ruby/spec/jasmine_spec.rb | 9 +-------- 4 files changed, 41 insertions(+), 21 deletions(-) diff --git a/contrib/ruby/jasmine_runner.rb b/contrib/ruby/jasmine_runner.rb index 201abe7..26b1493 100644 --- a/contrib/ruby/jasmine_runner.rb +++ b/contrib/ruby/jasmine_runner.rb @@ -3,6 +3,10 @@ require 'erb' require 'json' module Jasmine + def self.root + File.expand_path(File.join(File.dirname(__FILE__), '../..')) + end + # this seemingly-over-complex method is necessary to get an open port on at least some of our Macs def self.open_socket_on_unused_port infos = Socket::getaddrinfo("localhost", nil, Socket::AF_UNSPEC, Socket::SOCK_STREAM, 0, Socket::AI_PASSIVE) @@ -65,6 +69,13 @@ module Jasmine spec_files = @spec_files_or_proc spec_files = spec_files.call if spec_files.respond_to?(:call) + css_files = ["/__JASMINE_ROOT__/lib/jasmine.css"] + 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" + ] + body = ERB.new(File.read(File.join(File.dirname(__FILE__), "run.html"))).result(binding) [ 200, @@ -88,6 +99,16 @@ module Jasmine end end + class JsAlert + def call(env) + [ + 200, + { 'Content-Type' => 'application/javascript' }, + "document.write('

Couldn\\'t load #{env["PATH_INFO"]}!

');" + ] + end + end + class SimpleServer def self.start(port, spec_files_or_proc, mappings) require 'thin' @@ -98,9 +119,14 @@ module Jasmine } mappings.each do |from, to| config[from] = Rack::File.new(to) - end + end - app = Rack::URLMap.new(config) + config["/__JASMINE_ROOT__"] = Rack::File.new(Jasmine.root) + + app = Rack::Cascade.new([ + Rack::URLMap.new(config), + JsAlert.new + ]) Thin::Server.start('0.0.0.0', port, app) end diff --git a/contrib/ruby/run.html b/contrib/ruby/run.html index 9b307c7..f11b042 100644 --- a/contrib/ruby/run.html +++ b/contrib/ruby/run.html @@ -3,10 +3,14 @@ Jasmine suite - - <% spec_files.each do |spec_file| %> - + <% css_files.each do |css_file| %> + <% end %> + + <% jasmine_files.each do |jasmine_file| %> + + <% end %> + + <% spec_files.each do |spec_file| %> + + <% end %> diff --git a/examples/ruby/Rakefile b/examples/ruby/Rakefile index 79f3945..39e7893 100644 --- a/examples/ruby/Rakefile +++ b/examples/ruby/Rakefile @@ -13,20 +13,14 @@ desc "Run specs via server" task :jasmine_server do require File.expand_path(File.join(File.dirname(__FILE__), "../../contrib/ruby/jasmine_spec_builder")) - JASMINE_LIB = File.expand_path(File.join(File.dirname(__FILE__), '../../lib')) dir_mappings = { - "/spec" => 'spec', - "/lib" => JASMINE_LIB + "/spec" => 'spec' } - includes = ['lib/' + File.basename(Dir.glob("#{JASMINE_LIB}/jasmine*.js").first), - 'lib/json2.js', - 'lib/TrivialReporter.js'] - spec_files = Dir.glob("spec/**/*[Ss]pec.js") puts "your tests are here:" puts " http://localhost:8888/run.html" - Jasmine::SimpleServer.start(8888, includes + spec_files, dir_mappings) + Jasmine::SimpleServer.start(8888, spec_files, dir_mappings) end diff --git a/examples/ruby/spec/jasmine_spec.rb b/examples/ruby/spec/jasmine_spec.rb index 9d7d6fc..6b2819b 100644 --- a/examples/ruby/spec/jasmine_spec.rb +++ b/examples/ruby/spec/jasmine_spec.rb @@ -2,19 +2,12 @@ require 'rubygems' require File.expand_path(File.join(File.dirname(__FILE__), "../../../contrib/ruby/jasmine_spec_builder")) require "selenium_rc" - -JASMINE_LIB = File.expand_path(File.join(File.dirname(__FILE__), '../../../lib')) dir_mappings = { "/spec" => 'spec', - "/lib" => JASMINE_LIB } -includes = ['lib/' + File.basename(Dir.glob("#{JASMINE_LIB}/jasmine*.js").first), - 'lib/json2.js', - 'lib/TrivialReporter.js'] - spec_files = Dir.glob("spec/**/*[Ss]pec.js") -jasmine_runner = Jasmine::Runner.new(SeleniumRC::Server.new.jar_path, includes + spec_files, dir_mappings) +jasmine_runner = Jasmine::Runner.new(SeleniumRC::Server.new.jar_path, spec_files, dir_mappings) spec_builder = Jasmine::SpecBuilder.new(spec_files, jasmine_runner) should_stop = false