shoe 0.6.1 → 0.6.2

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.
Files changed (51) hide show
  1. data/CHANGELOG.rdoc +10 -0
  2. data/README.rdoc +2 -4
  3. data/TODO.rdoc +8 -2
  4. data/data/shoe/templates/extension.erb +18 -2
  5. data/data/shoe/templates/gemspec.erb +5 -13
  6. data/data/shoe/templates/{manpage.erb → manpage_1.erb} +3 -4
  7. data/data/shoe/templates/manpage_3.erb +19 -0
  8. data/lib/shoe.rb +1 -1
  9. data/lib/shoe/extensions.rb +1 -0
  10. data/lib/shoe/extensions/option_parser.rb +5 -7
  11. data/lib/shoe/extensions/test_runner.rb +28 -0
  12. data/lib/shoe/extensions/validator.rb +16 -4
  13. data/lib/shoe/generator.rb +2 -1
  14. data/lib/shoe/tasks/clean.rb +20 -3
  15. data/lib/shoe/tasks/compile.rb +5 -1
  16. data/lib/shoe/tasks/cucumber.rb +2 -2
  17. data/lib/shoe/tasks/rdoc.rb +6 -1
  18. data/lib/shoe/tasks/release.rb +1 -1
  19. data/lib/shoe/tasks/ronn.rb +8 -4
  20. data/lib/shoe/tasks/test.rb +33 -16
  21. data/man/shoe.1 +9 -10
  22. data/man/shoe.1.ronn +13 -16
  23. data/man/shoe.3 +68 -0
  24. data/man/shoe.3.ronn +64 -0
  25. data/test/extensions/fake_rubygems_server.rb +62 -0
  26. data/test/extensions/helper_methods.rb +73 -0
  27. data/test/extensions/isolated_environment.rb +50 -0
  28. data/test/extensions/test_case.rb +40 -0
  29. data/test/helper.rb +20 -0
  30. data/test/system/rake_clean_test.rb +36 -0
  31. data/test/system/rake_compile_test.rb +25 -0
  32. data/test/system/rake_cucumber_test.rb +51 -0
  33. data/test/system/rake_rdoc_test.rb +26 -0
  34. data/test/system/rake_release_test.rb +94 -0
  35. data/test/system/rake_ronn_test.rb +25 -0
  36. data/test/system/rake_test_test.rb +45 -0
  37. data/test/system/shoe_test.rb +79 -0
  38. metadata +48 -26
  39. data/.gitignore +0 -4
  40. data/BUNDLER.rdoc +0 -16
  41. data/Gemfile +0 -9
  42. data/Gemfile.lock +0 -49
  43. data/Rakefile +0 -4
  44. data/cucumber.yml +0 -2
  45. data/features/cucumber.feature +0 -27
  46. data/features/generator.feature +0 -32
  47. data/features/release.feature +0 -33
  48. data/features/step_definitions/shoe_steps.rb +0 -39
  49. data/features/support/env.rb +0 -69
  50. data/features/test.feature +0 -18
  51. data/shoe.gemspec +0 -44
