let's run with a server, like all the cool kids do nowadays\!

This commit is contained in:
John Bintz 2012-01-12 15:02:32 -05:00
parent ed4590ee44
commit 5d43eb2193
5 changed files with 86 additions and 6 deletions

View File

@ -71,7 +71,7 @@ void Runner::loadSpec()
outputFiles.enqueue(outputFile); outputFiles.enqueue(outputFile);
} }
page.mainFrame()->load(QUrl::fromLocalFile(runnerFiles.dequeue())); page.mainFrame()->load(runnerFiles.dequeue());
ticker.start(); ticker.start();
} }

View File

@ -0,0 +1,7 @@
Feature: Bin - With Server
Scenario: Run using an HTTP server
Given there is no existing "spec/report.txt" file
When I run `bin/jasmine-headless-webkit --use-server -j spec/jasmine/success/success.yml -f File:spec/report.txt`
Then the exit status should be 0
And the report file "spec/report.txt" should have 1 total, 0 failures, no console usage

View File

@ -18,7 +18,8 @@ module Jasmine
:enable_cache => true, :enable_cache => true,
:files => [], :files => [],
:reporters => [ [ 'Console' ] ], :reporters => [ [ 'Console' ] ],
:quiet => false :quiet => false,
:use_server => false
} }
DEFAULTS_FILE = File.join(Dir.pwd, '.jasmine-headless-webkit') DEFAULTS_FILE = File.join(Dir.pwd, '.jasmine-headless-webkit')
@ -75,6 +76,8 @@ module Jasmine
@options[:seed] = arg.to_i @options[:seed] = arg.to_i
when '--format', '-f' when '--format', '-f'
add_reporter(arg) add_reporter(arg)
when '--use-server'
@options[:use_server] = true
when '--out' when '--out'
add_reporter_file(arg) add_reporter_file(arg)
when '-h', '--help' when '-h', '--help'
@ -107,6 +110,7 @@ module Jasmine
[ '--seed', GetoptLong::REQUIRED_ARGUMENT ], [ '--seed', GetoptLong::REQUIRED_ARGUMENT ],
[ '--format', '-f', GetoptLong::REQUIRED_ARGUMENT ], [ '--format', '-f', GetoptLong::REQUIRED_ARGUMENT ],
[ '--out', GetoptLong::REQUIRED_ARGUMENT ], [ '--out', GetoptLong::REQUIRED_ARGUMENT ],
[ '--use-server', GetoptLong::NO_ARGUMENT ],
[ '-h', '--help', GetoptLong::NO_ARGUMENT ], [ '-h', '--help', GetoptLong::NO_ARGUMENT ],
[ '-q', '--quiet', GetoptLong::NO_ARGUMENT ] [ '-q', '--quiet', GetoptLong::NO_ARGUMENT ]
) )
@ -165,8 +169,9 @@ module Jasmine
[ '--runner-out <filename>', 'Write runner to specified filename' ], [ '--runner-out <filename>', 'Write runner to specified filename' ],
[ '-j, --jasmine-config <config file>', 'Jasmine Yaml config to use' ], [ '-j, --jasmine-config <config file>', 'Jasmine Yaml config to use' ],
[ '--no-full-run', 'Do not perform a full spec run after a successful targeted spec run' ], [ '--no-full-run', 'Do not perform a full spec run after a successful targeted spec run' ],
[ '--use-server', 'Load tests from an HTTP server instead of from filesystem' ],
[ '-l, --list', 'List files in the order they will be required' ], [ '-l, --list', 'List files in the order they will be required' ],
[ '--seed', 'Random order seed for spec file ordering' ], [ '--seed <seed>', 'Random order seed for spec file ordering' ],
[ '-f, --format <reporter<:filename>>', 'Specify an output reporter and possibly output filename' ], [ '-f, --format <reporter<:filename>>', 'Specify an output reporter and possibly output filename' ],
[ '--out <filename>', 'Specify output filename for last defined reporter' ], [ '--out <filename>', 'Specify output filename for last defined reporter' ],
[ '-q, --quiet', "Silence most non-test related warnings" ], [ '-q, --quiet', "Silence most non-test related warnings" ],

View File

@ -7,7 +7,6 @@ require 'yaml'
require 'erb' require 'erb'
require 'sprockets' require 'sprockets'
module Jasmine module Jasmine
module Headless module Headless
class Runner class Runner
@ -63,7 +62,11 @@ module Jasmine
command << "-r #{file}" command << "-r #{file}"
end end
command += targets.flatten.collect { |target| File.expand_path(target) } command += targets.flatten.collect do |target|
target = File.expand_path(target)
target = server_uri + target if options[:use_server]
target
end
command.compact.join(' ') command.compact.join(' ')
end end
@ -83,7 +86,13 @@ module Jasmine
end end
end end
system jasmine_command(run_targets) runner = lambda { system jasmine_command(run_targets) }
if options[:use_server]
wrap_in_server(&runner)
else
runner.call
end
@_status = $?.exitstatus @_status = $?.exitstatus
ensure ensure
@ -111,7 +120,54 @@ module Jasmine
) )
end end
def wrap_in_server
require 'rack'
require 'webrick'
require 'thread'
require 'net/http'
server = Thread.new do
responder = lambda do |env|
file = Pathname(env['PATH_INFO'])
if file.file?
[ 200, { 'Content-Type' => 'text/html' }, [ file.read ] ]
else
[ 404, {}, [ 'Not found' ] ]
end
end
Rack::Handler::WEBrick.run(responder, :Port => server_port, :Logger => Logger.new(StringIO.new), :AccessLog => [ nil, nil ])
end
while true do
begin
Net::HTTP.get(URI(server_uri))
break
rescue Errno::ECONNREFUSED => e
end
sleep 0.1
end
yield
Thread.kill(server)
end
private private
def server_port
@server_port ||= 21000 + rand(1000)
end
def server_interface
'127.0.0.1'
end
def server_uri
"http://#{server_interface}:#{server_port}"
end
def jasmine_config_data def jasmine_config_data
raise JasmineConfigNotFound.new("Jasmine config not found. I tried #{@options[:jasmine_config]}.") if !File.file?(@options[:jasmine_config]) raise JasmineConfigNotFound.new("Jasmine config not found. I tried #{@options[:jasmine_config]}.") if !File.file?(@options[:jasmine_config])

View File

@ -100,6 +100,18 @@ describe Jasmine::Headless::Runner do
it_should_have_basics it_should_have_basics
it { should include("-q") } it { should include("-q") }
end end
context 'server' do
let(:server_uri) { 'server uri' }
before do
options[:use_server] = true
runner.stubs(:server_uri).returns(server_uri)
end
it { should include(server_uri + File.expand_path(target)) }
end
end end
describe '#runner_filename' do describe '#runner_filename' do