diff options
Diffstat (limited to 'test/rubygems/test_gem_ext_builder.rb')
-rw-r--r-- | test/rubygems/test_gem_ext_builder.rb | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/test/rubygems/test_gem_ext_builder.rb b/test/rubygems/test_gem_ext_builder.rb index 6e34ee7e46..8383040f88 100644 --- a/test/rubygems/test_gem_ext_builder.rb +++ b/test/rubygems/test_gem_ext_builder.rb @@ -1,5 +1,6 @@ require 'rubygems/test_case' require 'rubygems/ext' +require 'rubygems/installer' class TestGemExtBuilder < Gem::TestCase @@ -13,6 +14,10 @@ class TestGemExtBuilder < Gem::TestCase FileUtils.mkdir_p @dest_path @orig_DESTDIR = ENV['DESTDIR'] + + @spec = quick_spec 'a' + + @builder = Gem::Ext::Builder.new @spec, '' end def teardown @@ -56,5 +61,93 @@ install: end end + def test_build_extensions_none + use_ui @ui do + @builder.build_extensions + end + + assert_equal '', @ui.output + assert_equal '', @ui.error + + refute File.exist?('gem_make.out') + end + + def test_build_extensions_extconf_bad + @spec.extensions << 'extconf.rb' + + e = assert_raises Gem::Installer::ExtensionBuildError do + use_ui @ui do + @builder.build_extensions + end + end + + assert_match(/\AERROR: Failed to build gem native extension.$/, e.message) + + assert_equal "Building native extensions. This could take a while...\n", + @ui.output + assert_equal '', @ui.error + + gem_make_out = File.join @gemhome, 'gems', @spec.full_name, 'gem_make.out' + + assert_match %r%#{Regexp.escape Gem.ruby} extconf\.rb%, + File.read(gem_make_out) + assert_match %r%#{Regexp.escape Gem.ruby}: No such file%, + File.read(gem_make_out) + end + + def test_build_extensions_unsupported + FileUtils.mkdir_p @spec.gem_dir + gem_make_out = File.join @spec.gem_dir, 'gem_make.out' + @spec.extensions << nil + + e = assert_raises Gem::Installer::ExtensionBuildError do + use_ui @ui do + @builder.build_extensions + end + end + + assert_match(/^\s*No builder for extension ''$/, e.message) + + assert_equal "Building native extensions. This could take a while...\n", + @ui.output + assert_equal '', @ui.error + + assert_equal "No builder for extension ''\n", File.read(gem_make_out) + ensure + FileUtils.rm_f gem_make_out + end + + def test_build_extensions_with_build_args + args = ["--aa", "--bb"] + @builder.build_args = args + @spec.extensions << 'extconf.rb' + + FileUtils.mkdir_p @spec.gem_dir + + open File.join(@spec.gem_dir, "extconf.rb"), "w" do |f| + f.write <<-'RUBY' + puts "IN EXTCONF" + extconf_args = File.join File.dirname(__FILE__), 'extconf_args' + File.open extconf_args, 'w' do |f| + f.puts ARGV.inspect + end + + File.open 'Makefile', 'w' do |f| + f.puts "default:\n\techo built" + f.puts "install:\n\techo installed" + end + RUBY + end + + use_ui @ui do + @builder.build_extensions + end + + path = File.join @spec.gem_dir, "extconf_args" + + assert_equal args.inspect, File.read(path).strip + assert File.directory? File.join(@spec.gem_dir, 'lib') + end + end |