namelessjon-jeweler 0.7.2 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (129) hide show
  1. data/.gitignore +7 -0
  2. data/ChangeLog.markdown +65 -5
  3. data/README.markdown +99 -19
  4. data/ROADMAP +12 -0
  5. data/Rakefile +87 -23
  6. data/VERSION.yml +3 -3
  7. data/bin/jeweler +1 -65
  8. data/features/generator/cucumber.feature +83 -0
  9. data/features/generator/directory_layout.feature +76 -0
  10. data/features/generator/dotdocument.feature +14 -0
  11. data/features/generator/env_options.feature +9 -0
  12. data/features/generator/git.feature +94 -0
  13. data/features/generator/license.feature +11 -0
  14. data/features/generator/rakefile.feature +110 -0
  15. data/features/generator/readme.feature +12 -0
  16. data/features/generator/test.feature +41 -0
  17. data/features/generator/test_helper.feature +49 -0
  18. data/features/placeholder.feature +5 -0
  19. data/features/step_definitions/debug_steps.rb +6 -0
  20. data/features/step_definitions/filesystem_steps.rb +65 -0
  21. data/features/step_definitions/generator_steps.rb +251 -0
  22. data/features/step_definitions/task_steps.rb +6 -0
  23. data/features/support/env.rb +19 -0
  24. data/features/tasks/build_gem.feature +9 -0
  25. data/features/tasks/version.feature +24 -0
  26. data/features/tasks/version_bumping.feature +33 -0
  27. data/jeweler.gemspec +204 -0
  28. data/lib/jeweler.rb +52 -147
  29. data/lib/jeweler/commands.rb +12 -0
  30. data/lib/jeweler/commands/build_gem.rb +31 -0
  31. data/lib/jeweler/commands/install_gem.rb +26 -0
  32. data/lib/jeweler/commands/release.rb +83 -0
  33. data/lib/jeweler/commands/release_to_rubyforge.rb +51 -0
  34. data/lib/jeweler/commands/setup_rubyforge.rb +38 -0
  35. data/lib/jeweler/commands/validate_gemspec.rb +30 -0
  36. data/lib/jeweler/commands/version/base.rb +41 -0
  37. data/lib/jeweler/commands/version/bump_major.rb +13 -0
  38. data/lib/jeweler/commands/version/bump_minor.rb +12 -0
  39. data/lib/jeweler/commands/version/bump_patch.rb +14 -0
  40. data/lib/jeweler/commands/version/write.rb +12 -0
  41. data/lib/jeweler/commands/write_gemspec.rb +39 -0
  42. data/lib/jeweler/errors.rb +13 -1
  43. data/lib/jeweler/gemspec_helper.rb +76 -0
  44. data/lib/jeweler/generator.rb +160 -66
  45. data/lib/jeweler/generator/application.rb +54 -0
  46. data/lib/jeweler/generator/bacon_mixin.rb +39 -0
  47. data/lib/jeweler/generator/micronaut_mixin.rb +38 -0
  48. data/lib/jeweler/generator/minitest_mixin.rb +39 -0
  49. data/lib/jeweler/generator/options.rb +77 -0
  50. data/lib/jeweler/generator/rspec_mixin.rb +39 -0
  51. data/lib/jeweler/generator/shoulda_mixin.rb +39 -0
  52. data/lib/jeweler/generator/testunit_mixin.rb +39 -0
  53. data/lib/jeweler/rubyforge_tasks.rb +46 -0
  54. data/lib/jeweler/specification.rb +65 -0
  55. data/lib/jeweler/tasks.rb +64 -51
  56. data/lib/jeweler/templates/.document +5 -0
  57. data/lib/jeweler/templates/.gitignore +3 -1
  58. data/lib/jeweler/templates/LICENSE +1 -1
  59. data/lib/jeweler/templates/README.rdoc +7 -0
  60. data/lib/jeweler/templates/Rakefile +85 -26
  61. data/lib/jeweler/templates/bacon/{flunking_spec.rb → flunking.rb} +1 -1
  62. data/lib/jeweler/templates/bacon/{spec_helper.rb → helper.rb} +2 -2
  63. data/lib/jeweler/templates/features/default.feature +9 -0
  64. data/lib/jeweler/templates/features/support/env.rb +8 -0
  65. data/lib/jeweler/templates/micronaut/flunking.rb +7 -0
  66. data/lib/jeweler/templates/micronaut/helper.rb +17 -0
  67. data/lib/jeweler/templates/minitest/flunking.rb +7 -0
  68. data/lib/jeweler/templates/minitest/helper.rb +11 -0
  69. data/lib/jeweler/templates/rspec/flunking.rb +7 -0
  70. data/lib/jeweler/templates/rspec/helper.rb +9 -0
  71. data/lib/jeweler/templates/shoulda/{flunking_test.rb → flunking.rb} +2 -2
  72. data/lib/jeweler/templates/shoulda/{test_helper.rb → helper.rb} +2 -2
  73. data/lib/jeweler/templates/testunit/flunking.rb +7 -0
  74. data/lib/jeweler/templates/testunit/helper.rb +9 -0
  75. data/lib/jeweler/version_helper.rb +128 -0
  76. data/test/fixtures/bar/bin/foo_the_ultimate_bin +1 -0
  77. data/test/fixtures/bar/hey_include_me_in_gemspec +0 -0
  78. data/test/fixtures/bar/lib/foo_the_ultimate_lib.rb +1 -0
  79. data/test/fixtures/existing-project-with-version-plaintext/.document +5 -0
  80. data/test/fixtures/existing-project-with-version-plaintext/.gitignore +5 -0
  81. data/test/fixtures/existing-project-with-version-plaintext/LICENSE +20 -0
  82. data/test/fixtures/existing-project-with-version-plaintext/README.rdoc +7 -0
  83. data/test/fixtures/existing-project-with-version-plaintext/Rakefile +82 -0
  84. data/test/fixtures/existing-project-with-version-plaintext/VERSION +1 -0
  85. data/test/fixtures/existing-project-with-version-plaintext/existing-project-with-version.gemspec +29 -0
  86. data/test/fixtures/existing-project-with-version-plaintext/lib/existing_project_with_version.rb +0 -0
  87. data/test/fixtures/existing-project-with-version-plaintext/test/existing_project_with_version_test.rb +7 -0
  88. data/test/fixtures/existing-project-with-version-plaintext/test/test_helper.rb +10 -0
  89. data/test/fixtures/existing-project-with-version-yaml/.document +5 -0
  90. data/test/fixtures/existing-project-with-version-yaml/.gitignore +5 -0
  91. data/test/fixtures/existing-project-with-version-yaml/LICENSE +20 -0
  92. data/test/fixtures/existing-project-with-version-yaml/README.rdoc +7 -0
  93. data/test/fixtures/existing-project-with-version-yaml/Rakefile +82 -0
  94. data/test/fixtures/existing-project-with-version-yaml/VERSION.yml +4 -0
  95. data/test/fixtures/existing-project-with-version-yaml/existing-project-with-version.gemspec +29 -0
  96. data/test/fixtures/existing-project-with-version-yaml/lib/existing_project_with_version.rb +0 -0
  97. data/test/fixtures/existing-project-with-version-yaml/test/existing_project_with_version_test.rb +7 -0
  98. data/test/fixtures/existing-project-with-version-yaml/test/test_helper.rb +10 -0
  99. data/test/geminstaller.yml +12 -0
  100. data/test/jeweler/commands/test_build_gem.rb +72 -0
  101. data/test/jeweler/commands/test_install_gem.rb +21 -0
  102. data/test/jeweler/commands/test_release.rb +405 -0
  103. data/test/jeweler/commands/test_release_to_rubyforge.rb +157 -0
  104. data/test/jeweler/commands/test_setup_rubyforge.rb +88 -0
  105. data/test/jeweler/commands/test_validate_gemspec.rb +27 -0
  106. data/test/jeweler/commands/test_write_gemspec.rb +92 -0
  107. data/test/jeweler/commands/version/test_base.rb +32 -0
  108. data/test/jeweler/commands/version/test_bump_major.rb +22 -0
  109. data/test/jeweler/commands/version/test_bump_minor.rb +19 -0
  110. data/test/jeweler/commands/version/test_bump_patch.rb +20 -0
  111. data/test/jeweler/commands/version/test_write.rb +23 -0
  112. data/test/test_application.rb +139 -0
  113. data/test/{test_gemspec.rb → test_gemspec_helper.rb} +13 -5
  114. data/test/test_generator.rb +118 -233
  115. data/test/test_generator_initialization.rb +113 -0
  116. data/test/test_generator_mixins.rb +18 -0
  117. data/test/test_helper.rb +98 -28
  118. data/test/test_jeweler.rb +136 -95
  119. data/test/test_options.rb +116 -0
  120. data/test/test_specification.rb +61 -0
  121. data/test/test_tasks.rb +17 -6
  122. data/test/test_version_helper.rb +153 -0
  123. metadata +160 -34
  124. data/TODO +0 -13
  125. data/lib/jeweler/gemspec.rb +0 -41
  126. data/lib/jeweler/templates/README +0 -9
  127. data/lib/jeweler/version.rb +0 -83
  128. data/test/generators/initialization_test.rb +0 -146
  129. data/test/test_version.rb +0 -115
