summaryrefslogtreecommitdiff
path: root/features
diff options
context:
space:
mode:
authorAdam Jacob <adam@hjksolutions.com>2008-12-02 02:09:19 -0800
committerAdam Jacob <adam@hjksolutions.com>2008-12-02 02:09:19 -0800
commit69a778d4db0752d111927c560923fda6fbc6c7d7 (patch)
treebcb424bd3a4e756a68b9a0bf7089af17ac4eef25 /features
parent3a9543f8dbff45b2a393d44ef1c72ede0a26d6af (diff)
downloadohai-69a778d4db0752d111927c560923fda6fbc6c7d7.tar.gz
Ohai lives - first meaningful commit
Diffstat (limited to 'features')
-rw-r--r--features/development.feature13
-rw-r--r--features/ohai.feature21
-rw-r--r--features/steps/common.rb174
-rw-r--r--features/steps/env.rb6
4 files changed, 214 insertions, 0 deletions
diff --git a/features/development.feature b/features/development.feature
new file mode 100644
index 00000000..9781acb2
--- /dev/null
+++ b/features/development.feature
@@ -0,0 +1,13 @@
+Feature: Development processes of newgem itself (rake tasks)
+
+ As a Newgem maintainer or contributor
+ I want rake tasks to maintain and release the gem
+ So that I can spend time on the tests and code, and not excessive time on maintenance processes
+
+ Scenario: Generate RubyGem
+ Given this project is active project folder
+ And 'pkg' folder is deleted
+ When task 'rake gem' is invoked
+ Then folder 'pkg' is created
+ And file with name matching 'pkg/*.gem' is created else you should run "rake manifest" to fix this
+ And gem spec key 'rdoc_options' contains /--mainREADME.rdoc/
diff --git a/features/ohai.feature b/features/ohai.feature
new file mode 100644
index 00000000..48f25ba4
--- /dev/null
+++ b/features/ohai.feature
@@ -0,0 +1,21 @@
+Feature: Collects data about a system
+ In order to understand the state of my system
+ As a Systems Administrator
+ I want to have a program that detects information for me
+
+ Scenario: Collect data about the system via a single plugin
+ Given a plugin called 'platform'
+ When I run ohai
+ Then I should have a 'platform' of 'kitties'
+
+ Scenario: Collect data about the system via a directory of plugins
+ Given a plugin directory at './plugins'
+ When I run ohai
+ Then I should have a 'platform' of 'kitties'
+ And I should have a 'foghorn' of 'leghorn'
+
+ Scenario: Collect data about the system via an external script
+ Given a plugin called 'perl'
+ When I run ohai
+ Then I should have a 'perl_major_version' of '5'
+ \ No newline at end of file
diff --git a/features/steps/common.rb b/features/steps/common.rb
new file mode 100644
index 00000000..91cd2611
--- /dev/null
+++ b/features/steps/common.rb
@@ -0,0 +1,174 @@
+def in_project_folder(&block)
+ project_folder = @active_project_folder || @tmp_root
+ FileUtils.chdir(project_folder, &block)
+end
+
+def in_home_folder(&block)
+ FileUtils.chdir(@home_path, &block)
+end
+
+Given %r{^a safe folder} do
+ FileUtils.rm_rf @tmp_root = File.dirname(__FILE__) + "/../../tmp"
+ FileUtils.mkdir_p @tmp_root
+ FileUtils.mkdir_p @home_path = File.expand_path(File.join(@tmp_root, "home"))
+ @lib_path = File.expand_path(File.dirname(__FILE__) + '/../../lib')
+ Given "env variable $HOME set to '#{@home_path}'"
+end
+
+Given %r{^this project is active project folder} do
+ Given "a safe folder"
+ @active_project_folder = File.expand_path(File.dirname(__FILE__) + "/../..")
+end
+
+Given %r{^env variable \$([\w_]+) set to '(.*)'} do |env_var, value|
+ ENV[env_var] = value
+end
+
+def force_local_lib_override(project_name = @project_name)
+ rakefile = File.read(File.join(project_name, 'Rakefile'))
+ File.open(File.join(project_name, 'Rakefile'), "w+") do |f|
+ f << "$:.unshift('#{@lib_path}')\n"
+ f << rakefile
+ end
+end
+
+def setup_active_project_folder project_name
+ @active_project_folder = File.join(@tmp_root, project_name)
+ @project_name = project_name
+end
+
+Given %r{'(.*)' folder is deleted} do |folder|
+ in_project_folder do
+ FileUtils.rm_rf folder
+ end
+end
+
+When %r{^'(.*)' generator is invoked with arguments '(.*)'$} do |generator, arguments|
+ FileUtils.chdir(@active_project_folder) do
+ if Object.const_defined?("APP_ROOT")
+ APP_ROOT.replace(FileUtils.pwd)
+ else
+ APP_ROOT = FileUtils.pwd
+ end
+ run_generator(generator, arguments.split(' '), SOURCES)
+ end
+end
+
+When %r{run executable '(.*)' with arguments '(.*)'} do |executable, arguments|
+ @stdout = File.expand_path(File.join(@tmp_root, "executable.out"))
+ FileUtils.chdir(@active_project_folder) do
+ system "ruby #{executable} #{arguments} > #{@stdout}"
+ end
+end
+
+When %r{^task 'rake (.*)' is invoked$} do |task|
+ @stdout = File.expand_path(File.join(@tmp_root, "tests.out"))
+ FileUtils.chdir(@active_project_folder) do
+ system "rake #{task} --trace > #{@stdout} 2> #{@stdout}"
+ end
+end
+
+Then %r{^folder '(.*)' is created} do |folder|
+ in_project_folder do
+ File.exists?(folder).should be_true
+ end
+end
+
+Then %r{^file '(.*)' (is|is not) created} do |file, is|
+ in_project_folder do
+ File.exists?(file).should(is == 'is' ? be_true : be_false)
+ end
+end
+
+Then %r{^file with name matching '(.*)' is created} do |pattern|
+ in_project_folder do
+ Dir[pattern].should_not be_empty
+ end
+end
+
+Then %r{gem file '(.*)' and generated file '(.*)' should be the same} do |gem_file, project_file|
+ File.exists?(gem_file).should be_true
+ File.exists?(project_file).should be_true
+ gem_file_contents = File.read(File.dirname(__FILE__) + "/../../#{gem_file}")
+ project_file_contents = File.read(File.join(@active_project_folder, project_file))
+ project_file_contents.should == gem_file_contents
+end
+
+Then %r{^output same as contents of '(.*)'$} do |file|
+ expected_output = File.read(File.join(File.dirname(__FILE__) + "/../expected_outputs", file))
+ actual_output = File.read(File.dirname(__FILE__) + "/../../tmp/#{@stdout}")
+ actual_output.should == expected_output
+end
+
+Then %r{^(does|does not) invoke generator '(.*)'$} do |does_invoke, generator|
+ actual_output = File.read(File.dirname(__FILE__) + "/../../tmp/#{@stdout}")
+ does_invoke == "does" ?
+ actual_output.should(match(/dependency\s+#{generator}/)) :
+ actual_output.should_not(match(/dependency\s+#{generator}/))
+end
+
+Then %r{help options '(.*)' and '(.*)' are displayed} do |opt1, opt2|
+ actual_output = File.read(@stdout)
+ actual_output.should match(/#{opt1}/)
+ actual_output.should match(/#{opt2}/)
+end
+
+Then %r{^output (does|does not) match \/(.*)\/} do |does, regex|
+ actual_output = File.read(@stdout)
+ (does == 'does') ?
+ actual_output.should(match(/#{regex}/)) :
+ actual_output.should_not(match(/#{regex}/))
+end
+
+Then %r{^contents of file '(.*)' (does|does not) match \/(.*)\/} do |file, does, regex|
+ in_project_folder do
+ actual_output = File.read(file)
+ (does == 'does') ?
+ actual_output.should(match(/#{regex}/)) :
+ actual_output.should_not(match(/#{regex}/))
+ end
+end
+
+Then %r{^all (\d+) tests pass} do |expected_test_count|
+ expected = %r{^#{expected_test_count} tests, \d+ assertions, 0 failures, 0 errors}
+ actual_output = File.read(@stdout)
+ actual_output.should match(expected)
+end
+
+Then %r{^all (\d+) examples pass} do |expected_test_count|
+ expected = %r{^#{expected_test_count} examples?, 0 failures}
+ actual_output = File.read(@stdout)
+ actual_output.should match(expected)
+end
+
+Then %r{^yaml file '(.*)' contains (\{.*\})} do |file, yaml|
+ in_project_folder do
+ yaml = eval yaml
+ YAML.load(File.read(file)).should == yaml
+ end
+end
+
+Then %r{^Rakefile can display tasks successfully} do
+ @stdout = File.expand_path(File.join(@tmp_root, "rakefile.out"))
+ FileUtils.chdir(@active_project_folder) do
+ system "rake -T > #{@stdout} 2> #{@stdout}"
+ end
+ actual_output = File.read(@stdout)
+ actual_output.should match(/^rake\s+\w+\s+#\s.*/)
+end
+
+Then %r{^task 'rake (.*)' is executed successfully} do |task|
+ @stdout.should_not be_nil
+ actual_output = File.read(@stdout)
+ actual_output.should_not match(/^Don't know how to build task '#{task}'/)
+ actual_output.should_not match(/Error/i)
+end
+
+Then %r{^gem spec key '(.*)' contains \/(.*)\/} do |key, regex|
+ in_project_folder do
+ gem_file = Dir["pkg/*.gem"].first
+ gem_spec = Gem::Specification.from_yaml(`gem spec #{gem_file}`)
+ spec_value = gem_spec.send(key.to_sym)
+ spec_value.to_s.should match(/#{regex}/)
+ end
+end
diff --git a/features/steps/env.rb b/features/steps/env.rb
new file mode 100644
index 00000000..64d866ce
--- /dev/null
+++ b/features/steps/env.rb
@@ -0,0 +1,6 @@
+require File.dirname(__FILE__) + "/../../lib/ohai"
+
+gem 'cucumber'
+require 'cucumber'
+gem 'rspec'
+require 'spec'