blob: 13df2132d1b8c863a903e5b780339df622e9f9a2 [file] [log] [blame]
require File.expand_path('../../../spec_helper', __FILE__)
module Pod
describe ExternalSources::PathSource do
before do
params = { :path => fixture('integration/Reachability') }
dependency = Dependency.new('Reachability', params)
podfile_path = fixture('integration/Podfile')
@subject = ExternalSources.from_dependency(dependency, podfile_path)
end
it 'creates a copy of the podspec' do
@subject.fetch(config.sandbox)
path = config.sandbox.specifications_root + 'Reachability.podspec.json'
path.should.exist?
end
it 'returns the description' do
@subject.description.should.match /from `.*integration\/Reachability`/
end
it 'marks the Pod as local in the sandbox' do
@subject.fetch(config.sandbox)
config.sandbox.development_pods.should == {
'Reachability' => fixture('integration/Reachability/Reachability.podspec'),
}
end
it 'removes sandbox lockfile checkout options for the pod' do
config.sandbox.store_checkout_source('Reachability', :http => 'https://example.com')
@subject.fetch(config.sandbox)
config.sandbox.checkout_sources['pod'].should.be.nil
end
it 'raises if the podspec cannot be found' do
@subject.stubs(:params).returns(:path => temporary_directory)
should.raise Informative do
@subject.fetch(config.sandbox)
end.message.should.match /No podspec found for `Reachability` in `#{temporary_directory}`/
it 'marks a pod as relative' do
@subject.stubs(:params).returns(:path => './Reachability')
Pathname.any_instance.stubs(:exist?).returns(true)
config.sandbox.stubs(:store_podspec)
@subject.fetch(config.sandbox)
config.sandbox.local_path_was_absolute?('Reachability').should.be.false
end
it 'marks a pod as absolute' do
@subject.stubs(:params).returns(:path => fixture('integration/Reachability'))
Pathname.any_instance.stubs(:exist?).returns(true)
config.sandbox.stubs(:store_podspec)
@subject.fetch(config.sandbox)
config.sandbox.local_path_was_absolute?('Reachability').should.be.true
end
end
describe '#podspec_path' do
it 'handles absolute paths' do
@subject.stubs(:params).returns(:path => fixture('integration/Reachability'))
path = @subject.send(:podspec_path)
path.should == fixture('integration/Reachability/Reachability.podspec')
end
it 'handles paths when there is no podfile path' do
@subject.stubs(:podfile_path).returns(nil)
@subject.stubs(:params).returns(:path => fixture('integration/Reachability'))
path = @subject.send(:podspec_path)
path.should == fixture('integration/Reachability/Reachability.podspec')
end
it 'handles relative paths' do
@subject.stubs(:params).returns(:path => 'Reachability')
path = @subject.send(:podspec_path)
path.should == fixture('integration/Reachability/Reachability.podspec')
end
it 'expands the tilde' do
File.stubs(:exist?).returns(true)
@subject.stubs(:params).returns(:path => '~/Reachability')
Pathname.any_instance.stubs(:exist?).returns(true)
path = @subject.send(:podspec_path)
path.should == Pathname(ENV['HOME']) + 'Reachability/Reachability.podspec'
end
it 'falls back to .podspec.json when .podspec doesnt exist' do
@subject.stubs(:params).returns(:path => 'Reachability')
Pathname.any_instance.stubs(:exist?).returns(false)
path = @subject.send(:podspec_path)
path.should == fixture('integration/Reachability/Reachability.podspec.json')
end
end
describe '#absolute?' do
it 'returns that a path is relative' do
result = @subject.send(:absolute?, './ThirdPartyCode/UrbanAirship')
result.should.be.false
end
it 'consider relative paths not explicitly set from the current dir' do
result = @subject.send(:absolute?, './ThirdPartyCode/UrbanAirship')
result.should.be.false
end
it 'returns that a path is absolute' do
result = @subject.send(:absolute?, '/path/to/UrbanAirship')
result.should.be.true
end
it 'considers absolute paths specified with the tilde' do
result = @subject.send(:absolute?, '~/path/to/UrbanAirship')
result.should.be.true
end
end
end
end