technicalpickles-jeweler 0.11.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. data/.gitignore +7 -0
  2. data/ChangeLog.markdown +8 -0
  3. data/README.markdown +9 -9
  4. data/ROADMAP +12 -0
  5. data/Rakefile +22 -5
  6. data/VERSION.yml +2 -2
  7. data/features/generator/cucumber.feature +83 -0
  8. data/features/generator/directory_layout.feature +76 -0
  9. data/features/generator/dotdocument.feature +14 -0
  10. data/features/generator/env_options.feature +9 -0
  11. data/features/generator/git.feature +94 -0
  12. data/features/generator/license.feature +11 -0
  13. data/features/generator/rakefile.feature +110 -0
  14. data/features/generator/readme.feature +12 -0
  15. data/features/generator/test.feature +41 -0
  16. data/features/generator/test_helper.feature +49 -0
  17. data/features/placeholder.feature +5 -0
  18. data/features/step_definitions/debug_steps.rb +6 -0
  19. data/features/step_definitions/filesystem_steps.rb +65 -0
  20. data/features/step_definitions/generator_steps.rb +251 -0
  21. data/features/step_definitions/task_steps.rb +6 -0
  22. data/features/support/env.rb +19 -0
  23. data/features/tasks/build_gem.feature +9 -0
  24. data/features/tasks/version.feature +24 -0
  25. data/features/tasks/version_bumping.feature +33 -0
  26. data/jeweler.gemspec +204 -0
  27. data/lib/jeweler/commands/release.rb +35 -11
  28. data/lib/jeweler/commands/version/base.rb +1 -1
  29. data/lib/jeweler/gemspec_helper.rb +4 -6
  30. data/lib/jeweler/generator/application.rb +8 -3
  31. data/lib/jeweler/generator/bacon_mixin.rb +39 -0
  32. data/lib/jeweler/generator/micronaut_mixin.rb +38 -0
  33. data/lib/jeweler/generator/minitest_mixin.rb +39 -0
  34. data/lib/jeweler/generator/options.rb +5 -1
  35. data/lib/jeweler/generator/rspec_mixin.rb +39 -0
  36. data/lib/jeweler/generator/shoulda_mixin.rb +39 -0
  37. data/lib/jeweler/generator/testunit_mixin.rb +39 -0
  38. data/lib/jeweler/generator.rb +48 -111
  39. data/lib/jeweler/rubyforge_tasks.rb +46 -0
  40. data/lib/jeweler/specification.rb +3 -2
  41. data/lib/jeweler/tasks.rb +32 -26
  42. data/lib/jeweler/templates/README.rdoc +1 -1
  43. data/lib/jeweler/templates/Rakefile +29 -52
  44. data/lib/jeweler/templates/bacon/helper.rb +1 -1
  45. data/lib/jeweler/templates/features/support/env.rb +4 -7
  46. data/lib/jeweler/templates/micronaut/helper.rb +1 -1
  47. data/lib/jeweler/templates/minitest/helper.rb +1 -1
  48. data/lib/jeweler/templates/rspec/flunking.rb +1 -1
  49. data/lib/jeweler/templates/rspec/helper.rb +1 -1
  50. data/lib/jeweler/templates/shoulda/helper.rb +1 -1
  51. data/lib/jeweler/templates/testunit/helper.rb +1 -1
  52. data/lib/jeweler/version_helper.rb +78 -33
  53. data/lib/jeweler.rb +5 -0
  54. data/test/fixtures/existing-project-with-version-plaintext/.document +5 -0
  55. data/test/fixtures/existing-project-with-version-plaintext/.gitignore +5 -0
  56. data/test/fixtures/{existing-project-with-version → existing-project-with-version-plaintext}/LICENSE +0 -0
  57. data/test/fixtures/{existing-project-with-version → existing-project-with-version-plaintext}/README.rdoc +0 -0
  58. data/test/fixtures/{existing-project-with-version → existing-project-with-version-plaintext}/Rakefile +0 -0
  59. data/test/fixtures/existing-project-with-version-plaintext/VERSION +1 -0
  60. data/test/fixtures/{existing-project-with-version → existing-project-with-version-plaintext}/existing-project-with-version.gemspec +0 -0
  61. data/test/fixtures/{existing-project-with-version → existing-project-with-version-plaintext}/lib/existing_project_with_version.rb +0 -0
  62. data/test/fixtures/{existing-project-with-version → existing-project-with-version-plaintext}/test/existing_project_with_version_test.rb +0 -0
  63. data/test/fixtures/{existing-project-with-version → existing-project-with-version-plaintext}/test/test_helper.rb +0 -0
  64. data/test/fixtures/existing-project-with-version-yaml/.document +5 -0
  65. data/test/fixtures/existing-project-with-version-yaml/.gitignore +5 -0
  66. data/test/fixtures/existing-project-with-version-yaml/LICENSE +20 -0
  67. data/test/fixtures/existing-project-with-version-yaml/README.rdoc +7 -0
  68. data/test/fixtures/existing-project-with-version-yaml/Rakefile +82 -0
  69. data/test/fixtures/{existing-project-with-version → existing-project-with-version-yaml}/VERSION.yml +0 -0
  70. data/test/fixtures/existing-project-with-version-yaml/existing-project-with-version.gemspec +29 -0
  71. data/test/fixtures/existing-project-with-version-yaml/lib/existing_project_with_version.rb +0 -0
  72. data/test/fixtures/existing-project-with-version-yaml/test/existing_project_with_version_test.rb +7 -0
  73. data/test/fixtures/existing-project-with-version-yaml/test/test_helper.rb +10 -0
  74. data/test/jeweler/commands/test_release.rb +304 -79
  75. data/test/test_application.rb +26 -0
  76. data/test/test_gemspec_helper.rb +4 -0
  77. data/test/test_generator.rb +83 -112
  78. data/test/test_generator_initialization.rb +113 -0
  79. data/test/test_generator_mixins.rb +18 -0
  80. data/test/test_helper.rb +3 -0
  81. data/test/test_options.rb +6 -0
  82. data/test/test_specification.rb +6 -2
  83. data/test/test_version_helper.rb +47 -9
  84. metadata +72 -17
  85. data/test/generators/initialization_test.rb +0 -146
