support sprockets-style jst templates
This commit is contained in:
parent
537b2e437d
commit
8867d00ac8
2
Gemfile
2
Gemfile
@ -16,4 +16,4 @@ gem 'guard-jasmine-headless-webkit', :git => 'git://github.com/johnbintz/guard-j
|
|||||||
gem 'facter'
|
gem 'facter'
|
||||||
|
|
||||||
gem 'jquery-rails'
|
gem 'jquery-rails'
|
||||||
|
gem 'ejs'
|
||||||
|
@ -24,5 +24,5 @@ Gem::Specification.new do |s|
|
|||||||
s.add_dependency 'coffee-script', '>= 2.2'
|
s.add_dependency 'coffee-script', '>= 2.2'
|
||||||
s.add_dependency 'rainbow'
|
s.add_dependency 'rainbow'
|
||||||
s.add_dependency 'multi_json'
|
s.add_dependency 'multi_json'
|
||||||
s.add_dependency 'sprockets', '~> 2.0'
|
s.add_dependency 'sprockets', '>= 2.0'
|
||||||
end
|
end
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
require 'pathname'
|
require 'pathname'
|
||||||
|
require 'sprockets/engines'
|
||||||
|
|
||||||
module Jasmine::Headless
|
module Jasmine::Headless
|
||||||
autoload :CoffeeScriptCache, 'jasmine/headless/coffee_script_cache'
|
autoload :CoffeeScriptCache, 'jasmine/headless/coffee_script_cache'
|
||||||
@ -24,3 +25,4 @@ module Jasmine::Headless
|
|||||||
end
|
end
|
||||||
|
|
||||||
require 'jasmine/headless/errors'
|
require 'jasmine/headless/errors'
|
||||||
|
Sprockets::Engines
|
||||||
|
@ -57,7 +57,7 @@ module Jasmine::Headless
|
|||||||
end
|
end
|
||||||
|
|
||||||
def search_paths
|
def search_paths
|
||||||
@search_paths ||= [ Jasmine::Core.path, src_dir, spec_dir ] + self.class.vendor_asset_paths
|
@search_paths ||= [ Jasmine::Core.path, File.expand_path(src_dir), File.expand_path(spec_dir) ] + self.class.vendor_asset_paths
|
||||||
end
|
end
|
||||||
|
|
||||||
def has_spec_outside_scope?
|
def has_spec_outside_scope?
|
||||||
@ -92,6 +92,8 @@ module Jasmine::Headless
|
|||||||
TestFile.new(file, source_root).dependencies.each { |type, name| add_dependency(type, name, source_root) }
|
TestFile.new(file, source_root).dependencies.each { |type, name| add_dependency(type, name, source_root) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
EXTENSION_FILTER = %r{\.(js|css|coffee|jst.*)$}
|
||||||
|
|
||||||
def add_dependency(type, file, source_root)
|
def add_dependency(type, file, source_root)
|
||||||
case type
|
case type
|
||||||
when 'require'
|
when 'require'
|
||||||
@ -99,7 +101,7 @@ module Jasmine::Headless
|
|||||||
add_file(*result)
|
add_file(*result)
|
||||||
end
|
end
|
||||||
when 'require_tree'
|
when 'require_tree'
|
||||||
Dir[File.join(source_root, file, '**/*.{js,css,coffee}')].each do |tree_path|
|
Dir[File.join(source_root, file, '**/*')].find_all { |path| File.file?(path) && path[EXTENSION_FILTER] }.sort.each do |tree_path|
|
||||||
if result = find_dependency(tree_path.gsub(%r{^#{source_root}/}, ''))
|
if result = find_dependency(tree_path.gsub(%r{^#{source_root}/}, ''))
|
||||||
add_file(*result)
|
add_file(*result)
|
||||||
end
|
end
|
||||||
@ -109,7 +111,7 @@ module Jasmine::Headless
|
|||||||
|
|
||||||
def find_dependency(file)
|
def find_dependency(file)
|
||||||
search_paths.each do |dir|
|
search_paths.each do |dir|
|
||||||
if file[%r{\.(js|css|coffee)$}]
|
if file[EXTENSION_FILTER]
|
||||||
if File.file?(path = File.join(dir, file))
|
if File.file?(path = File.join(dir, file))
|
||||||
return [ File.expand_path(path), File.expand_path(dir) ]
|
return [ File.expand_path(path), File.expand_path(dir) ]
|
||||||
end
|
end
|
||||||
@ -133,7 +135,11 @@ module Jasmine::Headless
|
|||||||
alert_time = nil
|
alert_time = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
Jasmine::Headless::TestFile.new(file).to_html
|
search_paths.collect do |path|
|
||||||
|
if file[path]
|
||||||
|
Jasmine::Headless::TestFile.new(file, path).to_html
|
||||||
|
end
|
||||||
|
end.compact.first
|
||||||
}.flatten.compact.reject(&:empty?)
|
}.flatten.compact.reject(&:empty?)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -194,7 +200,7 @@ module Jasmine::Headless
|
|||||||
end
|
end
|
||||||
|
|
||||||
def expanded_dir(path)
|
def expanded_dir(path)
|
||||||
Dir[path].collect { |file| File.expand_path(file) }
|
Dir[path].collect { |file| File.expand_path(file) }.find_all { |path| File.file?(path) && path[EXTENSION_FILTER] }
|
||||||
end
|
end
|
||||||
|
|
||||||
def add_file(file, source_root)
|
def add_file(file, source_root)
|
||||||
|
@ -1,5 +1,12 @@
|
|||||||
require 'rainbow'
|
require 'rainbow'
|
||||||
require 'sprockets/directive_processor'
|
require 'sprockets'
|
||||||
|
|
||||||
|
%w{haml-sprockets}.each do |library|
|
||||||
|
begin
|
||||||
|
require library
|
||||||
|
rescue LoadError
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
module Jasmine::Headless
|
module Jasmine::Headless
|
||||||
class TestFile
|
class TestFile
|
||||||
@ -38,6 +45,13 @@ module Jasmine::Headless
|
|||||||
%{<script type="text/javascript" src="#{path}"></script>}
|
%{<script type="text/javascript" src="#{path}"></script>}
|
||||||
when '.css'
|
when '.css'
|
||||||
%{<link rel="stylesheet" href="#{path}" type="text/css" />}
|
%{<link rel="stylesheet" href="#{path}" type="text/css" />}
|
||||||
|
when '.jst'
|
||||||
|
to_jst(read)
|
||||||
|
else
|
||||||
|
case path
|
||||||
|
when %r{\.jst(\..*)$}
|
||||||
|
to_jst(Sprockets.engines($1).new { read }.evaluate(self, {}))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -53,6 +67,19 @@ module Jasmine::Headless
|
|||||||
[ type, name ]
|
[ type, name ]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def logical_path
|
||||||
|
path.gsub(%r{^#{source_root}/}, '').gsub(%r{\..+$}, '')
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def to_jst(data)
|
||||||
|
%{<script type="text/javascript">#{Sprockets.engines('.jst').new { data }.evaluate(self, {})}</script>}
|
||||||
|
end
|
||||||
|
|
||||||
|
def read
|
||||||
|
File.read(path)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -146,6 +146,8 @@ describe "jasmine-headless-webkit" do
|
|||||||
|
|
||||||
files.lines.to_a.should contain_in_order_in_file_list(
|
files.lines.to_a.should contain_in_order_in_file_list(
|
||||||
'vendor/assets/javascripts/jquery.js',
|
'vendor/assets/javascripts/jquery.js',
|
||||||
|
'templates/that.jst.ejs',
|
||||||
|
'templates/this.jst',
|
||||||
'assets/things/required.js',
|
'assets/things/required.js',
|
||||||
'assets/things/code.js',
|
'assets/things/code.js',
|
||||||
'assets/things/subcode/more_code.js',
|
'assets/things/subcode/more_code.js',
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
//= require 'jquery'
|
||||||
|
//= require_tree 'things/templates'
|
||||||
//= require 'things/required'
|
//= require 'things/required'
|
||||||
|
|
||||||
window.a = '1';
|
window.a = '1';
|
||||||
|
@ -1,2 +1 @@
|
|||||||
//= require 'jquery'
|
//= require 'jquery'
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ spec_files:
|
|||||||
- "**/*_spec.js"
|
- "**/*_spec.js"
|
||||||
|
|
||||||
src_files:
|
src_files:
|
||||||
- "things/**/*.js"
|
- "things/**/*"
|
||||||
|
|
||||||
helpers:
|
helpers:
|
||||||
- "spec_helper.js"
|
- "spec_helper.js"
|
||||||
|
@ -161,46 +161,6 @@ describe Jasmine::Headless::FilesList do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#.*files_to_html' do
|
|
||||||
include FakeFS::SpecHelpers
|
|
||||||
|
|
||||||
before do
|
|
||||||
files_list.instance_variable_set(:@files, [
|
|
||||||
'test.js',
|
|
||||||
'test.coffee',
|
|
||||||
'test.whatever',
|
|
||||||
'test.css'
|
|
||||||
])
|
|
||||||
|
|
||||||
files_list.instance_variable_set(:@filtered_files, [
|
|
||||||
'test.js',
|
|
||||||
'test.coffee'
|
|
||||||
])
|
|
||||||
|
|
||||||
File.stubs(:read)
|
|
||||||
Jasmine::Headless::CoffeeScriptCache.any_instance.stubs(:handle).returns("i compiled")
|
|
||||||
end
|
|
||||||
|
|
||||||
context '#files_to_html' do
|
|
||||||
it "should create the right HTML" do
|
|
||||||
files_list.files_to_html.should == [
|
|
||||||
%{<script type="text/javascript" src="test.js"></script>},
|
|
||||||
%{<script type="text/javascript">i compiled</script>},
|
|
||||||
%{<link rel="stylesheet" href="test.css" type="text/css" />}
|
|
||||||
]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context '#filtered_files_to_html' do
|
|
||||||
it "should create the right HTML" do
|
|
||||||
files_list.filtered_files_to_html.should == [
|
|
||||||
%{<script type="text/javascript" src="test.js"></script>},
|
|
||||||
%{<script type="text/javascript">i compiled</script>}
|
|
||||||
]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe '#spec_file_line_numbers' do
|
describe '#spec_file_line_numbers' do
|
||||||
include FakeFS::SpecHelpers
|
include FakeFS::SpecHelpers
|
||||||
|
|
||||||
@ -292,7 +252,7 @@ describe Jasmine::Headless::FilesList do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it 'should take the src dir and spec dirs' do
|
it 'should take the src dir and spec dirs' do
|
||||||
files_list.search_paths.should == [ Jasmine::Core.path, src_dir, spec_dir ]
|
files_list.search_paths.should == [ Jasmine::Core.path, File.expand_path(src_dir), File.expand_path(spec_dir) ]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -302,7 +262,7 @@ describe Jasmine::Headless::FilesList do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it 'should add the vendor gem paths to the list' do
|
it 'should add the vendor gem paths to the list' do
|
||||||
files_list.search_paths.should == [ Jasmine::Core.path, src_dir, spec_dir, path ]
|
files_list.search_paths.should == [ Jasmine::Core.path, File.expand_path(src_dir), File.expand_path(spec_dir), path ]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -72,6 +72,38 @@ describe Jasmine::Headless::TestFile do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context '.jst' do
|
||||||
|
include FakeFS::SpecHelpers
|
||||||
|
|
||||||
|
let(:path) { 'file.jst' }
|
||||||
|
let(:content) { 'content' }
|
||||||
|
|
||||||
|
before do
|
||||||
|
File.open(path, 'wb') { |fh| fh.print content }
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should use the JST template processor to get the processed file' do
|
||||||
|
subject.should include('JST["file"]')
|
||||||
|
subject.should include(content)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context '.jst.*' do
|
||||||
|
include FakeFS::SpecHelpers
|
||||||
|
|
||||||
|
let(:path) { 'file.jst.ejs' }
|
||||||
|
let(:content) { 'content' }
|
||||||
|
|
||||||
|
before do
|
||||||
|
File.open(path, 'wb') { |fh| fh.print content }
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should use the JST template processor to get the processed file' do
|
||||||
|
subject.should include('JST["file"]')
|
||||||
|
subject.should include(content)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#dependencies' do
|
describe '#dependencies' do
|
||||||
|
Loading…
Reference in New Issue
Block a user