diff options
author | Luis Lavena <luislavena@gmail.com> | 2008-11-03 17:13:20 -0300 |
---|---|---|
committer | Luis Lavena <luislavena@gmail.com> | 2008-11-03 17:13:20 -0300 |
commit | 835b0d32735b3b0bc0c3f8ef83d8efb6bc4a0c3d (patch) | |
tree | b2a52a0a76473086dd65833021b80cc85ed87d03 /features/step_definitions | |
parent | b39a2525a42d14ad5c706da63dc06a4d147b7ea5 (diff) | |
download | rake-compiler-835b0d32735b3b0bc0c3f8ef83d8efb6bc4a0c3d.tar.gz |
Better features organization (work in progress).
Diffstat (limited to 'features/step_definitions')
-rw-r--r-- | features/step_definitions/compilation.rb | 76 | ||||
-rw-r--r-- | features/step_definitions/execution.rb | 22 | ||||
-rw-r--r-- | features/step_definitions/folders.rb | 20 |
3 files changed, 118 insertions, 0 deletions
diff --git a/features/step_definitions/compilation.rb b/features/step_definitions/compilation.rb new file mode 100644 index 0000000..020a3d8 --- /dev/null +++ b/features/step_definitions/compilation.rb @@ -0,0 +1,76 @@ +Given /^scaffold code for extension '(.*)'$/ do |extension_name| + setup_scaffold + setup_task_for extension_name + setup_source_for extension_name +end + +Given /^binary extension '(.*)' do exist in '(.*)'$/ do |extension_name, folder| + setup_binaries_for extension_name, folder +end + +Given /^intermediate files for extension '(.*)' do exist in '(.*)'$/ do |extension_name, folder| + setup_intermediate_files_for extension_name, folder +end + +When /^touching '(.*)' file of extension '(.*)'$/ do |file, extension_name| + FileUtils.touch "ext/#{extension_name}/#{file}" +end + +Then /^binary extension '(.*)' (must|must not) exist in '(.*)'$/ do |extension_name, condition, folder| + ext_for_platform = File.join(folder, "#{extension_name}.#{RbConfig::CONFIG['DLEXT']}") + if condition == 'must' + File.exist?(ext_for_platform).should be_true + else + File.exist?(ext_for_platform).should be_false + end +end + +def setup_scaffold + # create folder structure + FileUtils.mkdir_p "lib" + FileUtils.mkdir_p "tasks" + FileUtils.mkdir_p "tmp" + + # create Rakefile loader + File.open("Rakefile", 'w') do |rakefile| + rakefile.puts template_rakefile.strip + end +end + +def setup_task_for(extension_name) + # create folder structure + FileUtils.mkdir_p "ext/#{extension_name}" + + # create specific extension rakefile + File.open("tasks/#{extension_name}.rake", 'w') do |ext_rake| + ext_rake.puts template_rake_extension(extension_name) + end +end + +def setup_source_for(extension_name) + # source C file + File.open("ext/#{extension_name}/source.c", 'w') do |c| + c.puts template_source_c(extension_name) + end + + # header H file + File.open("ext/#{extension_name}/source.h", 'w') do |h| + h.puts template_source_h + end + + # extconf.rb file + File.open("ext/#{extension_name}/extconf.rb", 'w') do |ext| + ext.puts template_extconf(extension_name) + end +end + +def setup_binaries_for(extension_name, folder) + ext_for_platform = File.join(folder, "#{extension_name}.#{RbConfig::CONFIG['DLEXT']}") + FileUtils.touch ext_for_platform +end + +def setup_intermediate_files_for(extension_name, folder) + setup_binaries_for(extension_name, folder) + FileUtils.touch "#{folder}/Makefile" + FileUtils.touch "#{folder}/source.#{RbConfig::CONFIG['OBJEXT']}" +end diff --git a/features/step_definitions/execution.rb b/features/step_definitions/execution.rb new file mode 100644 index 0000000..74c25ef --- /dev/null +++ b/features/step_definitions/execution.rb @@ -0,0 +1,22 @@ +When /^rake task '(.*)' is invoked$/ do |task_name| + @output ||= {} + @result ||= {} + FileUtils.chdir @safe_dir do + @output[task_name] = `rake #{task_name} 2>&1` + @result[task_name] = $?.success? + end +end + +When /^rake task '(.*)' succeeded$/ do |task_name| + if @result.nil? || !@result.include?(task_name) then + raise "The task #{task_name} should be invoked first." + else + @result[task_name].should be_true + end +end + +Then /^output of rake task '(.*)' (does|does not) match \/(.*)\/$/ do |task_name, condition, regexp| + (condition == 'does') ? + @output[task_name].should(match(%r[#{regexp}])) : + @output[task_name].should_not(match(%r[#{regexp}])) +end diff --git a/features/step_definitions/folders.rb b/features/step_definitions/folders.rb new file mode 100644 index 0000000..cab1e3b --- /dev/null +++ b/features/step_definitions/folders.rb @@ -0,0 +1,20 @@ +Given /^a safe project directory$/ do + tmp_name = "project.#{Process.pid}" + @safe_dir = File.join(ROOT_PATH, 'tmp', tmp_name) + FileUtils.rm_rf @safe_dir + FileUtils.mkdir_p @safe_dir + Dir.chdir @safe_dir +end + +Given /^'(.*)' folder (exist|is deleted)$/ do |folder, condition| + case condition + when 'exist' + raise "Folder #{folder} do not exist" unless File.exist?(folder) && File.directory?(folder) + when 'is deleted' + FileUtils.rm_rf folder + end +end + +Then /^'(.*)' folder is created$/ do |folder| + File.exist?(folder).should be_true +end |