@@ -0,0 +1,18 @@
1
+ require 'test_helper'
2
+
3
+ class TestGeneratorMixins < Test::Unit::TestCase
4
+
5
+ [Jeweler::Generator::BaconMixin, Jeweler::Generator::MicronautMixin,
6
+ Jeweler::Generator::RspecMixin, Jeweler::Generator::ShouldaMixin,
7
+ Jeweler::Generator::TestunitMixin, Jeweler::Generator::MinitestMixin].each do |mixin|
8
+ context "#{mixin}" do
9
+ %w(default_task feature_support_require feature_support_extend
10
+ test_dir test_task test_pattern test_filename
11
+ test_helper_filename).each do |method|
12
+ should "define #{method}" do
13
+ assert mixin.method_defined?(method)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,15 +1,3 @@
1
- require 'test/unit'
2
-
3
- require 'rubygems'
4
- gem 'thoughtbot-shoulda'
5
- require 'shoulda'
6
- gem 'ruby-debug'
7
- require 'ruby-debug'
8
- gem 'mocha'
9
- require 'mocha'
10
-
11
- require File.dirname(__FILE__) + '/shoulda_macros/jeweler_macros'
12
-
13
1
  # Use vendored gem because of limited gem availability on runcoderun
14
2
  # This is loosely based on 'vendor everything'.
