summaryrefslogtreecommitdiff
path: root/features/step_definitions
diff options
context:
space:
mode:
authorLuis Lavena <luislavena@gmail.com>2008-11-03 17:13:20 -0300
committerLuis Lavena <luislavena@gmail.com>2008-11-03 17:13:20 -0300
commit835b0d32735b3b0bc0c3f8ef83d8efb6bc4a0c3d (patch)
treeb2a52a0a76473086dd65833021b80cc85ed87d03 /features/step_definitions
parentb39a2525a42d14ad5c706da63dc06a4d147b7ea5 (diff)
downloadrake-compiler-835b0d32735b3b0bc0c3f8ef83d8efb6bc4a0c3d.tar.gz
Better features organization (work in progress).
Diffstat (limited to 'features/step_definitions')
-rw-r--r--features/step_definitions/compilation.rb76
-rw-r--r--features/step_definitions/execution.rb22
-rw-r--r--features/step_definitions/folders.rb20
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