@@ -0,0 +1,82 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "existing-project-with-version"
8
+ gem.summary = %Q{TODO}
9
+ gem.email = "josh@technicalpickles.com"
10
+ gem.homepage = "http://github.com/technicalpickles/existing-project-with-version"
11
+ gem.authors = ["Josh Nichols"]
12
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
13
+ end
14
+ rescue LoadError
15
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
16
+ end
17
+
18
+ require 'rake/testtask'
19
+ Rake::TestTask.new(:test) do |test|
20
+ test.libs << 'lib' << 'test'
21
+ test.pattern = 'test/**/*_test.rb'
22
+ test.verbose = false
23
+ end
24
+
25
+ begin
26
+ require 'rcov/rcovtask'
27
+ Rcov::RcovTask.new do |test|
28
+ test.libs << 'test'
29
+ test.pattern = 'test/**/*_test.rb'
30
+ test.verbose = true
31
+ end
32
+ rescue LoadError
33
+ task :rcov do
34
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
35
+ end
36
+ end
37
+
38
+
39
+ task :default => :test
40
+
41
+ require 'rake/rdoctask'
42
+ Rake::RDocTask.new do |rdoc|
43
+ if File.exist?('VERSION.yml')
44
+ config = YAML.load(File.read('VERSION.yml'))
45
+ version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
46
+ else
47
+ version = ""
48
+ end
49
+
50
+ rdoc.rdoc_dir = 'rdoc'
51
+ rdoc.title = "existing-project-with-version #{version}"
52
+ rdoc.options << '--line-numbers' << '--inline-source'
53
+ rdoc.rdoc_files.include('README*')
54
+ rdoc.rdoc_files.include('lib/**/*.rb')
55
+ end
56
+
57
+ # Rubyforge documentation task
58
+ begin
59
+ require 'rake/contrib/sshpublisher'
60
+ namespace :rubyforge do
61
+
62
+ desc "Release gem and RDoc documentation to RubyForge"
63
+ task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
64
+
65
+ namespace :release do
66
+ desc "Publish RDoc to RubyForge."
67
+ task :docs => [:rdoc] do
68
+ config = YAML.load(
69
+ File.read(File.expand_path('~/.rubyforge/user-config.yml'))
70
+ )
71
+
72
+ host = "#{config['username']}@rubyforge.org"
73
+ remote_dir = "/var/www/gforge-projects/existing-project-with-version/"
74
+ local_dir = 'rdoc'
75
+
76
+ Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
77
+ end
78
+ end
79
+ end
80
+ rescue LoadError
81
+ puts "Rake SshDirPublisher is unavailable or your rubyforge environment is not configured."
82
+ end
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{existing-project-with-version}
5
+ s.version = "1.5.3"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Josh Nichols"]
9
+ s.date = %q{2009-03-13}
10
+ s.email = %q{josh@technicalpickles.com}
11
+ s.extra_rdoc_files = ["README.rdoc", "LICENSE"]
12
+ s.files = ["README.rdoc", "VERSION.yml", "lib/existing_project_with_version.rb", "test/existing_project_with_version_test.rb", "test/test_helper.rb", "LICENSE"]
13
+ s.has_rdoc = true
14
+ s.homepage = %q{http://github.com/technicalpickles/existing-project-with-version}
15
+ s.rdoc_options = ["--inline-source", "--charset=UTF-8"]
16
+ s.require_paths = ["lib"]
17
+ s.rubygems_version = %q{1.3.1}
18
+ s.summary = %q{TODO}
19
+
20
+ if s.respond_to? :specification_version then
21
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
22
+ s.specification_version = 2
23
+
24
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
25
+ else
26
+ end
27
+ else
28
+ end
29
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class ExistingProjectWithVersionTest < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ require 'existing_project_with_version'
8
+
9
+ class Test::Unit::TestCase
10
+ end
@@ -4,15 +4,10 @@ class Jeweler
4
4
  module Commands
5
5
  class TestRelease < Test::Unit::TestCase
6
6
 
7
- context "with added files" do
7
+ context "with pending changes" do
8
8
  setup do
9
9
  @repo = Object.new
10
10
  stub(@repo).checkout(anything)
11
-
12
- status = Object.new
13
- stub(status).added { ['README'] }
14
- stub(status).deleted { [] }
15
- stub(status).changed { [] }
16
11
  stub(@repo).status { status }
17
12
 
18
13
  @command = Jeweler::Commands::Release.new
@@ -20,6 +15,8 @@ class Jeweler
20
15
  @command.repo = @repo
21
16
  @command.gemspec_helper = @gemspec_helper
22
17
  @command.version = '1.2.3'
18
+
19
+ stub(@command).any_pending_changes? { true }
23
20
  end
24
21
 
25
22
  should 'raise error' do
@@ -29,85 +26,86 @@ class Jeweler
29
26
  end
30
27
  end
31
28
 
32
- context "with deleted files" do
29
+ context "run without pending changes, and gemspec changed, and tagged not created already" do
33
30
  setup do
34
31
  @repo = Object.new
35
- stub(@repo).checkout(anything)
32
+ stub(@repo) do
33
+ checkout(anything)
34
+ add(anything)
35
+ commit(anything)
36
+ push
37
+ end
36
38
 
37
- status = Object.new
38
- stub(status).added { [] }
39
- stub(status).deleted { ['README'] }
40
- stub(status).changed { [] }
41
- stub(@repo).status { status }
39
+ @gemspec_helper = Object.new
40
+ stub(@gemspec_helper) do
41
+ write
42
+ path {'zomg.gemspec'}
43
+ update_version('1.2.3')
44
+ end
42
45
 
43
- @command = Jeweler::Commands::Release.new
44
- @command.output = @output
45
- @command.repo = @repo
46
- @command.gemspec_helper = @gemspec_helper
47
- @command.version = '1.2.3'
48
- @command.base_dir = '.'
49
- end
46
+ @output = StringIO.new
50
47
 
51
- should 'raise error' do
52
- assert_raises RuntimeError, /try commiting/i do
53
- @command.run
54
- end
48
+ @command = Jeweler::Commands::Release.new :output => @output,
49
+ :repo => @repo,
50
+ :gemspec_helper => @gemspec_helper,
51
+ :version => '1.2.3'
52
+
53
+ stub(@command).tag_release!
54
+ stub(@command).gemspec_changed? { true }
55
+ stub(@command).any_pending_changes? { false }
56
+ stub(@command).regenerate_gemspec!
57
+ stub(@command).commit_gemspec!
58
+ stub(@command).release_tagged? { false }
59
+
60
+ @command.run
55
61
  end
56
- end
57
62
 
58
- context "with changed files" do
59
- setup do
60
- @repo = Object.new
61
- stub(@repo).checkout(anything)
63
+ should "checkout master" do
64
+ assert_received(@repo) {|repo| repo.checkout('master') }
65
+ end
62
66
 
63
- status = Object.new
64
- stub(status).added { [] }
65
- stub(status).deleted { [] }
66
- stub(status).changed { ['README'] }
67
- stub(@repo).status { status }
67
+ should "regenerate gemspec" do
68
+ assert_received(@command) {|command| command.regenerate_gemspec! }
69
+ end
68
70
 
69
- @command = Jeweler::Commands::Release.new
70
- @command.output = @output
71
- @command.repo = @repo
72
- @command.gemspec_helper = @gemspec_helper
73
- @command.version = '1.2.3'
71
+ should "commit gemspec" do
72
+ assert_received(@command) {|command| command.commit_gemspec! }
74
73
  end
75
74
 
76
- should 'raise error' do
77
- assert_raises RuntimeError, /try commiting/i do
78
- @command.run
79
- end
75
+ should "tag release" do
76
+ assert_received(@command) {|command| command.tag_release! }
80
77
  end
81
78
  end
82
79
 
83
- context "after running without pending changes" do
80
+ context "run without pending changes, and gemspec didn't change, and tagged not created already" do
84
81
  setup do
85
82
  @repo = Object.new
86
- stub(@repo).checkout(anything)
87
- stub(@repo).add(anything)
88
- stub(@repo).commit(anything)
89
- stub(@repo).push
90
- stub(@repo).push(anything)
91
- stub(@repo).add_tag(anything)
83
+ stub(@repo) do
84
+ checkout(anything)
85
+ add(anything)
86
+ commit(anything)
87
+ push
88
+ end
92
89
 
93
90
  @gemspec_helper = Object.new
94
- stub(@gemspec_helper).write
95
- stub(@gemspec_helper).path {'zomg.gemspec'}
96
- stub(@gemspec_helper).update_version('1.2.3')
97
-
98
- status = Object.new
99
- stub(status).added { [] }
100
- stub(status).deleted { [] }
101
- stub(status).changed { [] }
102
- stub(@repo).status { status }
91
+ stub(@gemspec_helper) do
92
+ write
93
+ path {'zomg.gemspec'}
94
+ update_version('1.2.3')
95
+ end
103
96
 
104
97
  @output = StringIO.new
105
98
 
106
- @command = Jeweler::Commands::Release.new
107
- @command.output = @output
108
- @command.repo = @repo
109
- @command.gemspec_helper = @gemspec_helper
110
- @command.version = '1.2.3'
99
+ @command = Jeweler::Commands::Release.new :output => @output,
100
+ :repo => @repo,
101
+ :gemspec_helper => @gemspec_helper,
102
+ :version => '1.2.3'
103
+
104
+ stub(@command).tag_release!
105
+ stub(@command).any_pending_changes? { false }
106
+ stub(@command).gemspec_changed? { false }
107
+ stub(@command).regenerate_gemspec!
108
+ stub(@command).release_tagged? { false }
111
109
 
112
110
  @command.run
113
111
  end
@@ -116,33 +114,62 @@ class Jeweler
116
114
  assert_received(@repo) {|repo| repo.checkout('master') }
117
115
  end
118
116
 
119
- should "refresh gemspec version" do
120
- assert_received(@gemspec_helper) {|gemspec_helper| gemspec_helper.update_version('1.2.3') }
117
+ should "regenerate gemspec" do
118
+ assert_received(@command) {|command| command.regenerate_gemspec! }
121
119
  end
122
120
 
123
- should "write gemspec" do
124
- assert_received(@gemspec_helper) {|gemspec_helper| gemspec_helper.write }
125
-
121
+ should_eventually "not commit gemspec" do
122
+ # need a way to assert it wasn't received short of not stubbing it
123
+ #assert_received(@command) {|command| command.commit_gemspec! }
126
124
  end
127
125
 
128
- should "add gemspec to repository" do
129
- assert_received(@repo) {|repo| repo.add('zomg.gemspec') }
126
+ should "tag release" do
127
+ assert_received(@command) {|command| command.tag_release! }
130
128
  end
129
+ end
131
130
 
132
- should "commit with commit message including version" do
133
- assert_received(@repo) {|repo| repo.commit("Regenerated gemspec for version 1.2.3") }
131
+ context "run without pending changes and tagged already" do
132
+ setup do
133
+ @repo = Object.new
134
+ stub(@repo) do
135
+ checkout(anything)
136
+ add(anything)
137
+ commit(anything)
138
+ push
139
+ end
140
+
141
+ @gemspec_helper = Object.new
142
+ stub(@gemspec_helper) do
143
+ write
144
+ path {'zomg.gemspec'}
145
+ update_version('1.2.3')
146
+ end
147
+
148
+ @output = StringIO.new
149
+
150
+ @command = Jeweler::Commands::Release.new :output => @output,
151
+ :repo => @repo,
152
+ :gemspec_helper => @gemspec_helper,
153
+ :version => '1.2.3'
154
+
155
+ #stub(@command).tag_release!
156
+ stub(@command).any_pending_changes? { false }
157
+ stub(@command).regenerate_gemspec!
158
+ stub(@command).release_tagged? { true }
159
+
160
+ @command.run
134
161
  end
135
162
 
136
- should "push repository" do
137
- assert_received(@repo) {|repo| repo.push }
163
+ should "checkout master" do
164
+ assert_received(@repo) {|repo| repo.checkout('master') }
138
165
  end
139
166
 
140
- should "tag release" do
141
- assert_received(@repo) {|repo| repo.add_tag("v1.2.3")}
167
+ should "regenerate gemspec" do
168
+ assert_received(@command) {|command| command.regenerate_gemspec! }
142
169
  end
143
170
 
144
- should "push tag to repository" do
145
- assert_received(@repo) {|repo| repo.push('origin', 'v1.2.3')}
171
+ should_eventually "not tag release" do
172
+ # need to have a way to verify tag_release! not being called, short of not stubbing it
146
173
  end
147
174
  end
148
175
 
@@ -175,6 +202,204 @@ class Jeweler
175
202
  assert_same @base_dir, @command.base_dir
176
203
  end
177
204
  end
205
+
206
+ context "any_pending_changes?" do
207
+
208
+ should "be true if there added files" do
209
+ repo = build_repo :added => %w(README)
210
+
211
+ command = Jeweler::Commands::Release.new :repo => repo
212
+
213
+ assert command.any_pending_changes?
214
+ end
215
+
216
+ should "be true if there are changed files" do
217
+ repo = build_repo :changed => %w(README)
218
+
219
+ command = Jeweler::Commands::Release.new
220
+ command.repo = repo
221
+
222
+ assert command.any_pending_changes?
223
+ end
224
+
225
+ should "be true if there are deleted files" do
226
+ repo = build_repo :deleted => %w(README)
227
+
228
+ command = Jeweler::Commands::Release.new
229
+ command.repo = repo
230
+
231
+ assert command.any_pending_changes?
232
+ end
233
+
234
+ should "be false if nothing added, changed, or deleted" do
235
+ repo = build_repo
236
+
237
+ command = Jeweler::Commands::Release.new
238
+ command.repo = repo
239
+
240
+ assert ! command.any_pending_changes?
241
+ end
242
+ end
243
+
244
+ context "tag_release!" do
245
+ setup do
246
+ @repo = Object.new
247
+ stub(@repo) do
248
+ add_tag(anything)
249
+ push(anything, anything)
250
+ end
251
+
252
+ @output = StringIO.new
253
+
254
+ @command = Jeweler::Commands::Release.new
255
+ @command.output = @output
256
+ @command.repo = @repo
257
+ @command.gemspec_helper = @gemspec_helper
258
+ @command.version = '1.2.3'
259
+
260
+ @command.tag_release!
261
+ end
262
+
263
+ should "tag release" do
264
+ assert_received(@repo) {|repo| repo.add_tag("v1.2.3")}
265
+ end
266
+
267
+ should "push tag to repository" do
268
+ assert_received(@repo) {|repo| repo.push('origin', 'v1.2.3')}
269
+ end
270
+ end
271
+
272
+ context "regenerate_gemspec!" do
273
+ setup do
274
+ @repo = Object.new
275
+ stub(@repo) do
276
+ add(anything)
277
+ commit(anything)
278
+ end
279
+
280
+ @gemspec_helper = Object.new
281
+ stub(@gemspec_helper) do
282
+ write
283
+ path {'zomg.gemspec'}
284
+ update_version('1.2.3')
285
+ end
286
+
287
+ @output = StringIO.new
288
+
289
+ @command = Jeweler::Commands::Release.new :output => @output,
290
+ :repo => @repo,
291
+ :gemspec_helper => @gemspec_helper,
292
+ :version => '1.2.3'
293
+
294
+ @command.regenerate_gemspec!
295
+ end
296
+
297
+ should "refresh gemspec version" do
298
+ assert_received(@gemspec_helper) {|gemspec_helper| gemspec_helper.update_version('1.2.3') }
299
+ end
300
+
301
+ should "write gemspec" do
302
+ assert_received(@gemspec_helper) {|gemspec_helper| gemspec_helper.write }
303
+ end
304
+ end
305
+
306
+ context "commit_gemspec!" do
307
+ setup do
308
+ @repo = Object.new
309
+ stub(@repo) do
310
+ add(anything)
311
+ commit(anything)
312
+ end
313
+
314
+ @gemspec_helper = Object.new
315
+ stub(@gemspec_helper) do
316
+ path {'zomg.gemspec'}
317
+ update_version('1.2.3')
318
+ end
319
+
320
+ @output = StringIO.new
321
+
322
+ @command = Jeweler::Commands::Release.new :output => @output,
323
+ :repo => @repo,
324
+ :gemspec_helper => @gemspec_helper,
325
+ :version => '1.2.3'
326
+
327
+ @command.commit_gemspec!
328
+ end
329
+
330
+ should "add gemspec to repository" do
331
+ assert_received(@repo) {|repo| repo.add('zomg.gemspec') }
332
+ end
333
+
334
+ should "commit with commit message including version" do
335
+ assert_received(@repo) {|repo| repo.commit("Regenerated gemspec for version 1.2.3") }
336
+ end
337
+
338
+ end
339
+
340
+ context "release_tagged? when no tag exists" do
341
+ setup do
342
+ @repo = Object.new
343
+ stub(@repo).tag('v1.2.3') {raise Git::GitTagNameDoesNotExist, tag}
344
+ #stub(@repo) do
345
+ #tag('v1.2.3') do |tag|
346
+ #raise Git::GitTagNameDoesNotExist, tag
347
+ #end
348
+ #end
349
+
350
+ @output = StringIO.new
351
+
352
+ @command = Jeweler::Commands::Release.new
353
+ @command.output = @output
354
+ @command.repo = @repo
355
+ @command.version = '1.2.3'
356
+ end
357
+
358
+ should_eventually "be false" do
359
+ assert ! @command.release_tagged?
360
+ end
361
+
362
+ end
363
+
364
+ context "release_tagged? when tag exists" do
365
+ setup do
366
+ @repo = Object.new
367
+ stub(@repo) do
368
+ tag('v1.2.3') { Object.new }
369
+ end
370
+
371
+ @output = StringIO.new
372
+
373
+ @command = Jeweler::Commands::Release.new
374
+ @command.output = @output
375
+ @command.repo = @repo
376
+ @command.version = '1.2.3'
377
+ end
378
+
379
+ should_eventually "be true" do
380
+ assert @command.release_tagged?
381
+ end
382
+
383
+ end
384
+
385
+ def build_repo(options = {})
386
+ status = build_status options
387
+ repo = Object.new
388
+ stub(repo).status { status }
389
+ repo
390
+ end
391
+
392
+ def build_status(options = {})
393
+ options = {:added => [], :deleted => [], :changed => []}.merge(options)
394
+
395
+ status = Object.new
396
+ stub(status) do
397
+ added { options[:added] }
398
+ deleted { options[:deleted] }
399
+ changed { options[:changed] }
400
+ end
401
+
402
+ end
178
403
  end
179
404
  end
180
405
  end
@@ -77,6 +77,32 @@ class TestApplication < Test::Unit::TestCase
77
77
  end
78
78
  end
79
79
 
80
+ context "called with --invalid-argument" do
81
+ setup do
82
+ @generator = build_generator
83
+ stub(@generator).run
84
+ stub(Jeweler::Generator).new { raise "Shouldn't have made this far"}
85
+
86
+ assert_nothing_raised do
87
+ @result = run_application("--invalid-argument")
88
+ end
89
+ end
90
+
91
+ should_exit_with_code 1
92
+
93
+ should 'display invalid argument' do
94
+ assert_match '--invalid-argument', @stderr
95
+ end
96
+
97
+ should 'display usage on stderr' do
98
+ assert_match 'Usage:', @stderr
99
+ end
100
+
101
+ should 'not display anything on stdout' do
102
+ assert_equal '', @stdout.squeeze.strip
103
+ end
104
+ end
105
+
80
106
  context "when called with repo name" do
81
107
  setup do
82
108
  @options = {:testing_framework => :shoulda}
@@ -32,5 +32,9 @@ class TestGemspecHelper < Test::Unit::TestCase
32
32
  should "make valid spec" do
33
33
  assert @helper.valid?
34
34
  end
35
+
36
+ should "parse" do
37
+ @helper.parse
38
+ end
35
39
  end
36
40
  end