@@ -0,0 +1,20 @@
1
+ require 'test/unit'
2
+ require 'shoe'
3
+
4
+ begin
5
+ require 'redgreen' if $stdout.tty?
6
+ rescue LoadError
7
+ # Since we don't have hard gem dependencies for testing, folks can run `gem
8
+ # check --test shoe` without installing anything else.
9
+ end
10
+
11
+ module Shoe
12
+ module TestExtensions
13
+ autoload :FakeRubygemsServer, 'test/extensions/fake_rubygems_server'
14
+ autoload :HelperMethods, 'test/extensions/helper_methods'
15
+ autoload :IsolatedEnvironment, 'test/extensions/isolated_environment'
16
+ autoload :TestCase, 'test/extensions/test_case'
17
+ end
18
+ end
19
+
20
+ Test::Unit::TestCase.extend(Shoe::TestExtensions::TestCase)
@@ -0,0 +1,36 @@
1
+ require 'test/helper'
2
+
3
+ class RakeCleanTest < Test::Unit::TestCase
4
+ isolate_environment
5
+ include_helper_methods
6
+
7
+ def setup
8
+ super
9
+ in_project 'foo'
10
+ system 'shoe'
11
+ end
12
+
13
+ test 'rake clean is active only if there is a .git directory' do
14
+ assert_no_task 'clean'
15
+ system 'git init'
16
+ assert_task 'clean'
17
+ end
18
+
19
+ test 'rake clean removes ignored files, excluding .rvmrc and .bundler' do
20
+ system 'git init'
21
+
22
+ write_file '.gitignore', <<-END.gsub(/^ */, '')
23
+ .bundle
24
+ .rvmrc
25
+ bar
26
+ END
27
+
28
+ write_file '.bundle/config.rb', '# STAYING ALIVE'
29
+ write_file '.rvmrc', '# STAYING ALIVE'
30
+ write_file 'bar', 'NOT LONG FOR THIS WORLD'
31
+
32
+ files_before_clean = find('.')
33
+ system 'rake clean'
34
+ assert_find '.', files_before_clean - ['bar']
35
+ end
36
+ end
@@ -0,0 +1,25 @@
1
+ require 'test/helper'
2
+
3
+ class RakeCompileTest < Test::Unit::TestCase
4
+ isolate_environment
5
+ include_helper_methods
6
+
7
+ def setup
8
+ super
9
+ in_project 'foo'
10
+ system 'shoe'
11
+ end
12
+
13
+ test 'rake compile is active only if there are extensions' do
14
+ assert_no_task 'compile'
15
+ add_files_for_c_extension
16
+ assert_task 'compile'
17
+ end
18
+
19
+ test 'rake compile builds extensions' do
20
+ add_files_for_c_extension
21
+ system 'rake compile'
22
+ system 'ruby -Ilib -rfoo/extension -e "puts Foo::Extension.name"'
23
+ assert_equal 'Foo::Extension', stdout.chomp
24
+ end
25
+ end
@@ -0,0 +1,51 @@
1
+ require 'test/helper'
2
+ require 'yaml'
3
+
4
+ class RakeCucumberTest < Test::Unit::TestCase
5
+ isolate_environment
6
+ include_helper_methods
7
+
8
+ def setup
9
+ super
10
+ in_project 'foo'
11
+ system 'shoe'
12
+ end
13
+
14
+ test 'rake cucumber is active only if there are profiles in cucumber.yml', :require => 'cucumber' do
15
+ assert_no_task 'cucumber'
16
+ add_files_for_cucumber
17
+ assert_task 'cucumber'
18
+ assert_task 'cucumber:wip'
19
+ end
20
+
21
+ test 'rake cucumber runs cucumber features', :require => 'cucumber' do
22
+ add_files_for_cucumber
23
+ system 'rake cucumber'
24
+ assert_match '1 scenario (1 passed)', stdout
25
+ end
26
+
27
+ test 'rake cucumber depends on rake compile', :require => 'cucumber' do
28
+ add_files_for_c_extension
29
+ add_files_for_cucumber 'require "foo/extension"'
30
+ system 'rake cucumber'
31
+ assert_match '1 scenario (1 passed)', stdout
32
+ end
33
+
34
+ private
35
+
36
+ def add_files_for_cucumber(assertion='')
37
+ write_file 'cucumber.yml', { 'default' => 'features', 'wip' => 'features' }.to_yaml
38
+
39
+ write_file 'features/api.feature', <<-END.gsub(/^ /, '')
40
+ Feature: The API
41
+ Scenario: Exercising something
42
+ Then I should pass
43
+ END
44
+
45
+ write_file 'features/step_definitions/steps.rb', <<-END
46
+ Then /^I should pass$/ do
47
+ #{assertion}
48
+ end
49
+ END
50
+ end
51
+ end
@@ -0,0 +1,26 @@
1
+ require 'test/helper'
2
+
3
+ class RakeRdocTest < Test::Unit::TestCase
4
+ isolate_environment
5
+ include_helper_methods
6
+
7
+ def setup
8
+ super
9
+ in_project 'foo'
10
+ system 'shoe'
11
+ end
12
+
13
+ test 'rake rdoc is unconditionally active' do
14
+ assert_task 'rdoc'
15
+ end
16
+
17
+ test 'rake rdoc generates rdoc' do
18
+ # Launchy runs BROWSER in a subshell, sending output to /dev/null, so if I
19
+ # want to test it, I'm going to have to be more clever than this. For the
20
+ # meantime, though, using /bin/echo at least keeps from opening a real
21
+ # browser at test time.
22
+ ENV['BROWSER'] = '/bin/echo'
23
+ system 'rake rdoc'
24
+ assert_file 'rdoc/index.html'
25
+ end
26
+ end
@@ -0,0 +1,94 @@
1
+ require 'test/helper'
2
+
3
+ class RakeReleaseTest < Test::Unit::TestCase
4
+ isolate_environment
5
+ include_helper_methods
6
+
7
+ def setup
8
+ super
9
+ in_project 'foo'
10
+ system 'shoe --no-test-unit'
11
+ end
12
+
13
+ test 'rake release is enabled once the version is greater than 0' do
14
+ perform_initial_commit
15
+ assert_no_task 'release'
16
+ bump_version_to '0.1.0'
17
+ assert_task 'release'
18
+ end
19
+
20
+ test 'rake release is disabled if the version has already been tagged' do
21
+ perform_initial_commit
22
+ bump_version_to '0.1.0'
23
+ system 'git tag v0.1.0'
24
+ assert_no_task 'release'
25
+ end
26
+
27
+ test 'rake release is disabled if current branch is not master' do
28
+ perform_initial_commit
29
+ bump_version_to '0.1.0'
30
+ system 'git checkout -b other'
31
+ assert_no_task 'release'
32
+ end
33
+
34
+ test 'rake release tags, builds, and pushes' do
35
+ perform_initial_commit
36
+ add_git_remote 'origin'
37
+ bump_version_to '0.1.0'
38
+
39
+ uploaded_gem = with_fake_rubygems_server do
40
+ system 'rake release'
41
+ end
42
+
43
+ # local should have tag
44
+ system 'git tag'
45
+ assert_match 'v0.1.0', stdout
46
+
47
+ # origin should have refs and tags
48
+ system "git ls-remote --heads --tags . master"
49
+ local = stdout
50
+ system "git ls-remote --heads --tags origin master"
51
+ assert_match local, stdout
52
+
53
+ # gem should be pushed
54
+ assert_equal File.read('foo-0.1.0.gem'), uploaded_gem
55
+ end
56
+
57
+ test 'rake release depends on rake ronn', :require => 'ronn' do
58
+ perform_initial_commit
59
+ bump_version_to '0.1.0'
60
+
61
+ uploaded_gem = with_fake_rubygems_server do
62
+ system 'rake release'
63
+ end
64
+
65
+ assert uploaded_gem.contents.include?('man/foo.3'),
66
+ uploaded_gem.contents.inspect
67
+ end
68
+
69
+ private
70
+
71
+ def add_git_remote(name)
72
+ path = File.expand_path("../#{name}.git")
73
+ system "git init --bare #{path}"
74
+ system "git remote add #{name} #{path}"
75
+ end
76
+
77
+ def bump_version_to(version)
78
+ write_file 'lib/foo.rb', <<-END
79
+ module Foo
80
+ VERSION = '#{version}'
81
+ end
82
+ END
83
+ end
84
+
85
+ def perform_initial_commit
86
+ system 'git init'
87
+ system 'git add .'
88
+ system 'git commit -a -m "Initial commit."'
89
+ end
90
+
91
+ def with_fake_rubygems_server(&block)
92
+ Shoe::TestExtensions::FakeRubygemsServer.start(&block)
93
+ end
94
+ end
@@ -0,0 +1,25 @@
1
+ require 'test/helper'
2
+
3
+ class RakeRonnTest < Test::Unit::TestCase
4
+ isolate_environment
5
+ include_helper_methods
6
+
7
+ def setup
8
+ super
9
+ in_project 'foo'
10
+ system 'shoe'
11
+ end
12
+
13
+ test 'rake ronn is enabled if there are ronn files', :require => 'ronn' do
14
+ assert_task 'ronn'
15
+ system 'rm **/*.ronn'
16
+ assert_no_task 'ronn'
17
+ end
18
+
19
+ test 'rake ronn generates man pages', :require => 'ronn' do
20
+ ENV['MANPAGER'] = '/bin/cat'
21
+ system 'rake ronn'
22
+ assert_file 'man/foo.3'
23
+ assert_match 'FOO(3)', stdout.chomp
24
+ end
25
+ end
@@ -0,0 +1,45 @@
1
+ require 'test/helper'
2
+
3
+ class RakeTestTest < Test::Unit::TestCase
4
+ isolate_environment
5
+ include_helper_methods
6
+
7
+ def setup
8
+ super
9
+ in_project 'foo'
10
+ system 'shoe --no-test-unit'
11
+ end
12
+
13
+ test 'rake test is active only if there are test files present' do
14
+ assert_no_task 'test'
15
+ add_files_for_test
16
+ assert_task 'test'
17
+ end
18
+
19
+ test 'rake test runs tests' do
20
+ add_files_for_test
21
+ system 'rake test'
22
+ assert_match '1 tests, 1 assertions, 0 failures, 0 errors', stdout
23
+ end
24
+
25
+ test 'rake test depends (perhaps indirectly) on rake compile' do
26
+ add_files_for_c_extension
27
+ add_files_for_test 'require "foo/extension"'
28
+ system 'rake test'
29
+ assert_match '1 tests, 0 assertions, 0 failures, 0 errors', stdout
30
+ end
31
+
32
+ private
33
+
34
+ def add_files_for_test(assertion='assert true')
35
+ write_file 'test/foo_test.rb', <<-END
36
+ require 'test/unit'
37
+ class FooTest < Test::Unit::TestCase
38
+ def test_something
39
+ #{assertion}
40
+ end
41
+ end
42
+ END
43
+ end
44
+
45
+ end
@@ -0,0 +1,79 @@
1
+ require 'test/helper'
2
+
3
+ class ShoeTest < Test::Unit::TestCase
4
+ isolate_environment
5
+ include_helper_methods
6
+
7
+ test 'running without arguments generates files named after the current directory' do
8
+ Dir.mkdir 'existing_project'
9
+ Dir.chdir 'existing_project'
10
+ system 'shoe'
11
+ assert_find '.', %w(
12
+ .gitignore
13
+ README.rdoc
14
+ Rakefile
15
+ existing_project.gemspec
16
+ lib/existing_project.rb
17
+ man/existing_project.3.ronn
18
+ test/helper.rb
19
+ test/existing_project_test.rb
20
+ )
21
+ end
22
+
23
+ test 'running with a path generates files named after the path' do
24
+ system 'shoe new_project'
25
+ assert_file 'new_project/new_project.gemspec'
26
+ end
27
+
28
+ test 'running in an existing project does not clobber existing files' do
29
+ in_project 'existing_project'
30
+ write_file 'Rakefile', '# original'
31
+ system 'shoe'
32
+ assert_match 'WARN: not clobbering existing Rakefile', stderr
33
+ assert_equal '# original', File.read('Rakefile')
34
+ end
35
+
36
+ test 'running produces a buildable gemspec' do
37
+ in_project 'foo'
38
+ system 'shoe'
39
+ system 'gem build foo.gemspec'
40
+ assert_file 'foo-0.0.0.gem'
41
+ end
42
+
43
+ test 'running generates a module with a VERSION constant' do
44
+ in_project 'foo'
45
+ system 'shoe'
46
+ system 'ruby -Ilib -rfoo -e "puts Foo::VERSION"'
47
+ assert_equal '0.0.0', stdout.chomp
48
+ end
49
+
50
+ test 'running --application generates an executable script' do
51
+ in_project 'foo'
52
+ system 'shoe --application'
53
+ system './bin/foo --version'
54
+ assert_equal 'foo 0.0.0', stdout.chomp
55
+ end
56
+
57
+ test 'running --data generates a datadir helper method' do
58
+ in_project 'foo'
59
+ system 'shoe --data'
60
+ write_file 'data/foo/file', 'DATA!'
61
+ system 'ruby -Ilib -rfoo -e "puts Foo.datadir.join(\"file\").read"'
62
+ assert_equal 'DATA!', stdout.chomp
63
+ end
64
+
65
+ test 'running --extension generates an Extension' do
66
+ in_project 'foo'
67
+ system 'shoe --extension'
68
+ Dir.chdir('ext/foo') { system 'ruby extconf.rb && make' }
69
+ system 'ruby -Ilib -Iext -rfoo -e "puts Foo::Extension.name"'
70
+ assert_equal 'Foo::Extension', stdout.chomp
71
+ end
72
+
73
+ test 'running --test generates passing tests' do
74
+ in_project 'foo'
75
+ system 'shoe --test'
76
+ system 'testrb -I. -Ilib test/*_test.rb'
77
+ assert_match '1 tests, 1 assertions, 0 failures, 0 errors', stdout
78
+ end
79
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 6
8
- - 1
9
- version: 0.6.1
8
+ - 2
9
+ version: 0.6.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Matthew Todd
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-22 00:00:00 +03:00
17
+ date: 2010-04-29 00:00:00 +03:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -54,7 +54,7 @@ dependencies:
54
54
  type: :development
