diff options
Diffstat (limited to 'jni/ruby/test/rubygems/test_gem_stub_specification.rb')
-rw-r--r-- | jni/ruby/test/rubygems/test_gem_stub_specification.rb | 199 |
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 + |