15
3
  Dir[File.join(File.dirname(__FILE__), '..', 'vendor', 'gems', '**')].each do |dir|
@@ -17,36 +5,55 @@ Dir[File.join(File.dirname(__FILE__), '..', 'vendor', 'gems', '**')].each do |di
17
5
  $LOAD_PATH.unshift(lib) if File.directory?(lib)
18
6
  end
19
7
 
20
- require 'output_catcher'
8
+ require 'test/unit'
9
+
10
+ require 'rubygems'
11
+ require 'shoulda'
12
+ begin
13
+ require 'ruby-debug'
14
+ rescue LoadError
15
+ end
16
+
17
+ require 'rr'
18
+ require 'redgreen'
21
19
  require 'time'
22
20
 
23
21
  $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
24
- $LOAD_PATH.unshift(File.dirname(__FILE__))
25
22
  require 'jeweler'
26
23
 
27
- # Fake out FileList from Rake
28
- class FileList
29
- def self.[](*args)
30
- TMP_DIR.entries - ['.','..','.DS_STORE']
24
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
25
+ require 'shoulda_macros/jeweler_macros'
26
+
27
+ TMP_DIR = File.expand_path('../tmp', __FILE__)
28
+ FIXTURE_DIR = File.expand_path('../fixtures', __FILE__)
29
+
30
+ class RubyForgeStub
31
+ attr_accessor :userconfig, :autoconfig
32
+ def initialize
33
+ @userconfig = {}
34
+ @autoconfig = {}
31
35
  end
32
36
  end
33
37
 
34
- TMP_DIR = File.join(File.dirname(__FILE__), 'tmp')
35
- FileUtils.rm_f(TMP_DIR) # GAH, dirty hax. Somewhere isn't tearing up correctly, so do some cleanup first
38
+ require 'output_catcher'
36
39
 