55
55
  version_requirements: *id003
56
56
  - !ruby/object:Gem::Dependency
57
- name: ronn
57
+ name: redgreen
58
58
  prerelease: false
59
59
  requirement: &id004 !ruby/object:Gem::Requirement
60
60
  requirements:
@@ -65,6 +65,18 @@ dependencies:
65
65
  version: "0"
66
66
  type: :development
67
67
  version_requirements: *id004
68
+ - !ruby/object:Gem::Dependency
69
+ name: ronn
70
+ prerelease: false
71
+ requirement: &id005 !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ segments:
76
+ - 0
77
+ version: "0"
78
+ type: :development
79
+ version_requirements: *id005
68
80
  description: |
69
81
  An ecosystem-friendly library of Rake tasks for your gem.
70
82
 
@@ -78,21 +90,14 @@ executables:
78
90
  extensions: []
79
91
 
80
92
  extra_rdoc_files:
81
- - BUNDLER.rdoc
82
93
  - CHANGELOG.rdoc
83
94
  - README.rdoc
84
95
  - TODO.rdoc
85
96
  files:
86
- - .gitignore
87
- - BUNDLER.rdoc
88
97
  - CHANGELOG.rdoc
89
- - Gemfile
90
- - Gemfile.lock
91
98
  - README.rdoc
