instiki/vendor/plugins/bundler/gems/bundler-1.0.15/spec/install/path_spec.rb
Jacques Distler 9e909d5be3 Update Rails, rails_xss and Bundler
Update Bundler to 1.0.15.
Update Rails to 2.3.12.
Update rails_xss plugin.

The latter two were the
source of a considerable
amount of grief, as rails_xss
is now MUCH stricter about what
string methods can be used.

Also made it possible to use
rake 0.9.x with Instiki. But
you probably REALLY want to use

 ruby bundle exec rake ...

instead of just saying

 rake ....
2011-06-15 00:43:38 -05:00

406 lines
9.4 KiB
Ruby

require "spec_helper"
describe "bundle install with explicit source paths" do
it "fetches gems" do
build_lib "foo"
install_gemfile <<-G
path "#{lib_path('foo-1.0')}"
gem 'foo'
G
should_be_installed("foo 1.0")
end
it "supports pinned paths" do
build_lib "foo"
install_gemfile <<-G
gem 'foo', :path => "#{lib_path('foo-1.0')}"
G
should_be_installed("foo 1.0")
end
it "supports relative paths" do
build_lib "foo"
relative_path = lib_path('foo-1.0').relative_path_from(Pathname.new(Dir.pwd))
install_gemfile <<-G
gem 'foo', :path => "#{relative_path}"
G
should_be_installed("foo 1.0")
end
it "expands paths" do
build_lib "foo"
relative_path = lib_path('foo-1.0').relative_path_from(Pathname.new('~').expand_path)
install_gemfile <<-G
gem 'foo', :path => "~/#{relative_path}"
G
should_be_installed("foo 1.0")
end
it "expands paths relative to Bundler.root" do
build_lib "foo", :path => bundled_app("foo-1.0")
install_gemfile <<-G
gem 'foo', :path => "./foo-1.0"
G
bundled_app("subdir").mkpath
Dir.chdir(bundled_app("subdir")) do
should_be_installed("foo 1.0")
end
end
it "expands paths when comparing locked paths to Gemfile paths" do
build_lib "foo", :path => bundled_app("foo-1.0")
install_gemfile <<-G
gem 'foo', :path => File.expand_path("../foo-1.0", __FILE__)
G
bundle "install --frozen", :exitstatus => true
exitstatus.should == 0
end
it "installs dependencies from the path even if a newer gem is available elsewhere" do
system_gems "rack-1.0.0"
build_lib "rack", "1.0", :path => lib_path('nested/bar') do |s|
s.write "lib/rack.rb", "puts 'WIN OVERRIDE'"
end
build_lib "foo", :path => lib_path('nested') do |s|
s.add_dependency "rack", "= 1.0"
end
install_gemfile <<-G
source "file://#{gem_repo1}"
gem "foo", :path => "#{lib_path('nested')}"
G
run "require 'rack'"
out.should == 'WIN OVERRIDE'
end
it "works" do
build_gem "foo", "1.0.0", :to_system => true do |s|
s.write "lib/foo.rb", "puts 'FAIL'"
end
build_lib "omg", "1.0", :path => lib_path("omg") do |s|
s.add_dependency "foo"
end
build_lib "foo", "1.0.0", :path => lib_path("omg/foo")
install_gemfile <<-G
gem "omg", :path => "#{lib_path('omg')}"
G
should_be_installed "foo 1.0"
end
it "supports gemspec syntax" do
build_lib "foo", "1.0", :path => lib_path("foo") do |s|
s.add_dependency "rack", "1.0"
end
gemfile = <<-G
source "file://#{gem_repo1}"
gemspec
G
File.open(lib_path("foo/Gemfile"), "w") {|f| f.puts gemfile }
Dir.chdir(lib_path("foo")) do
bundle "install"
should_be_installed "foo 1.0"
should_be_installed "rack 1.0"
end
end
it "supports gemspec syntax with an alternative path" do
build_lib "foo", "1.0", :path => lib_path("foo") do |s|
s.add_dependency "rack", "1.0"
end
install_gemfile <<-G
source "file://#{gem_repo1}"
gemspec :path => "#{lib_path("foo")}"
G
should_be_installed "foo 1.0"
should_be_installed "rack 1.0"
end
it "doesn't automatically unlock dependencies when using the gemspec syntax" do
build_lib "foo", "1.0", :path => lib_path("foo") do |s|
s.add_dependency "rack", ">= 1.0"
end
Dir.chdir lib_path("foo")
install_gemfile lib_path("foo/Gemfile"), <<-G
source "file://#{gem_repo1}"
gemspec
G
build_gem "rack", "1.0.1", :to_system => true
bundle "install"
should_be_installed "foo 1.0"
should_be_installed "rack 1.0"
end
it "doesn't automatically unlock dependencies when using the gemspec syntax and the gem has development dependencies" do
build_lib "foo", "1.0", :path => lib_path("foo") do |s|
s.add_dependency "rack", ">= 1.0"
s.add_development_dependency "activesupport"
end
Dir.chdir lib_path("foo")
install_gemfile lib_path("foo/Gemfile"), <<-G
source "file://#{gem_repo1}"
gemspec
G
build_gem "rack", "1.0.1", :to_system => true
bundle "install"
should_be_installed "foo 1.0"
should_be_installed "rack 1.0"
end
it "raises if there are multiple gemspecs" do
build_lib "foo", "1.0", :path => lib_path("foo") do |s|
s.write "bar.gemspec"
end
install_gemfile <<-G, :exitstatus => true
gemspec :path => "#{lib_path("foo")}"
G
exitstatus.should eq(15)
out.should =~ /There are multiple gemspecs/
end
it "allows :name to be specified to resolve ambiguity" do
build_lib "foo", "1.0", :path => lib_path("foo") do |s|
s.write "bar.gemspec"
end
install_gemfile <<-G, :exitstatus => true
gemspec :path => "#{lib_path("foo")}", :name => "foo"
G
should_be_installed "foo 1.0"
end
it "sets up executables" do
pending_jruby_shebang_fix
build_lib "foo" do |s|
s.executables = "foobar"
end
install_gemfile <<-G
path "#{lib_path('foo-1.0')}"
gem 'foo'
G
bundle "exec foobar"
out.should == "1.0"
end
it "handles directories in bin/" do
build_lib "foo"
lib_path("foo-1.0").join("foo.gemspec").rmtree
lib_path("foo-1.0").join("bin/performance").mkpath
install_gemfile <<-G
gem 'foo', '1.0', :path => "#{lib_path('foo-1.0')}"
G
err.should == ""
end
it "removes the .gem file after installing" do
build_lib "foo"
install_gemfile <<-G
gem 'foo', :path => "#{lib_path('foo-1.0')}"
G
lib_path('foo-1.0').join('foo-1.0.gem').should_not exist
end
describe "block syntax" do
it "pulls all gems from a path block" do
build_lib "omg"
build_lib "hi2u"
install_gemfile <<-G
path "#{lib_path}" do
gem "omg"
gem "hi2u"
end
G
should_be_installed "omg 1.0", "hi2u 1.0"
end
end
it "keeps source pinning" do
build_lib "foo", "1.0", :path => lib_path('foo')
build_lib "omg", "1.0", :path => lib_path('omg')
build_lib "foo", "1.0", :path => lib_path('omg/foo') do |s|
s.write "lib/foo.rb", "puts 'FAIL'"
end
install_gemfile <<-G
gem "foo", :path => "#{lib_path('foo')}"
gem "omg", :path => "#{lib_path('omg')}"
G
should_be_installed "foo 1.0"
end
it "works when the path does not have a gemspec" do
build_lib "foo", :gemspec => false
gemfile <<-G
gem "foo", "1.0", :path => "#{lib_path('foo-1.0')}"
G
should_be_installed "foo 1.0"
should_be_installed "foo 1.0"
end
it "installs executable stubs" do
build_lib "foo" do |s|
s.executables = ['foo']
end
install_gemfile <<-G
gem "foo", :path => "#{lib_path('foo-1.0')}"
G
bundle "exec foo"
out.should == "1.0"
end
describe "when the gem version in the path is updated" do
before :each do
build_lib "foo", "1.0", :path => lib_path("foo") do |s|
s.add_dependency "bar"
end
build_lib "bar", "1.0", :path => lib_path("foo/bar")
install_gemfile <<-G
gem "foo", :path => "#{lib_path('foo')}"
G
end
it "unlocks all gems when the top level gem is updated" do
build_lib "foo", "2.0", :path => lib_path("foo") do |s|
s.add_dependency "bar"
end
bundle "install"
should_be_installed "foo 2.0", "bar 1.0"
end
it "unlocks all gems when a child dependency gem is updated" do
build_lib "bar", "2.0", :path => lib_path("foo/bar")
bundle "install"
should_be_installed "foo 1.0", "bar 2.0"
end
end
describe "when dependencies in the path are updated" do
before :each do
build_lib "foo", "1.0", :path => lib_path("foo")
install_gemfile <<-G
source "file://#{gem_repo1}"
gem "foo", :path => "#{lib_path('foo')}"
G
end
it "gets dependencies that are updated in the path" do
build_lib "foo", "1.0", :path => lib_path("foo") do |s|
s.add_dependency "rack"
end
bundle "install"
should_be_installed "rack 1.0.0"
end
end
describe "switching sources" do
it "doesn't switch pinned git sources to rubygems when pinning the parent gem to a path source" do
build_gem "foo", "1.0", :to_system => true do |s|
s.write "lib/foo.rb", "raise 'fail'"
end
build_lib "foo", "1.0", :path => lib_path('bar/foo')
build_git "bar", "1.0", :path => lib_path('bar') do |s|
s.add_dependency 'foo'
end
install_gemfile <<-G
source "file://#{gem_repo1}"
gem "bar", :git => "#{lib_path('bar')}"
G
install_gemfile <<-G
source "file://#{gem_repo1}"
gem "bar", :path => "#{lib_path('bar')}"
G
should_be_installed "foo 1.0", "bar 1.0"
end
it "switches the source when the gem existed in rubygems and the path was already being used for another gem" do
build_lib "foo", "1.0", :path => lib_path("foo")
build_gem "bar", "1.0", :to_system => true do |s|
s.write "lib/bar.rb", "raise 'fail'"
end
install_gemfile <<-G
source "file://#{gem_repo1}"
gem "bar"
path "#{lib_path('foo')}" do
gem "foo"
end
G
build_lib "bar", "1.0", :path => lib_path("foo/bar")
install_gemfile <<-G
source "file://#{gem_repo1}"
path "#{lib_path('foo')}" do
gem "foo"
gem "bar"
end
G
should_be_installed "bar 1.0"
end
end
end