From f58ff1ba12a0bbd52ff59e2e8b780004c5edfe9e Mon Sep 17 00:00:00 2001 From: drbrain Date: Mon, 10 Dec 2012 00:40:39 +0000 Subject: * 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 --- test/rubygems/test_gem_ext_cmake_builder.rb | 84 +++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 test/rubygems/test_gem_ext_cmake_builder.rb (limited to 'test/rubygems/test_gem_ext_cmake_builder.rb') 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 + -- cgit v1.2.3