summaryrefslogtreecommitdiff
path: root/test/rubygems/test_gem_ext_builder.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/rubygems/test_gem_ext_builder.rb')
-rw-r--r--test/rubygems/test_gem_ext_builder.rb93
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