37
40
  class Test::Unit::TestCase
38
- def catch_out(&block)
39
- OutputCatcher.catch_out do
40
- block.call
41
- end
41
+ include RR::Adapters::TestUnit unless include?(RR::Adapters::TestUnit)
42
+
43
+ def tmp_dir
44
+ TMP_DIR
42
45
  end
43
46
 
44
47
  def fixture_dir
45
- File.join(File.dirname(__FILE__), 'fixtures', 'bar')
48
+ File.join(FIXTURE_DIR, 'bar')
46
49
  end
47
50
 
48
- def tmp_dir
49
- File.join(File.dirname(__FILE__), 'tmp')
51
+ def remove_tmpdir!
52
+ FileUtils.rm_rf(tmp_dir)
53
+ end
54
+
55
+ def create_tmpdir!
56
+ FileUtils.mkdir_p(tmp_dir)
50
57
  end
51
58
 
52
59
  def build_spec(*files)
@@ -56,8 +63,71 @@ class Test::Unit::TestCase
56
63
  s.email = "josh@technicalpickles.com"
57
64
  s.homepage = "http://github.com/technicalpickles/jeweler"
58
65
  s.description = "Simple and opinionated helper for creating Rubygem projects on GitHub"
59
- s.authors = ["Josh Nichols", "Dan Croak"]
66
+ s.authors = ["Josh Nichols"]
60
67
  s.files = FileList[*files] unless files.empty?
68
+ s.version = '0.1.1'
61
69
  end
62
70
  end
71
+
72
+ def self.rubyforge_command_context(description, &block)
73
+ context description do
74
+ setup do
75
+ @command = eval(self.class.name.gsub(/::Test/, '::')).new
76
+
77
+ if @command.respond_to? :gemspec=
78
+ @gemspec = Object.new
79
+ @command.gemspec = @gemspec
80
+ end
81
+
82
+ if @command.respond_to? :gemspec_helper=
83
+ @gemspec_helper = Object.new
84
+ @command.gemspec_helper = @gemspec_helper
85
+ end
86
+
87
+ if @command.respond_to? :rubyforge=
88
+ @rubyforge = RubyForgeStub.new
89
+ @command.rubyforge = @rubyforge
90
+ end
91
+
92
+ if @command.respond_to? :output
93
+ @output = StringIO.new
94
+ @command.output = @output
95
+ end
96
+ end
97
+
98
+ context "", &block
99
+ end
100
+ end
101
+
102
+ def self.build_command_context(description, &block)
103
+ context description do
104
+ setup do
105
+
106
+ @repo = Object.new
107
+ @version_helper = Object.new
108
+ @gemspec = Object.new
109
+ @commit = Object.new
110
+ @version = Object.new
111
+ @output = Object.new
112
+ @base_dir = Object.new
113
+ @gemspec_helper = Object.new
114
+ @rubyforge = Object.new
115
+
116
+ @jeweler = Object.new
117
+
118
+ stub(@jeweler).repo { @repo }
119
+ stub(@jeweler).version_helper { @version_helper }
120
+ stub(@jeweler).gemspec { @gemspec }
121
+ stub(@jeweler).commit { @commit }
122
+ stub(@jeweler).version { @version }
123
+ stub(@jeweler).output { @output }
124
+ stub(@jeweler).gemspec_helper { @gemspec_helper }
125
+ stub(@jeweler).base_dir { @base_dir }
126
+ stub(@jeweler).rubyforge { @rubyforge }
127
+ end
128
+
129
+ context "", &block
130
+ end
131
+
132
+ end
63
133
  end
@@ -1,133 +1,174 @@
1
- require File.dirname(__FILE__) + '/test_helper'
1
+ require 'test_helper'
2
2
 
3
3
  class TestJeweler < Test::Unit::TestCase
4
4
 
5
- def setup
6
- @now = Time.now
7
- Time.stubs(:now).returns(@now)
8
- FileUtils.rm_rf("#{File.dirname(__FILE__)}/tmp")
5
+ def build_jeweler(base_dir = nil)
6
+ base_dir ||= non_git_dir_path
7
+ FileUtils.mkdir_p base_dir
8
+
9
+ Jeweler.new(build_spec, base_dir)
9
10
  end
