require "bundler" Bundler::GemHelper.install_tasks require "bundler/setup" require 'rake/testtask' desc "Run all tests" task 'default' => ['test', 'test:performance'] desc "Run tests" task 'test' do if test_library = ENV['MOCHA_RUN_INTEGRATION_TESTS'] Rake::Task["test:integration:#{test_library}"].invoke else Rake::Task['test:units'].invoke Rake::Task['test:acceptance'].invoke end end namespace 'test' do unit_tests = FileList['test/unit/**/*_test.rb'] all_acceptance_tests = FileList['test/acceptance/*_test.rb'] ruby186_incompatible_acceptance_tests = FileList['test/acceptance/stub_class_method_defined_on_*_test.rb'] + FileList['test/acceptance/stub_instance_method_defined_on_*_test.rb'] ruby186_compatible_acceptance_tests = all_acceptance_tests - ruby186_incompatible_acceptance_tests desc "Run unit tests" Rake::TestTask.new('units') do |t| t.libs << 'test' t.test_files = unit_tests t.verbose = true t.warning = true end desc "Run acceptance tests" Rake::TestTask.new('acceptance') do |t| t.libs << 'test' if defined?(RUBY_VERSION) && (RUBY_VERSION >= "1.8.7") t.test_files = all_acceptance_tests else t.test_files = ruby186_compatible_acceptance_tests end t.verbose = true t.warning = true end namespace 'integration' do desc "Run MiniTest integration tests (intended to be run in its own process)" Rake::TestTask.new('minitest') do |t| t.libs << 'test' t.test_files = FileList['test/integration/mini_test_test.rb'] t.verbose = true t.warning = true end desc "Run Test::Unit integration tests (intended to be run in its own process)" Rake::TestTask.new('test-unit') do |t| t.libs << 'test' t.test_files = FileList['test/integration/test_unit_test.rb'] t.verbose = true t.warning = true end end # require 'rcov/rcovtask' # Rcov::RcovTask.new('coverage') do |t| # t.libs << 'test' # t.test_files = unit_tests + acceptance_tests # t.verbose = true # t.warning = true # t.rcov_opts << '--sort coverage' # t.rcov_opts << '--xref' # end desc "Run performance tests" task 'performance' do require File.join(File.dirname(__FILE__), 'test', 'acceptance', 'stubba_example_test') require File.join(File.dirname(__FILE__), 'test', 'acceptance', 'mocha_example_test') iterations = 1000 puts "\nBenchmarking with #{iterations} iterations..." [MochaExampleTest, StubbaExampleTest].each do |test_case| puts "#{test_case}: #{benchmark_test_case(test_case, iterations)} seconds." end end end def benchmark_test_case(klass, iterations) require 'benchmark' if defined?(MiniTest) MiniTest::Unit.output = StringIO.new Benchmark.realtime { iterations.times { |i| MiniTest::Unit.new.run([klass]) } } else load 'test/unit/ui/console/testrunner.rb' unless defined?(Test::Unit::UI::Console::TestRunner) unless $silent_option begin load 'test/unit/ui/console/outputlevel.rb' unless defined?(Test::Unit::UI::Console::OutputLevel::SILENT) $silent_option = { :output_level => Test::Unit::UI::Console::OutputLevel::SILENT } rescue LoadError $silent_option = Test::Unit::UI::SILENT end end Benchmark.realtime { iterations.times { Test::Unit::UI::Console::TestRunner.run(klass, $silent_option) } } end end unless ENV["MOCHA_NO_DOCS"] require 'yard' desc 'Remove generated documentation' task 'clobber_yardoc' do `rm -rf ./doc` end task 'docs_environment' do unless ENV['GOOGLE_ANALYTICS_WEB_PROPERTY_ID'] puts "\nWarning: GOOGLE_ANALYTICS_WEB_PROPERTY_ID was not defined\n\n" end end desc 'Generate documentation' YARD::Rake::YardocTask.new('yardoc' => 'docs_environment') do |task| task.options = ["--title", "Mocha #{Mocha::VERSION}"] end desc "Generate documentation" task 'generate_docs' => ['clobber_yardoc', 'yardoc'] desc "Publish docs to gofreerange.com/docs/mocha" task 'publish_docs' => 'generate_docs' do path = "/home/freerange/docs/mocha" system %{ssh gofreerange.com "sudo rm -fr #{path} && mkdir -p #{path}" && scp -r doc/* gofreerange.com:#{path}} end end task 'release' => 'default' do Rake::Task['publish_docs'].invoke end