diff options
author | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-25 15:02:05 +0000 |
---|---|---|
committer | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-25 15:02:05 +0000 |
commit | 0dc342de848a642ecce8db697b8fecd83a63e117 (patch) | |
tree | 2b7ed4724aff1f86073e4740134bda9c4aac1a39 /trunk/test/rubygems/test_gem_ext_ext_conf_builder.rb | |
parent | ef70cf7138ab8034b5b806f466e4b484b24f0f88 (diff) |
added tag v1_9_0_4
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_9_0_4@18845 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'trunk/test/rubygems/test_gem_ext_ext_conf_builder.rb')
-rw-r--r-- | trunk/test/rubygems/test_gem_ext_ext_conf_builder.rb | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/trunk/test/rubygems/test_gem_ext_ext_conf_builder.rb b/trunk/test/rubygems/test_gem_ext_ext_conf_builder.rb new file mode 100644 index 0000000000..fb21fa0755 --- /dev/null +++ b/trunk/test/rubygems/test_gem_ext_ext_conf_builder.rb @@ -0,0 +1,122 @@ +require 'test/unit' +require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities') +require 'rubygems/ext' + +class TestGemExtExtConfBuilder < RubyGemTestCase + + def setup + super + + @ext = File.join @tempdir, 'ext' + @dest_path = File.join @tempdir, 'prefix' + + FileUtils.mkdir_p @ext + FileUtils.mkdir_p @dest_path + end + + def test_class_build + File.open File.join(@ext, 'extconf.rb'), 'w' do |extconf| + extconf.puts "require 'mkmf'\ncreate_makefile 'foo'" + end + + output = [] + + Dir.chdir @ext do + Gem::Ext::ExtConfBuilder.build 'extconf.rb', nil, @dest_path, output + end + + expected = [ + "ruby extconf.rb", + "creating Makefile\n", + "make", + "make: Nothing to be done for `all'.\n", + "make install", + "make: Nothing to be done for `install'.\n" + ] + + assert_match(/^#{Gem.ruby} extconf.rb/, output[0]) + assert_equal "creating Makefile\n", output[1] + case RUBY_PLATFORM + when /mswin/ then + assert_equal "nmake", output[2] + assert_equal "nmake install", output[4] + else + assert_equal "make", output[2] + assert_equal "make install", output[4] + end + end + + def test_class_build_extconf_fail + File.open File.join(@ext, 'extconf.rb'), 'w' do |extconf| + extconf.puts "require 'mkmf'" + extconf.puts "have_library 'nonexistent' or abort 'need libnonexistent'" + extconf.puts "create_makefile 'foo'" + end + + output = [] + + error = assert_raise Gem::InstallError do + Dir.chdir @ext do + Gem::Ext::ExtConfBuilder.build 'extconf.rb', nil, @dest_path, output + end + end + + assert_match(/\Aextconf failed: + +#{Gem.ruby} extconf.rb.* +checking for main\(\) in .*?nonexistent/m, error.message) + + assert_match(/^#{Gem.ruby} extconf.rb/, output[0]) + end + + def test_class_make + output = [] + makefile_path = File.join(@ext, 'Makefile') + File.open makefile_path, 'w' do |makefile| + makefile.puts "RUBYARCHDIR = $(foo)$(target_prefix)" + makefile.puts "RUBYLIBDIR = $(bar)$(target_prefix)" + makefile.puts "all:" + makefile.puts "install:" + end + + Dir.chdir @ext do + Gem::Ext::ExtConfBuilder.make @ext, output + end + + case RUBY_PLATFORM + when /mswin/ then + assert_equal 'nmake', output[0] + assert_equal 'nmake install', output[2] + else + assert_equal 'make', output[0] + assert_equal 'make install', output[2] + end + + edited_makefile = <<-EOF +RUBYARCHDIR = #{@ext}$(target_prefix) +RUBYLIBDIR = #{@ext}$(target_prefix) +all: +install: + EOF + + assert_equal edited_makefile, File.read(makefile_path) + end + + def test_class_make_no_Makefile + error = assert_raise Gem::InstallError do + Dir.chdir @ext do + Gem::Ext::ExtConfBuilder.make @ext, ['output'] + end + end + + expected = <<-EOF.strip +Makefile not found: + +output + EOF + + assert_equal expected, error.message + end + +end + |