10
11
 
11
- def teardown
12
- FileUtils.rm_rf("#{File.dirname(__FILE__)}/tmp")
12
+ def git_dir_path
13
+ File.join(tmp_dir, 'git')
13
14
  end
14
15
 
15
- context "A jeweler without a VERSION.yml" do
16
- setup do
17
- FileUtils.mkdir_p(tmp_dir)
18
- @jeweler = Jeweler.new(build_spec, tmp_dir)
19
- end
16
+ def non_git_dir_path
17
+ File.join(tmp_dir, 'nongit')
18
+ end
19
+
20
+ def build_git_dir
20
21
 
21
- should "not have VERSION.yml" do
22
- assert ! File.exists?(File.join(tmp_dir, 'VERSION.yml'))
22
+ FileUtils.mkdir_p git_dir_path
23
+ Dir.chdir git_dir_path do
24
+ Git.init
23
25
  end
24
26
  end
25
27
 
28
+ def build_non_git_dir
29
+ FileUtils.mkdir_p non_git_dir_path
30
+ end
26
31
 
27
- context "A Jeweler with a VERSION.yml" do
28
- setup do
29
- FileUtils.cp_r(fixture_dir, tmp_dir)
30
-
31
- @jeweler = Jeweler.new(build_spec, tmp_dir)
32
+ should "raise an error if a nil gemspec is given" do
33
+ assert_raises Jeweler::GemspecError do
34
+ Jeweler.new(nil)
32
35
  end
36
+ end
33
37
 
34
- should_have_major_version 1
35
- should_have_minor_version 5
36
- should_have_patch_version 2
37
- should_be_version '1.5.2'
38
+ should "know if it is in a git repo" do
39
+ build_git_dir
38
40
 
39
- context "bumping the patch version" do
40
- setup do
41
- @output = catch_out { @jeweler.bump_patch_version }
42
- end
43
- should_bump_version 1, 5, 3
44
- end
41
+ assert build_jeweler(git_dir_path).in_git_repo?
42
+ end
45
43
 
46
- context "bumping the minor version" do
47
- setup do
48
- @output = catch_out { @jeweler.bump_minor_version }
49
- end
44
+ should "know if it is not in a git repo" do
45
+ build_non_git_dir
50
46
 
51
- should_bump_version 1, 6, 0
52
- end
47
+ jeweler = build_jeweler(non_git_dir_path)
48
+ assert ! jeweler.in_git_repo?, "jeweler doesn't know that #{jeweler.base_dir} is not a git repository"
49
+ end
53
50
 
54
- context "bumping the major version" do
55
- setup do
56
- @output = catch_out { @jeweler.bump_major_version}
57
- end
51
+ should "build and run write gemspec command when writing gemspec" do
52
+ jeweler = build_jeweler
58
53
 
59
- should_bump_version 2, 0, 0
60
- end
54
+ command = Object.new
55
+ mock(command).run
61
56
 
62
- should "should find files" do
63
- assert ! @jeweler.gemspec.files.empty?
64
- end
57
+ mock(Jeweler::Commands::WriteGemspec).build_for(jeweler) { command }
65
58
 
66
- context "with standard 'files' specified" do
67
- setup do
68
- @alt_jeweler = Jeweler.new(build_spec("[A-Z]*.*", "{bin,generators,lib,test,spec}/**/*"), tmp_dir)
69
- end
70
-
71
- should "have the same files as when no 'files' are specified" do
72
- assert_equal @jeweler.gemspec.files, @alt_jeweler.gemspec.files
73
- end
74
- end
59
+ jeweler.write_gemspec
60
+ end
75
61
 
76
- context "gemsepc's rdoc" do
77
- should 'have be enabled' do
78
- assert @jeweler.gemspec.has_rdoc
79
- end
62
+ should "build and run validate gemspec command when validating gemspec" do
63
+ jeweler = build_jeweler
80
64
 
81
- should 'do inline source' do
82
- assert @jeweler.gemspec.rdoc_options.include?('--inline-source')
83
- end
65
+ command = Object.new
66
+ mock(command).run
84
67
 
