diff --git a/Rakefile b/Rakefile index d65e743e..e68afe5b 100644 --- a/Rakefile +++ b/Rakefile @@ -20,145 +20,134 @@ END desc temp_desc.chomp task :benchmark do - require 'test/benchmark' - - puts "Running benchmarks #{ENV['TIMES']} times..." if ENV['TIMES'] - times = ENV['TIMES'].to_i if ENV['TIMES'] - Haml.benchmark(times || 100) - puts '-'*51 + sh "ruby test/benchmark.rb #{ENV['TIMES']}" end -# Benchmarking gets screwed up if some other tasks have been -# initialized. -unless ARGV[0] == 'benchmark' +# ----- Default: Testing ------ - # ----- Default: Testing ------ +desc 'Default: run unit tests.' +task :default => :test - desc 'Default: run unit tests.' - task :default => :test +require 'rake/testtask' - require 'rake/testtask' - - Rake::TestTask.new do |t| - t.libs << 'lib' - t.pattern = 'test/**/*_test.rb' - t.verbose = true - end - Rake::Task[:test].send(:add_comment, < [:package] do + sudo = RUBY_PLATFORM =~ /win32/ ? '' : 'sudo' + sh %{#{sudo} gem install --no-ri pkg/haml-#{File.read('VERSION').strip}} +end + +task :release => [:package] do + name, version = ENV['NAME'], ENV['VERSION'] + raise "Must supply NAME and VERSION for release task." unless name && version + sh %{rubyforge login} + sh %{rubyforge add_release haml haml "#{name} (v#{version})" pkg/haml-#{version}.gem} + sh %{rubyforge add_file haml haml "#{name} (v#{version})" pkg/haml-#{version}.tar.gz} + sh %{rubyforge add_file haml haml "#{name} (v#{version})" pkg/haml-#{version}.tar.bz2} + sh %{rubyforge add_file haml haml "#{name} (v#{version})" pkg/haml-#{version}.zip} +end + +# ----- Documentation ----- + +begin + require 'hanna/rdoctask' +rescue LoadError + require 'rake/rdoctask' +end + +rdoc_task = Proc.new do |rdoc| + rdoc.title = 'Haml/Sass' + rdoc.options << '--line-numbers' << '--inline-source' + rdoc.rdoc_files.include('README.rdoc') + rdoc.rdoc_files.include('lib/**/*.rb') + rdoc.rdoc_files.exclude('lib/haml/buffer.rb') + rdoc.rdoc_files.exclude('lib/sass/tree/*') +end + +Rake::RDocTask.new do |rdoc| + rdoc_task.call(rdoc) + rdoc.rdoc_dir = 'rdoc' +end + +Rake::RDocTask.new(:rdoc_devel) do |rdoc| + rdoc_task.call(rdoc) + rdoc.rdoc_dir = 'rdoc_devel' + rdoc.options << '--all' + rdoc.rdoc_files.include('test/*.rb') + + # Get rid of exclusion rules + rdoc.rdoc_files = Rake::FileList.new(*rdoc.rdoc_files.to_a) + rdoc.rdoc_files.include('lib/haml/buffer.rb') + rdoc.rdoc_files.include('lib/sass/tree/*') +end + +# ----- Coverage ----- + +unless not_loaded.include? 'rcov/rcovtask' + Rcov::RcovTask.new do |t| + t.libs << "test" + t.test_files = FileList['test/**/*_test.rb'] + t.rcov_opts << '-x' << '"^\/"' + if ENV['NON_NATIVE'] + t.rcov_opts << "--no-rcovrt" end + t.verbose = true end - Rake::Task[:package].prerequisites.insert(0, :revision_file) +end - # We also need to get rid of this file after packaging. - Rake::Task[:package].enhance { File.delete('REVISION') if File.exists?('REVISION') } +# ----- Profiling ----- - task :install => [:package] do - sudo = RUBY_PLATFORM =~ /win32/ ? '' : 'sudo' - sh %{#{sudo} gem install --no-ri pkg/haml-#{File.read('VERSION').strip}} - end - - task :release => [:package] do - name, version = ENV['NAME'], ENV['VERSION'] - raise "Must supply NAME and VERSION for release task." unless name && version - sh %{rubyforge login} - sh %{rubyforge add_release haml haml "#{name} (v#{version})" pkg/haml-#{version}.gem} - sh %{rubyforge add_file haml haml "#{name} (v#{version})" pkg/haml-#{version}.tar.gz} - sh %{rubyforge add_file haml haml "#{name} (v#{version})" pkg/haml-#{version}.tar.bz2} - sh %{rubyforge add_file haml haml "#{name} (v#{version})" pkg/haml-#{version}.zip} - end - - # ----- Documentation ----- - - begin - require 'hanna/rdoctask' - rescue LoadError - require 'rake/rdoctask' - end - - rdoc_task = Proc.new do |rdoc| - rdoc.title = 'Haml/Sass' - rdoc.options << '--line-numbers' << '--inline-source' - rdoc.rdoc_files.include('README.rdoc') - rdoc.rdoc_files.include('lib/**/*.rb') - rdoc.rdoc_files.exclude('lib/haml/buffer.rb') - rdoc.rdoc_files.exclude('lib/sass/tree/*') - end - - Rake::RDocTask.new do |rdoc| - rdoc_task.call(rdoc) - rdoc.rdoc_dir = 'rdoc' - end - - Rake::RDocTask.new(:rdoc_devel) do |rdoc| - rdoc_task.call(rdoc) - rdoc.rdoc_dir = 'rdoc_devel' - rdoc.options << '--all' - rdoc.rdoc_files.include('test/*.rb') - - # Get rid of exclusion rules - rdoc.rdoc_files = Rake::FileList.new(*rdoc.rdoc_files.to_a) - rdoc.rdoc_files.include('lib/haml/buffer.rb') - rdoc.rdoc_files.include('lib/sass/tree/*') - end - - # ----- Coverage ----- - - unless not_loaded.include? 'rcov/rcovtask' - Rcov::RcovTask.new do |t| - t.libs << "test" - t.test_files = FileList['test/**/*_test.rb'] - t.rcov_opts << '-x' << '"^\/"' - if ENV['NON_NATIVE'] - t.rcov_opts << "--no-rcovrt" - end - t.verbose = true - end - end - - # ----- Profiling ----- - - temp_desc = <<-END +temp_desc = <<-END Run a profile of haml. ENGINE=str sets the engine to be profiled (Haml or Sass). TIMES=n sets the number of runs. Defaults to 100. FILE=n sets the file to profile. Defaults to 'standard'. END - desc temp_desc.chomp - task :profile do - require 'test/profile' +desc temp_desc.chomp +task :profile do + require 'test/profile' - engine = ENV['ENGINE'] && ENV['ENGINE'].downcase == 'sass' ? Sass : Haml + engine = ENV['ENGINE'] && ENV['ENGINE'].downcase == 'sass' ? Sass : Haml - puts '-'*51, "Profiling #{engine}", '-'*51 + puts '-'*51, "Profiling #{engine}", '-'*51 - args = [] - args.push ENV['TIMES'].to_i if ENV['TIMES'] - args.push ENV['FILE'] if ENV['FILE'] + args = [] + args.push ENV['TIMES'].to_i if ENV['TIMES'] + args.push ENV['FILE'] if ENV['FILE'] - profiler = engine::Profiler.new - res = profiler.profile(*args) - puts res - - puts '-'*51 - end + profiler = engine::Profiler.new + res = profiler.profile(*args) + puts res + puts '-'*51 end diff --git a/test/benchmark.rb b/test/benchmark.rb old mode 100644 new mode 100755 index a350997a..5959e591 --- a/test/benchmark.rb +++ b/test/benchmark.rb @@ -1,3 +1,16 @@ +#!/usr/bin/env ruby + +times = (ARGV.first || 1000).to_i + +if times == 0 # Invalid parameter + puts < "Haml", :erb => "ERB", :erubis => "Erubis", :mab => "Markaby" +Benchmark.warmer(times) do + columns :haml, :erb, :erubis, :mab + titles :haml => "Haml", :erb => "ERB", :erubis => "Erubis", :mab => "Markaby" - template_name = 'standard' - directory = File.dirname(__FILE__) + '/haml' - haml_template = File.read("#{directory}/templates/#{template_name}.haml") - erb_template = File.read("#{directory}/rhtml/#{template_name}.rhtml") - markaby_template = File.read("#{directory}/markaby/#{template_name}.mab") + template_name = 'standard' + directory = File.dirname(__FILE__) + '/haml' + haml_template = File.read("#{directory}/templates/#{template_name}.haml") + erb_template = File.read("#{directory}/rhtml/#{template_name}.rhtml") + markaby_template = File.read("#{directory}/markaby/#{template_name}.mab") - report "Uncached" do - haml { Haml::Engine.new(haml_template).render } - erb { ERB.new(erb_template, nil, '-').result } - erubis { Erubis::Eruby.new(erb_template).result } - mab { Markaby::Template.new(markaby_template).render } - end + report "Uncached" do + haml { Haml::Engine.new(haml_template).render } + erb { ERB.new(erb_template, nil, '-').result } + erubis { Erubis::Eruby.new(erb_template).result } + mab { Markaby::Template.new(markaby_template).render } + end - report "Cached" do - obj = Object.new + report "Cached" do + obj = Object.new - Haml::Engine.new(haml_template).def_method(obj, :haml) - Erubis::Eruby.new(erb_template).def_method(obj, :erubis) - obj.instance_eval("def erb; #{ERB.new(erb_template, nil, '-').src}; end") + Haml::Engine.new(haml_template).def_method(obj, :haml) + Erubis::Eruby.new(erb_template).def_method(obj, :erubis) + obj.instance_eval("def erb; #{ERB.new(erb_template, nil, '-').src}; end") - haml { obj.haml } - erb { obj.erb } - erubis { obj.erubis } - end + haml { obj.haml } + erb { obj.erb } + erubis { obj.erubis } + end - report "ActionView" do - @base = ActionView::Base.new(File.dirname(__FILE__)) + report "ActionView" do + @base = ActionView::Base.new(File.dirname(__FILE__)) - # To cache the template - @base.render 'haml/templates/standard' - @base.render 'haml/rhtml/standard' + # To cache the template + @base.render 'haml/templates/standard' + @base.render 'haml/rhtml/standard' - haml { @base.render 'haml/templates/standard' } - erb { @base.render 'haml/rhtml/standard' } - end + haml { @base.render 'haml/templates/standard' } + erb { @base.render 'haml/rhtml/standard' } + end - report "ActionView with deep partials" do - @base = ActionView::Base.new(File.dirname(__FILE__)) + report "ActionView with deep partials" do + @base = ActionView::Base.new(File.dirname(__FILE__)) - # To cache the template - @base.render 'haml/templates/action_view' - @base.render 'haml/rhtml/action_view' + # To cache the template + @base.render 'haml/templates/action_view' + @base.render 'haml/rhtml/action_view' - haml { @base.render 'haml/templates/action_view' } - erb { @base.render 'haml/rhtml/action_view' } - end - end - - Benchmark.warmer(runs) do - sass_template = File.read("#{File.dirname(__FILE__)}/sass/templates/complex.sass") - - report("Sass") { Sass::Engine.new(sass_template).render } - end + haml { @base.render 'haml/templates/action_view' } + erb { @base.render 'haml/rhtml/action_view' } end end + +Benchmark.warmer(times) do + sass_template = File.read("#{File.dirname(__FILE__)}/sass/templates/complex.sass") + + report("Sass") { Sass::Engine.new(sass_template).render } +end