diff options
author | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-12-10 00:40:39 +0000 |
---|---|---|
committer | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-12-10 00:40:39 +0000 |
commit | f58ff1ba12a0bbd52ff59e2e8b780004c5edfe9e (patch) | |
tree | a942ec2a6f7a5a3fcd4ee539d41b6bfa967a11b4 /test/rubygems | |
parent | a16cf580b0e330e746f287b6d75160b8e6bd9a55 (diff) | |
download | ruby-f58ff1ba12a0bbd52ff59e2e8b780004c5edfe9e.tar.gz |
* lib/rubygems/ext/cmake_builder.rb: Added a builder for cmake.
* lib/rubygems/ext.rb: ditto.
* lib/rubygems/installer.rb: ditto.
* test/rubygems/test_gem_ext_cmake_builder.rb: Test for above.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38283 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/rubygems')
-rw-r--r-- | test/rubygems/test_gem_ext_cmake_builder.rb | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/test/rubygems/test_gem_ext_cmake_builder.rb b/test/rubygems/test_gem_ext_cmake_builder.rb new file mode 100644 index 0000000000..f43f13662b --- /dev/null +++ b/test/rubygems/test_gem_ext_cmake_builder.rb @@ -0,0 +1,84 @@ +require 'rubygems/test_case' +require 'rubygems/ext' + +class TestGemExtCmakeBuilder < Gem::TestCase + + def setup + super + + `cmake #{Gem::Ext::Builder.redirector}` + + skip 'cmake not present' unless $?.success? + + @ext = File.join @tempdir, 'ext' + @dest_path = File.join @tempdir, 'prefix' + + FileUtils.mkdir_p @ext + FileUtils.mkdir_p @dest_path + end + + def test_self_build + File.open File.join(@ext, 'CMakeLists.txt'), 'w' do |cmakelists| + cmakelists.write <<-eo_cmake +cmake_minimum_required(VERSION 2.8) +install (FILES test.txt DESTINATION bin) + eo_cmake + end + File.open File.join(@ext, 'test.txt'), 'w' do |testfile| + end + + output = [] + + Dir.chdir @ext do + Gem::Ext::CmakeBuilder.build nil, nil, @dest_path, output + end + + assert_equal "cmake . -DCMAKE_INSTALL_PREFIX=#{@dest_path}", output.shift + assert_match(/#{@ext}/, output.shift) + assert_equal make_command, output.shift + assert_equal "", output.shift + assert_equal make_command + " install", output.shift + assert_match(/test\.txt/, output.shift) + end + + def test_self_build_fail + output = [] + + error = assert_raises Gem::InstallError do + Dir.chdir @ext do + Gem::Ext::CmakeBuilder.build nil, nil, @dest_path, output + end + end + + shell_error_msg = %r{(CMake Error: .*)} + sh_prefix_cmake = "cmake . -DCMAKE_INSTALL_PREFIX=" + + expected = %r(cmake failed: + +#{Regexp.escape sh_prefix_cmake}#{Regexp.escape @dest_path} +#{shell_error_msg} +) + + assert_match expected, error.message + + assert_equal "#{sh_prefix_cmake}#{@dest_path}", output.shift + assert_match %r(#{shell_error_msg}), output.shift + assert_equal true, output.empty? + end + + def test_self_build_has_makefile + File.open File.join(@ext, 'Makefile'), 'w' do |makefile| + makefile.puts "all:\n\t@echo ok\ninstall:\n\t@echo ok" + end + + output = [] + Dir.chdir @ext do + Gem::Ext::CmakeBuilder.build nil, nil, @dest_path, output + end + + assert_equal make_command, output[0] + assert_equal "#{make_command} install", output[2] + end + +end + |