85
- should 'be utf-8' do
86
- assert @jeweler.gemspec.rdoc_options.include?('--charset=UTF-8')
87
- end
68
+ mock(Jeweler::Commands::ValidateGemspec).build_for(jeweler) { command }
88
69
 
89
- end
70
+ jeweler.validate_gemspec
71
+ end
90
72
 
91
- context "writing the gemspec" do
92
- setup do
93
- @output = catch_out { @jeweler.write_gemspec }
94
- end
73
+ should "build and run build gem command when building gem" do
74
+ jeweler = build_jeweler
95
75
 
96
- should "create bar.gemspec" do
97
- assert File.exists?(File.join(tmp_dir, 'bar.gemspec'))
98
- end
76
+ command = Object.new
77
+ mock(command).run
99
78
 
100
- should "have created a valid gemspec" do
101
- assert @jeweler.valid_gemspec?
102
- end
79
+ mock(Jeweler::Commands::BuildGem).build_for(jeweler) { command }
103
80
 
104
- should "output the name of the gemspec" do
105
- assert_match 'bar.gemspec', @output
106
- end
81
+ jeweler.build_gem
82
+ end
107
83
 
108
- context "re-reading the gemspec" do
109
- setup do
110
- gemspec_path = File.join(tmp_dir, 'bar.gemspec')
111
- data = File.read(gemspec_path)
84
+ should "build and run build gem command when installing gem" do
85
+ jeweler = build_jeweler
112
86
 
113
- @parsed_spec = eval("$SAFE = 3\n#{data}", binding, gemspec_path)
114
- end
87
+ command = Object.new
88
+ mock(command).run
115
89
 
116
- should "have version 1.5.2" do
117
- assert_equal '1.5.2', @parsed_spec.version.version
118
- end
90
+ mock(Jeweler::Commands::InstallGem).build_for(jeweler) { command }
119
91
 
120
- should "have date filled in" do
121
- assert_equal Time.local(@now.year, @now.month, @now.day), @parsed_spec.date
122
- end
123
- end
124
- end
92
+ jeweler.install_gem
125
93
  end
126
94
 
127
- should "raise an exception when created with a nil gemspec" do
128
- assert_raises Jeweler::GemspecError do
129
- @jeweler = Jeweler.new(nil, tmp_dir)
130
- end
95
+ should "build and run bump major version command when bumping major version" do
96
+ jeweler = build_jeweler
97
+
98
+ command = Object.new
99
+ mock(command).run
100
+
101
+ mock(Jeweler::Commands::Version::BumpMajor).build_for(jeweler) { command }
102
+
103
+ jeweler.bump_major_version
104
+ end
105
+
106
+ should "build and run bump minor version command when bumping minor version" do
107
+ jeweler = build_jeweler
108
+
109
+ command = Object.new
110
+ mock(command).run
111
+
112
+ mock(Jeweler::Commands::Version::BumpMinor).build_for(jeweler) { command }
113
+
114
+ jeweler.bump_minor_version
115
+ end
116
+
117
+ should "build and run write version command when writing version" do
118
+ jeweler = build_jeweler
119
+
120
+ command = Object.new
121
+ mock(command).run
122
+ mock(command).major=(1)
123
+ mock(command).minor=(5)
124
+ mock(command).patch=(2)
125
+
126
+ mock(Jeweler::Commands::Version::Write).build_for(jeweler) { command }
127
+
128
+ jeweler.write_version(1, 5, 2)
129
+ end
130
+
131
+ should "build and run release command when running release" do
132
+ jeweler = build_jeweler
133
+
134
+ command = Object.new
135
+ mock(command).run
136
+
137
+ mock(Jeweler::Commands::Release).build_for(jeweler) { command }
138
+
139
+ jeweler.release
140
+ end
141
+
142
+ should "build and run release to rubyforge command when running release to rubyforge" do
143
+ jeweler = build_jeweler
144
+
145
+ command = Object.new
146
+ mock(command).run
147
+
148
+ mock(Jeweler::Commands::ReleaseToRubyforge).build_for(jeweler) { command }
149
+
150
+ jeweler.release_gem_to_rubyforge
151
+ end
152
+
153
+
154
+ should "respond to gemspec_helper" do
155
+ assert_respond_to build_jeweler, :gemspec_helper
156
+ end
157
+
158
+ should "respond to version_helper" do
159
+ assert_respond_to build_jeweler, :version_helper
160
+ end
161
+
162
+ should "respond to repo" do
163
+ assert_respond_to build_jeweler, :repo
164
+ end
165
+
166
+ should "respond to commit" do
167
+ assert_respond_to build_jeweler, :commit
168
+ end
169
+
170
+ should "respond to rubyforge" do
171
+ assert_respond_to build_jeweler, :rubyforge
131
172
  end