92
- - Rakefile
93
99
  - TODO.rdoc
94
100
  - bin/shoe
95
- - cucumber.yml
96
101
  - data/shoe/templates/application.erb
97
102
  - data/shoe/templates/executable.erb
98
103
  - data/shoe/templates/extconf.erb
@@ -100,28 +105,22 @@ files:
100
105
  - data/shoe/templates/gemspec.erb
101
106
  - data/shoe/templates/gitignore.erb
102
107
  - data/shoe/templates/gitkeep.erb
103
- - data/shoe/templates/manpage.erb
108
+ - data/shoe/templates/manpage_1.erb
109
+ - data/shoe/templates/manpage_3.erb
104
110
  - data/shoe/templates/module.erb
105
111
  - data/shoe/templates/module_test.rb
106
112
  - data/shoe/templates/rakefile.erb
107
113
  - data/shoe/templates/readme.erb
108
114
  - data/shoe/templates/test_helper.erb
109
- - features/cucumber.feature
110
- - features/generator.feature
111
- - features/release.feature
112
- - features/step_definitions/shoe_steps.rb
113
- - features/support/env.rb
114
- - features/test.feature
115
- - lib/shoe.rb
116
- - lib/shoe/extensions.rb
117
115
  - lib/shoe/extensions/doc_manager.rb
