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
4036b663
Commit
4036b663
authored
Jun 21, 2012
by
Fabio Pelosin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[LocalPod] Specs and fix all_specs_public_header_files.
Introduced Chameleon fixture.
parent
337ef587
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
204 additions
and
167 deletions
+204
-167
.gitignore
.gitignore
+1
-0
Rakefile
Rakefile
+1
-1
local_pod.rb
lib/cocoapods/local_pod.rb
+9
-3
chameleon.tar.gz
spec/fixtures/chameleon.tar.gz
+0
-0
local_pod_spec.rb
spec/unit/local_pod_spec.rb
+193
-163
No files found.
.gitignore
View file @
4036b663
...
@@ -13,6 +13,7 @@ examples/Pods
...
@@ -13,6 +13,7 @@ examples/Pods
examples/**/Pods
examples/**/Pods
examples/RelativePathProject/RelativePathProject/RelativePathProject.xcodeproj
examples/RelativePathProject/RelativePathProject/RelativePathProject.xcodeproj
spec/fixtures/banana-lib
spec/fixtures/banana-lib
spec/fixtures/chameleon
spec/fixtures/integration/Headers/
spec/fixtures/integration/Headers/
/concatenated.*
/concatenated.*
spec/fixtures/mercurial-repo/.hg/*cache
spec/fixtures/mercurial-repo/.hg/*cache
...
...
Rakefile
View file @
4036b663
...
@@ -145,7 +145,7 @@ namespace :gem do
...
@@ -145,7 +145,7 @@ namespace :gem do
# Update the last version in CocoaPods-version.yml
# Update the last version in CocoaPods-version.yml
specs_branch
=
'0.6'
specs_branch
=
'0.6'
Dir
.
chdir
(
'../Specs'
)
do
Dir
.
chdir
(
'../Specs'
)
do
puts
Dir
.
pwd
puts
Dir
.
pwd
sh
"git checkout
#{
specs_branch
}
"
sh
"git checkout
#{
specs_branch
}
"
sh
"git pull"
sh
"git pull"
...
...
lib/cocoapods/local_pod.rb
View file @
4036b663
...
@@ -304,7 +304,12 @@ module Pod
...
@@ -304,7 +304,12 @@ module Pod
raise
Informative
,
"The pod is cleaned and cannot compute the all the "
\
raise
Informative
,
"The pod is cleaned and cannot compute the all the "
\
"header files as they might be deleted."
"header files as they might be deleted."
end
end
header_files
all_specs
=
[
top_specification
]
+
top_specification
.
subspecs
options
=
{
:glob
=>
'*.{h}'
}
files
=
paths_by_spec
(
:source_files
,
options
,
all_specs
).
values
.
flatten!
headers
=
files
.
select
{
|
f
|
f
.
extname
==
'.h'
}
headers
end
end
# @!group Target integration
# @!group Target integration
...
@@ -396,11 +401,12 @@ module Pod
...
@@ -396,11 +401,12 @@ module Pod
# @param [Symbol] accessor The accessor to use to obtain the paths patterns.
# @param [Symbol] accessor The accessor to use to obtain the paths patterns.
# @param [Hash] options (see #expanded_paths)
# @param [Hash] options (see #expanded_paths)
#
#
def
paths_by_spec
(
accessor
,
options
=
{})
def
paths_by_spec
(
accessor
,
options
=
{},
specs
=
nil
)
specs
||=
specifications
paths_by_spec
=
{}
paths_by_spec
=
{}
processed_paths
=
[]
processed_paths
=
[]
specs
=
spec
ification
s
.
sort_by
{
|
s
|
s
.
name
.
length
}
specs
=
specs
.
sort_by
{
|
s
|
s
.
name
.
length
}
specs
.
each
do
|
spec
|
specs
.
each
do
|
spec
|
paths
=
expanded_paths
(
spec
.
send
(
accessor
),
options
)
paths
=
expanded_paths
(
spec
.
send
(
accessor
),
options
)
unless
paths
.
empty?
unless
paths
.
empty?
...
...
spec/fixtures/chameleon.tar.gz
0 → 100644
View file @
4036b663
File added
spec/unit/local_pod_spec.rb
View file @
4036b663
...
@@ -6,7 +6,8 @@ describe Pod::LocalPod do
...
@@ -6,7 +6,8 @@ describe Pod::LocalPod do
describe
"in general"
do
describe
"in general"
do
before
do
before
do
@sandbox
=
temporary_sandbox
@sandbox
=
temporary_sandbox
@pod
=
Pod
::
LocalPod
.
new
(
fixture_spec
(
'banana-lib/BananaLib.podspec'
),
@sandbox
,
Pod
::
Platform
.
new
(
:ios
))
@spec
=
fixture_spec
(
'banana-lib/BananaLib.podspec'
)
@pod
=
Pod
::
LocalPod
.
new
(
@spec
,
@sandbox
,
Pod
::
Platform
.
new
(
:ios
))
copy_fixture_to_pod
(
'banana-lib'
,
@pod
)
copy_fixture_to_pod
(
'banana-lib'
,
@pod
)
end
end
...
@@ -97,172 +98,201 @@ describe Pod::LocalPod do
...
@@ -97,172 +98,201 @@ describe Pod::LocalPod do
end
end
end
end
describe
"with installed source,"
do
describe
"with installed source and multiple subspecs"
do
#before do
#config.project_pods_root = fixture('integration')
#podspec = fixture('spec-repos/master/SSZipArchive/0.1.0/SSZipArchive.podspec')
#@spec = Pod::Specification.from_file(podspec)
#@destroot = fixture('integration/SSZipArchive')
#end
xit
"returns the list of files that the source_files pattern expand to"
do
def
assert_array_equals
(
expected
,
computed
)
files
=
@destroot
.
glob
(
'**/*.{h,c,m}'
)
delta1
=
computed
-
expected
files
=
files
.
map
{
|
file
|
file
.
relative_path_from
(
config
.
project_pods_root
)
}
delta1
.
should
==
[]
@spec
.
expanded_source_files
[
:ios
].
sort
.
should
==
files
.
sort
delta2
=
expected
-
computed
delta2
.
should
==
[]
end
end
xit
"returns the list of headers"
do
files
=
@destroot
.
glob
(
'**/*.h'
)
files
=
files
.
map
{
|
file
|
file
.
relative_path_from
(
config
.
project_pods_root
)
}
@spec
.
header_files
[
:ios
].
sort
.
should
==
files
.
sort
end
xit
"returns a hash of mappings from the pod's destroot to its header dirs, which by default is just the pod's header dir"
do
@spec
.
copy_header_mappings
[
:ios
].
size
.
should
==
1
@spec
.
copy_header_mappings
[
:ios
][
Pathname
.
new
(
'SSZipArchive'
)].
sort
.
should
==
%w{
SSZipArchive.h
minizip/crypt.h
minizip/ioapi.h
minizip/mztools.h
minizip/unzip.h
minizip/zip.h
}
.
map
{
|
f
|
Pathname
.
new
(
"SSZipArchive/
#{
f
}
"
)
}.
sort
end
xit
"allows for customization of header mappings by overriding copy_header_mapping"
do
def
@spec
.
copy_header_mapping
(
from
)
Pathname
.
new
(
'ns'
)
+
from
.
basename
end
@spec
.
copy_header_mappings
[
:ios
].
size
.
should
==
1
@spec
.
copy_header_mappings
[
:ios
][
Pathname
.
new
(
'SSZipArchive/ns'
)].
sort
.
should
==
%w{
SSZipArchive.h
minizip/crypt.h
minizip/ioapi.h
minizip/mztools.h
minizip/unzip.h
minizip/zip.h
}
.
map
{
|
f
|
Pathname
.
new
(
"SSZipArchive/
#{
f
}
"
)
}.
sort
end
xit
"returns a hash of mappings with a custom header dir prefix"
do
@spec
.
header_dir
=
'AnotherRoot'
@spec
.
copy_header_mappings
[
:ios
][
Pathname
.
new
(
'AnotherRoot'
)].
sort
.
should
==
%w{
SSZipArchive.h
minizip/crypt.h
minizip/ioapi.h
minizip/mztools.h
minizip/unzip.h
minizip/zip.h
}
.
map
{
|
f
|
Pathname
.
new
(
"SSZipArchive/
#{
f
}
"
)
}.
sort
end
xit
"returns the user header search paths"
do
def
@spec
.
copy_header_mapping
(
from
)
Pathname
.
new
(
'ns'
)
+
from
.
basename
end
@spec
.
header_search_paths
.
should
==
%w{
"$(PODS_ROOT)/Headers/SSZipArchive"
"$(PODS_ROOT)/Headers/SSZipArchive/ns"
}
end
xit
"returns the user header search paths with a custom header dir prefix"
do
@spec
.
header_dir
=
'AnotherRoot'
def
@spec
.
copy_header_mapping
(
from
)
Pathname
.
new
(
'ns'
)
+
from
.
basename
end
@spec
.
header_search_paths
.
should
==
%w{
"$(PODS_ROOT)/Headers/AnotherRoot"
"$(PODS_ROOT)/Headers/AnotherRoot/ns"
}
end
xit
"returns the list of files that the resources pattern expand to"
do
@spec
.
expanded_resources
.
should
==
{}
@spec
.
resource
=
'LICEN*'
@spec
.
expanded_resources
[
:ios
].
map
(
&
:to_s
).
should
==
%w{ SSZipArchive/LICENSE }
@spec
.
expanded_resources
[
:osx
].
map
(
&
:to_s
).
should
==
%w{ SSZipArchive/LICENSE }
@spec
.
resources
=
'LICEN*'
,
'Readme.*'
@spec
.
expanded_resources
[
:ios
].
map
(
&
:to_s
).
should
==
%w{ SSZipArchive/LICENSE SSZipArchive/Readme.markdown }
@spec
.
expanded_resources
[
:osx
].
map
(
&
:to_s
).
should
==
%w{ SSZipArchive/LICENSE SSZipArchive/Readme.markdown }
end
end
describe
"regarding multiple subspecs"
do
before
do
before
do
# specification with only some subspecs activated
@sandbox
=
temporary_sandbox
# to check that only the needed files are being activated
subspecs
=
fixture_spec
(
'chameleon/Chameleon.podspec'
).
subspecs
# A fixture is needed.
@pod
=
Pod
::
LocalPod
.
new
(
subspecs
[
0
],
@sandbox
,
Pod
::
Platform
.
new
(
:osx
))
#
@pod
.
add_specification
(
subspecs
[
1
])
# specification = Pod::Spec.new do |s|
copy_fixture_to_pod
(
'Chameleon'
,
@pod
)
# ...
end
# s.xcconfig = ...
# s.compiler_flags = ...
it
"identifies the top level specification"
do
# s.subspec 's1' do |s1|
@pod
.
top_specification
.
name
.
should
==
'Chameleon'
# s1.xcconfig = ...
end
# s1.compiler_flags = ...
# s1.ns.source_files = 's1.{h,m}'
it
"returns the subspecs"
do
# end
@pod
.
specifications
.
map
(
&
:name
).
should
==
%w[ Chameleon/UIKit Chameleon/StoreKit ]
#
end
# s.subspec 's2' do |s2|
# s2.ns.source_files = 's2.{h,m}'
it
"resolve the source files"
do
# end
computed
=
@pod
.
relative_source_files
.
map
(
&
:to_s
)
#
expected
=
%w[
# Add only s1 to the localPod
Chameleon/UIKit/Classes/UIKit.h
# s1 = specification.subspec_by_name(s1)
Chameleon/UIKit/Classes/UIView.h
# @pod = Pod::LocalPod.new(s1, @sandbox, Pod::Platform.new(:ios))
Chameleon/UIKit/Classes/UIWindow.h
# @pod.add_specification(specification)
Chameleon/UIKit/Classes/UIView.m
end
Chameleon/UIKit/Classes/UIWindow.m
Chameleon/StoreKit/Classes/SKPayment.h
xit
"returns the subspecs"
do
Chameleon/StoreKit/Classes/StoreKit.h
@pod
.
subspecs
.
map
{
|
s
|
name
}.
should
==
%w[ s1 ]
Chameleon/StoreKit/Classes/SKPayment.m ]
end
assert_array_equals
(
expected
,
computed
)
xit
"resolve the source files"
do
end
@pod
.
source_files
.
should
==
%w[ s1.h s1.m ]
end
it
"resolve the resources"
do
@pod
.
relative_resource_files
.
map
(
&
:to_s
).
should
==
[
xit
"resolve the resources"
do
"Chameleon/UIKit/Resources/<UITabBar> background.png"
,
end
"Chameleon/UIKit/Resources/<UITabBar> background@2x.png"
]
end
xit
"resolve the clean paths"
do
@pod
.
clean_paths
.
should
==
%w[ s2.h s2.m ]
it
"resolve the clean paths"
do
end
# fake_git serves to check that source control files are deleted
expected
=
%w[
xit
"resolves the used files"
do
/.fake_git
@pod
.
used_files
.
should
==
%w[ s1.h s1.m README.md ]
/.fake_git/branches
end
/.fake_git/HEAD
/.fake_git/index
xit
"resolved the header files"
do
/AddressBookUI
@pod
.
header_files
.
should
==
%w[ s1.h ]
/AddressBookUI/AddressBookUI_Prefix.pch
end
/AddressBookUI/Classes
/AddressBookUI/Classes/ABUnknownPersonViewController.h
xit
"resolves the header files of every subspec"
do
/AddressBookUI/Classes/ABUnknownPersonViewController.m
@pod
.
all_specs_public_header_files
.
should
==
%w[ s1.h s2.h ]
/AddressBookUI/Classes/AddressBookUI.h
end
/AssetsLibrary
/AssetsLibrary/AssetsLibrary_Prefix.pch
xit
"merges the xcconfigs"
do
/AssetsLibrary/Classes
end
/AssetsLibrary/Classes/ALAsset.h
/AssetsLibrary/Classes/ALAsset.m
xit
"adds each file to a target with the compiler flags of its specification"
do
/AssetsLibrary/Classes/ALAssetRepresentation.h
# @pod.add_to_target(target)
/AssetsLibrary/Classes/ALAssetRepresentation.m
end
/AssetsLibrary/Classes/ALAssetsFilter.h
/AssetsLibrary/Classes/ALAssetsFilter.m
xit
"can provide the source files of all the subspecs"
do
/AssetsLibrary/Classes/ALAssetsGroup.h
sources
=
@pod
.
all_specs_source_files
.
map
{
|
p
|
p
.
relative_path_from
(
@sandbox
.
root
).
to_s
}
/AssetsLibrary/Classes/ALAssetsGroup.m
sources
.
should
==
%w[ s1.h s1.m s2.h s2.m ]
/AssetsLibrary/Classes/ALAssetsLibrary.h
end
/AssetsLibrary/Classes/ALAssetsLibrary.m
/AssetsLibrary/Classes/AssetsLibrary.h
xit
'can clean the unused files'
do
/AVFoundation
# copy fixture to another folder
/AVFoundation/AVFoundation_Prefix.pch
@pod
.
clean
/AVFoundation/Classes
@pod
.
clean_paths
.
tap
do
|
paths
|
/AVFoundation/Classes/AVAudioPlayer.h
paths
.
each
do
|
path
|
/AVFoundation/Classes/AVAudioPlayer.m
path
.
should
.
not
.
exist
/AVFoundation/Classes/AVAudioSession.h
end
/AVFoundation/Classes/AVAudioSession.m
end
/AVFoundation/Classes/AVFoundation.h
/MediaPlayer
/MediaPlayer/Classes
/MediaPlayer/Classes/MediaPlayer.h
/MediaPlayer/Classes/MPMediaPlayback.h
/MediaPlayer/Classes/MPMoviePlayerController.h
/MediaPlayer/Classes/MPMoviePlayerController.m
/MediaPlayer/Classes/MPMusicPlayerController.h
/MediaPlayer/Classes/MPMusicPlayerController.m
/MediaPlayer/Classes/UIInternalMovieView.h
/MediaPlayer/Classes/UIInternalMovieView.m
/MediaPlayer/MediaPlayer_Prefix.pch
/MessageUI
/MessageUI/Classes
/MessageUI/Classes/MessageUI.h
/MessageUI/Classes/MFMailComposeViewController.h
/MessageUI/Classes/MFMailComposeViewController.m
/MessageUI/MessageUI_Prefix.pch
/StoreKit/StoreKit_Prefix.pch
/UIKit/UIKit_Prefix.pch
]
computed
=
@pod
.
clean_paths
.
each
{
|
p
|
p
.
gsub!
(
@pod
.
root
.
to_s
,
''
)
}
assert_array_equals
(
expected
,
computed
)
end
it
"resolves the used files"
do
expected
=
%w[
/UIKit/Classes/UIKit.h
/UIKit/Classes/UIView.h
/UIKit/Classes/UIWindow.h
/UIKit/Classes/UIView.m
/UIKit/Classes/UIWindow.m
/StoreKit/Classes/SKPayment.h
/StoreKit/Classes/StoreKit.h
/StoreKit/Classes/SKPayment.m
/Chameleon.podspec
/README.md
/LICENSE
]
+
[
"/UIKit/Resources/<UITabBar> background.png"
,
"/UIKit/Resources/<UITabBar> background@2x.png"
]
computed
=
@pod
.
used_files
.
map
{
|
p
|
p
.
gsub!
(
@pod
.
root
.
to_s
,
''
).
to_s
}
assert_array_equals
(
expected
,
computed
)
end
it
"resolved the header files"
do
expected
=
%w[
Chameleon/UIKit/Classes/UIKit.h
Chameleon/UIKit/Classes/UIView.h
Chameleon/UIKit/Classes/UIWindow.h
Chameleon/StoreKit/Classes/SKPayment.h
Chameleon/StoreKit/Classes/StoreKit.h ]
computed
=
@pod
.
relative_header_files
.
map
(
&
:to_s
)
assert_array_equals
(
expected
,
computed
)
end
it
"resolves the header files of **every** subspec"
do
computed
=
@pod
.
all_specs_public_header_files
.
map
{
|
p
|
p
.
relative_path_from
(
@pod
.
root
).
to_s
}
expected
=
%w[
UIKit/Classes/UIKit.h
UIKit/Classes/UIView.h
UIKit/Classes/UIWindow.h
StoreKit/Classes/SKPayment.h
StoreKit/Classes/StoreKit.h
MessageUI/Classes/MessageUI.h
MessageUI/Classes/MFMailComposeViewController.h
MediaPlayer/Classes/MediaPlayer.h
MediaPlayer/Classes/MPMediaPlayback.h
MediaPlayer/Classes/MPMoviePlayerController.h
MediaPlayer/Classes/MPMusicPlayerController.h
MediaPlayer/Classes/UIInternalMovieView.h
AVFoundation/Classes/AVAudioPlayer.h
AVFoundation/Classes/AVAudioSession.h
AVFoundation/Classes/AVFoundation.h
AssetsLibrary/Classes/ALAsset.h
AssetsLibrary/Classes/ALAssetRepresentation.h
AssetsLibrary/Classes/ALAssetsFilter.h
AssetsLibrary/Classes/ALAssetsGroup.h
AssetsLibrary/Classes/ALAssetsLibrary.h
AssetsLibrary/Classes/AssetsLibrary.h
]
assert_array_equals
(
expected
,
computed
)
end
it
"merges the xcconfigs without duplicates"
do
@pod
.
xcconfig
.
should
==
{
"OTHER_LDFLAGS"
=>
"-framework AppKit -framework Foundation -framework IOKit -framework QTKit -framework QuartzCore -framework SystemConfiguration -framework WebKit"
}
end
it
"returns a hash of mappings with a custom header dir prefix"
do
mappings
=
@pod
.
send
(
:header_mappings
)
mappings
=
mappings
.
map
do
|
folder
,
headers
|
"
#{
folder
}
>
#{
headers
.
map
{
|
p
|
p
.
relative_path_from
(
@pod
.
root
).
to_s
}
.join(' ')}"
end
mappings
.
sort
.
should
==
[
"Chameleon/StoreKit > StoreKit/Classes/SKPayment.h StoreKit/Classes/StoreKit.h"
,
"Chameleon/UIKit > UIKit/Classes/UIKit.h UIKit/Classes/UIView.h UIKit/Classes/UIWindow.h"
]
end
it
"respects the headers excluded from the search paths"
do
@pod
.
stubs
(
:headers_excluded_from_search_paths
).
returns
([
@pod
.
root
+
'UIKit/Classes/UIKit.h'
])
mappings
=
@pod
.
send
(
:header_mappings
)
mappings
=
mappings
.
map
do
|
folder
,
headers
|
"
#{
folder
}
>
#{
headers
.
map
{
|
p
|
p
.
relative_path_from
(
@pod
.
root
).
to_s
}
.join(' ')}"
end
mappings
.
sort
.
should
==
[
"Chameleon/StoreKit > StoreKit/Classes/SKPayment.h StoreKit/Classes/StoreKit.h"
,
"Chameleon/UIKit > UIKit/Classes/UIView.h UIKit/Classes/UIWindow.h"
]
end
it
"includes the sandbox of the pod's headers while linking"
do
@sandbox
.
expects
(
:add_header_search_path
).
with
(
Pathname
.
new
(
'Chameleon'
))
@pod
.
link_headers
end
end
end
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