simplfy, always use server for file delivery
This commit is contained in:
parent
cbdb553c42
commit
230034ed16
2
.gitignore
vendored
2
.gitignore
vendored
@ -15,3 +15,5 @@ spec/reports
|
|||||||
test/tmp
|
test/tmp
|
||||||
test/version_tmp
|
test/version_tmp
|
||||||
tmp
|
tmp
|
||||||
|
.tmp
|
||||||
|
|
||||||
|
@ -21,6 +21,6 @@ Gem::Specification.new do |gem|
|
|||||||
|
|
||||||
gem.add_dependency 'flowerbox-delivery'
|
gem.add_dependency 'flowerbox-delivery'
|
||||||
gem.add_dependency 'thor'
|
gem.add_dependency 'thor'
|
||||||
gem.add_dependency 'capybara'
|
gem.add_dependency 'selenium-webdriver'
|
||||||
gem.add_dependency 'sinatra'
|
gem.add_dependency 'sinatra'
|
||||||
end
|
end
|
||||||
|
@ -7,6 +7,8 @@ module Flowerbox
|
|||||||
autoload :Base, 'flowerbox/runner/base'
|
autoload :Base, 'flowerbox/runner/base'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
autoload :Rack, 'flowerbox/rack'
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
def spec_patterns
|
def spec_patterns
|
||||||
@spec_patterns ||= []
|
@spec_patterns ||= []
|
||||||
|
30
lib/flowerbox/rack.rb
Normal file
30
lib/flowerbox/rack.rb
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
require 'sinatra'
|
||||||
|
|
||||||
|
module Flowerbox
|
||||||
|
class Rack < Sinatra::Base
|
||||||
|
class << self
|
||||||
|
attr_accessor :runner
|
||||||
|
end
|
||||||
|
|
||||||
|
def runner
|
||||||
|
self.class.runner
|
||||||
|
end
|
||||||
|
|
||||||
|
post '/results' do
|
||||||
|
runner.results = request.body.string
|
||||||
|
end
|
||||||
|
|
||||||
|
post '/log' do
|
||||||
|
runner.log(request.body.string)
|
||||||
|
end
|
||||||
|
|
||||||
|
get %r{^/__F__(/.*)$} do |file|
|
||||||
|
File.read(file)
|
||||||
|
end
|
||||||
|
|
||||||
|
get '/' do
|
||||||
|
runner.template
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -14,6 +14,15 @@ module Flowerbox
|
|||||||
def start_test_environment
|
def start_test_environment
|
||||||
Flowerbox.test_environment.start_for(type)
|
Flowerbox.test_environment.start_for(type)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def server
|
||||||
|
return @server if @server
|
||||||
|
|
||||||
|
@server = Flowerbox::Delivery::Server.new(:app => Flowerbox::Rack)
|
||||||
|
Flowerbox::Rack.runner = self
|
||||||
|
|
||||||
|
@server
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
require 'tempfile'
|
require 'tempfile'
|
||||||
|
require 'flowerbox/delivery/server'
|
||||||
|
require 'json'
|
||||||
|
|
||||||
module Flowerbox
|
module Flowerbox
|
||||||
module Runner
|
module Runner
|
||||||
@ -10,8 +12,12 @@ module Flowerbox
|
|||||||
file.print template
|
file.print template
|
||||||
file.close
|
file.close
|
||||||
|
|
||||||
|
server.start
|
||||||
|
|
||||||
system %{node #{file.path}}
|
system %{node #{file.path}}
|
||||||
|
|
||||||
|
server.stop
|
||||||
|
|
||||||
$?.exitstatus
|
$?.exitstatus
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -20,20 +26,47 @@ module Flowerbox
|
|||||||
|
|
||||||
<<-JS
|
<<-JS
|
||||||
var fs = require('fs'),
|
var fs = require('fs'),
|
||||||
vm = require('vm');
|
vm = require('vm'),
|
||||||
|
http = require('http');
|
||||||
|
|
||||||
// expand the sandbox a bit
|
// expand the sandbox a bit
|
||||||
var context = function() {};
|
var context = function() {};
|
||||||
context.window = true;
|
context.window = true;
|
||||||
for (method in global) { context[method] = global[method]; }
|
for (method in global) { context[method] = global[method]; }
|
||||||
|
|
||||||
#{template_files.join("\n")}
|
var files = #{sprockets.files.to_json};
|
||||||
#{env}
|
var fileRunner = function() {
|
||||||
JS
|
if (files.length > 0) {
|
||||||
end
|
var file = files.shift();
|
||||||
|
console.log(file);
|
||||||
|
|
||||||
def template_files
|
var options = {
|
||||||
sprockets.files.collect { |file| %{vm.runInNewContext(fs.readFileSync('#{file}', 'utf-8'), context, '#{file}');} }
|
host: "localhost",
|
||||||
|
port: #{server.port},
|
||||||
|
path: "/__F__" + file,
|
||||||
|
method: "GET"
|
||||||
|
};
|
||||||
|
|
||||||
|
var request = http.request(options, function(response) {
|
||||||
|
var data = '';
|
||||||
|
|
||||||
|
response.on('data', function(chunk) {
|
||||||
|
data += chunk;
|
||||||
|
});
|
||||||
|
|
||||||
|
response.on('end', function() {
|
||||||
|
vm.runInNewContext(data, context, file);
|
||||||
|
fileRunner();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
request.end();
|
||||||
|
} else {
|
||||||
|
#{env}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
fileRunner();
|
||||||
|
JS
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,54 +1,20 @@
|
|||||||
require 'capybara'
|
require 'selenium-webdriver'
|
||||||
require 'capybara/dsl'
|
|
||||||
require 'sinatra'
|
|
||||||
require 'thread'
|
|
||||||
|
|
||||||
module Flowerbox
|
module Flowerbox
|
||||||
module Runner
|
module Runner
|
||||||
class Selenium < Base
|
class Selenium < Base
|
||||||
include Capybara::DSL
|
|
||||||
|
|
||||||
class Rack < Sinatra::Base
|
|
||||||
class << self
|
|
||||||
attr_accessor :runner
|
|
||||||
end
|
|
||||||
|
|
||||||
def runner
|
|
||||||
self.class.runner
|
|
||||||
end
|
|
||||||
|
|
||||||
post '/results' do
|
|
||||||
runner.results = request.body.string
|
|
||||||
end
|
|
||||||
|
|
||||||
post '/log' do
|
|
||||||
runner.log(request.body.string)
|
|
||||||
end
|
|
||||||
|
|
||||||
get %r{^/__F__(/.*)$} do |file|
|
|
||||||
File.read(file)
|
|
||||||
end
|
|
||||||
|
|
||||||
get '/' do
|
|
||||||
runner.template
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
attr_accessor :browser, :results
|
attr_accessor :browser, :results
|
||||||
|
|
||||||
def run(sprockets)
|
def run(sprockets)
|
||||||
super
|
super
|
||||||
|
|
||||||
Capybara.register_driver :firefox do |app|
|
selenium = ::Selenium::WebDriver.for :firefox
|
||||||
Capybara::Selenium::Driver.new(app, :browser => :firefox)
|
|
||||||
end
|
|
||||||
|
|
||||||
Capybara.default_driver = :firefox
|
|
||||||
|
|
||||||
Rack.runner = self
|
Rack.runner = self
|
||||||
Capybara.app = Rack
|
|
||||||
|
|
||||||
visit '/'
|
server.start
|
||||||
|
|
||||||
|
selenium.navigate.to "http://localhost:#{server.port}/"
|
||||||
|
|
||||||
1.upto(30) do
|
1.upto(30) do
|
||||||
if results
|
if results
|
||||||
@ -65,6 +31,8 @@ module Flowerbox
|
|||||||
else
|
else
|
||||||
exit 1
|
exit 1
|
||||||
end
|
end
|
||||||
|
ensure
|
||||||
|
selenium.quit if selenium
|
||||||
end
|
end
|
||||||
|
|
||||||
def log(msg)
|
def log(msg)
|
||||||
|
10
spec/javascripts/spec_helper.rb
Normal file
10
spec/javascripts/spec_helper.rb
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
Flowerbox.configure do |c|
|
||||||
|
c.test_with :jasmine
|
||||||
|
c.run_with :selenium
|
||||||
|
|
||||||
|
c.spec_patterns << "*_spec.*"
|
||||||
|
c.spec_patterns << "**/*_spec.*"
|
||||||
|
|
||||||
|
c.test_environment.reporters << "SimpleSeleniumReporter"
|
||||||
|
end
|
||||||
|
|
5
spec/javascripts/test_spec.js
Normal file
5
spec/javascripts/test_spec.js
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
describe("cats", function() {
|
||||||
|
it("should hiss", function() {
|
||||||
|
expect("hiss").toEqual("hiss");
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user