118
116
  - lib/shoe/extensions/option_parser.rb
119
117
  - lib/shoe/extensions/pathname.rb
120
118
  - lib/shoe/extensions/source_index.rb
121
119
  - lib/shoe/extensions/specification.rb
120
+ - lib/shoe/extensions/test_runner.rb
122
121
  - lib/shoe/extensions/validator.rb
122
+ - lib/shoe/extensions.rb
123
123
  - lib/shoe/generator.rb
124
- - lib/shoe/tasks.rb
125
124
  - lib/shoe/tasks/abstract.rb
126
125
  - lib/shoe/tasks/clean.rb
127
126
  - lib/shoe/tasks/compile.rb
@@ -130,9 +129,25 @@ files:
130
129
  - lib/shoe/tasks/release.rb
131
130
  - lib/shoe/tasks/ronn.rb
132
131
  - lib/shoe/tasks/test.rb
132
+ - lib/shoe/tasks.rb
133
+ - lib/shoe.rb
133
134
  - man/shoe.1
134
135
  - man/shoe.1.ronn
135
- - shoe.gemspec
136
+ - man/shoe.3
137
+ - man/shoe.3.ronn
138
+ - test/extensions/fake_rubygems_server.rb
139
+ - test/extensions/helper_methods.rb
140
+ - test/extensions/isolated_environment.rb
141
+ - test/extensions/test_case.rb
142
+ - test/helper.rb
143
+ - test/system/rake_clean_test.rb
144
+ - test/system/rake_compile_test.rb
145
+ - test/system/rake_cucumber_test.rb
146
+ - test/system/rake_rdoc_test.rb
147
+ - test/system/rake_release_test.rb
148
+ - test/system/rake_ronn_test.rb
149
+ - test/system/rake_test_test.rb
150
+ - test/system/shoe_test.rb
136
151
  has_rdoc: true
137
152
  homepage: http://github.com/matthewtodd/shoe
138
153
  licenses: []
@@ -142,10 +157,10 @@ rdoc_options:
142
157
  - --main
143
158
  - README.rdoc
144
159
  - --title
145
- - shoe-0.6.1
160
+ - shoe-0.6.2
146
161
  - --inline-source
147
162
  - --webcvs
148
- - http://github.com/matthewtodd/shoe/blob/v0.6.1/
163
+ - http://github.com/matthewtodd/shoe/blob/v0.6.2/
149
164
  require_paths:
150
165
  - lib
151
166
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -171,5 +186,12 @@ rubygems_version: 1.3.6
171
186
  signing_key:
172
187
  specification_version: 3
173
188
  summary: An ecosystem-friendly library of Rake tasks for your gem.
174
- test_files: []
175
-
189
+ test_files:
190
+ - test/system/rake_clean_test.rb
191
+ - test/system/rake_compile_test.rb
192
+ - test/system/rake_cucumber_test.rb
193
+ - test/system/rake_rdoc_test.rb
194
+ - test/system/rake_release_test.rb
195
+ - test/system/rake_ronn_test.rb
196
+ - test/system/rake_test_test.rb
197
+ - test/system/shoe_test.rb