Permalink
Browse files

Refactor config file/path handling.

  • Loading branch information...
1 parent 2045226 commit 81aeeeedee149b62d00332fa90ec736449e5b05b @xian xian committed Dec 28, 2009
View
6 jasmine-ruby.gemspec
@@ -28,12 +28,12 @@ Gem::Specification.new do |s|
"lib/jasmine/jasmine_helper.rb",
"lib/jasmine/jasmine_meta_spec.rb",
"lib/jasmine/jasmine_runner.rb",
- "lib/jasmine/jasmine_spec_builder.rb",
+ "lib/jasmine/spec_builder.rb",
"lib/jasmine/run.html",
"templates/Rakefile",
- "templates/example_spec.js",
+ "templates/ExampleSpec.js",
"templates/jasmine_helper.rb",
- "templates/spec_helper.js"
+ "templates/SpecHelper.js"
]
s.homepage = %q{http://github.com/ragaskar/jasmine}
s.rdoc_options = ["--charset=UTF-8"]
View
3 lib/jasmine.rb
@@ -1,6 +1,7 @@
require 'jasmine/base'
require 'jasmine/config'
require 'jasmine/server'
+require 'jasmine/selenium_driver'
require 'jasmine/jasmine_helper'
-require 'jasmine/jasmine_spec_builder'
+require 'jasmine/spec_builder'
View
36 lib/jasmine/config.rb
@@ -16,7 +16,7 @@ def start_server(port = 8888)
def start
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
end
@@ -83,8 +83,40 @@ def spec_files
raise "You need to declare a spec_files method in #{self.class}!"
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
- 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
View
2 lib/jasmine/jasmine_meta_spec.rb
@@ -6,7 +6,7 @@
require helper_overrides
end
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,
Dir.pwd,
View
3 lib/jasmine/jasmine_runner.rb
@@ -1,3 +0,0 @@
-module Jasmine
-
-end
View
44 lib/jasmine/selenium_driver.rb
@@ -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
View
43 lib/jasmine/server.rb
@@ -127,47 +127,4 @@ def stop
thin.stop
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
View
11 lib/jasmine/jasmine_spec_builder.rb → lib/jasmine/spec_builder.rb
@@ -1,12 +1,13 @@
require 'enumerator'
-module Jasmine
+module Jasmine
class SpecBuilder
attr_accessor :suites
- def initialize(runner)
- @spec_files = runner.spec_files
- @runner = runner
+ def initialize(config)
+ @config = config
+ @spec_files = config.spec_files
+ @runner = config
@spec_ids = []
end
@@ -31,7 +32,7 @@ def guess_example_locations
example_name_parts = []
previous_indent_level = 0
- @spec_files.each do |filename|
+ @config.spec_files_full_paths.each do |filename|
line_number = 1
File.open(filename, "r") do |file|
file.readlines.each do |line|
View
53 spec/config_spec.rb
@@ -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
View
15 spec/jasmine_self_test_config.rb
@@ -9,22 +9,7 @@ def src_dir
File.join(proj_root, 'src')
end
- def src_files
- Dir.glob(File.join(src_dir, "**/*.js"))
- end
-
def spec_dir
File.join(proj_root, 'jasmine/spec')
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
View
4 spec/jasmine_spec.rb → spec/jasmine_self_test_spec.rb
@@ -1,6 +1,8 @@
+require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
+
require 'jasmine_self_test_config'
-jasmine_runner = JasmineSelfTestRunner.new
+jasmine_runner = JasmineSelfTestConfig.new
spec_builder = Jasmine::SpecBuilder.new(jasmine_runner)
should_stop = false
View
2 templates/public/javascripts/example.js
@@ -0,0 +1,2 @@
+ExampleClass = function() {
+};
View
0 templates/jasmine_helper.rb → templates/spec/jasmine_helper.rb
File renamed without changes.
View
4 templates/example_spec.js → templates/spec/javascript/ExampleSpec.js
@@ -1,9 +1,9 @@
-describe('ExampleSuite', function () {
+describe('Example', function () {
it('should have a passing test', function() {
expect(true).toEqual(true);
});
- describe('Nested Describe', function () {
+ describe('nested describe', function () {
it('should also have a passing test', function () {
expect(true).toEqual(true);
});
View
0 templates/spec_helper.js → templates/spec/javascript/SpecHelper.js
File renamed without changes.

0 comments on commit 81aeeee

Please sign in to comment.