Merge branch 'coffeescript'

This commit is contained in:
John Bintz 2011-05-07 10:26:43 -04:00
commit 086086cd3e
8 changed files with 118 additions and 18 deletions

3
.gitmodules vendored
View File

@ -1,3 +0,0 @@
[submodule "jasmine"]
path = jasmine
url = https://github.com/pivotal/jasmine.git

View File

@ -42,6 +42,22 @@ Current supported options:
These options can also be placed into a `.jasmine-headless-webkit` file in your project root. These options can also be placed into a `.jasmine-headless-webkit` file in your project root.
### CoffeeScript Support
`jasmine-headless-webkit` brings in the `coffee-script` gem and compiles & injects all CoffeeScript into the
generated HTML page. All you need to do is configure your `jasmine.yml` file to look for .coffee files:
src_files:
- app/assets/javascripts/**/*.coffee
spec_files:
- **/*[sS]pec.coffee
*(This will probably make it difficult to test your code in an official Jasmine server for now. You can try
[a technique like this](https://github.com/jbaudanza/rack-asset-compiler/blob/master/examples/jasmine_config.rb) for compiling CoffeeScript when it's requested from the server
or use [this fork of jasmine-gem](https://github.com/johnbintz/jasmine-gem/tree/coffeescript-inline-support) which
is thoroughly untested.)*
### JavaScript Dialogs ### JavaScript Dialogs
You can call `alert()` and `confirm()` in your code. `alert()` will print the message to the console, and You can call `alert()` and `confirm()` in your code. `alert()` will print the message to the console, and

View File

@ -1,9 +1,23 @@
#!/usr/bin/env ruby #!/usr/bin/env ruby
gem_dir = File.expand_path('../..', __FILE__)
$:.unshift(File.join(gem_dir, 'lib'))
require 'yaml' require 'yaml'
require 'fileutils' require 'fileutils'
require 'getoptlong' require 'getoptlong'
require 'rubygems'
gem 'jasmine'
gem 'coffee-script'
require 'jasmine'
require 'coffee-script'
require 'jasmine/cli'
include Jasmine::CLI
opts = GetoptLong.new( opts = GetoptLong.new(
[ '--colors', '-c', GetoptLong::NO_ARGUMENT ], [ '--colors', '-c', GetoptLong::NO_ARGUMENT ],
[ '--no-colors', GetoptLong::NO_ARGUMENT ] [ '--no-colors', GetoptLong::NO_ARGUMENT ]
@ -28,7 +42,6 @@ end
opts.each(&process_options) opts.each(&process_options)
data = YAML.load_file(ARGV.shift || 'spec/javascripts/support/jasmine.yml') data = YAML.load_file(ARGV.shift || 'spec/javascripts/support/jasmine.yml')
gem_dir = File.expand_path('../..', __FILE__)
if !File.file?(File.join(gem_dir, 'ext/jasmine-webkit-specrunner/jasmine-webkit-specrunner')) if !File.file?(File.join(gem_dir, 'ext/jasmine-webkit-specrunner/jasmine-webkit-specrunner'))
puts "The Qt WebKit widget is not compiled! Try re-installing this gem." puts "The Qt WebKit widget is not compiled! Try re-installing this gem."
@ -38,17 +51,10 @@ end
puts "Running Jasmine specs..." puts "Running Jasmine specs..."
files = [ files = [
'file://' + File.join(gem_dir, 'jasmine/lib/jasmine.js'), 'file://' + File.join(Jasmine.root, 'lib/jasmine.js'),
'file://' + File.join(gem_dir, 'jasmine/lib/jasmine-html.js'), 'file://' + File.join(Jasmine.root, 'lib/jasmine-html.js')
'file://' + File.join(gem_dir, 'jasmine/lib/jasmine.css')
] ]
DEFAULTS = {
'spec_files' => [ '**/*[sS]pec.js' ],
'helpers' => [ 'helpers/**/*.js' ],
'spec_dir' => 'spec/javascripts'
}
files += [ [ 'src_files', 'src_dir' ], [ 'stylesheets', 'src_dir' ], [ 'helpers', 'spec_dir' ], [ 'spec_files', 'spec_dir' ] ].collect do |searches, root| files += [ [ 'src_files', 'src_dir' ], [ 'stylesheets', 'src_dir' ], [ 'helpers', 'spec_dir' ], [ 'spec_files', 'spec_dir' ] ].collect do |searches, root|
data[searches] ||= DEFAULTS[searches] data[searches] ||= DEFAULTS[searches]
data[root] ||= DEFAULTS[root] data[root] ||= DEFAULTS[root]
@ -66,6 +72,8 @@ files = files.flatten.compact.collect { |file|
case File.extname(file) case File.extname(file)
when '.js' when '.js'
%{<script type="text/javascript" src="#{file}"></script>} %{<script type="text/javascript" src="#{file}"></script>}
when '.coffee'
%{<script type="text/javascript">#{CoffeeScript.compile File.read(file)}</script>}
when '.css' when '.css'
%{<link rel="stylesheet" href="#{file}" type="text/css" />} %{<link rel="stylesheet" href="#{file}" type="text/css" />}
end end

@ -1 +0,0 @@
Subproject commit e826fbb17088f9e31a570ac4e09a738592af7b30

View File

@ -21,4 +21,5 @@ Gem::Specification.new do |s|
s.require_paths = ["lib"] s.require_paths = ["lib"]
s.add_dependency 'jasmine' s.add_dependency 'jasmine'
s.add_dependency 'coffee-script'
end end

View File

@ -1,17 +1,18 @@
module JasmineMixin module JasmineMixin
JASMINE_PROGRAM = File.expand_path('../../../bin/jasmine-headless-webkit', __FILE__) JASMINE_PROGRAM = File.expand_path('../../../bin/jasmine-headless-webkit', __FILE__)
JAVASCRIPT_EXTENSIONS = %w{js} JAVASCRIPT_EXTENSIONS = %w{js coffee}
def self.included(klass) def self.included(klass)
klass::ALL_HOOKS << [ :run_jasmine, :ran_jasmine ] klass::ALL_HOOKS << [ :run_jasmine, :ran_jasmine ]
end end
attr_accessor :is_jasmine_running, :jasmine_to_run attr_accessor :is_jasmine_running, :jasmine_to_run, :jasmine_ran_once
def initialize def initialize
super() super()
setup_jasmine_project_mappings setup_jasmine_project_mappings
jasmine_ran_once = false
end end
def get_to_green def get_to_green
@ -20,6 +21,7 @@ module JasmineMixin
super if find_files_to_test super if find_files_to_test
reset_jasmine(:yes) reset_jasmine(:yes)
self.last_mtime = Time.at(0) if !options[:no_full_after_start] && !jasmine_ran_once
run_jasmine if find_files_to_test run_jasmine if find_files_to_test
self.is_jasmine_running = :all self.is_jasmine_running = :all
@ -29,6 +31,16 @@ module JasmineMixin
reset_jasmine(:all) reset_jasmine(:all)
end end
def rerun_all_tests
reset_jasmine(:no)
super
reset_jasmine(:yes)
run_jasmine
reset_jasmine(:all)
end
def reset_jasmine(method) def reset_jasmine(method)
self.files_to_test = new_hash_of_arrays self.files_to_test = new_hash_of_arrays
self.is_jasmine_running = method self.is_jasmine_running = method
@ -50,6 +62,8 @@ module JasmineMixin
end end
hook :ran_jasmine hook :ran_jasmine
jasmine_ran_once = true
end end
def all_jasmine_good def all_jasmine_good
@ -77,12 +91,16 @@ module JasmineMixin
end end
def setup_jasmine_project_mappings def setup_jasmine_project_mappings
add_mapping(%r{spec/javascripts/.*_spec\.js}) { |filename, _| add_mapping(%r{spec/javascripts/.*_spec\.(js|coffee)}) { |filename, _|
filename filename
} }
add_mapping(%r{public/javascripts/(.*)\.js}) { |_, m| add_mapping(%r{public/javascripts/(.*)\.js}) { |_, m|
[ "spec/javascripts/#{m[1]}_spec.js" ] files_matching(%r{spec/javascripts/#{m[1]}_spec\..*$})
}
add_mapping(%r{app/coffeescripts/(.*)\.coffee}) { |_, m|
files_matching(%r{spec/javascripts/#{m[1]}_spec\..*$})
} }
end end

17
lib/jasmine/cli.rb Normal file
View File

@ -0,0 +1,17 @@
module Jasmine
module CLI
DEFAULTS = {
'spec_files' => [ '**/*[sS]pec.js' ],
'helpers' => [ 'helpers/**/*.js' ],
'spec_dir' => 'spec/javascripts',
'src_dir' => nil,
'stylesheets' => [],
'src_files' => []
}
def process_jasmine_config(overrides = {})
DEFAULTS.merge(overrides)
end
end
end

View File

@ -0,0 +1,44 @@
require 'spec_helper'
require 'jasmine/cli'
describe Jasmine::CLI do
include Jasmine::CLI
describe '#process_jasmine_config' do
context 'without overrides' do
let(:config) { {} }
it "should just return the defaults" do
process_jasmine_config(config).should == {
'src_files' => [],
'stylesheets' => [],
'helpers' => [ 'helpers/**/*.js' ],
'spec_files' => [ '**/*[sS]pec.js' ],
'src_dir' => nil,
'spec_dir' => 'spec/javascripts'
}
end
end
context 'with overrides' do
let(:config) {
{
'src_files' => [ 'one', 'two' ],
'src_dir' => 'this-dir',
'stylesheets' => [ 'three', 'four' ],
'helpers' => [ 'five', 'six' ],
'spec_files' => [ 'seven', 'eight' ],
'spec_dir' => 'that-dir'
}
}
it "should return the merged data" do
process_jasmine_config(config).should == config
end
end
end
describe '#get_files' do
end
end