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.rb220
1 files changed, 108 insertions, 112 deletions
diff --git a/test/rubygems/test_gem_ext_builder.rb b/test/rubygems/test_gem_ext_builder.rb
index b765c17ed1..d5812da2aa 100644
--- a/test/rubygems/test_gem_ext_builder.rb
+++ b/test/rubygems/test_gem_ext_builder.rb
@@ -1,38 +1,37 @@
# frozen_string_literal: true
-require_relative 'helper'
-require 'rubygems/ext'
-require 'rubygems/installer'
+
+require_relative "helper"
+require "rubygems/ext"
+require "rubygems/installer"
class TestGemExtBuilder < Gem::TestCase
def setup
+ @orig_destdir = ENV["DESTDIR"]
+ @orig_make = ENV["make"]
super
- @ext = File.join @tempdir, 'ext'
- @dest_path = File.join @tempdir, 'prefix'
+ @ext = File.join @tempdir, "ext"
+ @dest_path = File.join @tempdir, "prefix"
FileUtils.mkdir_p @ext
FileUtils.mkdir_p @dest_path
- @orig_DESTDIR = ENV['DESTDIR']
- @orig_make = ENV['make']
-
- @spec = util_spec 'a'
+ @spec = util_spec "a"
- @builder = Gem::Ext::Builder.new @spec, ''
+ @builder = Gem::Ext::Builder.new @spec, ""
end
def teardown
- ENV['DESTDIR'] = @orig_DESTDIR
- ENV['make'] = @orig_make
-
super
+ ENV["DESTDIR"] = @orig_destdir
+ ENV["make"] = @orig_make
end
def test_class_make
- ENV['DESTDIR'] = 'destination'
+ ENV["DESTDIR"] = "destination"
results = []
- File.open File.join(@ext, 'Makefile'), 'w' do |io|
+ File.open File.join(@ext, "Makefile"), "w" do |io|
io.puts <<-MAKEFILE
all:
\t@#{Gem.ruby} -e "puts %Q{all: \#{ENV['DESTDIR']}}"
@@ -49,22 +48,22 @@ install:
results = results.join("\n").b
- assert_match %r{DESTDIR\\=#{ENV['DESTDIR']} clean$}, results
- assert_match %r{DESTDIR\\=#{ENV['DESTDIR']}$}, results
- assert_match %r{DESTDIR\\=#{ENV['DESTDIR']} install$}, results
+ assert_match(/DESTDIR\\=#{ENV["DESTDIR"]} clean$/, results)
+ assert_match(/DESTDIR\\=#{ENV["DESTDIR"]}$/, results)
+ assert_match(/DESTDIR\\=#{ENV["DESTDIR"]} install$/, results)
- if /nmake/ !~ results
- assert_match %r{^clean: destination$}, results
- assert_match %r{^all: destination$}, results
- assert_match %r{^install: destination$}, results
+ unless results.include?("nmake")
+ assert_match(/^clean: destination$/, results)
+ assert_match(/^all: destination$/, results)
+ assert_match(/^install: destination$/, results)
end
end
def test_class_make_no_clean
- ENV['DESTDIR'] = 'destination'
+ ENV["DESTDIR"] = "destination"
results = []
- File.open File.join(@ext, 'Makefile'), 'w' do |io|
+ File.open File.join(@ext, "Makefile"), "w" do |io|
io.puts <<-MAKEFILE
all:
\t@#{Gem.ruby} -e "puts %Q{all: \#{ENV['DESTDIR']}}"
@@ -78,15 +77,17 @@ install:
results = results.join("\n").b
- assert_match %r{DESTDIR\\=#{ENV['DESTDIR']} clean$}, results
- assert_match %r{DESTDIR\\=#{ENV['DESTDIR']}$}, results
- assert_match %r{DESTDIR\\=#{ENV['DESTDIR']} install$}, results
+ assert_match(/DESTDIR\\=#{ENV["DESTDIR"]} clean$/, results)
+ assert_match(/DESTDIR\\=#{ENV["DESTDIR"]}$/, results)
+ assert_match(/DESTDIR\\=#{ENV["DESTDIR"]} install$/, results)
end
def test_custom_make_with_options
- ENV['make'] = 'make V=1'
+ pend "native windows platform only provides nmake" if vc_windows?
+
+ ENV["make"] = "make V=1"
results = []
- File.open File.join(@ext, 'Makefile'), 'w' do |io|
+ File.open File.join(@ext, "Makefile"), "w" do |io|
io.puts <<-MAKEFILE
all:
\t@#{Gem.ruby} -e "puts 'all: OK'"
@@ -100,109 +101,104 @@ install:
end
Gem::Ext::Builder.make @dest_path, results, @ext
results = results.join("\n").b
- assert_match %r{clean: OK}, results
- assert_match %r{all: OK}, results
- assert_match %r{install: OK}, results
+ assert_match(/clean: OK/, results)
+ assert_match(/all: OK/, results)
+ assert_match(/install: OK/, results)
end
def test_build_extensions
- skip if /mswin/ =~ RUBY_PLATFORM && ENV.key?('GITHUB_ACTIONS') # not working from the beginning
- @spec.extensions << 'ext/extconf.rb'
+ pend "terminates on mswin" if vc_windows? && ruby_repo?
- ext_dir = File.join @spec.gem_dir, 'ext'
+ extension_in_lib do
+ @spec.extensions << "ext/extconf.rb"
- FileUtils.mkdir_p ext_dir
+ ext_dir = File.join @spec.gem_dir, "ext"
- extconf_rb = File.join ext_dir, 'extconf.rb'
+ FileUtils.mkdir_p ext_dir
- File.open extconf_rb, 'w' do |f|
- f.write <<-'RUBY'
- require 'mkmf'
+ extconf_rb = File.join ext_dir, "extconf.rb"
- create_makefile 'a'
- RUBY
- end
+ File.open extconf_rb, "w" do |f|
+ f.write <<-'RUBY'
+ require 'mkmf'
+
+ create_makefile 'a'
+ RUBY
+ end
- ext_lib_dir = File.join ext_dir, 'lib'
- FileUtils.mkdir ext_lib_dir
- FileUtils.touch File.join ext_lib_dir, 'a.rb'
- FileUtils.mkdir File.join ext_lib_dir, 'a'
- FileUtils.touch File.join ext_lib_dir, 'a', 'b.rb'
+ ext_lib_dir = File.join ext_dir, "lib"
+ FileUtils.mkdir ext_lib_dir
+ FileUtils.touch File.join ext_lib_dir, "a.rb"
+ FileUtils.mkdir File.join ext_lib_dir, "a"
+ FileUtils.touch File.join ext_lib_dir, "a", "b.rb"
- use_ui @ui do
- @builder.build_extensions
- end
+ use_ui @ui do
+ @builder.build_extensions
+ end
- assert_path_exist @spec.extension_dir
- assert_path_exist @spec.gem_build_complete_path
- assert_path_exist File.join @spec.extension_dir, 'gem_make.out'
- assert_path_exist File.join @spec.extension_dir, 'a.rb'
- assert_path_exist File.join @spec.gem_dir, 'lib', 'a.rb'
- assert_path_exist File.join @spec.gem_dir, 'lib', 'a', 'b.rb'
+ assert_path_exist @spec.extension_dir
+ assert_path_exist @spec.gem_build_complete_path
+ assert_path_exist File.join @spec.extension_dir, "gem_make.out"
+ assert_path_exist File.join @spec.extension_dir, "a.rb"
+ assert_path_exist File.join @spec.gem_dir, "lib", "a.rb"
+ assert_path_exist File.join @spec.gem_dir, "lib", "a", "b.rb"
+ end
end
def test_build_extensions_with_gemhome_with_space
- skip if /mswin/ =~ RUBY_PLATFORM && ENV.key?('GITHUB_ACTIONS') # not working from the beginning
- new_gemhome = File.join @tempdir, 'gem home'
+ pend "terminates on mswin" if vc_windows? && ruby_repo?
+ new_gemhome = File.join @tempdir, "gem home"
File.rename(@gemhome, new_gemhome)
@gemhome = new_gemhome
Gem.use_paths(@gemhome)
- @spec = util_spec 'a'
- @builder = Gem::Ext::Builder.new @spec, ''
+ @spec = util_spec "a"
+ @builder = Gem::Ext::Builder.new @spec, ""
test_build_extensions
end
def test_build_extensions_install_ext_only
- class << Gem
- alias orig_install_extension_in_lib install_extension_in_lib
+ pend "terminates on mswin" if vc_windows? && ruby_repo?
- remove_method :install_extension_in_lib
+ extension_in_lib(false) do
+ @orig_install_extension_in_lib = Gem.configuration.install_extension_in_lib
+ Gem.configuration.install_extension_in_lib = false
- def Gem.install_extension_in_lib
- false
- end
- end
- skip if /mswin/ =~ RUBY_PLATFORM && ENV.key?('GITHUB_ACTIONS') # not working from the beginning
+ @spec.extensions << "ext/extconf.rb"
- @spec.extensions << 'ext/extconf.rb'
+ ext_dir = File.join @spec.gem_dir, "ext"
- ext_dir = File.join @spec.gem_dir, 'ext'
+ FileUtils.mkdir_p ext_dir
- FileUtils.mkdir_p ext_dir
+ extconf_rb = File.join ext_dir, "extconf.rb"
- extconf_rb = File.join ext_dir, 'extconf.rb'
+ File.open extconf_rb, "w" do |f|
+ f.write <<-'RUBY'
+ require 'mkmf'
- File.open extconf_rb, 'w' do |f|
- f.write <<-'RUBY'
- require 'mkmf'
+ create_makefile 'a'
+ RUBY
+ end
- create_makefile 'a'
- RUBY
- end
+ ext_lib_dir = File.join ext_dir, "lib"
+ FileUtils.mkdir ext_lib_dir
+ FileUtils.touch File.join ext_lib_dir, "a.rb"
+ FileUtils.mkdir File.join ext_lib_dir, "a"
+ FileUtils.touch File.join ext_lib_dir, "a", "b.rb"
- ext_lib_dir = File.join ext_dir, 'lib'
- FileUtils.mkdir ext_lib_dir
- FileUtils.touch File.join ext_lib_dir, 'a.rb'
- FileUtils.mkdir File.join ext_lib_dir, 'a'
- FileUtils.touch File.join ext_lib_dir, 'a', 'b.rb'
+ use_ui @ui do
+ @builder.build_extensions
+ end
- use_ui @ui do
- @builder.build_extensions
+ assert_path_exist @spec.extension_dir
+ assert_path_exist @spec.gem_build_complete_path
+ assert_path_exist File.join @spec.extension_dir, "gem_make.out"
+ assert_path_exist File.join @spec.extension_dir, "a.rb"
+ assert_path_not_exist File.join @spec.gem_dir, "lib", "a.rb"
+ assert_path_not_exist File.join @spec.gem_dir, "lib", "a", "b.rb"
end
-
- assert_path_exist @spec.extension_dir
- assert_path_exist @spec.gem_build_complete_path
- assert_path_exist File.join @spec.extension_dir, 'gem_make.out'
- assert_path_exist File.join @spec.extension_dir, 'a.rb'
- assert_path_not_exist File.join @spec.gem_dir, 'lib', 'a.rb'
- assert_path_not_exist File.join @spec.gem_dir, 'lib', 'a', 'b.rb'
ensure
- class << Gem
- remove_method :install_extension_in_lib
-
- alias install_extension_in_lib orig_install_extension_in_lib
- end
+ Gem.configuration.install_extension_in_lib = @orig_install_extension_in_lib
end
def test_build_extensions_none
@@ -210,10 +206,10 @@ install:
@builder.build_extensions
end
- assert_equal '', @ui.output
- assert_equal '', @ui.error
+ assert_equal "", @ui.output
+ assert_equal "", @ui.error
- assert_path_not_exist File.join @spec.extension_dir, 'gem_make.out'
+ assert_path_not_exist File.join @spec.extension_dir, "gem_make.out"
end
def test_build_extensions_rebuild_failure
@@ -234,7 +230,7 @@ install:
def test_build_extensions_extconf_bad
cwd = Dir.pwd
- @spec.extensions << 'extconf.rb'
+ @spec.extensions << "extconf.rb"
FileUtils.mkdir_p @spec.gem_dir
@@ -246,13 +242,13 @@ install:
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
+ assert_equal "", @ui.error
- gem_make_out = File.join @spec.extension_dir, 'gem_make.out'
+ gem_make_out = File.join @spec.extension_dir, "gem_make.out"
cmd_make_out = File.read(gem_make_out)
assert_match %r{#{Regexp.escape Gem.ruby} .* extconf\.rb}, cmd_make_out
- assert_match %r{: No such file}, cmd_make_out
+ assert_match(/: No such file/, cmd_make_out)
assert_path_not_exist @spec.gem_build_complete_path
@@ -261,7 +257,7 @@ install:
def test_build_extensions_unsupported
FileUtils.mkdir_p @spec.gem_dir
- gem_make_out = File.join @spec.extension_dir, 'gem_make.out'
+ gem_make_out = File.join @spec.extension_dir, "gem_make.out"
@spec.extensions << nil
e = assert_raise Gem::Ext::BuildError do
@@ -272,7 +268,7 @@ install:
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 "", @ui.error
assert_equal "No builder for extension ''\n", File.read(gem_make_out)
@@ -284,14 +280,14 @@ install:
def test_build_extensions_with_build_args
args = ["--aa", "--bb"]
@builder.build_args = args
- @spec.extensions << 'extconf.rb'
+ @spec.extensions << "extconf.rb"
FileUtils.mkdir_p @spec.gem_dir
File.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'
+ extconf_args = File.join __dir__, 'extconf_args'
File.open extconf_args, 'w' do |f|
f.puts ARGV.inspect
end
@@ -315,14 +311,14 @@ install:
end
def test_initialize
- build_info_dir = File.join @gemhome, 'build_info'
+ build_info_dir = File.join @gemhome, "build_info"
FileUtils.mkdir_p build_info_dir
build_info_file = File.join build_info_dir, "#{@spec.full_name}.info"
- File.open build_info_file, 'w' do |io|
- io.puts '--with-foo-dir=/nonexistent'
+ File.open build_info_file, "w" do |io|
+ io.puts "--with-foo-dir=/nonexistent"
end
builder = Gem::Ext::Builder.new @spec