Commit 21af2670 authored by Fabio Pelosin's avatar Fabio Pelosin

[Core Extraction] Adapted Target Installer (with clean up).

parent 39f80935
...@@ -26,7 +26,7 @@ EOS ...@@ -26,7 +26,7 @@ EOS
attr_reader :resources attr_reader :resources
# A list of files relative to the project pods root. # A list of files relative to the project pods root.
def initialize(resources) def initialize(resources = [])
@resources = resources @resources = resources
end end
......
This diff is collapsed.
...@@ -44,7 +44,7 @@ config = Pod::Config.instance ...@@ -44,7 +44,7 @@ config = Pod::Config.instance
config.silent = true config.silent = true
config.repos_dir = SpecHelper.tmp_repos_path config.repos_dir = SpecHelper.tmp_repos_path
config.project_root = SpecHelper.temporary_directory config.project_root = SpecHelper.temporary_directory
Pod::Specification::Statistics.instance.cache_file = nil Pod::Specification::Set::Statistics.instance.cache_file = nil
require 'tmpdir' require 'tmpdir'
...@@ -77,3 +77,4 @@ VCR.configure do |c| ...@@ -77,3 +77,4 @@ VCR.configure do |c|
c.allow_http_connections_when_no_cassette = true c.allow_http_connections_when_no_cassette = true
end end
require "active_support/core_ext/string/strip"
require File.expand_path('../../../spec_helper', __FILE__) require File.expand_path('../../../spec_helper', __FILE__)
TMP_POD_ROOT = ROOT + "tmp" + "podroot" unless defined? TMP_POD_ROOT describe TargetInstaller = Pod::Installer::TargetInstaller do
describe Pod::Installer::TargetInstaller do describe "In general" do
before do
@podfile = Pod::Podfile.new do
platform :ios
end
@target_definition = @podfile.target_definitions[:default]
@project = Pod::Project.new(config.sandbox)
@specification = fixture_spec('banana-lib/BananaLib.podspec')
@pods = [Pod::LocalPod.new(@specification, config.sandbox, Pod::Platform.ios)]
@installer = TargetInstaller.new(@project, @target_definition, @pods,)
end
it "returns the project" do
@installer.project.should == @project
end
it "returns the target_definition" do
@installer.target_definition.should == @target_definition
end
it "returns the pods of the target definition" do
@installer.pods.should == @pods
end
end
describe "Installation" do
extend SpecHelper::TemporaryDirectory extend SpecHelper::TemporaryDirectory
before do before do
...@@ -11,21 +36,20 @@ describe Pod::Installer::TargetInstaller do ...@@ -11,21 +36,20 @@ describe Pod::Installer::TargetInstaller do
xcodeproj 'dummy' xcodeproj 'dummy'
end end
@target_definition = @podfile.target_definitions[:default] @target_definition = @podfile.target_definitions[:default]
@project = Pod::Project.new(config.sandbox)
specification = fixture_spec('banana-lib/BananaLib.podspec')
@pod = Pod::LocalPod.new(specification, config.sandbox, @target_definition.platform)
@installer = TargetInstaller.new(@project, @target_definition, [@pod])
@project = Pod::Project.new specification.prefix_header_contents = '#import "BlocksKit.h"'
@project.new_group('Targets Support Files') @pod.stubs(:root).returns(Pathname.new(fixture('banana-lib')))
@installer = Pod::Installer::TargetInstaller.new(@podfile, @project, @target_definition)
@sandbox = Pod::Sandbox.new(TMP_POD_ROOT)
FileUtils.cp_r(fixture('banana-lib'), TMP_POD_ROOT + 'BananaLib')
@specification = fixture_spec('banana-lib/BananaLib.podspec')
@pods = [Pod::LocalPod.new(@specification, @sandbox, Pod::Platform.ios)]
end end
def do_install! def do_install!
@pods.each { |pod| pod.add_file_references_to_project(@project) } # Prevent raise for missing dummy project.
@installer.install!(@pods, @sandbox) Pathname.any_instance.stubs(:exist?).returns(true)
@pod.add_file_references_to_project(@project)
@installer.install
end end
it 'adds a new static library target to the project' do it 'adds a new static library target to the project' do
...@@ -34,38 +58,43 @@ describe Pod::Installer::TargetInstaller do ...@@ -34,38 +58,43 @@ describe Pod::Installer::TargetInstaller do
@project.targets.first.name.should == @target_definition.label @project.targets.first.name.should == @target_definition.label
end end
it "adds the user's build configurations to the target" do it 'adds the source files of each pod to the target of the Pod library' do
@project.user_build_configurations = { 'Debug' => :debug, 'Release' => :release, 'AppStore' => :release, 'Test' => :debug }
do_install! do_install!
@project.targets.first.build_configurations.map(&:name).sort.should == %w{ AppStore Debug Release Test } names = @installer.target.source_build_phase.files.map { |bf| bf.file_ref.name }
names.should == [ "Banana.m" ]
end end
it 'adds each pod to the static library target' do it "adds file references for the support files of the target" do
@pods[0].expects(:add_build_files_to_target)
do_install! do_install!
group = @project.support_files_group['Pods']
group.children.map(&:display_name).sort.should == [
"Pods-prefix.pch", "Pods-resources.sh", "Pods.xcconfig"
]
end end
# TODO: move to project #--------------------------------------#
# it 'tells each pod to link its headers' do
# @pods[0].expects(:link_headers) it "adds the user's build configurations to the target" do
# do_install! @project.user_build_configurations = { 'Debug' => :debug, 'Release' => :release, 'AppStore' => :release, 'Test' => :debug }
# end do_install!
@project.targets.first.build_configurations.map(&:name).sort.should == %w{ AppStore Debug Release Test }
end
it 'adds the sandbox header search paths to the xcconfig, with quotes' do it 'adds the sandbox header search paths to the xcconfig, with quotes' do
do_install! do_install!
@installer.xcconfig.to_hash['PODS_BUILD_HEADERS_SEARCH_PATHS'].should.include("\"#{@sandbox.build_headers.search_paths.join('" "')}\"") @installer.library.xcconfig.to_hash['PODS_BUILD_HEADERS_SEARCH_PATHS'].should.include("\"#{config.sandbox.build_headers.search_paths.join('" "')}\"")
end end
it 'does not add the -fobjc-arc to OTHER_LDFLAGS by default as Xcode 4.3.2 does not support it' do it 'does not add the -fobjc-arc to OTHER_LDFLAGS by default as Xcode 4.3.2 does not support it' do
do_install! do_install!
@installer.xcconfig.to_hash['OTHER_LDFLAGS'].split(" ").should.not.include("-fobjc-arc") @installer.library.xcconfig.to_hash['OTHER_LDFLAGS'].split(" ").should.not.include("-fobjc-arc")
end end
it 'adds the -fobjc-arc to OTHER_LDFLAGS if any pods require arc (to support non-ARC projects on iOS 4.0)' do it 'adds the -fobjc-arc to OTHER_LDFLAGS if any pods require arc (to support non-ARC projects on iOS 4.0)' do
@podfile.stubs(:set_arc_compatibility_flag? => true) Pod::Podfile.any_instance.stubs(:set_arc_compatibility_flag? => true)
@specification.stubs(:requires_arc).returns(true) @pod.top_specification.stubs(:requires_arc).returns(true)
do_install! do_install!
@installer.xcconfig.to_hash['OTHER_LDFLAGS'].split(" ").should.include("-fobjc-arc") @installer.library.xcconfig.to_hash['OTHER_LDFLAGS'].split(" ").should.include("-fobjc-arc")
end end
it "does not enable the GCC_WARN_INHIBIT_ALL_WARNINGS flag by default" do it "does not enable the GCC_WARN_INHIBIT_ALL_WARNINGS flag by default" do
...@@ -83,30 +112,43 @@ describe Pod::Installer::TargetInstaller do ...@@ -83,30 +112,43 @@ describe Pod::Installer::TargetInstaller do
end end
end end
it "creates a prefix header, including the contents of the specification's prefix header file" do it "creates and xcconfig file" do
do_install! do_install!
prefix_header = @sandbox.root + 'Pods.pch' xcconfig = config.sandbox.root + 'Pods.xcconfig'
@installer.save_prefix_header_as(prefix_header, @pods) xcconfig.read.should == <<-EOS.strip_heredoc.gsub(/\n$/, '')
prefix_header.read.should == <<-EOS ALWAYS_SEARCH_USER_PATHS = YES
#ifdef __OBJC__ OTHER_LDFLAGS = -ObjC -framework SystemConfiguration
#import <UIKit/UIKit.h> HEADER_SEARCH_PATHS = ${PODS_HEADERS_SEARCH_PATHS}
#endif PODS_ROOT = ${SRCROOT}/Pods
PODS_BUILD_HEADERS_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders"
#import <BananaTree/BananaTree.h> PODS_PUBLIC_HEADERS_SEARCH_PATHS = "${PODS_ROOT}/Headers"
EOS PODS_HEADERS_SEARCH_PATHS = ${PODS_PUBLIC_HEADERS_SEARCH_PATHS}
EOS
end end
it "creates a prefix header, including the contents of the specification's prefix header" do it "creates a prefix header, including the contents of the specification's prefix header" do
@pod.top_specification.prefix_header_contents = '#import "BlocksKit.h"'
do_install!
prefix_header = config.sandbox.root + 'Pods-prefix.pch'
prefix_header.read.should == <<-EOS.strip_heredoc
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#endif
#import "BlocksKit.h"
EOS
end
it "creates a bridge support file" do
Pod::Podfile.any_instance.stubs(:generate_bridge_support? => true)
Pod::Generator::BridgeSupport.any_instance.expects(:save_as).once
do_install! do_install!
prefix_header = @sandbox.root + 'Pods.pch' end
@specification.prefix_header_contents = '#import "BlocksKit.h"'
@installer.save_prefix_header_as(prefix_header, @pods) it "creates a create copy resources script" do
prefix_header.read.should == <<-EOS do_install!
#ifdef __OBJC__ script = config.sandbox.root + 'Pods-resources.sh'
#import <UIKit/UIKit.h> script.read.should.include?('logo-sidebar.png')
#endif end
#import "BlocksKit.h"
EOS
end end
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