diff --git a/contrib/ruby/jasmine_runner.rb b/contrib/ruby/jasmine_runner.rb index 633c89f6..857bec08 100644 --- a/contrib/ruby/jasmine_runner.rb +++ b/contrib/ruby/jasmine_runner.rb @@ -20,14 +20,14 @@ module Jasmine end class RunAdapter - def initialize(spec_files) - p "spec_files: #{spec_files}" - - @spec_files = spec_files + def initialize(spec_files_or_proc) + @spec_files_or_proc = spec_files_or_proc end def call(env) - spec_files = @spec_files + spec_files = @spec_files_or_proc + spec_files = spec_files.call if spec_files.respond_to?(:call) + body = ERB.new(File.read(File.join(File.dirname(__FILE__), "run.html"))).result(binding) [ 200, @@ -38,11 +38,11 @@ module Jasmine end class SimpleServer - def self.start(port, spec_dir, mappings) + def self.start(port, spec_files_or_proc, mappings) require 'thin' config = { - '/run.html' => Jasmine::RunAdapter.new(spec_dir) + '/run.html' => Jasmine::RunAdapter.new(spec_files_or_proc) } mappings.each do |from, to| config[from] = Rack::File.new(to) @@ -50,7 +50,6 @@ module Jasmine app = Rack::URLMap.new(config) - server_port = Jasmine::find_unused_port Thin::Server.start('0.0.0.0', port, app) end end diff --git a/contrib/ruby/jasmine_runner_spec.rb b/contrib/ruby/jasmine_runner_spec.rb new file mode 100644 index 00000000..5a287eed --- /dev/null +++ b/contrib/ruby/jasmine_runner_spec.rb @@ -0,0 +1,51 @@ +require 'spec' +require 'open-uri' +require File.dirname(__FILE__) + '/jasmine_runner' + +describe Jasmine::SimpleServer do + before do + @port = Jasmine::find_unused_port + end + + after do + Process.kill "TERM", -@jasmine_server_pid if @jasmine_server_pid + end + + it "should start and print script tags" do + @jasmine_server_pid = fork do + Process.setpgrp + Jasmine::SimpleServer.start(@port, ["file1", "file2"], {}) + exit! 0 + end + + Jasmine::Runner.new(nil, nil, nil).wait_for_listener(@port) + + run_html = open("http://localhost:#{@port}/run.html").read + run_html.should =~ /