mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
8552f7aa68
Only attempt to build extensions for newly-installed gems. This prevents compilation attempts at gem activation time for gems that already have extensions built. Fix crash in the dependency resolver for dependencies that cannot be resolved. * test/rubygems: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43368 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
145 lines
3.7 KiB
Ruby
145 lines
3.7 KiB
Ruby
require "rubygems/test_case"
|
|
require "rubygems/stub_specification"
|
|
|
|
class TestStubSpecification < Gem::TestCase
|
|
SPECIFICATIONS = File.expand_path(File.join("..", "specifications"), __FILE__)
|
|
FOO = File.join SPECIFICATIONS, "foo-0.0.1.gemspec"
|
|
BAR = File.join SPECIFICATIONS, "bar-0.0.2.gemspec"
|
|
|
|
def setup
|
|
super
|
|
|
|
@foo = Gem::StubSpecification.new FOO
|
|
end
|
|
|
|
def test_initialize
|
|
assert_equal "foo", @foo.name
|
|
assert_equal Gem::Version.new("0.0.1"), @foo.version
|
|
assert_equal Gem::Platform.new("mswin32"), @foo.platform
|
|
assert_equal ["lib", "lib/f oo/ext"], @foo.require_paths
|
|
assert @foo.stubbed?
|
|
end
|
|
|
|
def test_initialize_extension
|
|
stub = stub_with_extension
|
|
|
|
gem_dir = File.join stub.gems_dir, stub.full_name
|
|
|
|
ext_install_dir = Pathname(stub.extension_install_dir)
|
|
full_gem_path = Pathname(stub.full_gem_path)
|
|
relative_install_dir = ext_install_dir.relative_path_from full_gem_path
|
|
relative_install_dir = relative_install_dir.to_s
|
|
|
|
assert_equal 'stub_e', stub.name
|
|
assert_equal v(2), stub.version
|
|
assert_equal Gem::Platform::RUBY, stub.platform
|
|
assert_equal ['lib', relative_install_dir], stub.require_paths
|
|
assert_equal %w[ext/stub_e/extconf.rb], stub.extensions
|
|
end
|
|
|
|
def test_initialize_missing_stubline
|
|
stub = Gem::StubSpecification.new(BAR)
|
|
assert_equal "bar", stub.name
|
|
assert_equal Gem::Version.new("0.0.2"), stub.version
|
|
assert_equal Gem::Platform.new("ruby"), stub.platform
|
|
assert_equal ["lib"], stub.require_paths
|
|
assert !stub.stubbed?
|
|
end
|
|
|
|
def test_contains_requirable_file_eh
|
|
stub = stub_without_extension
|
|
code_rb = File.join stub.gem_dir, 'lib', 'code.rb'
|
|
FileUtils.mkdir_p File.dirname code_rb
|
|
FileUtils.touch code_rb
|
|
|
|
assert stub.contains_requirable_file? 'code'
|
|
end
|
|
|
|
def test_contains_requirable_file_eh_extension
|
|
stub_with_extension do |stub|
|
|
extconf_rb = File.join stub.gem_dir, stub.extensions.first
|
|
FileUtils.mkdir_p File.dirname extconf_rb
|
|
|
|
open extconf_rb, 'w' do |f|
|
|
f.write <<-'RUBY'
|
|
open 'Makefile', 'w' do |f|
|
|
f.puts "clean:\n\techo cleaned"
|
|
f.puts "default:\n\techo built"
|
|
f.puts "install:\n\techo installed"
|
|
end
|
|
RUBY
|
|
end
|
|
|
|
refute stub.contains_requirable_file? 'nonexistent'
|
|
|
|
assert_path_exists stub.extension_install_dir
|
|
end
|
|
end
|
|
|
|
def test_full_require_paths
|
|
stub = stub_with_extension
|
|
|
|
expected = [
|
|
File.join(stub.full_gem_path, 'lib'),
|
|
stub.extension_install_dir,
|
|
]
|
|
|
|
assert_equal expected, stub.full_require_paths
|
|
end
|
|
|
|
def test_to_spec
|
|
assert @foo.to_spec.is_a?(Gem::Specification)
|
|
assert_equal "foo", @foo.to_spec.name
|
|
end
|
|
|
|
def stub_with_extension
|
|
spec = File.join @gemhome, 'specifications', 'stub_e-2.gemspec'
|
|
open spec, 'w' do |io|
|
|
io.write <<-STUB
|
|
# -*- encoding: utf-8 -*-
|
|
# stub: stub_e 2 ruby lib
|
|
# stub: ext/stub_e/extconf.rb
|
|
|
|
Gem::Specification.new do |s|
|
|
s.name = 'stub_e'
|
|
s.version = Gem::Version.new '2'
|
|
s.extensions = ['ext/stub_e/extconf.rb']
|
|
s.installed_by_version = '2.2'
|
|
end
|
|
STUB
|
|
|
|
io.flush
|
|
|
|
stub = Gem::StubSpecification.new io.path
|
|
|
|
yield stub if block_given?
|
|
|
|
return stub
|
|
end
|
|
end
|
|
|
|
def stub_without_extension
|
|
spec = File.join @gemhome, 'specifications', 'stub-2.gemspec'
|
|
open spec, 'w' do |io|
|
|
io.write <<-STUB
|
|
# -*- encoding: utf-8 -*-
|
|
# stub: stub 2 ruby lib
|
|
|
|
Gem::Specification.new do |s|
|
|
s.name = 'stub'
|
|
s.version = Gem::Version.new '2'
|
|
end
|
|
STUB
|
|
|
|
io.flush
|
|
|
|
stub = Gem::StubSpecification.new io.path
|
|
|
|
yield stub if block_given?
|
|
|
|
return stub
|
|
end
|
|
end
|
|
|
|
end
|
|
|