Refactor config file/path handling.
This commit is contained in:
parent
2045226ba7
commit
81aeeeedee
@ -28,12 +28,12 @@ Gem::Specification.new do |s|
|
|||||||
"lib/jasmine/jasmine_helper.rb",
|
"lib/jasmine/jasmine_helper.rb",
|
||||||
"lib/jasmine/jasmine_meta_spec.rb",
|
"lib/jasmine/jasmine_meta_spec.rb",
|
||||||
"lib/jasmine/jasmine_runner.rb",
|
"lib/jasmine/jasmine_runner.rb",
|
||||||
"lib/jasmine/jasmine_spec_builder.rb",
|
"lib/jasmine/spec_builder.rb",
|
||||||
"lib/jasmine/run.html",
|
"lib/jasmine/run.html",
|
||||||
"templates/Rakefile",
|
"templates/Rakefile",
|
||||||
"templates/example_spec.js",
|
"templates/ExampleSpec.js",
|
||||||
"templates/jasmine_helper.rb",
|
"templates/jasmine_helper.rb",
|
||||||
"templates/spec_helper.js"
|
"templates/SpecHelper.js"
|
||||||
]
|
]
|
||||||
s.homepage = %q{http://github.com/ragaskar/jasmine}
|
s.homepage = %q{http://github.com/ragaskar/jasmine}
|
||||||
s.rdoc_options = ["--charset=UTF-8"]
|
s.rdoc_options = ["--charset=UTF-8"]
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
require 'jasmine/base'
|
require 'jasmine/base'
|
||||||
require 'jasmine/config'
|
require 'jasmine/config'
|
||||||
require 'jasmine/server'
|
require 'jasmine/server'
|
||||||
|
require 'jasmine/selenium_driver'
|
||||||
|
|
||||||
require 'jasmine/jasmine_helper'
|
require 'jasmine/jasmine_helper'
|
||||||
require 'jasmine/jasmine_spec_builder'
|
require 'jasmine/spec_builder'
|
@ -16,7 +16,7 @@ module Jasmine
|
|||||||
|
|
||||||
def start
|
def start
|
||||||
start_servers
|
start_servers
|
||||||
@client = Jasmine::SimpleClient.new("localhost", @selenium_server_port, "*#{@browser}", "http://localhost:#{@jasmine_server_port}/")
|
@client = Jasmine::SeleniumDriver.new("localhost", @selenium_server_port, "*#{@browser}", "http://localhost:#{@jasmine_server_port}/")
|
||||||
@client.connect
|
@client.connect
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -83,8 +83,40 @@ module Jasmine
|
|||||||
raise "You need to declare a spec_files method in #{self.class}!"
|
raise "You need to declare a spec_files method in #{self.class}!"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def match_files(dir, pattern)
|
||||||
|
dir = File.expand_path(dir)
|
||||||
|
Dir.glob(File.join(dir, pattern)).collect {|f| f.sub("#{dir}/", "")}.sort
|
||||||
|
end
|
||||||
|
|
||||||
|
def src_files
|
||||||
|
match_files(src_dir, "**/*.js")
|
||||||
|
end
|
||||||
|
|
||||||
|
def src_path
|
||||||
|
"src"
|
||||||
|
end
|
||||||
|
|
||||||
|
def spec_path
|
||||||
|
"spec"
|
||||||
|
end
|
||||||
|
|
||||||
|
def spec_files
|
||||||
|
match_files(spec_dir, "**/*.js")
|
||||||
|
end
|
||||||
|
|
||||||
|
def mappings
|
||||||
|
{
|
||||||
|
"/" + src_path => src_dir,
|
||||||
|
"/" + spec_path => spec_dir
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
def js_files
|
def js_files
|
||||||
src_files + spec_files
|
src_files.collect {|f| File.join(src_path, f) } + spec_files.collect {|f| File.join(spec_path, f) }
|
||||||
|
end
|
||||||
|
|
||||||
|
def spec_files_full_paths
|
||||||
|
spec_files.collect {|spec_file| File.join(spec_dir, spec_file) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
@ -6,7 +6,7 @@ if File.exist?(helper_overrides)
|
|||||||
require helper_overrides
|
require helper_overrides
|
||||||
end
|
end
|
||||||
require File.expand_path(File.join(File.dirname(__FILE__), "jasmine_runner.rb"))
|
require File.expand_path(File.join(File.dirname(__FILE__), "jasmine_runner.rb"))
|
||||||
require File.expand_path(File.join(File.dirname(__FILE__), "jasmine_spec_builder"))
|
require File.expand_path(File.join(File.dirname(__FILE__), "spec_builder"))
|
||||||
|
|
||||||
jasmine_runner = Jasmine::Runner.new(SeleniumRC::Server.new.jar_path,
|
jasmine_runner = Jasmine::Runner.new(SeleniumRC::Server.new.jar_path,
|
||||||
Dir.pwd,
|
Dir.pwd,
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
module Jasmine
|
|
||||||
|
|
||||||
end
|
|
44
lib/jasmine/selenium_driver.rb
Normal file
44
lib/jasmine/selenium_driver.rb
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
module Jasmine
|
||||||
|
class SeleniumDriver
|
||||||
|
def initialize(selenium_host, selenium_port, selenium_browser_start_command, http_address)
|
||||||
|
require 'selenium/client'
|
||||||
|
@driver = Selenium::Client::Driver.new(
|
||||||
|
selenium_host,
|
||||||
|
selenium_port,
|
||||||
|
selenium_browser_start_command,
|
||||||
|
http_address
|
||||||
|
)
|
||||||
|
@http_address = http_address
|
||||||
|
end
|
||||||
|
|
||||||
|
def tests_have_finished?
|
||||||
|
@driver.get_eval("window.jasmine.getEnv().currentRunner.finished") == "true"
|
||||||
|
end
|
||||||
|
|
||||||
|
def connect
|
||||||
|
@driver.start
|
||||||
|
@driver.open("/")
|
||||||
|
end
|
||||||
|
|
||||||
|
def disconnect
|
||||||
|
@driver.stop
|
||||||
|
end
|
||||||
|
|
||||||
|
def run
|
||||||
|
until tests_have_finished? do
|
||||||
|
sleep 0.1
|
||||||
|
end
|
||||||
|
|
||||||
|
puts @driver.get_eval("window.results()")
|
||||||
|
failed_count = @driver.get_eval("window.jasmine.getEnv().currentRunner.results().failedCount").to_i
|
||||||
|
failed_count == 0
|
||||||
|
end
|
||||||
|
|
||||||
|
def eval_js(script)
|
||||||
|
escaped_script = "'" + script.gsub(/(['\\])/) { '\\' + $1 } + "'"
|
||||||
|
|
||||||
|
result = @driver.get_eval(" try { eval(#{escaped_script}, window); } catch(err) { window.eval(#{escaped_script}); }")
|
||||||
|
JSON.parse("[#{result}]")[0]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -127,47 +127,4 @@ module Jasmine
|
|||||||
thin.stop
|
thin.stop
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class SimpleClient
|
|
||||||
def initialize(selenium_host, selenium_port, selenium_browser_start_command, http_address)
|
|
||||||
require 'selenium/client'
|
|
||||||
@driver = Selenium::Client::Driver.new(
|
|
||||||
selenium_host,
|
|
||||||
selenium_port,
|
|
||||||
selenium_browser_start_command,
|
|
||||||
http_address
|
|
||||||
)
|
|
||||||
@http_address = http_address
|
|
||||||
end
|
|
||||||
|
|
||||||
def tests_have_finished?
|
|
||||||
@driver.get_eval("window.jasmine.getEnv().currentRunner.finished") == "true"
|
|
||||||
end
|
|
||||||
|
|
||||||
def connect
|
|
||||||
@driver.start
|
|
||||||
@driver.open("/")
|
|
||||||
end
|
|
||||||
|
|
||||||
def disconnect
|
|
||||||
@driver.stop
|
|
||||||
end
|
|
||||||
|
|
||||||
def run
|
|
||||||
until tests_have_finished? do
|
|
||||||
sleep 0.1
|
|
||||||
end
|
|
||||||
|
|
||||||
puts @driver.get_eval("window.results()")
|
|
||||||
failed_count = @driver.get_eval("window.jasmine.getEnv().currentRunner.results().failedCount").to_i
|
|
||||||
failed_count == 0
|
|
||||||
end
|
|
||||||
|
|
||||||
def eval_js(script)
|
|
||||||
escaped_script = "'" + script.gsub(/(['\\])/) { '\\' + $1 } + "'"
|
|
||||||
|
|
||||||
result = @driver.get_eval(" try { eval(#{escaped_script}, window); } catch(err) { window.eval(#{escaped_script}); }")
|
|
||||||
JSON.parse("[#{result}]")[0]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
@ -1,12 +1,13 @@
|
|||||||
require 'enumerator'
|
require 'enumerator'
|
||||||
module Jasmine
|
|
||||||
|
|
||||||
|
module Jasmine
|
||||||
class SpecBuilder
|
class SpecBuilder
|
||||||
attr_accessor :suites
|
attr_accessor :suites
|
||||||
|
|
||||||
def initialize(runner)
|
def initialize(config)
|
||||||
@spec_files = runner.spec_files
|
@config = config
|
||||||
@runner = runner
|
@spec_files = config.spec_files
|
||||||
|
@runner = config
|
||||||
@spec_ids = []
|
@spec_ids = []
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -31,7 +32,7 @@ module Jasmine
|
|||||||
|
|
||||||
example_name_parts = []
|
example_name_parts = []
|
||||||
previous_indent_level = 0
|
previous_indent_level = 0
|
||||||
@spec_files.each do |filename|
|
@config.spec_files_full_paths.each do |filename|
|
||||||
line_number = 1
|
line_number = 1
|
||||||
File.open(filename, "r") do |file|
|
File.open(filename, "r") do |file|
|
||||||
file.readlines.each do |line|
|
file.readlines.each do |line|
|
53
spec/config_spec.rb
Normal file
53
spec/config_spec.rb
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
|
||||||
|
|
||||||
|
describe Jasmine::Config do
|
||||||
|
before(:each) do
|
||||||
|
@template_dir = File.expand_path(File.join(File.dirname(__FILE__), "../templates"))
|
||||||
|
@config = Jasmine::Config.new
|
||||||
|
@config.stub!(:src_dir).and_return(File.join(@template_dir, "public"))
|
||||||
|
@config.stub!(:spec_dir).and_return(File.join(@template_dir, "spec"))
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should provide a list of all src and spec files" do
|
||||||
|
@config.src_files.should == ['javascripts/Example.js']
|
||||||
|
@config.spec_files.should == ['javascript/ExampleSpec.js', 'javascript/SpecHelper.js']
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should provide a list of all spec files with full paths" do
|
||||||
|
@config.spec_files_full_paths.should == [
|
||||||
|
File.join(@template_dir, 'spec/javascript/ExampleSpec.js'),
|
||||||
|
File.join(@template_dir, 'spec/javascript/SpecHelper.js')
|
||||||
|
]
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should provide a list of all js files" do
|
||||||
|
@config.js_files.should == [
|
||||||
|
'src/javascripts/Example.js',
|
||||||
|
'spec/javascript/ExampleSpec.js',
|
||||||
|
'spec/javascript/SpecHelper.js',
|
||||||
|
]
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should provide dir mappings" do
|
||||||
|
@config.mappings.should == {
|
||||||
|
'/src' => @config.src_dir,
|
||||||
|
'/spec' => @config.spec_dir
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should allow overriding src and spec paths" do
|
||||||
|
@config.stub!(:src_path).and_return("public")
|
||||||
|
@config.stub!(:spec_path).and_return("spekz")
|
||||||
|
|
||||||
|
@config.js_files.should == [
|
||||||
|
'public/javascripts/Example.js',
|
||||||
|
'spekz/javascript/ExampleSpec.js',
|
||||||
|
'spekz/javascript/SpecHelper.js',
|
||||||
|
]
|
||||||
|
|
||||||
|
@config.mappings.should == {
|
||||||
|
'/public' => @config.src_dir,
|
||||||
|
'/spekz' => @config.spec_dir
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
@ -9,22 +9,7 @@ class JasmineSelfTestConfig < Jasmine::Config
|
|||||||
File.join(proj_root, 'src')
|
File.join(proj_root, 'src')
|
||||||
end
|
end
|
||||||
|
|
||||||
def src_files
|
|
||||||
Dir.glob(File.join(src_dir, "**/*.js"))
|
|
||||||
end
|
|
||||||
|
|
||||||
def spec_dir
|
def spec_dir
|
||||||
File.join(proj_root, 'jasmine/spec')
|
File.join(proj_root, 'jasmine/spec')
|
||||||
end
|
end
|
||||||
|
|
||||||
def spec_files
|
|
||||||
Dir.glob(File.join(spec_dir, "**/*[Ss]pec.js")).collect { |f| f.sub("#{spec_dir}/", "spec/") }
|
|
||||||
end
|
|
||||||
|
|
||||||
def mappings
|
|
||||||
{
|
|
||||||
"/src" => src_dir,
|
|
||||||
"/spec" => spec_dir
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
end
|
@ -1,6 +1,8 @@
|
|||||||
|
require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
|
||||||
|
|
||||||
require 'jasmine_self_test_config'
|
require 'jasmine_self_test_config'
|
||||||
|
|
||||||
jasmine_runner = JasmineSelfTestRunner.new
|
jasmine_runner = JasmineSelfTestConfig.new
|
||||||
spec_builder = Jasmine::SpecBuilder.new(jasmine_runner)
|
spec_builder = Jasmine::SpecBuilder.new(jasmine_runner)
|
||||||
|
|
||||||
should_stop = false
|
should_stop = false
|
2
templates/public/javascripts/example.js
Normal file
2
templates/public/javascripts/example.js
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
ExampleClass = function() {
|
||||||
|
};
|
@ -1,9 +1,9 @@
|
|||||||
describe('ExampleSuite', function () {
|
describe('Example', function () {
|
||||||
it('should have a passing test', function() {
|
it('should have a passing test', function() {
|
||||||
expect(true).toEqual(true);
|
expect(true).toEqual(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Nested Describe', function () {
|
describe('nested describe', function () {
|
||||||
it('should also have a passing test', function () {
|
it('should also have a passing test', function () {
|
||||||
expect(true).toEqual(true);
|
expect(true).toEqual(true);
|
||||||
});
|
});
|
Loading…
Reference in New Issue
Block a user