summaryrefslogtreecommitdiff
path: root/jni/ruby/test/rubygems/test_gem_stub_specification.rb
diff options
context:
space:
mode:
Diffstat (limited to 'jni/ruby/test/rubygems/test_gem_stub_specification.rb')
-rw-r--r--jni/ruby/test/rubygems/test_gem_stub_specification.rb199
1 files changed, 199 insertions, 0 deletions
diff --git a/jni/ruby/test/rubygems/test_gem_stub_specification.rb b/jni/ruby/test/rubygems/test_gem_stub_specification.rb
new file mode 100644
index 0000000..914b06a
--- /dev/null
+++ b/jni/ruby/test/rubygems/test_gem_stub_specification.rb
@@ -0,0 +1,199 @@
+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
+
+ assert_equal 'stub_e', stub.name
+ assert_equal v(2), stub.version
+ assert_equal Gem::Platform::RUBY, stub.platform
+ assert_equal [stub.extension_dir, 'lib'], 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|
+ _, err = capture_io do
+ refute stub.contains_requirable_file? 'nonexistent'
+ end
+
+ expected = "Ignoring stub_e-2 because its extensions are not built. " +
+ "Try: gem pristine stub_e --version 2\n"
+
+ assert_equal expected, err
+ end
+ end
+
+ def test_full_require_paths
+ stub = stub_with_extension
+
+ expected = [
+ stub.extension_dir,
+ File.join(stub.full_gem_path, 'lib'),
+ ]
+
+ assert_equal expected, stub.full_require_paths
+ end
+
+ def test_missing_extensions_eh
+ stub = stub_with_extension do |s|
+ extconf_rb = File.join s.gem_dir, s.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 clean"
+ f.puts "default:\n\techo built"
+ f.puts "install:\n\techo installed"
+ end
+ RUBY
+ end
+ end
+
+ assert stub.missing_extensions?
+
+ stub.build_extensions
+
+ refute stub.missing_extensions?
+ end
+
+ def test_missing_extensions_eh_default_gem
+ spec = new_default_spec 'default', 1
+ spec.extensions << 'extconf.rb'
+
+ open spec.loaded_from, 'w' do |io|
+ io.write spec.to_ruby_for_cache
+ end
+
+ default_spec = Gem::StubSpecification.new spec.loaded_from
+
+ refute default_spec.missing_extensions?
+ end
+
+ def test_missing_extensions_eh_none
+ refute @foo.missing_extensions?
+ end
+
+ def test_to_spec
+ real_foo = util_spec @foo.name, @foo.version
+ real_foo.activate
+
+ assert_equal @foo.version, Gem.loaded_specs[@foo.name].version,
+ 'sanity check'
+
+ assert_same real_foo, @foo.to_spec
+ end
+
+ def test_to_spec_with_other_specs_loaded_does_not_warn
+ real_foo = util_spec @foo.name, @foo.version
+ real_foo.activate
+ bar = Gem::StubSpecification.new BAR
+ refute_predicate Gem.loaded_specs, :empty?
+ assert bar.to_spec
+ end
+
+ def test_to_spec_activated
+ assert @foo.to_spec.is_a?(Gem::Specification)
+ assert_equal "foo", @foo.to_spec.name
+ refute @foo.to_spec.instance_variable_defined? :@ignored
+ end
+
+ def test_to_spec_missing_extensions
+ stub = stub_with_extension
+
+ capture_io do
+ stub.contains_requirable_file? 'nonexistent'
+ end
+
+ assert stub.to_spec.instance_variable_get :@ignored
+ 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
+