Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
C
cocoapods
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gengmeiios
cocoapods
Commits
f88e26c1
Commit
f88e26c1
authored
Jul 13, 2012
by
Eloy Duran
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[HEAD] Move logic from Specification to Installer/Downloader.
Closes #392. Incidentally touched ALL THE FILES.
parent
a24b4ba3
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
598 additions
and
550 deletions
+598
-550
dependency.rb
lib/cocoapods/dependency.rb
+18
-12
git.rb
lib/cocoapods/downloader/git.rb
+2
-2
installer.rb
lib/cocoapods/installer.rb
+17
-5
resolver.rb
lib/cocoapods/resolver.rb
+2
-1
specification.rb
lib/cocoapods/specification.rb
+8
-35
version.rb
lib/cocoapods/version.rb
+2
-0
downloader_spec.rb
spec/functional/downloader_spec.rb
+209
-207
dependency_spec.rb
spec/unit/dependency_spec.rb
+81
-59
downloader_spec.rb
spec/unit/downloader_spec.rb
+45
-47
installer_spec.rb
spec/unit/installer_spec.rb
+65
-48
resolver_spec.rb
spec/unit/resolver_spec.rb
+149
-134
No files found.
lib/cocoapods/dependency.rb
View file @
f88e26c1
...
...
@@ -6,8 +6,8 @@ require 'open-uri'
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 @@ module Pod
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 @@ module Pod
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
...
...
lib/cocoapods/downloader/git.rb
View file @
f88e26c1
...
...
@@ -23,7 +23,7 @@ module Pod
else
download_head
end
removed_cached_repos_if_needed
prune_cache
end
def
create_cache
...
...
@@ -33,7 +33,7 @@ module Pod
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
)
...
...
lib/cocoapods/installer.rb
View file @
f88e26c1
...
...
@@ -48,18 +48,17 @@ module Pod
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 @@ module Pod
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
)
...
...
lib/cocoapods/resolver.rb
View file @
f88e26c1
...
...
@@ -64,8 +64,9 @@ module Pod
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
...
...
lib/cocoapods/specification.rb
View file @
f88e26c1
...
...
@@ -180,14 +180,6 @@ module Pod
@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 @@ module Pod
### 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 @@ module Pod
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 @@ module Pod
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 @@ module Pod
end
def
to_s
result
=
"
#{
name
}
(
#{
version
}
)"
result
<<
" [BLEEDING]"
if
bleeding?
result
"
#{
name
}
(
#{
version
}
)"
end
def
inspect
...
...
lib/cocoapods/version.rb
View file @
f88e26c1
...
...
@@ -4,6 +4,8 @@ require 'rubygems/version'
module
Pod
class
Version
<
Gem
::
Version
attr_accessor
:head
alias_method
:head?
,
:head
end
end
spec/functional/downloader_spec.rb
View file @
f88e26c1
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
::
Informativ
e
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
.
rais
e
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
spec/unit/dependency_spec.rb
View file @
f88e26c1
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
spec/unit/downloader_spec.rb
View file @
f88e26c1
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
spec/unit/installer_spec.rb
View file @
f88e26c1
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 defini
tions"
do
podfile
=
Pod
::
Podfile
.
new
do
p
latform
:ios
target
:not_empty
do
pod
'JSONKit'
it
"adds the user's build configura
tions"
do
path
=
fixture
(
'SampleProject/SampleProject.xcodeproj'
)
p
odfile
=
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
spec/unit/resolver_spec.rb
View file @
f88e26c1
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
::
Pod
file
.
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 @@ describe "Pod::Resolver" do
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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment