diff options
author | Adam Jacob <adam@hjksolutions.com> | 2008-12-02 02:09:19 -0800 |
---|---|---|
committer | Adam Jacob <adam@hjksolutions.com> | 2008-12-02 02:09:19 -0800 |
commit | 69a778d4db0752d111927c560923fda6fbc6c7d7 (patch) | |
tree | bcb424bd3a4e756a68b9a0bf7089af17ac4eef25 /features | |
parent | 3a9543f8dbff45b2a393d44ef1c72ede0a26d6af (diff) | |
download | ohai-69a778d4db0752d111927c560923fda6fbc6c7d7.tar.gz |
Ohai lives - first meaningful commit
Diffstat (limited to 'features')
-rw-r--r-- | features/development.feature | 13 | ||||
-rw-r--r-- | features/ohai.feature | 21 | ||||
-rw-r--r-- | features/steps/common.rb | 174 | ||||
-rw-r--r-- | features/steps/env.rb | 6 |
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' |