1require 'rubygems/test_case' 2require 'rubygems/commands/build_command' 3require 'rubygems/package' 4 5class TestGemCommandsBuildCommand < Gem::TestCase 6 7 def setup 8 super 9 10 @gem = quick_spec 'some_gem' do |s| 11 s.rubyforge_project = 'example' 12 end 13 14 @cmd = Gem::Commands::BuildCommand.new 15 end 16 17 def test_execute 18 gemspec_file = File.join(@tempdir, @gem.spec_name) 19 20 File.open gemspec_file, 'w' do |gs| 21 gs.write @gem.to_ruby 22 end 23 24 util_test_build_gem @gem, gemspec_file 25 end 26 27 def test_execute_bad_spec 28 @gem.date = "2010-11-08" 29 30 gemspec_file = File.join(@tempdir, @gem.spec_name) 31 32 File.open gemspec_file, 'w' do |gs| 33 gs.write @gem.to_ruby.sub(/11-08/, "11-8") 34 end 35 36 @cmd.options[:args] = [gemspec_file] 37 38 out, err = use_ui @ui do 39 capture_io do 40 assert_raises Gem::MockGemUi::TermError do 41 @cmd.execute 42 end 43 end 44 end 45 46 assert_equal "", out 47 assert_match(/invalid date format in specification/, err) 48 49 assert_equal '', @ui.output 50 assert_equal "ERROR: Error loading gemspec. Aborting.\n", @ui.error 51 end 52 53 def test_execute_missing_file 54 @cmd.options[:args] = %w[some_gem] 55 use_ui @ui do 56 assert_raises Gem::MockGemUi::TermError do 57 @cmd.execute 58 end 59 end 60 61 assert_equal '', @ui.output 62 assert_equal "ERROR: Gemspec file not found: some_gem\n", @ui.error 63 end 64 65 def util_test_build_gem(gem, gemspec_file, check_licenses=true) 66 @cmd.options[:args] = [gemspec_file] 67 68 use_ui @ui do 69 Dir.chdir @tempdir do 70 @cmd.execute 71 end 72 end 73 74 output = @ui.output.split "\n" 75 assert_equal " Successfully built RubyGem", output.shift 76 assert_equal " Name: some_gem", output.shift 77 assert_equal " Version: 2", output.shift 78 assert_equal " File: some_gem-2.gem", output.shift 79 assert_equal [], output 80 81 if check_licenses 82 assert_equal "WARNING: licenses is empty\n", @ui.error 83 end 84 85 gem_file = File.join @tempdir, File.basename(gem.cache_file) 86 assert File.exist?(gem_file) 87 88 spec = Gem::Package.new(gem_file).spec 89 90 assert_equal "some_gem", spec.name 91 assert_equal "this is a summary", spec.summary 92 end 93 94 def test_execute_force 95 gemspec_file = File.join(@tempdir, @gem.spec_name) 96 97 @gem.send :remove_instance_variable, :@rubygems_version 98 99 File.open gemspec_file, 'w' do |gs| 100 gs.write @gem.to_ruby 101 end 102 103 @cmd.options[:args] = [gemspec_file] 104 @cmd.options[:force] = true 105 106 util_test_build_gem @gem, gemspec_file, false 107 end 108 109end 110 111