From 6f0528591fd1a7b6efd174366c4bb6c9afb3e42a Mon Sep 17 00:00:00 2001 From: Rodrigo Souto Date: Mon, 10 Mar 2014 11:19:41 -0300 Subject: [PATCH] plugins-test: improve infra to allow running tests individually --- lib/tasks/plugins_tests.rake | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------ 1 file changed, 72 insertions(+), 36 deletions(-) diff --git a/lib/tasks/plugins_tests.rake b/lib/tasks/plugins_tests.rake index 70a2f18..c6400b7 100644 --- a/lib/tasks/plugins_tests.rake +++ b/lib/tasks/plugins_tests.rake @@ -25,51 +25,87 @@ def plugin_disabled_warning(plugin) puts "E: you should enable #{plugin} plugin before running it's tests!" end -def run_tests(name, files_glob) - files = Dir.glob(files_glob) - if files.empty? - puts "I: no tests to run (#{name})" +def task2ext(task) + (task == :selenium || task == :cucumber) ? :feature : :rb +end + +def task2profile(task, plugin) + if task == :cucumber + return plugin + elsif task == :selenium + return "#{plugin}_selenium" else - sh 'testrb', '-Itest', *files + return 'default' end end -def run_cucumber(name, profile, files_glob) - files = Dir.glob(files_glob) - if files.empty? - puts "I: no tests to run #{name}" +def filename2plugin(filename) + filename.split('/')[1] +end + +def task2folder(task) + result = case task.to_sym + when :units + :unit + when :functionals + :functional + when :integration + :integration + when :cucumber + :features + when :selenium + :features + end + + return result +end + +def run_test(name, files) + files = Array(files) + plugin = filename2plugin(files.first) + if name == :cucumber || name == :selenium + run_cucumber task2_profile(name, plugin), files else - sh 'xvfb-run', 'ruby', '-S', 'cucumber', '--profile', profile.to_s, '--format', ENV['CUCUMBER_FORMAT'] || 'progress' , *files + run_testrb files end end -def plugin_test_task(name, plugin, files_glob) - desc "Run #{name} tests for #{plugin_name(plugin)}" - task name => 'db:test:plugins:prepare' do |t| - if plugin_enabled?(plugin) - run_tests t.name, files_glob - else - plugin_disabled_warning(plugin) +def run_testrb(files) + sh 'testrb', '-Itest', *files +end + +def run_cucumber(profile, files) + sh 'xvfb-run', 'ruby', '-S', 'cucumber', '--profile', profile.to_s, '--format', ENV['CUCUMBER_FORMAT'] || 'progress' , *files +end + +def custom_run(name, files, run=:individually) + case run + when :all + run_test name, files + when :individually + files.each do |file| + run_test name, file end + when :by_plugin end end -def plugin_cucumber_task(name, plugin, files_glob) - desc "Run #{name} tests for #{plugin_name(plugin)}" - task name => 'db:test:plugins:prepare' do |t| - if plugin_enabled?(plugin) - run_cucumber t.name, plugin, files_glob - else - plugin_disabled_warning(plugin) - end +def run_tests(name, plugins, run=:individually) + plugins = Array(plugins) + glob = "plugins/{#{plugins.join(',')}}/test/#{task2folder(name)}/**/*.#{task2ext(name)}" + files = Dir.glob(glob) + if files.empty? + puts "I: no tests to run #{name}" + else + custom_run(name, files, run) end end -def plugin_selenium_task(name, plugin, files_glob) +def plugin_test_task(name, plugin, run=:individually) desc "Run #{name} tests for #{plugin_name(plugin)}" task name => 'db:test:plugins:prepare' do |t| if plugin_enabled?(plugin) - run_cucumber t.name, "#{plugin}_selenium", files_glob + run_tests(name, plugin, run) else plugin_disabled_warning(plugin) end @@ -98,28 +134,28 @@ namespace :test do namespace :noosfero_plugins do all_plugins.each do |plugin| namespace plugin do - plugin_test_task :units, plugin, "plugins/#{plugin}/test/unit/**/*.rb" - plugin_test_task :functionals, plugin, "plugins/#{plugin}/test/functional/**/*.rb" - plugin_test_task :integration, plugin, "plugins/#{plugin}/test/integration/**/*.rb" - plugin_cucumber_task :cucumber, plugin, "plugins/#{plugin}/features/**/*.feature" - plugin_selenium_task :selenium, plugin, "plugins/#{plugin}/features/**/*.feature" + plugin_test_task :units, plugin + plugin_test_task :functionals, plugin + plugin_test_task :integration, plugin + plugin_test_task :cucumber, plugin + plugin_test_task :selenium, plugin end test_sequence_task(plugin, plugin, "#{plugin}:units", "#{plugin}:functionals", "#{plugin}:integration", "#{plugin}:cucumber", "#{plugin}:selenium") end - { :units => :unit , :functionals => :functional , :integration => :integration }.each do |taskname,folder| + [:units, :functionals, :integration].each do |taskname| task taskname => 'db:test:plugins:prepare' do |t| - run_tests t.name, "plugins/{#{enabled_plugins.join(',')}}/test/#{folder}/**/*.rb" + run_tests taskname, enabled_plugins end end task :cucumber => 'db:test:plugins:prepare' do |t| - run_cucumber t.name, :default, "plugins/{#{enabled_plugins.join(',')}}/test/features/**/*.features" + run_tests :cucumber, enabled_plugins end task :selenium => 'db:test:plugins:prepare' do |t| - run_cucumber t.name, :selenium, "plugins/{#{enabled_plugins.join(',')}}/test/features/**/*.features" + run_tests :selenium, enabled_plugins end task :temp_enable_all_plugins do -- libgit2 0.21.2