Commit 4d85f946 authored by Fabio Pelosin's avatar Fabio Pelosin

[LocalPod] Completed fix for public headers handling. #449

parent 3c31a309
......@@ -229,21 +229,21 @@ module Pod
result
end
# @return [Hash{Specification => Array<Pathname>}] The paths of the public
# header files grouped by {Specification}.
# @return [Hash{Specification => Array<Pathname>}] The paths of the header
# files grouped by {Specification} that should be copied in the public
# folder.
#
# @TODO: decide a policy for subspecs
# If a spec does not match any public header it means that all the
# header files (i.e. the build ones) are intended to be public.
#
def public_header_files_by_spec
build_headers = header_files_by_spec
public_headers = paths_by_spec(:public_header_files, :glob => '*.h')
build_headers = header_files_by_spec
result = {}
# If no public header files are provided we use the build
# ones for the every spec/subspec.
public_headers.each do |spec, paths|
if !paths.empty?
result[spec] = paths
specifications.each do |spec|
if (public_h = public_headers[spec]) && !public_h.empty?
result[spec] = public_h
elsif (build_h = build_headers[spec]) && !build_h.empty?
result[spec] = build_h
end
......@@ -345,11 +345,12 @@ module Pod
#
def link_headers
@sandbox.build_headers.add_search_path(headers_sandbox)
@sandbox.public_headers.add_search_path(headers_sandbox)
header_mappings(header_files_by_spec).each do |namespaced_path, files|
@sandbox.build_headers.add_files(namespaced_path, files)
end
@sandbox.public_headers.add_search_path(headers_sandbox)
header_mappings(public_header_files_by_spec).each do |namespaced_path, files|
@sandbox.public_headers.add_files(namespaced_path, files)
end
......
......@@ -15,12 +15,12 @@ describe Pod::LocalPod do
@pod.root.should == @sandbox.root + 'BananaLib'
end
xit "creates it's own root directory if it doesn't exist" do
it "creates it's own root directory if it doesn't exist" do
@pod.create
File.directory?(@pod.root).should.be.true
end
xit "can execute a block within the context of it's root" do
it "can execute a block within the context of it's root" do
@pod.chdir { FileUtils.touch("foo") }
Pathname(@pod.root + "foo").should.exist
end
......@@ -68,28 +68,28 @@ describe Pod::LocalPod do
@pod.relative_resource_files.should == [Pathname.new("BananaLib/Resources/logo-sidebar.png")]
end
xit "can link it's headers into the sandbox" do
it "can link it's headers into the sandbox" do
@pod.link_headers
expected_header_path = @sandbox.build_headers.root + "BananaLib/Banana.h"
expected_header_path.should.be.symlink
File.read(expected_header_path).should == (@sandbox.root + @pod.header_files[0]).read
end
xit "can link it's public headers into the sandbox" do
it "can link it's public headers into the sandbox" do
@pod.link_headers
expected_header_path = @sandbox.public_headers.root + "BananaLib/Banana.h"
expected_header_path.should.be.symlink
File.read(expected_header_path).should == (@sandbox.root + @pod.header_files[0]).read
end
xit "can add it's source files to an Xcode project target" do
it "can add it's source files to an Xcode project target" do
@pod.source_file_descriptions.should == [
Xcodeproj::Project::PBXNativeTarget::SourceFileDescription.new(Pathname.new("BananaLib/Classes/Banana.h"), "", nil),
Xcodeproj::Project::PBXNativeTarget::SourceFileDescription.new(Pathname.new("BananaLib/Classes/Banana.m"), "", nil)
]
end
xit "can add it's source files to a target with any specially configured compiler flags" do
it "can add it's source files to a target with any specially configured compiler flags" do
@pod.top_specification.compiler_flags = '-d some_flag'
@pod.source_file_descriptions.should == [
Xcodeproj::Project::PBXNativeTarget::SourceFileDescription.new(Pathname.new("BananaLib/Classes/Banana.h"), '-d some_flag', nil),
......@@ -97,11 +97,11 @@ describe Pod::LocalPod do
]
end
xit "returns the platform" do
it "returns the platform" do
@pod.platform.should == :ios
end
xit "raises if the files are accessed before creating the pod dir" do
it "raises if the files are accessed before creating the pod dir" do
@pod.implode
lambda { @pod.source_files }.should.raise Pod::Informative
end
......@@ -124,15 +124,15 @@ describe Pod::LocalPod do
copy_fixture_to_pod('chameleon', @pod)
end
xit "identifies the top level specification" do
it "identifies the top level specification" do
@pod.top_specification.name.should == 'Chameleon'
end
xit "returns the subspecs" do
it "returns the subspecs" do
@pod.specifications.map(&:name).should == %w[ Chameleon/UIKit Chameleon/StoreKit ]
end
xit "resolve the source files" do
it "resolve the source files" do
computed = @pod.relative_source_files.map(&:to_s)
expected = %w[
Chameleon/UIKit/Classes/UIKit.h
......@@ -147,13 +147,13 @@ describe Pod::LocalPod do
assert_array_equals(expected, computed)
end
xit "resolve the resources" do
it "resolve the resources" do
@pod.relative_resource_files.map(&:to_s).sort.should == [
"Chameleon/UIKit/Resources/<UITabBar> background.png",
"Chameleon/UIKit/Resources/<UITabBar> background@2x.png" ]
end
xit "resolve the clean paths" do
it "resolve the clean paths" do
# fake_git serves to check that source control files are deleted
expected = %w[
/.fake_git
......@@ -212,7 +212,7 @@ describe Pod::LocalPod do
assert_array_equals(expected, computed)
end
xit "resolves the used files" do
it "resolves the used files" do
expected = %w[
/UIKit/Classes/UIKit.h
/UIKit/Classes/UIView.h
......@@ -233,7 +233,7 @@ describe Pod::LocalPod do
assert_array_equals(expected, computed)
end
xit "resolved the header files" do
it "resolved the header files" do
expected = %w[
Chameleon/UIKit/Classes/UIKit.h
Chameleon/UIKit/Classes/UIView.h
......@@ -244,7 +244,7 @@ describe Pod::LocalPod do
assert_array_equals(expected, computed)
end
xit "resolves the header files of **every** subspec" do
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
......@@ -272,12 +272,12 @@ describe Pod::LocalPod do
assert_array_equals(expected, computed)
end
xit "merges the xcconfigs without duplicates" do
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
xit "returns a hash of mappings with a custom header dir prefix" do
it "returns a hash of mappings with a custom header dir prefix" do
mappings = @pod.send(:header_mappings, @pod.header_files_by_spec)
mappings = mappings.map do |folder, headers|
"#{folder} > #{headers.sort.map{ |p| p.relative_path_from(@pod.root).to_s }.join(' ')}"
......@@ -287,7 +287,7 @@ describe Pod::LocalPod do
"Chameleon/UIKit > UIKit/Classes/UIKit.h UIKit/Classes/UIView.h UIKit/Classes/UIWindow.h" ]
end
xit "respects the headers excluded from the search paths" do
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, @pod.header_files_by_spec)
mappings = mappings.map do |folder, headers|
......@@ -299,7 +299,7 @@ describe Pod::LocalPod do
end
# @TODO: This is done by the sandbox and this test should be moved
xit "includes the sandbox of the pod's headers while linking" do
it "includes the sandbox of the pod's headers while linking" do
@sandbox.build_headers.expects(:add_search_path).with(Pathname.new('Chameleon'))
@sandbox.public_headers.expects(:add_search_path).with(Pathname.new('Chameleon'))
@pod.link_headers
......@@ -312,7 +312,7 @@ describe Pod::LocalPod do
@pod = Pod::LocalPod.new(spec, @sandbox, Pod::Platform.new(:osx))
build_headers = @pod.header_files_by_spec.values.flatten.map{ |p| p.basename.to_s }
public_headers = @pod.public_header_files_by_spec.values.flatten.map{ |p| p.basename.to_s }
build_headers.should == %w{ UIKit.h UIView.h UIWindow.h }
build_headers.sort.should == %w{ UIKit.h UIView.h UIWindow.h }
public_headers.should == %w{ UIKit.h }
end
end
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment