summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--spec/unit/provider/package/rubygems_spec.rb31
1 files changed, 31 insertions, 0 deletions
diff --git a/spec/unit/provider/package/rubygems_spec.rb b/spec/unit/provider/package/rubygems_spec.rb
index d7941af76d..d883a7f882 100644
--- a/spec/unit/provider/package/rubygems_spec.rb
+++ b/spec/unit/provider/package/rubygems_spec.rb
@@ -107,6 +107,37 @@ describe Chef::Provider::Package::Rubygems::CurrentGemEnvironment do
@gem_env.candidate_version_from_remote(Gem::Dependency.new('rspec', '>= 0')).should == Gem::Version.new('1.3.0')
end
+ context "when rubygems was upgraded from 1.8->2.0" do
+ # https://github.com/rubygems/rubygems/issues/404
+ # tl;dr rubygems 1.8 and 2.0 can both be in the load path, which means that
+ # require "rubygems/format" will load even though rubygems 2.0 doesn't have
+ # that file.
+
+ before do
+ if defined?(Gem::Format)
+ # tests are running under rubygems 1.8, or 2.0 upgraded from 1.8
+ @remove_gem_format = false
+ else
+ Gem.const_set(:Format, Object.new)
+ @remove_gem_format = true
+ end
+ Gem::Package.stub!(:respond_to?).with(:open).and_return(false)
+ end
+
+ after do
+ if @remove_gem_format
+ Gem.send(:remove_const, :Format)
+ end
+ end
+
+ it "finds a matching gem candidate version on rubygems 2.0+ with some rubygems 1.8 code loaded" do
+ package = mock("Gem::Package", :spec => "a gemspec from package")
+ Gem::Package.should_receive(:new).with("/path/to/package.gem").and_return(package)
+ @gem_env.spec_from_file("/path/to/package.gem").should == "a gemspec from package"
+ end
+
+ end
+
it "gives the candidate version as nil if none is found" do
dep = Gem::Dependency.new('rspec', '>= 0')
latest = []