132
173
 
133
174
  end
@@ -0,0 +1,116 @@
1
+ require 'test_helper'
2
+
3
+ class TestOptions < Test::Unit::TestCase
4
+
5
+ def self.should_have_testing_framework(testing_framework)
6
+ should "use #{testing_framework} for testing" do
7
+ assert_equal testing_framework.to_sym, @options[:testing_framework]
8
+ end
9
+ end
10
+
11
+ def setup_options(*arguments)
12
+ @options = Jeweler::Generator::Options.new(arguments)
13
+ end
14
+
15
+ def self.for_options(*options)
16
+ context options.join(' ') do
17
+ setup { setup_options *options }
18
+ yield
19
+ end
20
+ end
21
+
22
+ context "default options" do
23
+ setup { setup_options }
24
+ should_have_testing_framework :shoulda
25
+ should 'not create repository' do
26
+ assert ! @options[:create_repo]
27
+ end
28
+ end
29
+
30
+ for_options '--shoulda' do
31
+ should_have_testing_framework :shoulda
32
+ end
33
+
34
+ for_options "--bacon" do
35
+ should_have_testing_framework :bacon
36
+ end
37
+
38
+ for_options "--testunit" do
39
+ should_have_testing_framework :testunit
40
+ end
41
+
42
+ for_options '--minitest' do
43
+ should_have_testing_framework :minitest
44
+ end
45
+
46
+ for_options '--rspec' do
47
+ should_have_testing_framework :rspec
48
+ end
49
+
50
+ for_options '--micronaut' do
51
+ should_have_testing_framework :micronaut
52
+ end
53
+
54
+ for_options '--cucumber' do
55
+ should 'enable cucumber' do
56
+ assert_equal true, @options[:use_cucumber]
57
+ end
58
+ end
59
+
60
+ for_options '--create-repo' do
61
+ should 'create repository' do
62
+ assert @options[:create_repo]
63
+ end
64
+ end
65
+
66
+ for_options '--rubyforge' do
67
+ should 'enable rubyforge' do
68
+ assert @options[:rubyforge]
69
+ end
70
+ end
71
+
72
+ for_options '--summary', 'zomg so awesome' do
73
+ should 'have summary zomg so awesome' do
74
+ assert_equal 'zomg so awesome', @options[:summary]
75
+ end
76
+ end
77
+
78
+ for_options '--directory', 'foo' do
79
+ should 'have directory foo' do
80
+ assert_equal 'foo', @options[:directory]
81
+ end
82
+ end
83
+
84
+ for_options '--help' do
85
+ should 'show help' do
86
+ assert @options[:show_help]
87
+ end
88
+ end
89
+
90
+ for_options '-h' do
91
+ should 'show help' do
92
+ assert @options[:show_help]
93
+ end
94
+ end
95
+
96
+ for_options '--zomg-invalid' do
97
+ should 'be an invalid argument' do
98
+ assert @options[:invalid_argument]
99
+ end
100
+ end
101
+
102
+ context "merging options" do
103
+ should "take options from each" do
104
+ options = Jeweler::Generator::Options.new(["--rspec"]).
105
+ merge Jeweler::Generator::Options.new(["--create-repo"])
106
+ assert_equal :rspec, options[:testing_framework]
107
+ assert options[:create_repo]
108
+ end
109
+
110
+ should "shadow options" do
111
+ options = Jeweler::Generator::Options.new(["--bacon"]).
112
+ merge Jeweler::Generator::Options.new(["--rspec"])
113
+ assert_equal :rspec, options[:testing_framework]
114
+ end
115
+ end
116
+ end