diff options
author | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-06-09 21:38:59 +0000 |
---|---|---|
committer | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-06-09 21:38:59 +0000 |
commit | 31c94ffeb5f09d09ac2c86fc9e6614e38251a43d (patch) | |
tree | 10e44506238c7af3d7c9d822111996731726e38d /test/rubygems/test_gem_specification.rb | |
parent | a6afbaeb3be396c0fdea3b9077d9256c59edcfca (diff) | |
download | ruby-31c94ffeb5f09d09ac2c86fc9e6614e38251a43d.tar.gz |
Update to RubyGems 1.3.4 r2223
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23659 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/rubygems/test_gem_specification.rb')
-rw-r--r-- | test/rubygems/test_gem_specification.rb | 336 |
1 files changed, 317 insertions, 19 deletions
diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb index 79093ff3a5..e18b0f73ef 100644 --- a/test/rubygems/test_gem_specification.rb +++ b/test/rubygems/test_gem_specification.rb @@ -53,6 +53,7 @@ end s.test_file = 'test/suite.rb' s.requirements << 'A working computer' s.rubyforge_project = 'example' + s.license = 'MIT' s.add_dependency 'rake', '> 0.4' s.add_dependency 'jabber4r', '> 0.0.0' @@ -91,6 +92,7 @@ end files has_rdoc homepage + licenses name platform post_install_message @@ -195,8 +197,8 @@ end assert_equal [], spec.requirements assert_equal [], spec.dependencies assert_equal 'bin', spec.bindir - assert_equal false, spec.has_rdoc - assert_equal false, spec.has_rdoc? + assert_equal true, spec.has_rdoc + assert_equal true, spec.has_rdoc? assert_equal '>= 0', spec.required_ruby_version.to_s assert_equal '>= 0', spec.required_rubygems_version.to_s end @@ -216,6 +218,80 @@ end assert_equal "1.3.5", spec.version.to_s end + def test_initialize_copy + spec = Gem::Specification.new do |s| + s.name = "blah" + s.version = "1.3.5" + s.summary = 'summary' + s.description = 'description' + s.authors = 'author a', 'author b' + s.licenses = 'BSD' + s.files = 'lib/file.rb' + s.test_files = 'test/file.rb' + s.rdoc_options = '--foo' + s.extra_rdoc_files = 'README.txt' + s.executables = 'exec' + s.extensions = 'ext/extconf.rb' + s.requirements = 'requirement' + s.add_dependency 'some_gem' + end + + new_spec = spec.dup + + assert_equal "blah", spec.name + assert_same spec.name, new_spec.name + + assert_equal "1.3.5", spec.version.to_s + assert_same spec.version, new_spec.version + + assert_equal Gem::Platform::RUBY, spec.platform + assert_same spec.platform, new_spec.platform + + assert_equal 'summary', spec.summary + assert_same spec.summary, new_spec.summary + + assert_equal %w[lib/file.rb test/file.rb bin/exec README.txt + ext/extconf.rb], + spec.files + refute_same spec.files, new_spec.files, 'files' + + assert_equal %w[test/file.rb], spec.test_files + refute_same spec.test_files, new_spec.test_files, 'test_files' + + assert_equal %w[--foo], spec.rdoc_options + refute_same spec.rdoc_options, new_spec.rdoc_options, 'rdoc_options' + + assert_equal %w[README.txt], spec.extra_rdoc_files + refute_same spec.extra_rdoc_files, new_spec.extra_rdoc_files, + 'extra_rdoc_files' + + assert_equal %w[exec], spec.executables + refute_same spec.executables, new_spec.executables, 'executables' + + assert_equal %w[ext/extconf.rb], spec.extensions + refute_same spec.extensions, new_spec.extensions, 'extensions' + + assert_equal %w[requirement], spec.requirements + refute_same spec.requirements, new_spec.requirements, 'requirements' + + assert_equal [Gem::Dependency.new('some_gem', Gem::Requirement.default)], + spec.dependencies + refute_same spec.dependencies, new_spec.dependencies, 'dependencies' + + assert_equal 'bin', spec.bindir + assert_same spec.bindir, new_spec.bindir + + assert_equal true, spec.has_rdoc + assert_same spec.has_rdoc, new_spec.has_rdoc + + assert_equal '>= 0', spec.required_ruby_version.to_s + assert_same spec.required_ruby_version, new_spec.required_ruby_version + + assert_equal '>= 0', spec.required_rubygems_version.to_s + assert_same spec.required_rubygems_version, + new_spec.required_rubygems_version + end + def test__dump @a2.platform = Gem::Platform.local @a2.instance_variable_set :@original_platform, 'old_platform' @@ -355,7 +431,7 @@ end s.homepage = %q{http://www.spice-of-life.net/download/cgikit/} s.autorequire = %q{cgikit} s.bindir = nil - s.has_rdoc = nil + s.has_rdoc = true s.required_ruby_version = nil s.platform = nil s.files = ["lib/cgikit", "lib/cgikit.rb", "lib/cgikit/components", "..."] @@ -490,7 +566,7 @@ end 'i386-mswin32_80' => 'a-1-x86-mswin32-80', 'i386-mingw32' => 'a-1-x86-mingw32' } - + test_cases.each do |arch, expected| util_set_arch arch @a1.platform = 'current' @@ -502,18 +578,49 @@ end assert @a1.has_rdoc? end + def test_has_rdoc_equals + + use_ui @ui do + @a1.has_rdoc = false + end + + assert_equal '', @ui.output + + assert_equal true, @a1.has_rdoc + end + def test_hash assert_equal @a1.hash, @a1.hash assert_equal @a1.hash, @a1.dup.hash refute_equal @a1.hash, @a2.hash end + def test_installation_path + assert_equal @gemhome, @a1.installation_path + + @a1.instance_variable_set :@loaded_from, nil + + e = assert_raises Gem::Exception do + @a1.installation_path + end + + assert_equal 'spec a-1 is not from an installed gem', e.message + end + def test_lib_files @a1.files = %w[lib/foo.rb Rakefile] assert_equal %w[lib/foo.rb], @a1.lib_files end + def test_license + assert_equal 'MIT', @a1.license + end + + def test_licenses + assert_equal ['MIT'], @a1.licenses + end + def test_name assert_equal 'a', @a1.name end @@ -568,6 +675,12 @@ end assert_equal Gem::Platform.new('ppc-darwin'), @a1.platform end + def test_prerelease_spec_adds_required_rubygems_version + @prerelease = quick_gem('tardis', '2.2.0.a') + refute @prerelease.required_rubygems_version.satisfied_by?(Gem::Version.new('1.3.1')) + assert @prerelease.required_rubygems_version.satisfied_by?(Gem::Version.new('1.4.0')) + end + def test_require_paths @a1.require_path = 'lib' assert_equal %w[lib], @a1.require_paths @@ -646,7 +759,6 @@ Gem::Specification.new do |s| s.description = %q{This is a test description} s.email = %q{example@example.com} s.files = [\"lib/code.rb\"] - s.has_rdoc = true s.homepage = %q{http://example.com} s.require_paths = [\"lib\"] s.rubygems_version = %q{#{Gem::RubyGemsVersion}} @@ -698,8 +810,8 @@ Gem::Specification.new do |s| s.executables = [\"exec\"] s.extensions = [\"ext/a/extconf.rb\"] s.files = [\"lib/code.rb\", \"test/suite.rb\", \"bin/exec\", \"ext/a/extconf.rb\"] - s.has_rdoc = %q{true} s.homepage = %q{http://example.com} + s.licenses = [\"MIT\"] s.require_paths = [\"lib\"] s.requirements = [\"A working computer\"] s.rubyforge_project = %q{example} @@ -709,7 +821,7 @@ Gem::Specification.new do |s| if s.respond_to? :specification_version then current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION - s.specification_version = 2 + s.specification_version = 3 if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then s.add_runtime_dependency(%q<rake>, [\"> 0.4\"]) @@ -797,12 +909,16 @@ end end def test_validate + util_setup_validate + Dir.chdir @tempdir do assert @a1.validate end end def test_validate_authors + util_setup_validate + Dir.chdir @tempdir do @a1.authors = [] @@ -819,10 +935,28 @@ end end assert_equal 'authors must be Array of Strings', e.message + + @a1.authors = ['FIXME (who is writing this software)'] + + e = assert_raises Gem::InvalidSpecificationException do + @a1.validate + end + + assert_equal '"FIXME" or "TODO" is not an author', e.message + + @a1.authors = ['TODO (who is writing this software)'] + + e = assert_raises Gem::InvalidSpecificationException do + @a1.validate + end + + assert_equal '"FIXME" or "TODO" is not an author', e.message end end def test_validate_autorequire + util_setup_validate + Dir.chdir @tempdir do @a1.autorequire = 'code' @@ -835,7 +969,50 @@ end end end + def test_validate_description + util_setup_validate + + Dir.chdir @tempdir do + @a1.description = '' + + use_ui @ui do + @a1.validate + end + + assert_equal "WARNING: no description specified\n", @ui.error, 'error' + + @ui = MockGemUi.new + @a1.summary = 'this is my summary' + @a1.description = @a1.summary + + use_ui @ui do + @a1.validate + end + + assert_equal "WARNING: description and summary are identical\n", + @ui.error, 'error' + + @a1.description = 'FIXME (describe your package)' + + e = assert_raises Gem::InvalidSpecificationException do + @a1.validate + end + + assert_equal '"FIXME" or "TODO" is not a description', e.message + + @a1.description = 'TODO (describe your package)' + + e = assert_raises Gem::InvalidSpecificationException do + @a1.validate + end + + assert_equal '"FIXME" or "TODO" is not a description', e.message + end + end + def test_validate_email + util_setup_validate + Dir.chdir @tempdir do @a1.email = '' @@ -844,10 +1021,28 @@ end end assert_equal "WARNING: no email specified\n", @ui.error, 'error' + + @a1.email = 'FIXME (your e-mail)' + + e = assert_raises Gem::InvalidSpecificationException do + @a1.validate + end + + assert_equal '"FIXME" or "TODO" is not an email address', e.message + + @a1.email = 'TODO (your e-mail)' + + e = assert_raises Gem::InvalidSpecificationException do + @a1.validate + end + + assert_equal '"FIXME" or "TODO" is not an email address', e.message end end def test_validate_empty + util_setup_validate + e = assert_raises Gem::InvalidSpecificationException do Gem::Specification.new.validate end @@ -856,8 +1051,11 @@ end end def test_validate_executables + util_setup_validate + FileUtils.mkdir_p File.join(@tempdir, 'bin') File.open File.join(@tempdir, 'bin', 'exec'), 'w' do end + FileUtils.mkdir_p File.join(@tempdir, 'exec') use_ui @ui do Dir.chdir @tempdir do @@ -865,45 +1063,94 @@ end end end + assert_equal %w[exec], @a1.executables + assert_equal '', @ui.output, 'output' assert_equal "WARNING: bin/exec is missing #! line\n", @ui.error, 'error' end def test_validate_empty_require_paths - @a1.require_paths = [] - e = assert_raises Gem::InvalidSpecificationException do - @a1.validate + if win_platform? then + skip 'test_validate_empty_require_paths skipped on MS Windows (symlink)' + else + util_setup_validate + + @a1.require_paths = [] + e = assert_raises Gem::InvalidSpecificationException do + @a1.validate + end + + assert_equal 'specification must have at least one require_path', + e.message end + end - assert_equal 'specification must have at least one require_path', e.message + def test_validate_files + skip 'test_validate_files skipped on MS Windows (symlink)' if win_platform? + util_setup_validate + + @a1.files += ['lib', 'lib2'] + + Dir.chdir @tempdir do + FileUtils.ln_s '/root/path', 'lib2' unless vc_windows? + + e = assert_raises Gem::InvalidSpecificationException do + @a1.validate + end + + assert_equal '["lib2"] are not files', e.message + end + + assert_equal %w[lib/code.rb test/suite.rb bin/exec ext/a/extconf.rb lib2], + @a1.files end def test_validate_homepage + util_setup_validate + Dir.chdir @tempdir do - @a1.homepage = '' + @a1.homepage = nil use_ui @ui do @a1.validate end assert_equal "WARNING: no homepage specified\n", @ui.error, 'error' - end - end - def test_validate_has_rdoc - Dir.chdir @tempdir do - @a1.has_rdoc = false + @ui = MockGemUi.new + + @a1.homepage = '' use_ui @ui do @a1.validate end - assert_equal "WARNING: RDoc will not be generated (has_rdoc == false)\n", - @ui.error, 'error' + assert_equal "WARNING: no homepage specified\n", @ui.error, 'error' + + @a1.homepage = 'over at my cool site' + + e = assert_raises Gem::InvalidSpecificationException do + @a1.validate + end + + assert_equal '"over at my cool site" is not a URI', e.message end end + def test_validate_name + util_setup_validate + + e = assert_raises Gem::InvalidSpecificationException do + @a1.name = :json + @a1.validate + end + + assert_equal 'invalid value for attribute name: ":json"', e.message + end + def test_validate_platform_legacy + util_setup_validate + Dir.chdir @tempdir do @a1.platform = 'mswin32' assert @a1.validate @@ -917,6 +1164,8 @@ end end def test_validate_rubyforge_project + util_setup_validate + Dir.chdir @tempdir do @a1.rubyforge_project = '' @@ -930,6 +1179,8 @@ end end def test_validate_rubygems_version + util_setup_validate + @a1.rubygems_version = "3" e = assert_raises Gem::InvalidSpecificationException do @a1.validate @@ -939,7 +1190,26 @@ end e.message end + def test_validate_specification_version + util_setup_validate + + Dir.chdir @tempdir do + @a1.specification_version = '1.0' + + e = assert_raises Gem::InvalidSpecificationException do + use_ui @ui do + @a1.validate + end + end + + err = 'specification_version must be a Fixnum (did you mean version?)' + assert_equal err, e.message + end + end + def test_validate_summary + util_setup_validate + Dir.chdir @tempdir do @a1.summary = '' @@ -948,6 +1218,22 @@ end end assert_equal "WARNING: no summary specified\n", @ui.error, 'error' + + @a1.summary = 'FIXME (describe your package)' + + e = assert_raises Gem::InvalidSpecificationException do + @a1.validate + end + + assert_equal '"FIXME" or "TODO" is not a summary', e.message + + @a1.summary = 'TODO (describe your package)' + + e = assert_raises Gem::InvalidSpecificationException do + @a1.validate + end + + assert_equal '"FIXME" or "TODO" is not a summary', e.message end end @@ -955,5 +1241,17 @@ end assert_equal Gem::Version.new('1'), @a1.version end + def util_setup_validate + Dir.chdir @tempdir do + FileUtils.mkdir_p File.join('ext', 'a') + FileUtils.mkdir_p 'lib' + FileUtils.mkdir_p 'test' + + FileUtils.touch File.join('ext', 'a', 'extconf.rb') + FileUtils.touch File.join('lib', 'code.rb') + FileUtils.touch File.join('test', 'suite.rb') + end + end + end |