aruba 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
@@ -0,0 +1,22 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
22
+ tmp
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Aslak Hellesøy, David Chelimsky
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,28 @@
1
+ = aruba
2
+
3
+ Cucumber steps for driving out command line applications.
4
+
5
+ == Usage
6
+
7
+ gem install aruba
8
+
9
+ Then, just require the library in one of your ruby files under <tt>features/support</tt>
10
+
11
+ require 'aruba'
12
+
13
+ You now have a bunch of step definitions that you can use in your features. See aruba.rb
14
+ for details.
15
+
16
+ == Note on Patches/Pull Requests
17
+
18
+ * Fork the project.
19
+ * Make your feature addition or bug fix.
20
+ * Add tests for it. This is important so I don't break it in a
21
+ future version unintentionally.
22
+ * Commit, do not mess with rakefile, version, or history.
23
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
24
+ * Send me a pull request. Bonus points for topic branches.
25
+
26
+ == Copyright
27
+
28
+ Copyright (c) 2010 Aslak Hellesøy and David Chelimsky. See LICENSE for details.
@@ -0,0 +1,45 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.version = "0.1.0"
8
+ gem.name = "aruba"
9
+ gem.summary = %Q{CLI Steps for Cucumber}
10
+ gem.description = %Q{CLI Steps for Cucumber, hand-crafted for you in Aruba}
11
+ gem.email = "cukes@groups.google.com"
12
+ gem.homepage = "http://github.com/aslakhellesoy/aruba"
13
+ gem.authors = ["Aslak Hellesøy", "David Chelimsky"]
14
+ gem.add_development_dependency "rspec", ">= 1.3.0"
15
+ gem.add_development_dependency "cucumber", ">= 0.6.2"
16
+ end
17
+ Jeweler::GemcutterTasks.new
18
+ rescue LoadError
19
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
20
+ end
21
+
22
+ begin
23
+ require 'cucumber/rake/task'
24
+ Cucumber::Rake::Task.new do |t|
25
+ t.rcov = true
26
+ end
27
+
28
+ task :features => :check_dependencies
29
+ rescue LoadError
30
+ task :features do
31
+ abort "Cucumber is not available. In order to run features, you must: sudo gem install cucumber"
32
+ end
33
+ end
34
+
35
+ task :default => :cucumber
36
+
37
+ require 'rake/rdoctask'
38
+ Rake::RDocTask.new do |rdoc|
39
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
40
+
41
+ rdoc.rdoc_dir = 'rdoc'
42
+ rdoc.title = "aruba #{version}"
43
+ rdoc.rdoc_files.include('README*')
44
+ rdoc.rdoc_files.include('lib/**/*.rb')
45
+ end
@@ -0,0 +1,55 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{aruba}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Aslak Helles\303\270y", "David Chelimsky"]
12
+ s.date = %q{2010-02-13}
13
+ s.description = %q{CLI Steps for Cucumber, hand-crafted for you in Aruba}
14
+ s.email = %q{cukes@groups.google.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".gitignore",
22
+ "LICENSE",
23
+ "README.rdoc",
24
+ "Rakefile",
25
+ "aruba.gemspec",
26
+ "features/exit_statuses.feature",
27
+ "features/file_system_commands.feature",
28
+ "features/output.feature",
29
+ "features/step_definitions/aruba_steps.rb",
30
+ "features/support/env.rb",
31
+ "lib/aruba.rb"
32
+ ]
33
+ s.homepage = %q{http://github.com/aslakhellesoy/aruba}
34
+ s.rdoc_options = ["--charset=UTF-8"]
35
+ s.require_paths = ["lib"]
36
+ s.rubygems_version = %q{1.3.5}
37
+ s.summary = %q{CLI Steps for Cucumber}
38
+
39
+ if s.respond_to? :specification_version then
40
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
41
+ s.specification_version = 3
42
+
43
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
44
+ s.add_development_dependency(%q<rspec>, [">= 1.3.0"])
45
+ s.add_development_dependency(%q<cucumber>, [">= 0.6.2"])
46
+ else
47
+ s.add_dependency(%q<rspec>, [">= 1.3.0"])
48
+ s.add_dependency(%q<cucumber>, [">= 0.6.2"])
49
+ end
50
+ else
51
+ s.add_dependency(%q<rspec>, [">= 1.3.0"])
52
+ s.add_dependency(%q<cucumber>, [">= 0.6.2"])
53
+ end
54
+ end
55
+
@@ -0,0 +1,13 @@
1
+ Feature: exit statuses
2
+
3
+ In order to specify expected exit statuses
4
+ As a developer using Cucumber
5
+ I want to use the "the exit status should be" step
6
+
7
+ Scenario: exit status of 0
8
+ When I run "ruby -h"
9
+ Then the exit status should be 0
10
+
11
+ Scenario: non-zero exit status
12
+ When I run "ruby -e 'exit 56'"
13
+ Then the exit status should be 56
@@ -0,0 +1,24 @@
1
+ Feature: file system commands
2
+
3
+ In order to specify commands that load files
4
+ As a developer using Cucumber
5
+ I want to create temporary files
6
+
7
+ Scenario: create a dir
8
+ Given a directory named "foo/bar"
9
+ When I run "ruby -e \"puts test ?d, 'foo'\""
10
+ Then the stdout should contain "true"
11
+
12
+ Scenario: cat a file
13
+ Given a file named "foo/bar/example.rb" with:
14
+ """
15
+ puts "hello world"
16
+ """
17
+ When I run "ruby foo/bar/example.rb"
18
+ Then I should see "hello world"
19
+
20
+ Scenario: clean up files generated in previous scenarios
21
+ When I run "ruby foo/bar/example.rb"
22
+ Then the exit status should be 1
23
+ And I should see "No such file or directory -- foo/bar/example.rb"
24
+
@@ -0,0 +1,53 @@
1
+ Feature: Output
2
+
3
+ In order to specify expected output
4
+ As a developer using Cucumber
5
+ I want to use the "I should see" step
6
+
7
+ Scenario: Detect subset of one-line output
8
+ When I run "ruby -e 'puts \"hello world\"'"
9
+ Then I should see "hello world"
10
+
11
+ Scenario: Detect subset of multiline output
12
+ When I run "ruby -e 'puts \"hello\nworld\"'"
13
+ Then I should see:
14
+ """
15
+ hello
16
+ """
17
+
18
+ Scenario: Detect exact one-line output
19
+ When I run "ruby -e 'puts \"hello world\"'"
20
+ Then I should see exactly "hello world\n"
21
+
22
+ Scenario: Detect exact multiline output
23
+ When I run "ruby -e 'puts \"hello\nworld\"'"
24
+ Then I should see exactly:
25
+ """
26
+ hello
27
+ world
28
+
29
+ """
30
+
31
+ Scenario: Match passing exit status and partial output
32
+ When I run "ruby -e 'puts \"hello\nworld\"'"
33
+ Then it should pass with:
34
+ """
35
+ hello
36
+ """
37
+
38
+ Scenario: Match failing exit status and partial output
39
+ When I run "ruby -e 'puts \"hello\nworld\";exit 99'"
40
+ Then it should fail with:
41
+ """
42
+ hello
43
+ """
44
+
45
+ Scenario: Match output in stdout
46
+ When I run "ruby -e 'puts \"hello\nworld\"'"
47
+ Then the stdout should contain "hello"
48
+ Then the stderr should not contain "hello"
49
+
50
+ Scenario: Match output in stderr
51
+ When I run "ruby -e 'STDERR.puts \"hello\nworld\";exit 99'"
52
+ Then the stderr should contain "hello"
53
+ Then the stdout should not contain "hello"
@@ -0,0 +1,4 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
2
+ require 'aruba'
3
+
4
+ require 'spec/expectations'
@@ -0,0 +1,114 @@
1
+ require 'tempfile'
2
+
3
+ module ArubaWorld
4
+ def in_current_dir(&block)
5
+ _mkdir(current_dir)
6
+ Dir.chdir(current_dir, &block)
7
+ end
8
+
9
+ def current_dir
10
+ 'tmp/aruba'
11
+ end
12
+
13
+ def create_file(file_name, file_content)
14
+ in_current_dir do
15
+ _mkdir(File.dirname(file_name))
16
+ File.open(file_name, 'w') { |f| f << file_content }
17
+ end
18
+ end
19
+
20
+ def create_dir(dir_name)
21
+ in_current_dir do
22
+ _mkdir(dir_name)
23
+ end
24
+ end
25
+
26
+ def _mkdir(dir_name)
27
+ FileUtils.mkdir_p(dir_name) unless File.directory?(dir_name)
28
+ end
29
+
30
+ def unescape(string)
31
+ eval(%{"#{string}"})
32
+ end
33
+
34
+ def combined_output
35
+ @last_stdout + (@last_stderr == '' ? '' : "\n#{'-'*70}\n#{@last_stderr}")
36
+ end
37
+
38
+ def run(command)
39
+ stderr_file = Tempfile.new('cucumber')
40
+ stderr_file.close
41
+ in_current_dir do
42
+ mode = Cucumber::RUBY_1_9 ? {:external_encoding=>"UTF-8"} : 'r'
43
+ IO.popen("#{command} 2> #{stderr_file.path}", mode) do |io|
44
+ @last_stdout = io.read
45
+ end
46
+
47
+ @last_exit_status = $?.exitstatus
48
+ end
49
+ @last_stderr = IO.read(stderr_file.path)
50
+ end
51
+ end
52
+
53
+ World(ArubaWorld)
54
+
55
+ Before do
56
+ FileUtils.rm_rf(current_dir)
57
+ end
58
+
59
+ Given /^a directory named "([^\"]*)"$/ do |dir_name|
60
+ create_dir(dir_name)
61
+ end
62
+
63
+ Given /^a file named "([^\"]*)" with:$/ do |file_name, file_content|
64
+ create_file(file_name, file_content)
65
+ end
66
+
67
+ When /^I run "(.*)"$/ do |cmd|
68
+ run(unescape(cmd))
69
+ end
70
+
71
+ Then /^I should see "([^\"]*)"$/ do |partial_output|
72
+ combined_output.should =~ /#{partial_output}/
73
+ end
74
+
75
+ Then /^I should see:$/ do |partial_output|
76
+ combined_output.should =~ /#{partial_output}/
77
+ end
78
+
79
+ Then /^I should see exactly "([^\"]*)"$/ do |exact_output|
80
+ combined_output.should == unescape(exact_output)
81
+ end
82
+
83
+ Then /^I should see exactly:$/ do |exact_output|
84
+ combined_output.should == exact_output
85
+ end
86
+
87
+ Then /^the exit status should be (\d+)$/ do |exit_status|
88
+ @last_exit_status.should == exit_status.to_i
89
+ end
90
+
91
+ Then /^it should (pass|fail) with:$/ do |pass_fail, partial_output|
92
+ if pass_fail == 'pass'
93
+ @last_exit_status.should == 0
94
+ else
95
+ @last_exit_status.should_not == 0
96
+ end
97
+ Then "I should see:", partial_output
98
+ end
99
+
100
+ Then /^the stderr should contain "([^\"]*)"$/ do |partial_output|
101
+ @last_stderr.should =~ /#{partial_output}/
102
+ end
103
+
104
+ Then /^the stdout should contain "([^\"]*)"$/ do |partial_output|
105
+ @last_stdout.should =~ /#{partial_output}/
106
+ end
107
+
108
+ Then /^the stderr should not contain "([^\"]*)"$/ do |partial_output|
109
+ @last_stderr.should_not =~ /#{partial_output}/
110
+ end
111
+
112
+ Then /^the stdout should not contain "([^\"]*)"$/ do |partial_output|
113
+ @last_stdout.should_not =~ /#{partial_output}/
114
+ end
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aruba
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - "Aslak Helles\xC3\xB8y"
8
+ - David Chelimsky
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2010-02-13 00:00:00 -04:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rspec
18
+ type: :development
19
+ version_requirement:
20
+ version_requirements: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 1.3.0
25
+ version:
26
+ - !ruby/object:Gem::Dependency
27
+ name: cucumber
28
+ type: :development
29
+ version_requirement:
30
+ version_requirements: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: 0.6.2
35
+ version:
36
+ description: CLI Steps for Cucumber, hand-crafted for you in Aruba
37
+ email: cukes@groups.google.com
38
+ executables: []
39
+
40
+ extensions: []
41
+
42
+ extra_rdoc_files:
43
+ - LICENSE
44
+ - README.rdoc
45
+ files:
46
+ - .document
47
+ - .gitignore
48
+ - LICENSE
49
+ - README.rdoc
50
+ - Rakefile
51
+ - aruba.gemspec
52
+ - features/exit_statuses.feature
53
+ - features/file_system_commands.feature
54
+ - features/output.feature
55
+ - features/step_definitions/aruba_steps.rb
56
+ - features/support/env.rb
57
+ - lib/aruba.rb
58
+ has_rdoc: true
59
+ homepage: http://github.com/aslakhellesoy/aruba
60
+ licenses: []
61
+
62
+ post_install_message:
63
+ rdoc_options:
64
+ - --charset=UTF-8
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: "0"
72
+ version:
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: "0"
78
+ version:
79
+ requirements: []
80
+
81
+ rubyforge_project:
82
+ rubygems_version: 1.3.5
83
+ signing_key:
84
+ specification_version: 3
85
+ summary: CLI Steps for Cucumber
86
+ test_files: []
87
+