From 7d75b5466f652bcecb21f5f41c467dab62c0f99b Mon Sep 17 00:00:00 2001 From: John Bintz Date: Tue, 22 Nov 2011 10:36:42 -0500 Subject: [PATCH] whoa actually just plug in sprockets, need to backfill tests later since i have real work to do --- lib/jasmine/headless.rb | 4 +- lib/jasmine/headless/coffee_template.rb | 2 + lib/jasmine/headless/css_template.rb | 14 + lib/jasmine/headless/files_list.rb | 76 +++--- lib/jasmine/headless/js_template.rb | 14 + lib/jasmine/headless/path_searcher.rb | 34 --- lib/jasmine/headless/required_file.rb | 121 --------- lib/jasmine/headless/spec_file_analyzer.rb | 2 +- spec/lib/jasmine/headless/files_list_spec.rb | 180 +------------ .../jasmine/headless/path_searcher_spec.rb | 40 --- .../jasmine/headless/required_file_spec.rb | 240 ------------------ .../javascripts/headless_reporter_result.js | 19 +- vendor/assets/javascripts/intense.js | 7 +- .../assets/javascripts/jasmine-extensions.js | 9 +- .../jasmine.HeadlessConsoleReporter.js | 50 ++-- vendor/assets/javascripts/prolog.js | 8 +- 16 files changed, 141 insertions(+), 679 deletions(-) create mode 100644 lib/jasmine/headless/css_template.rb create mode 100644 lib/jasmine/headless/js_template.rb delete mode 100644 lib/jasmine/headless/path_searcher.rb delete mode 100644 lib/jasmine/headless/required_file.rb delete mode 100644 spec/lib/jasmine/headless/path_searcher_spec.rb delete mode 100644 spec/lib/jasmine/headless/required_file_spec.rb diff --git a/lib/jasmine/headless.rb b/lib/jasmine/headless.rb index 5675b3f..05076ac 100644 --- a/lib/jasmine/headless.rb +++ b/lib/jasmine/headless.rb @@ -11,12 +11,12 @@ module Jasmine::Headless autoload :Options, 'jasmine/headless/options' autoload :Task, 'jasmine/headless/task' autoload :FilesList, 'jasmine/headless/files_list' - autoload :RequiredFile, 'jasmine/headless/required_file' - autoload :PathSearcher, 'jasmine/headless/path_searcher' autoload :TemplateWriter, 'jasmine/headless/template_writer' autoload :CoffeeTemplate, 'jasmine/headless/coffee_template' + autoload :JSTemplate, 'jasmine/headless/js_template' + autoload :CSSTemplate, 'jasmine/headless/css_template' autoload :Report, 'jasmine/headless/report' autoload :ReportMessage, 'jasmine/headless/report_message' diff --git a/lib/jasmine/headless/coffee_template.rb b/lib/jasmine/headless/coffee_template.rb index fbc8c95..0cc7d95 100644 --- a/lib/jasmine/headless/coffee_template.rb +++ b/lib/jasmine/headless/coffee_template.rb @@ -2,6 +2,8 @@ require 'tilt/template' module Jasmine::Headless class CoffeeTemplate < Tilt::Template + self.default_mime_type = 'application/javascript' + def prepare ; end def evaluate(scope, locals, &block) diff --git a/lib/jasmine/headless/css_template.rb b/lib/jasmine/headless/css_template.rb new file mode 100644 index 0000000..7829548 --- /dev/null +++ b/lib/jasmine/headless/css_template.rb @@ -0,0 +1,14 @@ +require 'tilt/template' + +module Jasmine::Headless + class CSSTemplate < Tilt::Template + self.default_mime_type = 'text/css' + + def prepare ; end + + def evaluate(scope, locals, &block) + file ? %{} : data + end + end +end + diff --git a/lib/jasmine/headless/files_list.rb b/lib/jasmine/headless/files_list.rb index 404e407..9130ab2 100644 --- a/lib/jasmine/headless/files_list.rb +++ b/lib/jasmine/headless/files_list.rb @@ -42,6 +42,8 @@ module Jasmine::Headless end register_engine '.coffee', Jasmine::Headless::CoffeeTemplate + register_engine '.js', Jasmine::Headless::JSTemplate + register_engine '.css', Jasmine::Headless::CSSTemplate end end @@ -61,18 +63,20 @@ module Jasmine::Headless @potential_files_to_filter = [] self.class.default_files.each do |file| - @required_files << RequiredFile.new(*[ path_searcher.find(file.dup), self ].flatten) + @required_files << sprockets_environment.find_asset(file, :bundle => false) end use_config! if config? end def files - required_files.collect { |file| file.file_paths }.flatten.uniq + required_files.collect { |file| file.send(:required_assets).collect { |asset| asset.pathname.to_s } }.flatten.uniq end def spec_files - filter_for_requested_specs(required_files.find_all(&:spec_file?).collect(&:path)) + filter_for_requested_specs( + files.find_all { |file| spec_dir.any? { |dir| file[dir] } } + ) end def filtered_files @@ -90,6 +94,17 @@ module Jasmine::Headless @search_paths end + def sprockets_environment + return @sprockets_environment if @sprockets_environment + + @sprockets_environment = Sprockets::Environment.new + search_paths.each do |path| + @sprockets_environment.append_path(path) + end + + @sprockets_environment + end + def path_searcher @path_searcher ||= PathSearcher.new(self) end @@ -98,10 +113,13 @@ module Jasmine::Headless if is_outside_scope = !spec_filter.empty? is_outside_scope = spec_dir.any? do |dir| spec_file_searches.any? do |search| - !spec_files.any? { |file| File.fnmatch?(File.join(dir, search), file) } + !spec_files.any? { |file| + File.fnmatch?(File.join(dir, search), file) + } end end end + is_outside_scope end @@ -139,11 +157,7 @@ module Jasmine::Headless alert_time = nil end - search_paths.collect do |path| - if file[%r{^#{path}}] - Jasmine::Headless::RequiredFile.new(file, path, self).to_html - end - end.compact.first + sprockets_environment.find_asset(file, :bundle => false).to_s end.flatten.compact.reject(&:empty?) end @@ -178,6 +192,16 @@ module Jasmine::Headless add_files(@searches[type] = data.flatten, type, dirs) end end + + filtered_required_files = [] + + @required_files.each do |file| + if !filtered_required_files.any? { |other_file| other_file.logical_path == file.logical_path } + filtered_required_files << file + end + end + + @required_files = filtered_required_files end def add_files(patterns, type, dirs) @@ -186,34 +210,14 @@ module Jasmine::Headless search = File.expand_path(File.join(dir, search)) Dir[search].find_all { |file| file[extension_filter] }.each do |path| - @required_files << (file = RequiredFile.new(path, dir, self)) - - if type == 'spec_files' - file.spec_file = true - @potential_files_to_filter << path - end + add_path(path, type) if File.file?(path) end end end if type == 'spec_files' - spec_filter.each do |path| - @required_files << (file = RequiredFile.new(path, nil, self)) - - file.spec_file = true - @potential_files_to_filter << path - end + spec_filter.each { |path| add_path(path, type) } end - - filtered_required_files = [] - - @required_files.each do |file| - if !filtered_required_files.any? { |other_file| other_file == file } - filtered_required_files << file - end - end - - @required_files = filtered_required_files end def config? @@ -228,8 +232,14 @@ module Jasmine::Headless %r{(#{(%w{.js .css} + Sprockets.engine_extensions).join('|')})$} end - def add_file(file) - @files << file + def add_path(path, type) + asset = sprockets_environment.find_asset(path, :bundle => false) + + @required_files << asset + + if type == 'spec_files' + @potential_files_to_filter << path + end end def include_spec_file?(file) diff --git a/lib/jasmine/headless/js_template.rb b/lib/jasmine/headless/js_template.rb new file mode 100644 index 0000000..81a2fb9 --- /dev/null +++ b/lib/jasmine/headless/js_template.rb @@ -0,0 +1,14 @@ +require 'tilt/template' + +module Jasmine::Headless + class JSTemplate < Tilt::Template + self.default_mime_type = 'application/javascript' + + def prepare ; end + + def evaluate(scope, locals, &block) + file ? %{} : data + end + end +end + diff --git a/lib/jasmine/headless/path_searcher.rb b/lib/jasmine/headless/path_searcher.rb deleted file mode 100644 index b4c78fa..0000000 --- a/lib/jasmine/headless/path_searcher.rb +++ /dev/null @@ -1,34 +0,0 @@ -require 'sprockets' -require 'forwardable' - -module Jasmine::Headless - class PathSearcher - extend Forwardable - - def_delegators :source, :search_paths, :extension_filter - - attr_reader :source - - def initialize(source) - @source = source - end - - def find(file) - search_paths.each do |dir| - Dir[File.join(dir, "#{file}*")].find_all { |path| File.file?(path) }.each do |path| - root = path.gsub(%r{^#{dir}/}, '') - - ok = (root == file) - ok ||= File.basename(path.gsub("#{file}.", '')).split('.').all? { |part| ".#{part}"[extension_filter] } - - if ok - return [ File.expand_path(path), dir ] - end - end - end - - false - end - end -end - diff --git a/lib/jasmine/headless/required_file.rb b/lib/jasmine/headless/required_file.rb deleted file mode 100644 index 8b6401b..0000000 --- a/lib/jasmine/headless/required_file.rb +++ /dev/null @@ -1,121 +0,0 @@ -require 'rainbow' -require 'sprockets' -require 'forwardable' - -module Jasmine::Headless - class RequiredFile - extend Forwardable - - def_delegators :parent, :path_searcher, :extension_filter - - attr_reader :path, :source_root, :parent - attr_writer :spec_file - - def initialize(path, source_root, parent) - @path, @source_root, @parent = path, source_root, parent - @spec_file = false - end - - def spec_file? - @spec_file - end - - def ==(other) - self.path == other.path - end - - def to_html - process_data_by_filename(path) - end - - def has_dependencies? - !dependencies.empty? - end - - def includes?(path) - @path == path || dependencies.any? { |dependency| dependency.includes?(path) } - end - - def file_paths - paths = dependencies.collect(&:file_paths).flatten - - if @insert_after - paths.insert(paths.index(@insert_after) + 1, path) - else - paths << path - end - - paths - end - - def dependencies - return @dependencies if @dependencies - - processor = Sprockets::DirectiveProcessor.new(path) - - last_file_added = nil - - @dependencies = processor.directives.collect do |line, type, name| - if name && name[%r{^\.}] - name = File.expand_path(File.join(File.dirname(path), name)).gsub(%r{^#{source_root}/}, '') - else - raise Sprockets::ArgumentError.new("require_tree needs a relative path: ./#{path}") if type == 'require_tree' - end - - files = case type - when 'require' - [ name ] - when 'require_tree' - Dir[File.join(source_root, name, '**/*')].find_all { |found_path| - found_path != path && File.file?(found_path) && found_path[extension_filter] - }.sort.collect { |path| path.gsub(%r{^#{source_root}/}, '') } - when 'require_self' - @insert_after = last_file_added - [] - else - [] - end - - files.collect do |file| - if result = path_searcher.find(file) - new_file = self.class.new(*[ result, self ].flatten) - last_file_added = new_file.path - new_file - else - raise Sprockets::FileNotFound.new("Could not find #{file}, referenced from #{path}:#{line}") - end - end - end.flatten - end - - def logical_path - path.gsub(%r{^#{source_root}/}, '').gsub(%r{\..+$}, '') - end - - private - def read - File.read(path) - end - - def process_data_by_filename(path, data = nil) - case extension = File.extname(path) - when '' - data || '' - when '.js' - data || %{} - when '.css' - data || %{} - else - if engine = Sprockets.engines(extension) - data = engine.new(path) { data || read }.render(self) - data = %{} if extension == '.jst' - - process_data_by_filename(path.gsub(%r{#{extension}$}, ''), data) - else - data || '' - end - end - end - end -end - diff --git a/lib/jasmine/headless/spec_file_analyzer.rb b/lib/jasmine/headless/spec_file_analyzer.rb index 0ac0899..f32308d 100644 --- a/lib/jasmine/headless/spec_file_analyzer.rb +++ b/lib/jasmine/headless/spec_file_analyzer.rb @@ -14,7 +14,7 @@ module Jasmine::Headless data = File.read(file) if data.respond_to?(:encode) - data.encode!('US-ASCII', 'UTF-8', :invalid => :replace) + data.encode!('US-ASCII', 'UTF-8', :invalid => :replace, :undef => :replace) else require 'iconv' ic = Iconv.new('UTF-8//IGNORE', 'US-ASCII') diff --git a/spec/lib/jasmine/headless/files_list_spec.rb b/spec/lib/jasmine/headless/files_list_spec.rb index a47e957..8e9d571 100644 --- a/spec/lib/jasmine/headless/files_list_spec.rb +++ b/spec/lib/jasmine/headless/files_list_spec.rb @@ -27,160 +27,8 @@ describe Jasmine::Headless::FilesList do end end - describe '#use_config' do - let(:files_list) { described_class.new(:config => config) } - - include FakeFS::SpecHelpers - - no_default_files! - - let(:src_dir) { 'src' } - let(:spec_dir) { 'spec' } - - let(:first_file) { File.join(src_dir, 'js/first_file.js') } - let(:src_file) { File.join(src_dir, 'js/src_file.js') } - let(:spec_file) { File.join(spec_dir, 'spec_file_spec.js') } - let(:helper_file) { File.join(spec_dir, 'helper/helper_file.js') } - let(:stylesheet_file) { File.join(src_dir, 'stylesheet/blah.css') } - - before do - [ first_file, src_file, spec_file, helper_file, stylesheet_file ].each do |file| - FileUtils.mkdir_p File.split(file).first - File.open(file, 'w') - end - end - - shared_examples_for :reading_data do - let(:expected_files) do - [ - File.expand_path(first_file), - File.expand_path(src_file), - File.expand_path(stylesheet_file), - File.expand_path(helper_file), - File.expand_path(spec_file) - ] - end - - it 'should read the data from the jasmine.yml file and add the files' do - files_list.files.should == expected_files - - files_list.spec_files.should == [ File.expand_path(spec_file) ] - end - end - - context 'with normal list' do - let(:config) { { - 'src_dir' => src_dir, - 'spec_dir' => spec_dir, - 'src_files' => [ 'js/first_file.js', 'js/*.js' ], - 'spec_files' => [ '*_spec.js' ], - 'helpers' => [ 'helper/*.js' ], - 'stylesheets' => [ 'stylesheet/*.css' ] - } } - - it_should_behave_like :reading_data - end - - context 'with multidimensional list' do - let(:config) { { - 'src_dir' => src_dir, - 'spec_dir' => spec_dir, - 'src_files' => [ [ 'js/first_file.js', 'js/*.js' ] ], - 'spec_files' => [ '*_spec.js' ], - 'helpers' => [ 'helper/*.js' ], - 'stylesheets' => [ 'stylesheet/*.css' ] - } } - - it_should_behave_like :reading_data - end - - context 'with multidimensional src dir' do - let(:config) { { - 'src_dir' => [ src_dir ], - 'spec_dir' => spec_dir, - 'src_files' => [ [ 'js/first_file.js', 'js/*.js' ] ], - 'spec_files' => [ '*_spec.js' ], - 'helpers' => [ 'helper/*.js' ], - 'stylesheets' => [ 'stylesheet/*.css' ] - } } - - it_should_behave_like :reading_data - end - end - - context 'with filtered specs' do - let(:files_list) { Jasmine::Headless::FilesList.new(:only => filter, :config => config) } - let(:spec_dir) { 'spec' } - - include FakeFS::SpecHelpers - - no_default_files! - - let(:config) { { - 'spec_files' => [ '*_spec.js' ], - 'spec_dir' => spec_dir - } } - - let(:spec_files) { %w{one_spec.js two_spec.js whatever.js} } - - before do - spec_files.each do |file| - FileUtils.mkdir_p spec_dir - File.open(File.join(spec_dir, file), 'w') - end - end - - context 'empty filter' do - let(:filter) { [] } - - it 'should return all files for filtered and all files' do - files_list.files.any? { |file| file['two_spec.js'] }.should be_true - files_list.filtered?.should be_false - files_list.should_not have_spec_outside_scope - files_list.spec_files.sort.should == %w{one_spec.js two_spec.js}.sort.collect { |file| File.expand_path(File.join(spec_dir, file)) } - end - end - - context 'filter with a file that is matchable' do - let(:filter) { [ File.expand_path('spec/one_spec.js') ] } - - it 'should return all files for files' do - files_list.files.any? { |file| file['two_spec.js'] }.should be_true - files_list.filtered?.should be_true - files_list.should_not have_spec_outside_scope - files_list.spec_files.should == filter - end - - it 'should return only filtered files for filtered_files' do - files_list.filtered_files.any? { |file| file['two_spec.js'] }.should be_false - files_list.should_not have_spec_outside_scope - end - end - - context 'filter with a glob' do - let(:filter) { [ File.expand_path('spec/one*') ] } - - it 'should return all files for files' do - files_list.files.any? { |file| file['two_spec.js'] }.should be_true - files_list.filtered?.should be_true - files_list.should_not have_spec_outside_scope - end - - it 'should return only filtered files for filtered_files' do - files_list.filtered_files.any? { |file| file['two_spec.js'] }.should be_false - files_list.should_not have_spec_outside_scope - end - end - - context 'filter with a file that is not even there' do - let(:filter) { [ File.expand_path('spec/whatever.js') ] } - - it 'should use the provided file' do - files_list.filtered_files.any? { |file| file['whatever.js'] }.should be_true - files_list.should have_spec_outside_scope - end - end - end + it 'should have tests for #use_config!' + it 'should have tests for #add_files' describe '#spec_file_line_numbers' do include FakeFS::SpecHelpers @@ -274,8 +122,12 @@ describe Jasmine::Headless::FilesList do let(:path_two) { 'two' } let(:path_three) { 'three' } - let(:file_one) { stub(:file_paths => [ path_one, path_two ] ) } - let(:file_two) { stub(:file_paths => [ path_two, path_three ] ) } + let(:file_one) { stub(:required_assets => [ asset_one, asset_two ] ) } + let(:file_two) { stub(:required_assets => [ asset_two, asset_three ] ) } + + let(:asset_one) { stub(:pathname => Pathname(path_one)) } + let(:asset_two) { stub(:pathname => Pathname(path_two)) } + let(:asset_three) { stub(:pathname => Pathname(path_three)) } before do files_list.stubs(:required_files).returns([ file_one, file_two ]) @@ -323,21 +175,5 @@ describe Jasmine::Headless::FilesList do it { should == [ file_one, file_two, file_four ] } end end - - describe '#files_to_html' do - let(:file_one) { 'path/one' } - let(:file_two) { 'path/two' } - - before do - files_list.stubs(:files).returns([ file_one, file_two ]) - files_list.stubs(:search_paths).returns([ 'path' ]) - - Jasmine::Headless::RequiredFile.any_instance.stubs(:to_html).returns('made it') - end - - it 'should render all the files' do - files_list.files_to_html.should == [ 'made it', 'made it' ] - end - end end diff --git a/spec/lib/jasmine/headless/path_searcher_spec.rb b/spec/lib/jasmine/headless/path_searcher_spec.rb deleted file mode 100644 index 9c7f4fd..0000000 --- a/spec/lib/jasmine/headless/path_searcher_spec.rb +++ /dev/null @@ -1,40 +0,0 @@ -require 'spec_helper' - -describe Jasmine::Headless::PathSearcher do - include FakeFS::SpecHelpers - - let(:path) { File.expand_path('path') } - let(:paths) { [ path ] } - let(:source) { stub(:search_paths => paths, :extension_filter => %r{.*}) } - let(:path_searcher) { described_class.new(source) } - - let(:filename) { 'file.js' } - - let(:file) { File.join(path, filename) } - - describe '#find' do - subject { path_searcher.find(search) } - - before do - FileUtils.mkdir_p path - File.open(file, 'wb') - end - - context 'found file' do - let(:search) { 'file' } - - it 'should find the file' do - subject.should == [ File.expand_path(file), path ] - end - end - - context 'not found file' do - let(:search) { 'other' } - - it 'should not find the file' do - subject.should be_false - end - end - end -end - diff --git a/spec/lib/jasmine/headless/required_file_spec.rb b/spec/lib/jasmine/headless/required_file_spec.rb deleted file mode 100644 index ea98ea1..0000000 --- a/spec/lib/jasmine/headless/required_file_spec.rb +++ /dev/null @@ -1,240 +0,0 @@ -require 'spec_helper' - -describe Jasmine::Headless::RequiredFile do - let(:source_root) { File.expand_path('source_root') } - let(:path) { File.join(source_root, 'path.js') } - - let(:file) { described_class.new(path, source_root, files_list) } - - let(:paths) { [ source_root ] } - let(:path_searcher) { stub } - let(:files_list) { stub(:path_searcher => path_searcher) } - - subject { file } - - its(:path) { should == path } - its(:source_root) { should == source_root } - its(:parent) { should == files_list } - - describe '#has_dependencies?' do - it 'should have dependencies' do - file.instance_variable_set(:@dependencies, [ 1 ]) - - file.should have_dependencies - end - - it 'should not have dependencies' do - file.instance_variable_set(:@dependencies, []) - - file.should_not have_dependencies - end - end - - describe '#includes?' do - it 'includes itself' do - file.includes?(path).should be_true - end - - context 'with dependencies' do - let(:other_file) { stub } - let(:other_path) { 'other path' } - let(:third_path) { 'third path' } - - before do - other_file.stubs(:includes?).with(other_path).returns(true) - other_file.stubs(:includes?).with(third_path).returns(false) - - file.stubs(:dependencies).returns([ other_file ]) - end - - it 'checks dependencies' do - file.includes?(third_path).should be_false - file.includes?(other_path).should be_true - end - end - end - - describe '#to_html' do - subject { file.to_html } - - context '.js' do - let(:path) { 'path.js' } - - it { should == %{} } - end - - context '.css' do - let(:path) { 'path.css' } - - it { should == %{} } - end - - context 'with tilt template' do - include FakeFS::SpecHelpers - - let(:content) { 'content' } - - before do - File.open(path, 'wb') { |fh| fh.print content } - end - - let(:klass) do - Class.new(Tilt::Template) do - def prepare ; end - - def evaluate(scope, locals, &block) - "#{file} made it #{data}" - end - end - end - - let(:other_klass) do - Class.new(Tilt::Template) do - def prepare ; end - - def evaluate(scope, locals, &block) - data - end - end - end - - before do - Sprockets.stubs(:engines).with('.tilt').returns(klass) - Sprockets.stubs(:engines).with('.jst').returns(other_klass) - end - - context '.tilt' do - let(:path) { 'path.tilt' } - - it { should == %{#{path} made it #{content}} } - end - - context '.tilt.tilt' do - let(:path) { 'path.tilt.tilt' } - - it { should == %{path.tilt made it #{path} made it #{content}} } - end - - context '.jst.tilt' do - let(:path) { 'path.jst.tilt' } - - it { should == %{} } - end - end - end - - describe '#dependencies' do - include FakeFS::SpecHelpers - - let(:directive) { 'require' } - - let(:dirname) { 'subdir/subsubdir' } - let(:dir) { File.join(source_root, dirname) } - - let(:path) { path_file } - let(:path_file) { File.join(dir, 'path.js') } - let(:req_file) { File.join(dir, "req.js") } - let(:other_file) { File.join(dir, "other.js") } - - let(:content) { "//= #{directive} '#{req_name}'\njavascript" } - - before do - FileUtils.mkdir_p dir - File.open(path_file, 'wb') { |fh| fh.print content } - File.open(req_file, 'wb') - File.open(other_file, 'wb') - end - - subject { file.dependencies } - - context 'absolute' do - context 'require' do - context 'file exists' do - let(:req_name) { File.join(dirname, 'req') } - - before do - path_searcher.expects(:find).with(File.join(dirname, 'req')).returns([ req_file, source_root ]) - end - - it { should == [ described_class.new(req_file, source_root, file) ] } - end - - context 'file does not exist' do - let(:req_name) { File.join(dirname, 'bad') } - - before do - path_searcher.expects(:find).with(File.join(dirname, 'bad')).returns(false) - end - - it 'should raise an exception' do - expect { subject }.to raise_error(Sprockets::FileNotFound) - end - end - end - end - - context 'relative' do - context 'require' do - context 'file exists' do - let(:req_name) { './req' } - - before do - path_searcher.expects(:find).with(File.join(dirname, 'req')).returns([ req_file, source_root ]) - end - - it { should == [ described_class.new(req_file, source_root, file) ] } - end - - context 'file does not exist' do - let(:req_name) { './bad' } - - before do - path_searcher.expects(:find).with(File.join(dirname, 'bad')).returns(false) - end - - it 'should raise an exception' do - expect { subject }.to raise_error(Sprockets::FileNotFound) - end - end - end - end - - context 'require_self' do - subject { file.file_paths } - - let(:content) do - <<-ENDTXT -//= require #{dirname}/req -//= require_self -//= require #{dirname}/other -ENDTXT - end - - before do - path_searcher.expects(:find).with(File.join(dirname, 'req')).returns([ req_file, source_root ]) - path_searcher.expects(:find).with(File.join(dirname, 'other')).returns([ other_file, source_root ]) - end - - it { should == [ - req_file, - path_file, - other_file - ] } - end - end - - describe '#file_paths' do - let(:other_path) { File.join(source_root, 'other_path.js') } - let(:other_file) { described_class.new(other_path, source_root, file) } - - before do - file.stubs(:dependencies).returns([ other_file ]) - other_file.stubs(:dependencies).returns([]) - end - - it 'should flatten all the paths in itself and descendents' do - file.file_paths.should == [ other_path, path ] - end - end -end - diff --git a/vendor/assets/javascripts/headless_reporter_result.js b/vendor/assets/javascripts/headless_reporter_result.js index 5498284..3ffc20f 100644 --- a/vendor/assets/javascripts/headless_reporter_result.js +++ b/vendor/assets/javascripts/headless_reporter_result.js @@ -1,13 +1,16 @@ -(function() { + window.HeadlessReporterResult = (function() { + function HeadlessReporterResult(name, splitName) { this.name = name; this.splitName = splitName; this.results = []; } + HeadlessReporterResult.prototype.addResult = function(message) { return this.results.push(message); }; + HeadlessReporterResult.prototype.print = function() { var bestChoice, output, result, _i, _len, _ref, _results; output = this.name.foreground('red'); @@ -25,10 +28,15 @@ output += (" (line ~" + (bestChoice.lineNumber + result.lineNumber) + ")").foreground('red').bright(); } JHW.stdout.puts(" " + output); - _results.push(result.line != null ? JHW.stdout.puts((" " + result.line).foreground('yellow')) : void 0); + if (result.line != null) { + _results.push(JHW.stdout.puts((" " + result.line).foreground('yellow'))); + } else { + _results.push(void 0); + } } return _results; }; + HeadlessReporterResult.findSpecLine = function(splitName) { var bestChoice, file, index, lastLine, line, lineNumber, lines, newLineNumberInfo, _i, _len, _ref; bestChoice = { @@ -49,9 +57,7 @@ for (_i = 0, _len = newLineNumberInfo.length; _i < _len; _i++) { line = newLineNumberInfo[_i]; lastLine = line; - if (line > lineNumber) { - break; - } + if (line > lineNumber) break; } lineNumber = lastLine; } @@ -67,6 +73,7 @@ } return bestChoice; }; + return HeadlessReporterResult; + })(); -}).call(this); diff --git a/vendor/assets/javascripts/intense.js b/vendor/assets/javascripts/intense.js index 73b1556..8341721 100644 --- a/vendor/assets/javascripts/intense.js +++ b/vendor/assets/javascripts/intense.js @@ -1,5 +1,6 @@ (function() { var code, method, _ref; + window.Intense = { colors: { black: 0, @@ -29,15 +30,15 @@ }, useColors: true, moveBack: function(count) { - if (count == null) { - count = 1; - } + if (count == null) count = 1; return "\033[" + count + "D"; } }; + _ref = Intense.methods; for (method in _ref) { code = _ref[method]; String.prototype[method] = code; } + }).call(this); diff --git a/vendor/assets/javascripts/jasmine-extensions.js b/vendor/assets/javascripts/jasmine-extensions.js index c45e757..da5394c 100644 --- a/vendor/assets/javascripts/jasmine-extensions.js +++ b/vendor/assets/javascripts/jasmine-extensions.js @@ -1,9 +1,11 @@ (function() { var generator, getSplitName, method, pauseAndRun, _i, _len, _ref; var __slice = Array.prototype.slice; + if (!(typeof jasmine !== "undefined" && jasmine !== null)) { throw new Error("jasmine not laoded!"); } + if (window.JHW) { getSplitName = function(parts) { parts.push(String(this.description).replace(/[\n\r]/g, ' ')); @@ -110,7 +112,11 @@ _results = []; for (_j = 0, _len2 = _ref2.length; _j < _len2; _j++) { reporter = _ref2[_j]; - _results.push(reporter[method] != null ? reporter[method].apply(reporter, args) : void 0); + if (reporter[method] != null) { + _results.push(reporter[method].apply(reporter, args)); + } else { + _results.push(void 0); + } } return _results; }; @@ -119,4 +125,5 @@ } } } + }).call(this); diff --git a/vendor/assets/javascripts/jasmine.HeadlessConsoleReporter.js b/vendor/assets/javascripts/jasmine.HeadlessConsoleReporter.js index e81a776..70f0800 100644 --- a/vendor/assets/javascripts/jasmine.HeadlessConsoleReporter.js +++ b/vendor/assets/javascripts/jasmine.HeadlessConsoleReporter.js @@ -1,9 +1,10 @@ -(function() { - var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; + if (!(typeof jasmine !== "undefined" && jasmine !== null)) { throw new Error("jasmine not loaded!"); } + jasmine.HeadlessConsoleReporter = (function() { + function HeadlessConsoleReporter(callback) { this.callback = callback != null ? callback : null; this.results = []; @@ -13,11 +14,10 @@ this.position = 0; this.positions = "|/-\\"; } + HeadlessConsoleReporter.prototype.reportRunnerResults = function(runner) { var output, result, resultLine, runtime, _i, _len, _ref; - if (this.hasError()) { - return; - } + if (this.hasError()) return; runtime = (new Date() - this.startTime) / 1000.0; JHW.stdout.print("\n"); resultLine = this._formatResultLine(runtime); @@ -34,22 +34,20 @@ result = _ref[_i]; result.print(); } - if (window.JHW) { - window.onbeforeunload = null; - } + if (window.JHW) window.onbeforeunload = null; return JHW.finishSuite(); }; + HeadlessConsoleReporter.prototype.reportRunnerStarting = function(runner) { this.startTime = new Date(); if (!this.hasError()) { return JHW.stdout.puts("\nRunning Jasmine specs...".bright()); } }; + HeadlessConsoleReporter.prototype.reportSpecResults = function(spec) { var failureResult, foundLine, result, results, testCount, _i, _len, _ref; - if (this.hasError()) { - return; - } + if (this.hasError()) return; JHW.ping(); results = spec.results(); this.length++; @@ -76,35 +74,37 @@ return this.results.push(failureResult); } }; + HeadlessConsoleReporter.prototype.reportSpecStarting = function(spec) { if (this.hasError()) { spec.finish(); return spec.suite.finish(); } }; + HeadlessConsoleReporter.prototype.reportSpecWaiting = function() { var first, runner; + var _this = this; runner = null; if (!this.timer) { this.timer = true; first = true; - runner = __bind(function() { - return this.timer = setTimeout(__bind(function() { - if (this.timer) { - if (!first) { - JHW.stdout.print(Intense.moveBack()); - } - JHW.stdout.print(this.positions.substr(this.position, 1).foreground('yellow')); - this.position += 1; - this.position %= this.positions.length; + runner = function() { + return _this.timer = setTimeout(function() { + if (_this.timer) { + if (!first) JHW.stdout.print(Intense.moveBack()); + JHW.stdout.print(_this.positions.substr(_this.position, 1).foreground('yellow')); + _this.position += 1; + _this.position %= _this.positions.length; first = false; return runner(); } - }, this), 750); - }, this); + }, 750); + }; return runner(); } }; + HeadlessConsoleReporter.prototype.reportSpecRunning = function() { if (this.timer) { clearTimeout(this.timer); @@ -112,10 +112,13 @@ return JHW.stdout.print(Intense.moveBack()); } }; + HeadlessConsoleReporter.prototype.reportSuiteResults = function(suite) {}; + HeadlessConsoleReporter.prototype.hasError = function() { return JHW._hasErrors; }; + HeadlessConsoleReporter.prototype._formatResultLine = function(runtime) { var line; line = []; @@ -127,6 +130,7 @@ line.push((runtime === 1.0 ? "sec" : "secs") + '.'); return line.join(' '); }; + return HeadlessConsoleReporter; + })(); -}).call(this); diff --git a/vendor/assets/javascripts/prolog.js b/vendor/assets/javascripts/prolog.js index 2fd358b..eb2b69f 100644 --- a/vendor/assets/javascripts/prolog.js +++ b/vendor/assets/javascripts/prolog.js @@ -1,5 +1,6 @@ (function() { var createHandle, handle, _i, _len, _ref; + if (window.JHW) { window.console = { log: function(data) { @@ -40,9 +41,7 @@ e = e || window.event; JHW.hasError(); JHW.stdout.puts('The code tried to leave the test page. Check for unhandled form submits and link clicks.'); - if (e) { - e.returnValue = 'string'; - } + if (e) e.returnValue = 'string'; return 'string'; }; window.confirm = function(message) { @@ -84,6 +83,9 @@ return JHW.stdout.puts(msg); }; } + window.CoffeeScriptToFilename = {}; + window.CSTF = window.CoffeeScriptToFilename; + }).call(this);