Skip to content
Browse files

[HEAD] Move logic from Specification to Installer/Downloader.

Closes #392.

Incidentally touched ALL THE FILES.
  • Loading branch information...
1 parent a24b4ba commit f88e26c130a93f9db2aad184526b85c6469a63e3 @alloy alloy committed Jul 14, 2012
View
30 lib/cocoapods/dependency.rb
@@ -6,8 +6,8 @@ module Gem
module Pod
class Dependency < Gem::Dependency
- attr_reader :external_source, :bleeding
- alias :bleeding? :bleeding
+ attr_reader :external_source, :head
+ alias :head? :head
attr_accessor :specification
def initialize(*name_and_version_requirements, &block)
@@ -19,22 +19,28 @@ def initialize(*name_and_version_requirements, &block)
elsif !name_and_version_requirements.empty? && block.nil?
if name_and_version_requirements.last.is_a?(Hash)
@external_source = ExternalSources.from_params(name_and_version_requirements[0].split('/').first, name_and_version_requirements.pop)
- elsif name_and_version_requirements.last.is_a?(Symbol)
- symbol = name_and_version_requirements.pop
- if symbol == :bleeding
- @bleeding = true
- else
- raise Informative, "Unrecognized symbol `#{symbol}' for dependency `#{name_and_version_requirements[0]}'"
- end
+
+ elsif (symbol = name_and_version_requirements.last).is_a?(Symbol) && symbol == :head
+ name_and_version_requirements.pop
+ @head = true
end
super(*name_and_version_requirements)
+ if head? && !latest_version?
+ raise Informative, "A `:head' dependency may not specify version requirements."
+ end
+
else
raise Informative, "A dependency needs either a name and version requirements, " \
"a source hash, or a block which defines a podspec."
end
end
+ def latest_version?
+ versions = @version_requirements.requirements.map(&:last)
+ versions == [Gem::Version.new('0')]
+ end
+
def ==(other)
super && (@specification ? @specification == other.specification : @external_source == other.external_source)
end
@@ -76,9 +82,9 @@ def to_s
elsif @version_requirements != Gem::Requirement.default
version << @version_requirements.to_s
end
- result = @name
- result = result + " (#{version})" unless version.empty?
- result = result + " [BLEEDING]" if bleeding?
+ result = @name.dup
+ result += " (#{version})" unless version.empty?
+ result += " [HEAD]" if head?
result
end
View
4 lib/cocoapods/downloader/git.rb
@@ -23,7 +23,7 @@ def download
else
download_head
end
- removed_cached_repos_if_needed
+ prune_cache
end
def create_cache
@@ -33,7 +33,7 @@ def create_cache
clone(url, cache_path)
end
- def removed_cached_repos_if_needed
+ def prune_cache
return unless caches_dir.exist?
Dir.chdir(caches_dir) do
repos = Pathname.new(caches_dir).children.select { |c| c.directory? }.sort_by(&:ctime)
View
22 lib/cocoapods/installer.rb
@@ -48,18 +48,17 @@ def install_dependencies!
pods.each do |pod|
unless config.silent?
marker = config.verbose ? "\n-> ".green : ''
- if pod.top_specification.preferred_dependency
- name = "#{pod.top_specification.name}/#{pod.top_specification.preferred_dependency} (#{pod.top_specification.version})"
- name << "[BLEEDING]" if pod.top_specification.bleeding?
+ if subspec_name = pod.top_specification.preferred_dependency
+ name = "#{pod.top_specification.name}/#{subspec_name} (#{pod.top_specification.version})"
else
name = pod.to_s
end
+ name << " [HEAD]" if pod.top_specification.version.head?
puts marker << ( pod.exists? ? "Using #{name}" : "Installing #{name}".green )
end
unless pod.exists?
- downloader = Downloader.for_pod(pod)
- downloader.download
+ download_pod(pod)
# The docs need to be generated before cleaning because
# the documentation is created for all the subspecs.
generate_docs(pod)
@@ -68,6 +67,19 @@ def install_dependencies!
end
end
+ def download_pod(pod)
+ downloader = Downloader.for_pod(pod)
+ # Force the `bleeding edge' version if necessary.
+ if pod.top_specification.version.head?
+ if downloader.respond_to?(:download_head)
+ downloader.download_head
+ else
+ end
+ else
+ downloader.download
+ end
+ end
+
#TODO: move to generator ?
def generate_docs(pod)
doc_generator = Generator::Documentation.new(pod)
View
3 lib/cocoapods/resolver.rb
@@ -64,8 +64,9 @@ def find_dependency_specs(dependent_specification, dependencies, target_definiti
spec = set.specification_by_name(dependency.name)
@loaded_specs << spec.name
@specs[spec.name] = spec
+ # Configure the specification
spec.activate_platform(target_definition.platform)
- spec.bleeding = dependency.bleeding?
+ spec.version.head = dependency.head?
# And recursively load the dependencies of the spec.
find_dependency_specs(spec, spec.dependencies, target_definition) if spec.dependencies
end
View
43 lib/cocoapods/specification.rb
@@ -180,14 +180,6 @@ def platform=(platform)
@platform = Platform.new(*platform)
end
-
- # @!method bleeding
- #
- # @return [BOOL] returns wheter the specification is in bleeding mode.
- #
- attr_accessor :bleeding
- alias_method :bleeding?, :bleeding
-
# If not platform is specified all the platforms are returned.
def available_platforms
platform.nil? ? @define_for_platforms.map { |platform| Platform.new(platform, deployment_target(platform)) } : [ platform ]
@@ -196,6 +188,7 @@ def available_platforms
### Top level attributes. These attributes represent the unique features of pod and can't be specified by subspecs.
top_attr_accessor :defined_in_file
+ top_attr_accessor :source
top_attr_accessor :homepage
top_attr_accessor :summary
top_attr_accessor :documentation
@@ -205,23 +198,6 @@ def available_platforms
top_attr_reader :description, lambda { |instance, ivar| ivar || instance.summary }
top_attr_writer :description, lambda { |d| d.strip_heredoc }
-
- # @!method source
- #
- # @abstract
- # Returns the source of the pod. If the specification is set in bleeding mode
- # and the source is a git repository the head of master will be returned.
- #
- top_attr_writer :source
- top_attr_reader :source, lambda { |instance, ivar|
- if instance.bleeding?
- raise Informative, 'Bleeding is supported only for git repos' unless ivar[:git]
- { :git => ivar[:git] }
- else
- ivar
- end
- }
-
# @!method license
#
# @abstract
@@ -374,15 +350,14 @@ def subspec(name, &block)
attr_reader :subspecs
def recursive_subspecs
- unless @recursive_subspecs
+ @recursive_subspecs ||= begin
mapper = lambda do |spec|
- spec.subspecs.map do |subspec|
- [subspec, *mapper.call(subspec)]
- end.flatten
- end
- @recursive_subspecs = mapper.call self
+ spec.subspecs.map do |subspec|
+ [subspec, *mapper.call(subspec)]
+ end.flatten
+ end
+ mapper.call(self)
end
- @recursive_subspecs
end
def subspec_by_name(name)
@@ -463,9 +438,7 @@ def dependency_by_top_level_spec_name(name)
end
def to_s
- result = "#{name} (#{version})"
- result << " [BLEEDING]" if bleeding?
- result
+ "#{name} (#{version})"
end
def inspect
View
2 lib/cocoapods/version.rb
@@ -4,6 +4,8 @@ module Gem
module Pod
class Version < Gem::Version
+ attr_accessor :head
+ alias_method :head?, :head
end
end
View
416 spec/functional/downloader_spec.rb
@@ -1,255 +1,257 @@
require File.expand_path('../../spec_helper', __FILE__)
-describe "Pod::Downloader" do
- before do
- @pod = Pod::LocalPod.new(fixture_spec('banana-lib/BananaLib.podspec'), temporary_sandbox, Pod::Platform.ios)
- end
+module Pod
+ describe "Downloader" do
+ before do
+ @pod = LocalPod.new(fixture_spec('banana-lib/BananaLib.podspec'), temporary_sandbox, Platform.ios)
+ end
- describe "for Git" do
- extend SpecHelper::TemporaryDirectory
+ describe "for Git" do
+ extend SpecHelper::TemporaryDirectory
- it "check's out a specific commit" do
- @pod.top_specification.stubs(:source).returns(
- :git => fixture('banana-lib'), :commit => 'fd56054'
- )
- downloader = Pod::Downloader.for_pod(@pod)
- downloader.download
+ it "check's out a specific commit" do
+ @pod.top_specification.stubs(:source).returns(
+ :git => fixture('banana-lib'), :commit => 'fd56054'
+ )
+ downloader = Downloader.for_pod(@pod)
+ downloader.download
- (@pod.root + 'README').read.strip.should == 'first commit'
- end
+ (@pod.root + 'README').read.strip.should == 'first commit'
+ end
+
+ it "check's out a specific branch" do
+ @pod.top_specification.stubs(:source).returns(
+ :git => fixture('banana-lib'), :branch => 'topicbranch'
+ )
+ downloader = Downloader.for_pod(@pod)
+ downloader.download
- it "check's out a specific branch" do
- @pod.top_specification.stubs(:source).returns(
- :git => fixture('banana-lib'), :branch => 'topicbranch'
+ (@pod.root + 'README').read.strip.should == 'topicbranch'
+ end
+
+ it "check's out a specific tag" do
+ @pod.top_specification.stubs(:source).returns(
+ :git => fixture('banana-lib'), :tag => 'v1.0'
)
- downloader = Pod::Downloader.for_pod(@pod)
+ downloader = Downloader.for_pod(@pod)
downloader.download
- (@pod.root + 'README').read.strip.should == 'topicbranch'
- end
+ (@pod.root + 'README').read.strip.should == 'v1.0'
+ end
- it "check's out a specific tag" do
- @pod.top_specification.stubs(:source).returns(
- :git => fixture('banana-lib'), :tag => 'v1.0'
- )
- downloader = Pod::Downloader.for_pod(@pod)
- downloader.download
+ it "prepares the cache if it does not exits" do
+ @pod.top_specification.stubs(:source).returns(
+ :git => fixture('banana-lib'), :commit => 'fd56054'
+ )
+ downloader = Downloader.for_pod(@pod)
+ downloader.cache_path.rmtree if downloader.cache_path.exist?
+ downloader.expects(:create_cache).once
+ downloader.stubs(:download_commit)
+ downloader.download
+ end
- (@pod.root + 'README').read.strip.should == 'v1.0'
- end
+ it "removes the oldest repo if the caches is too big" do
+ @pod.top_specification.stubs(:source).returns(
+ :git => fixture('banana-lib'), :commit => 'fd56054'
+ )
+ original_chace_size = Downloader::Git::MAX_CACHE_SIZE
+ Downloader::Git.__send__(:remove_const,'MAX_CACHE_SIZE')
+ Downloader::Git::MAX_CACHE_SIZE = 0
+ downloader = Downloader.for_pod(@pod)
+ downloader.stubs(:cache_dir).returns(temporary_directory)
+ downloader.download
+ downloader.cache_path.should.not.exist?
+ Downloader::Git.__send__(:remove_const,'MAX_CACHE_SIZE')
+ Downloader::Git::MAX_CACHE_SIZE = original_chace_size
+ end
- it "prepares the cache if it does not exits" do
- @pod.top_specification.stubs(:source).returns(
- :git => fixture('banana-lib'), :commit => 'fd56054'
- )
- downloader = Pod::Downloader.for_pod(@pod)
- downloader.cache_path.rmtree if downloader.cache_path.exist?
- downloader.expects(:create_cache).once
- downloader.stubs(:download_commit)
- downloader.download
- end
+ xit "raises if it can't find the url" do
+ @pod.top_specification.stubs(:source).returns(
+ :git => 'find_me_if_you_can'
+ )
+ downloader = Downloader.for_pod(@pod)
+ lambda { downloader.download }.should.raise Informative
+ end
- it "removes the oldest repo if the caches is too big" do
- @pod.top_specification.stubs(:source).returns(
- :git => fixture('banana-lib'), :commit => 'fd56054'
- )
- original_chace_size = Pod::Downloader::Git::MAX_CACHE_SIZE
- Pod::Downloader::Git.__send__(:remove_const,'MAX_CACHE_SIZE')
- Pod::Downloader::Git::MAX_CACHE_SIZE = 0
- downloader = Pod::Downloader.for_pod(@pod)
- downloader.stubs(:cache_dir).returns(temporary_directory)
- downloader.download
- downloader.cache_path.should.not.exist?
- Pod::Downloader::Git.__send__(:remove_const,'MAX_CACHE_SIZE')
- Pod::Downloader::Git::MAX_CACHE_SIZE = original_chace_size
- end
+ it "raises if it can't find a commit" do
+ @pod.top_specification.stubs(:source).returns(
+ :git => fixture('banana-lib'), :commit => 'aaaaaa'
+ )
+ downloader = Downloader.for_pod(@pod)
+ lambda { downloader.download }.should.raise Informative
+ end
- xit "raises if it can't find the url" do
- @pod.top_specification.stubs(:source).returns(
- :git => 'find_me_if_you_can'
- )
- downloader = Pod::Downloader.for_pod(@pod)
- lambda { downloader.download }.should.raise Pod::Informative
- end
+ it "raises if it can't find a tag" do
+ @pod.top_specification.stubs(:source).returns(
+ :git => fixture('banana-lib'), :tag => 'aaaaaa'
+ )
+ downloader = Downloader.for_pod(@pod)
+ lambda { downloader.download }.should.raise Informative
+ end
- it "raises if it can't find a commit" do
- @pod.top_specification.stubs(:source).returns(
- :git => fixture('banana-lib'), :commit => 'aaaaaa'
- )
- downloader = Pod::Downloader.for_pod(@pod)
- lambda { downloader.download }.should.raise Pod::Informative
- end
+ it "does not raise if it can find the reference" do
+ @pod.top_specification.stubs(:source).returns(
+ :git => fixture('banana-lib'), :commit => 'fd56054'
+ )
+ downloader = Downloader.for_pod(@pod)
+ lambda { downloader.download }.should.not.raise
+ end
- it "raises if it can't find a tag" do
- @pod.top_specification.stubs(:source).returns(
- :git => fixture('banana-lib'), :tag => 'aaaaaa'
- )
- downloader = Pod::Downloader.for_pod(@pod)
- lambda { downloader.download }.should.raise Pod::Informative
- end
+ it "returns the cache directory as the clone url" do
+ @pod.top_specification.stubs(:source).returns(
+ :git => fixture('banana-lib'), :commit => 'fd56054'
+ )
+ downloader = Downloader.for_pod(@pod)
+ downloader.clone_url.to_s.should.match /Library\/Caches\/CocoaPods\/Git/
+ end
- it "does not raise if it can find the reference" do
- @pod.top_specification.stubs(:source).returns(
- :git => fixture('banana-lib'), :commit => 'fd56054'
- )
- downloader = Pod::Downloader.for_pod(@pod)
- lambda { downloader.download }.should.not.raise
- end
+ it "updates the cache if the HEAD is requested" do
+ @pod.top_specification.stubs(:source).returns(
+ :git => fixture('banana-lib')
+ )
+ downloader = Downloader.for_pod(@pod)
+ downloader.expects(:update_cache).once
+ downloader.download
+ end
- it "returns the cache directory as the clone url" do
- @pod.top_specification.stubs(:source).returns(
- :git => fixture('banana-lib'), :commit => 'fd56054'
- )
- downloader = Pod::Downloader.for_pod(@pod)
- downloader.clone_url.to_s.should.match /Library\/Caches\/CocoaPods\/Git/
- end
+ it "updates the cache if the ref is not available" do
+ # create the origin repo and the cache
+ tmp_repo_path = temporary_directory + 'banana-lib-source'
+ `git clone #{fixture('banana-lib')} #{tmp_repo_path}`
- it "updates the cache if the HEAD is requested" do
- @pod.top_specification.stubs(:source).returns(
- :git => fixture('banana-lib')
- )
- downloader = Pod::Downloader.for_pod(@pod)
- downloader.expects(:update_cache).once
- downloader.download
- end
+ @pod.top_specification.stubs(:source).returns(
+ :git => tmp_repo_path, :commit => 'fd56054'
+ )
+ downloader = Downloader.for_pod(@pod)
+ downloader.download
- it "updates the cache if the ref is not available" do
- # create the origin repo and the cache
- tmp_repo_path = temporary_directory + 'banana-lib-source'
- `git clone #{fixture('banana-lib')} #{tmp_repo_path}`
-
- @pod.top_specification.stubs(:source).returns(
- :git => tmp_repo_path, :commit => 'fd56054'
- )
- downloader = Pod::Downloader.for_pod(@pod)
- downloader.download
-
- # make a new commit in the origin
- commit = ''
- Dir.chdir(tmp_repo_path) do
- `touch test.txt`
- `git add test.txt`
- `git commit -m 'test'`
- commit = `git rev-parse HEAD`.chomp
- end
-
- # require the new commit
- pod = Pod::LocalPod.new(fixture_spec('banana-lib/BananaLib.podspec'), temporary_sandbox, Pod::Platform.ios)
- pod.top_specification.stubs(:source).returns(
- :git => tmp_repo_path, :commit => commit
- )
- downloader = Pod::Downloader.for_pod(pod)
- downloader.download
- (pod.root + 'test.txt').should.exist?
- end
+ # make a new commit in the origin
+ commit = ''
+ Dir.chdir(tmp_repo_path) do
+ `touch test.txt`
+ `git add test.txt`
+ `git commit -m 'test'`
+ commit = `git rev-parse HEAD`.chomp
+ end
+
+ # require the new commit
+ pod = LocalPod.new(fixture_spec('banana-lib/BananaLib.podspec'), temporary_sandbox, Platform.ios)
+ pod.top_specification.stubs(:source).returns(
+ :git => tmp_repo_path, :commit => commit
+ )
+ downloader = Downloader.for_pod(pod)
+ downloader.download
+ (pod.root + 'test.txt').should.exist?
+ end
- it "doesn't updates cache the if the ref is available" do
- @pod.top_specification.stubs(:source).returns(
- :git => fixture('banana-lib'), :commit => 'fd56054'
- )
- downloader = Pod::Downloader.for_pod(@pod)
- downloader.download
- downloader.expects(:update_cache).never
- downloader.download
+ it "doesn't updates cache the if the ref is available" do
+ @pod.top_specification.stubs(:source).returns(
+ :git => fixture('banana-lib'), :commit => 'fd56054'
+ )
+ downloader = Downloader.for_pod(@pod)
+ downloader.download
+ downloader.expects(:update_cache).never
+ downloader.download
+ end
end
- end
- describe "for GitHub repositories, with :download_only set to true" do
- extend SpecHelper::TemporaryDirectory
+ describe "for GitHub repositories, with :download_only set to true" do
+ extend SpecHelper::TemporaryDirectory
- it "downloads HEAD with no other options specified" do
- @pod.top_specification.stubs(:source).returns(
- :git => "git://github.com/lukeredpath/libPusher.git", :download_only => true
- )
- downloader = Pod::Downloader.for_pod(@pod)
+ it "downloads HEAD with no other options specified" do
+ @pod.top_specification.stubs(:source).returns(
+ :git => "git://github.com/lukeredpath/libPusher.git", :download_only => true
+ )
+ downloader = Downloader.for_pod(@pod)
- VCR.use_cassette('tarballs', :record => :new_episodes) { downloader.download }
+ VCR.use_cassette('tarballs', :record => :new_episodes) { downloader.download }
- # deliberately keep this assertion as loose as possible for now
- (@pod.root + 'README.md').readlines[0].should =~ /libPusher/
- end
+ # deliberately keep this assertion as loose as possible for now
+ (@pod.root + 'README.md').readlines[0].should =~ /libPusher/
+ end
- it "downloads a specific tag when specified" do
- @pod.top_specification.stubs(:source).returns(
- :git => "git://github.com/lukeredpath/libPusher.git", :tag => 'v1.1', :download_only => true
- )
- downloader = Pod::Downloader.for_pod(@pod)
+ it "downloads a specific tag when specified" do
+ @pod.top_specification.stubs(:source).returns(
+ :git => "git://github.com/lukeredpath/libPusher.git", :tag => 'v1.1', :download_only => true
+ )
+ downloader = Downloader.for_pod(@pod)
- VCR.use_cassette('tarballs', :record => :new_episodes) { downloader.download }
+ VCR.use_cassette('tarballs', :record => :new_episodes) { downloader.download }
- # deliberately keep this assertion as loose as possible for now
- (@pod.root + 'libPusher.podspec').readlines.grep(/1.1/).should.not.be.empty
- end
+ # deliberately keep this assertion as loose as possible for now
+ (@pod.root + 'libPusher.podspec').readlines.grep(/1.1/).should.not.be.empty
+ end
- it "downloads a specific branch when specified" do
- @pod.top_specification.stubs(:source).returns(
- :git => "git://github.com/lukeredpath/libPusher.git", :branch => 'gh-pages', :download_only => true
- )
- downloader = Pod::Downloader.for_pod(@pod)
+ it "downloads a specific branch when specified" do
+ @pod.top_specification.stubs(:source).returns(
+ :git => "git://github.com/lukeredpath/libPusher.git", :branch => 'gh-pages', :download_only => true
+ )
+ downloader = Downloader.for_pod(@pod)
- VCR.use_cassette('tarballs', :record => :new_episodes) { downloader.download }
+ VCR.use_cassette('tarballs', :record => :new_episodes) { downloader.download }
- # deliberately keep this assertion as loose as possible for now
- (@pod.root + 'index.html').readlines.grep(/libPusher Documentation/).should.not.be.empty
- end
+ # deliberately keep this assertion as loose as possible for now
+ (@pod.root + 'index.html').readlines.grep(/libPusher Documentation/).should.not.be.empty
+ end
- it "downloads a specific commit when specified" do
- @pod.top_specification.stubs(:source).returns(
- :git => "git://github.com/lukeredpath/libPusher.git", :commit => 'eca89998d5', :download_only => true
- )
- downloader = Pod::Downloader.for_pod(@pod)
+ it "downloads a specific commit when specified" do
+ @pod.top_specification.stubs(:source).returns(
+ :git => "git://github.com/lukeredpath/libPusher.git", :commit => 'eca89998d5', :download_only => true
+ )
+ downloader = Downloader.for_pod(@pod)
- VCR.use_cassette('tarballs', :record => :new_episodes) { downloader.download }
+ VCR.use_cassette('tarballs', :record => :new_episodes) { downloader.download }
- # deliberately keep this assertion as loose as possible for now
- (@pod.root + 'README.md').readlines[0].should =~ /PusherTouch/
+ # deliberately keep this assertion as loose as possible for now
+ (@pod.root + 'README.md').readlines[0].should =~ /PusherTouch/
+ end
end
- end
- describe "for Mercurial" do
- it "check's out a specific revision" do
- @pod.top_specification.stubs(:source).returns(
- :hg => fixture('mercurial-repo'), :revision => '46198bb3af96'
- )
- downloader = Pod::Downloader.for_pod(@pod)
- downloader.download
- (@pod.root + 'README').read.strip.should == 'first commit'
+ describe "for Mercurial" do
+ it "check's out a specific revision" do
+ @pod.top_specification.stubs(:source).returns(
+ :hg => fixture('mercurial-repo'), :revision => '46198bb3af96'
+ )
+ downloader = Downloader.for_pod(@pod)
+ downloader.download
+ (@pod.root + 'README').read.strip.should == 'first commit'
+ end
end
- end
- describe "for Subversion" do
- it "check's out a specific revision" do
- @pod.top_specification.stubs(:source).returns(
- :svn => "file://#{fixture('subversion-repo')}", :revision => '1'
- )
- downloader = Pod::Downloader.for_pod(@pod)
- downloader.download
- (@pod.root + 'README').read.strip.should == 'first commit'
- end
+ describe "for Subversion" do
+ it "check's out a specific revision" do
+ @pod.top_specification.stubs(:source).returns(
+ :svn => "file://#{fixture('subversion-repo')}", :revision => '1'
+ )
+ downloader = Downloader.for_pod(@pod)
+ downloader.download
+ (@pod.root + 'README').read.strip.should == 'first commit'
+ end
- it "check's out a specific tag" do
- @pod.top_specification.stubs(:source).returns(
- :svn => "file://#{fixture('subversion-repo')}/tags/tag-1"
- )
- downloader = Pod::Downloader.for_pod(@pod)
- downloader.download
- (@pod.root + 'README').read.strip.should == 'tag 1'
+ it "check's out a specific tag" do
+ @pod.top_specification.stubs(:source).returns(
+ :svn => "file://#{fixture('subversion-repo')}/tags/tag-1"
+ )
+ downloader = Downloader.for_pod(@pod)
+ downloader.download
+ (@pod.root + 'README').read.strip.should == 'tag 1'
+ end
end
- end
- describe "for Http" do
- extend SpecHelper::TemporaryDirectory
+ describe "for Http" do
+ extend SpecHelper::TemporaryDirectory
- it "download file and unzip it" do
- @pod.top_specification.stubs(:source).returns(
- :http => 'http://dl.google.com/googleadmobadssdk/googleadmobsearchadssdkios.zip'
- )
- downloader = Pod::Downloader.for_pod(@pod)
- VCR.use_cassette('tarballs', :record => :new_episodes) { downloader.download }
+ it "download file and unzip it" do
+ @pod.top_specification.stubs(:source).returns(
+ :http => 'http://dl.google.com/googleadmobadssdk/googleadmobsearchadssdkios.zip'
+ )
+ downloader = Downloader.for_pod(@pod)
+ VCR.use_cassette('tarballs', :record => :new_episodes) { downloader.download }
- (@pod.root + 'GoogleAdMobSearchAdsSDK/GADSearchRequest.h').should.exist
- (@pod.root + 'GoogleAdMobSearchAdsSDK/GADSearchRequest.h').read.strip.should =~ /Google Search Ads iOS SDK/
+ (@pod.root + 'GoogleAdMobSearchAdsSDK/GADSearchRequest.h').should.exist
+ (@pod.root + 'GoogleAdMobSearchAdsSDK/GADSearchRequest.h').read.strip.should =~ /Google Search Ads iOS SDK/
+ end
end
end
end
View
140 spec/unit/dependency_spec.rb
@@ -1,70 +1,92 @@
require File.expand_path('../../spec_helper', __FILE__)
-describe "Pod::Dependency" do
- it "merges dependencies (taken from newer RubyGems version)" do
- dep1 = Pod::Dependency.new('bananas', '>= 1.8')
- dep2 = Pod::Dependency.new('bananas', '1.9')
- dep1.merge(dep2).should == Pod::Dependency.new('bananas', '>= 1.8', '1.9')
- end
+module Pod
+ describe Dependency do
+ it "merges dependencies (taken from newer RubyGems version)" do
+ dep1 = Dependency.new('bananas', '>= 1.8')
+ dep2 = Dependency.new('bananas', '1.9')
+ dep1.merge(dep2).should == Dependency.new('bananas', '>= 1.8', '1.9')
+ end
- it "returns the name of the dependency, or the name of the pod of which this is a subspec" do
- dep = Pod::Dependency.new('RestKit')
- dep.top_level_spec_name.should == 'RestKit'
- dep = Pod::Dependency.new('RestKit/Networking')
- dep.top_level_spec_name.should == 'RestKit'
- end
+ it "returns the name of the dependency, or the name of the pod of which this is a subspec" do
+ dep = Dependency.new('RestKit')
+ dep.top_level_spec_name.should == 'RestKit'
+ dep = Dependency.new('RestKit/Networking')
+ dep.top_level_spec_name.should == 'RestKit'
+ end
- it "returns a copy of the dependency but for the top level spec, if it's a subspec" do
- dep = Pod::Dependency.new('RestKit', '>= 1.2.3')
- dep.to_top_level_spec_dependency.should == Pod::Dependency.new('RestKit', '>= 1.2.3')
- dep = Pod::Dependency.new('RestKit/Networking', '>= 1.2.3')
- dep.to_top_level_spec_dependency.should == Pod::Dependency.new('RestKit', '>= 1.2.3')
- end
+ it "returns a copy of the dependency but for the top level spec, if it's a subspec" do
+ dep = Dependency.new('RestKit', '>= 1.2.3')
+ dep.to_top_level_spec_dependency.should == Dependency.new('RestKit', '>= 1.2.3')
+ dep = Dependency.new('RestKit/Networking', '>= 1.2.3')
+ dep.to_top_level_spec_dependency.should == Dependency.new('RestKit', '>= 1.2.3')
+ end
- it "is equal to another dependency if `external_source' is the same" do
- dep1 = Pod::Dependency.new('bananas', :git => 'GIT-URL')
- dep2 = Pod::Dependency.new('bananas')
- dep1.should.not == dep2
- dep3 = Pod::Dependency.new('bananas', :git => 'GIT-URL')
- dep1.should == dep3
- end
+ it "is equal to another dependency if `external_source' is the same" do
+ dep1 = Dependency.new('bananas', :git => 'GIT-URL')
+ dep2 = Dependency.new('bananas')
+ dep1.should.not == dep2
+ dep3 = Dependency.new('bananas', :git => 'GIT-URL')
+ dep1.should == dep3
+ end
- it "is equal to another dependency if `specification' is equal" do
- dep1 = Pod::Dependency.new { |s| s.name = 'bananas'; s.version = '1' }
- dep2 = Pod::Dependency.new('bananas')
- dep1.should.not == dep2
- dep2 = Pod::Dependency.new { |s| s.name = 'bananas'; s.version = '1' }
- dep1.should == dep2
- end
-
- it 'raises if created without either valid name/version/external requirements or a block' do
- lambda { Pod::Dependency.new }.should.raise Pod::Informative
- end
-end
+ it "is equal to another dependency if `specification' is equal" do
+ dep1 = Dependency.new { |s| s.name = 'bananas'; s.version = '1' }
+ dep2 = Dependency.new('bananas')
+ dep1.should.not == dep2
+ dep2 = Dependency.new { |s| s.name = 'bananas'; s.version = '1' }
+ dep1.should == dep2
+ end
+
+ it 'raises if created without either valid name/version/external requirements or a block' do
+ lambda { Dependency.new }.should.raise Informative
+ end
-describe "Pod::Dependency", "defined with a block" do
- before do
- @dependency = Pod::Dependency.new do |spec|
- spec.name = "my-custom-spec"
- spec.version = "1.0.3"
+ describe "defined with a block" do
+ before do
+ @dependency = Dependency.new do |spec|
+ spec.name = "my-custom-spec"
+ spec.version = "1.0.3"
+ end
+ end
+
+ it 'it identifies itself as an inline dependency' do
+ @dependency.should.be.inline
+ end
+
+ it 'attaches a custom spec to the dependency, configured by the block' do
+ @dependency.specification.name.should == "my-custom-spec"
+ end
end
- end
-
- it 'it identifies itself as an inline dependency' do
- @dependency.should.be.inline
- end
-
- it 'attaches a custom spec to the dependency, configured by the block' do
- @dependency.specification.name.should == "my-custom-spec"
- end
-end
-describe "Pod::Dependency", "with a hash of external source settings" do
- before do
- @dependency = Pod::Dependency.new("cocoapods", :git => "git://github.com/cocoapods/cocoapods")
- end
-
- it 'it identifies itself as an external dependency' do
- @dependency.should.be.external
+ describe "with a hash of external source settings" do
+ before do
+ @dependency = Dependency.new("cocoapods", :git => "git://github.com/cocoapods/cocoapods")
+ end
+
+ it 'identifies itself as an external dependency' do
+ @dependency.should.be.external
+ end
+ end
+
+ describe "with flags" do
+ it "identifies itself as a `bleeding edge' dependency" do
+ dependency = Dependency.new("cocoapods", :head)
+ dependency.should.be.head
+ dependency.to_s.should == "cocoapods [HEAD]"
+ end
+
+ it "only supports the `:head' option on the last version of a pod" do
+ should.raise Informative do
+ Dependency.new("cocoapods", "1.2.3", :head)
+ end
+ end
+
+ it "raises if an invalid flag is given" do
+ should.raise ArgumentError do
+ Dependency.new("cocoapods", :foot)
+ end
+ end
+ end
end
end
View
92 spec/unit/downloader_spec.rb
@@ -1,60 +1,58 @@
require File.expand_path('../../spec_helper', __FILE__)
def stub_pod_with_source(source_options)
- specification = stub(
- :source => source_options
- )
+ specification = stub(:source => source_options)
stub('pod') do
stubs(:root).returns(temporary_sandbox.root)
stubs(:top_specification).returns(specification)
end
end
-describe "Pod::Downloader" do
- it "returns a git downloader with parsed options" do
- pod = Pod::LocalPod.new(fixture_spec('banana-lib/BananaLib.podspec'), temporary_sandbox, Pod::Platform.ios)
- downloader = Pod::Downloader.for_pod(pod)
- downloader.should.be.instance_of Pod::Downloader::Git
- downloader.url.should == 'http://banana-corp.local/banana-lib.git'
- downloader.options.should == { :tag => 'v1.0' }
+module Pod
+ describe Downloader do
+ it "returns a git downloader with parsed options" do
+ pod = LocalPod.new(fixture_spec('banana-lib/BananaLib.podspec'), temporary_sandbox, Platform.ios)
+ downloader = Downloader.for_pod(pod)
+ downloader.should.be.instance_of Downloader::Git
+ downloader.url.should == 'http://banana-corp.local/banana-lib.git'
+ downloader.options.should == { :tag => 'v1.0' }
+ end
+
+ it 'returns a github downloader when the :git URL is on github' do
+ pod = LocalPod.new(fixture_spec('banana-lib/BananaLib.podspec'), temporary_sandbox, Platform.ios)
+ pod.top_specification.stubs(:source).returns(:git => "git://github.com/CocoaPods/CocoaPods")
+ downloader = Downloader.for_pod(pod)
+ downloader.should.be.instance_of Downloader::GitHub
+ end
end
- it 'returns a github downloader when the :git URL is on github' do
- pod = Pod::LocalPod.new(fixture_spec('banana-lib/BananaLib.podspec'), temporary_sandbox, Pod::Platform.ios)
- pod.top_specification.stubs(:source).returns(:git => "git://github.com/CocoaPods/CocoaPods")
- downloader = Pod::Downloader.for_pod(pod)
- downloader.should.be.instance_of Pod::Downloader::GitHub
+ describe Downloader::GitHub do
+ it 'can convert public HTTP repository URLs to the tarball URL' do
+ downloader = Downloader.for_pod(stub_pod_with_source(
+ :git => "https://github.com/CocoaPods/CocoaPods.git"
+ ))
+ downloader.tarball_url_for('master').should == "https://github.com/CocoaPods/CocoaPods/tarball/master"
+ end
+
+ it 'can convert private HTTP repository URLs to the tarball URL' do
+ downloader = Downloader.for_pod(stub_pod_with_source(
+ :git => "https://lukeredpath@github.com/CocoaPods/CocoaPods.git"
+ ))
+ downloader.tarball_url_for('master').should == "https://github.com/CocoaPods/CocoaPods/tarball/master"
+ end
+
+ it 'can convert private SSH repository URLs to the tarball URL' do
+ downloader = Downloader.for_pod(stub_pod_with_source(
+ :git => "git@github.com:CocoaPods/CocoaPods.git"
+ ))
+ downloader.tarball_url_for('master').should == "https://github.com/CocoaPods/CocoaPods/tarball/master"
+ end
+
+ it 'can convert public git protocol repository URLs to the tarball URL' do
+ downloader = Downloader.for_pod(stub_pod_with_source(
+ :git => "git://github.com/CocoaPods/CocoaPods.git"
+ ))
+ downloader.tarball_url_for('master').should == "https://github.com/CocoaPods/CocoaPods/tarball/master"
+ end
end
end
-
-describe Pod::Downloader::GitHub do
-
- it 'can convert public HTTP repository URLs to the tarball URL' do
- downloader = Pod::Downloader.for_pod(stub_pod_with_source(
- :git => "https://github.com/CocoaPods/CocoaPods.git"
- ))
- downloader.tarball_url_for('master').should == "https://github.com/CocoaPods/CocoaPods/tarball/master"
- end
-
- it 'can convert private HTTP repository URLs to the tarball URL' do
- downloader = Pod::Downloader.for_pod(stub_pod_with_source(
- :git => "https://lukeredpath@github.com/CocoaPods/CocoaPods.git"
- ))
- downloader.tarball_url_for('master').should == "https://github.com/CocoaPods/CocoaPods/tarball/master"
- end
-
- it 'can convert private SSH repository URLs to the tarball URL' do
- downloader = Pod::Downloader.for_pod(stub_pod_with_source(
- :git => "git@github.com:CocoaPods/CocoaPods.git"
- ))
- downloader.tarball_url_for('master').should == "https://github.com/CocoaPods/CocoaPods/tarball/master"
- end
-
- it 'can convert public git protocol repository URLs to the tarball URL' do
- downloader = Pod::Downloader.for_pod(stub_pod_with_source(
- :git => "git://github.com/CocoaPods/CocoaPods.git"
- ))
- downloader.tarball_url_for('master').should == "https://github.com/CocoaPods/CocoaPods/tarball/master"
- end
-
-end
View
113 spec/unit/installer_spec.rb
@@ -1,66 +1,83 @@
require File.expand_path('../../spec_helper', __FILE__)
-describe "Pod::Installer" do
- before do
- config.repos_dir = fixture('spec-repos')
- config.project_pods_root = fixture('integration')
- end
-
- describe "by default" do
+module Pod
+ describe Installer do
before do
- podfile = Pod::Podfile.new do
- platform :ios
- xcodeproj 'MyProject'
- pod 'JSONKit'
- end
- @xcconfig = Pod::Installer.new(podfile).target_installers.first.xcconfig.to_hash
+ config.repos_dir = fixture('spec-repos')
+ config.project_pods_root = fixture('integration')
end
- it "sets the header search paths where installed Pod headers can be found" do
- @xcconfig['ALWAYS_SEARCH_USER_PATHS'].should == 'YES'
- end
+ describe "by default" do
+ before do
+ podfile = Podfile.new do
+ platform :ios
+ xcodeproj 'MyProject'
+ pod 'JSONKit'
+ end
+ @xcconfig = Installer.new(podfile).target_installers.first.xcconfig.to_hash
+ end
- it "configures the project to load all members that implement Objective-c classes or categories from the static library" do
- @xcconfig['OTHER_LDFLAGS'].should == '-ObjC'
- end
+ it "sets the header search paths where installed Pod headers can be found" do
+ @xcconfig['ALWAYS_SEARCH_USER_PATHS'].should == 'YES'
+ end
+
+ it "configures the project to load all members that implement Objective-c classes or categories from the static library" do
+ @xcconfig['OTHER_LDFLAGS'].should == '-ObjC'
+ end
- it "sets the PODS_ROOT build variable" do
- @xcconfig['PODS_ROOT'].should.not == nil
+ it "sets the PODS_ROOT build variable" do
+ @xcconfig['PODS_ROOT'].should.not == nil
+ end
end
- end
- it "generates a BridgeSupport metadata file from all the pod headers" do
- podfile = Pod::Podfile.new do
- platform :osx
- pod 'ASIHTTPRequest'
+ it "generates a BridgeSupport metadata file from all the pod headers" do
+ podfile = Podfile.new do
+ platform :osx
+ pod 'ASIHTTPRequest'
+ end
+ installer = Installer.new(podfile)
+ pods = installer.specifications.map do |spec|
+ LocalPod.new(spec, installer.sandbox, podfile.target_definitions[:default].platform)
+ end
+ expected = pods.map { |pod| pod.header_files }.flatten.map { |header| config.project_pods_root + header }
+ expected.size.should > 0
+ installer.target_installers.first.bridge_support_generator_for(pods, installer.sandbox).headers.should == expected
end
- installer = Pod::Installer.new(podfile)
- pods = installer.specifications.map do |spec|
- Pod::LocalPod.new(spec, installer.sandbox, podfile.target_definitions[:default].platform)
+
+ it "omits empty target definitions" do
+ podfile = Podfile.new do
+ platform :ios
+ target :not_empty do
+ pod 'JSONKit'
+ end
+ end
+ installer = Installer.new(podfile)
+ installer.target_installers.map(&:target_definition).map(&:name).should == [:not_empty]
end
- expected = pods.map { |pod| pod.header_files }.flatten.map { |header| config.project_pods_root + header }
- expected.size.should > 0
- installer.target_installers.first.bridge_support_generator_for(pods, installer.sandbox).headers.should == expected
- end
- it "omits empty target definitions" do
- podfile = Pod::Podfile.new do
- platform :ios
- target :not_empty do
- pod 'JSONKit'
+ it "adds the user's build configurations" do
+ path = fixture('SampleProject/SampleProject.xcodeproj')
+ podfile = Podfile.new do
+ platform :ios
+ xcodeproj path, 'App Store' => :release
end
+ installer = Installer.new(podfile)
+ installer.project.build_configurations.map(&:name).sort.should == ['App Store', 'Debug', 'Release', 'Test']
end
- installer = Pod::Installer.new(podfile)
- installer.target_installers.map(&:target_definition).map(&:name).should == [:not_empty]
- end
- it "adds the user's build configurations" do
- path = fixture('SampleProject/SampleProject.xcodeproj')
- podfile = Pod::Podfile.new do
- platform :ios
- xcodeproj path, 'App Store' => :release
+ it "forces downloading of the `bleeding edge' version of a pod" do
+ podfile = Podfile.new do
+ platform :ios
+ pod 'JSONKit', :head
+ end
+ installer = Installer.new(podfile)
+ pod = installer.pods.first
+
+ downloader = stub('Downloader')
+ Downloader.stubs(:for_pod).returns(downloader)
+
+ downloader.expects(:download_head)
+ installer.download_pod(pod)
end
- installer = Pod::Installer.new(podfile)
- installer.project.build_configurations.map(&:name).sort.should == ['App Store', 'Debug', 'Release', 'Test']
end
end
View
283 spec/unit/resolver_spec.rb
@@ -1,161 +1,165 @@
require File.expand_path('../../spec_helper', __FILE__)
-describe "Pod::Resolver" do
- before do
- config.repos_dir = fixture('spec-repos')
-
- @podfile = Pod::Podfile.new do
- platform :ios
- pod 'BlocksKit'
- # pod 'ASIWebPageRequest'
- end
- @resolver = Pod::Resolver.new(@podfile, stub('sandbox'))
- end
+module Pod
+ describe Resolver do
+ before do
+ config.repos_dir = fixture('spec-repos')
- it "holds the context state, such as cached specification sets" do
- @resolver.resolve
- @resolver.cached_sets.values.sort_by(&:name).should == [
- Pod::Spec::Set.new(config.repos_dir + 'master/A2DynamicDelegate'),
- Pod::Spec::Set.new(config.repos_dir + 'master/BlocksKit'),
- Pod::Spec::Set.new(config.repos_dir + 'master/libffi'),
- ].sort_by(&:name)
- end
+ @podfile = Podfile.new do
+ platform :ios
+ pod 'BlocksKit'
+ # pod 'ASIWebPageRequest'
+ end
+ @resolver = Resolver.new(@podfile, stub('sandbox'))
+ end
- it "returns all specs needed for the dependency" do
- specs = @resolver.resolve.values.flatten
- specs.map(&:class).uniq.should == [Pod::Specification]
- specs.map(&:name).sort.should == %w{ A2DynamicDelegate BlocksKit libffi }
- end
+ it "holds the context state, such as cached specification sets" do
+ @resolver.resolve
+ @resolver.cached_sets.values.sort_by(&:name).should == [
+ Spec::Set.new(config.repos_dir + 'master/A2DynamicDelegate'),
+ Spec::Set.new(config.repos_dir + 'master/BlocksKit'),
+ Spec::Set.new(config.repos_dir + 'master/libffi'),
+ ].sort_by(&:name)
+ end
- it "does not raise if all dependencies match the platform of the root spec (Podfile)" do
- @podfile.platform :ios
- lambda { @resolver.resolve }.should.not.raise
- @podfile.platform :osx
- lambda { @resolver.resolve }.should.not.raise
- end
+ it "returns all specs needed for the dependency" do
+ specs = @resolver.resolve.values.flatten
+ specs.map(&:class).uniq.should == [Specification]
+ specs.map(&:name).sort.should == %w{ A2DynamicDelegate BlocksKit libffi }
+ end
- it "raises once any of the dependencies does not match the platform of its podfile target" do
- set = Pod::Spec::Set.new(config.repos_dir + 'master/BlocksKit')
- @resolver.cached_sets['BlocksKit'] = set
+ it "does not raise if all dependencies match the platform of the root spec (Podfile)" do
+ @podfile.platform :ios
+ lambda { @resolver.resolve }.should.not.raise
+ @podfile.platform :osx
+ lambda { @resolver.resolve }.should.not.raise
+ end
- def set.stub_platform=(platform); @stubbed_platform = platform; end
- def set.specification; spec = super; spec.platform = @stubbed_platform; spec; end
+ it "raises once any of the dependencies does not match the platform of its podfile target" do
+ set = Spec::Set.new(config.repos_dir + 'master/BlocksKit')
+ @resolver.cached_sets['BlocksKit'] = set
- @podfile.platform :ios
- set.stub_platform = :ios
- lambda { @resolver.resolve }.should.not.raise
- set.stub_platform = :osx
- lambda { @resolver.resolve }.should.raise Pod::Informative
+ def set.stub_platform=(platform); @stubbed_platform = platform; end
+ def set.specification; spec = super; spec.platform = @stubbed_platform; spec; end
- @podfile.platform :osx
- set.stub_platform = :osx
- lambda { @resolver.resolve }.should.not.raise
- set.stub_platform = :ios
- lambda { @resolver.resolve }.should.raise Pod::Informative
- end
+ @podfile.platform :ios
+ set.stub_platform = :ios
+ lambda { @resolver.resolve }.should.not.raise
+ set.stub_platform = :osx
+ lambda { @resolver.resolve }.should.raise Informative
- it "raises once any of the dependencies does not have a deployment_target compatible with its podfile target" do
- set = Pod::Spec::Set.new(config.repos_dir + 'master/BlocksKit')
- @resolver.cached_sets['BlocksKit'] = set
- @podfile.platform :ios, "4.0"
+ @podfile.platform :osx
+ set.stub_platform = :osx
+ lambda { @resolver.resolve }.should.not.raise
+ set.stub_platform = :ios
+ lambda { @resolver.resolve }.should.raise Informative
+ end
- Pod::Specification.any_instance.stubs(:available_platforms).returns([ Pod::Platform.new(:ios, '4.0'), Pod::Platform.new(:osx, '10.7') ])
- lambda { @resolver.resolve }.should.not.raise
+ it "raises once any of the dependencies does not have a deployment_target compatible with its podfile target" do
+ set = Spec::Set.new(config.repos_dir + 'master/BlocksKit')
+ @resolver.cached_sets['BlocksKit'] = set
+ @podfile.platform :ios, "4.0"
- Pod::Specification.any_instance.stubs(:available_platforms).returns([ Pod::Platform.new(:ios, '5.0'), Pod::Platform.new(:osx, '10.7') ])
- lambda { @resolver.resolve }.should.raise Pod::Informative
- end
+ Specification.any_instance.stubs(:available_platforms).returns([ Platform.new(:ios, '4.0'), Platform.new(:osx, '10.7') ])
+ lambda { @resolver.resolve }.should.not.raise
- it "resolves subspecs" do
- @podfile = Pod::Podfile.new do
- platform :ios
- pod 'RestKit/Network'
- pod 'RestKit/ObjectMapping/XML'
+ Specification.any_instance.stubs(:available_platforms).returns([ Platform.new(:ios, '5.0'), Platform.new(:osx, '10.7') ])
+ lambda { @resolver.resolve }.should.raise Informative
end
- resolver = Pod::Resolver.new(@podfile, stub('sandbox'))
- resolver.resolve.values.flatten.map(&:name).sort.should == %w{
- FileMD5Hash
- ISO8601DateFormatter
- LibComponentLogging-Core
- LibComponentLogging-NSLog
- NSData+Base64
- RestKit/Network
- RestKit/ObjectMapping/XML
- SOCKit
- XMLReader
- cocoa-oauth
- }
- end
- it "includes all the subspecs of a specification node" do
- @podfile = Pod::Podfile.new do
- platform :ios
- pod 'RestKit'
+ it "resolves subspecs" do
+ @podfile = Podfile.new do
+ platform :ios
+ pod 'RestKit/Network'
+ pod 'RestKit/ObjectMapping/XML'
+ end
+ resolver = Resolver.new(@podfile, stub('sandbox'))
+ resolver.resolve.values.flatten.map(&:name).sort.should == %w{
+ FileMD5Hash
+ ISO8601DateFormatter
+ LibComponentLogging-Core
+ LibComponentLogging-NSLog
+ NSData+Base64
+ RestKit/Network
+ RestKit/ObjectMapping/XML
+ SOCKit
+ XMLReader
+ cocoa-oauth
+ }
end
- resolver = Pod::Resolver.new(@podfile, stub('sandbox'))
- resolver.resolve.values.flatten.map(&:name).sort.should == %w{
- FileMD5Hash
- ISO8601DateFormatter
- JSONKit
- LibComponentLogging-Core
- LibComponentLogging-NSLog
- NSData+Base64
- RestKit
- RestKit/JSON
- RestKit/Network
- RestKit/ObjectMapping/CoreData
- RestKit/ObjectMapping/JSON
- RestKit/UI
- SOCKit
- cocoa-oauth
- }
- end
-
- it "if defined it includes only the main subspec of of a specification node" do
- @podfile = Pod::Podfile.new do
- platform :ios
- pod do |s|
- s.name = 'RestKit'
- s.version = '0.10.0'
-
- s.preferred_dependency = 'JSON'
- s.subspec 'JSON' do |js|
- js.dependency 'RestKit/Network'
- js.dependency 'RestKit/UI'
- js.dependency 'RestKit/ObjectMapping/JSON'
- js.dependency 'RestKit/ObjectMapping/CoreData'
- end
+ it "includes all the subspecs of a specification node" do
+ @podfile = Podfile.new do
+ platform :ios
+ pod 'RestKit'
+ end
+ resolver = Resolver.new(@podfile, stub('sandbox'))
+ resolver.resolve.values.flatten.map(&:name).sort.should == %w{
+ FileMD5Hash
+ ISO8601DateFormatter
+ JSONKit
+ LibComponentLogging-Core
+ LibComponentLogging-NSLog
+ NSData+Base64
+ RestKit
+ RestKit/JSON
+ RestKit/Network
+ RestKit/ObjectMapping/CoreData
+ RestKit/ObjectMapping/JSON
+ RestKit/UI
+ SOCKit
+ cocoa-oauth
+ }
+ end
- s.subspec 'Network' do |ns|
- ns.dependency 'LibComponentLogging-NSLog', '>= 1.0.4'
- end
- s.subspec 'UI'
- s.subspec 'ObjectMapping' do |os|
- os.subspec 'JSON'
- os.subspec 'XML'
- os.subspec 'CoreData'
+ it "it includes only the main subspec of a specification node" do
+ @podfile = Podfile.new do
+ platform :ios
+ pod do |s|
+ s.name = 'RestKit'
+ s.version = '0.10.0'
+
+ s.preferred_dependency = 'JSON'
+
+ s.subspec 'JSON' do |js|
+ js.dependency 'RestKit/Network'
+ js.dependency 'RestKit/UI'
+ js.dependency 'RestKit/ObjectMapping/JSON'
+ js.dependency 'RestKit/ObjectMapping/CoreData'
+ end
+
+ s.subspec 'Network' do |ns|
+ ns.dependency 'LibComponentLogging-NSLog', '>= 1.0.4'
+ end
+ s.subspec 'UI'
+ s.subspec 'ObjectMapping' do |os|
+ os.subspec 'JSON'
+ os.subspec 'XML'
+ os.subspec 'CoreData'
+ end
end
end
+ resolver = Resolver.new(@podfile, stub('sandbox'))
+ specs = resolver.resolve.values.flatten.map(&:name).sort
+ specs.should.not.include 'RestKit/ObjectMapping/XML'
+ specs.should == %w{
+ LibComponentLogging-Core
+ LibComponentLogging-NSLog
+ RestKit
+ RestKit/JSON
+ RestKit/Network
+ RestKit/ObjectMapping/CoreData
+ RestKit/ObjectMapping/JSON
+ RestKit/UI
+ }
end
- resolver = Pod::Resolver.new(@podfile, stub('sandbox'))
- resolver.resolve.values.flatten.map(&:name).sort.should == %w{
- LibComponentLogging-Core
- LibComponentLogging-NSLog
- RestKit
- RestKit/JSON
- RestKit/Network
- RestKit/ObjectMapping/CoreData
- RestKit/ObjectMapping/JSON
- RestKit/UI
- }
it "resolves subspecs with external constraints" do
- @podfile = Pod::Podfile.new do
+ @podfile = Podfile.new do
platform :ios
pod 'MainSpec/FirstSubSpec', :git => 'GIT-URL'
end
- spec = Pod::Spec.new do |s|
+ spec = Spec.new do |s|
s.name = 'MainSpec'
s.version = '1.2.3'
s.platform = :ios
@@ -171,9 +175,20 @@ def set.specification; spec = super; spec.platform = @stubbed_platform; spec; en
end
end
@podfile.dependencies.first.external_source.stubs(:specification_from_sandbox).returns(spec)
- resolver = Pod::Resolver.new(@podfile, stub('sandbox'))
+ resolver = Resolver.new(@podfile, stub('sandbox'))
resolver.resolve.values.flatten.map(&:name).sort.should == %w{ MainSpec/FirstSubSpec MainSpec/FirstSubSpec/SecondSubSpec }
end
+
+ it "marks a specification's version to be a `bleeding edge' version" do
+ podfile = Podfile.new do
+ platform :ios
+ pod 'FileMD5Hash'
+ pod 'JSONKit', :head
+ end
+ resolver = Resolver.new(podfile, stub('sandbox'))
+ filemd5hash, jsonkit = resolver.resolve.values.first.sort_by(&:name)
+ filemd5hash.version.should.not.be.head
+ jsonkit.version.should.be.head
+ end
end
end
-

0 comments on commit f88e26c

Please sign in to comment.
Something went wrong with that request. Please try again.