Move file accessor creation into analyzer and make them part of initializer

parent 7813c5f0
......@@ -160,7 +160,6 @@ module Pod
def download_dependencies
UI.section 'Downloading dependencies' do
create_file_accessors
install_pod_sources
run_podfile_pre_install_hooks
clean_pod_sources
......@@ -302,13 +301,6 @@ module Pod
end
end
# @return [void] In this step we create the file accessors for the pod
# targets.
#
def create_file_accessors
sandbox.create_file_accessors(pod_targets)
end
# Downloads, installs the documentation and cleans the sources of the Pods
# which need to be installed.
#
......
......@@ -591,7 +591,7 @@ module Pod
# @param [TargetDefinitions] target_definitions
# the aggregate target
#
# @param [Array<Specification>] pod_specs
# @param [Array<Specification>] specs
# the specifications of an equal root.
#
# @param [String] scope_suffix
......@@ -599,7 +599,7 @@ module Pod
#
# @return [PodTarget]
#
def generate_pod_target(target_definitions, pod_specs, scope_suffix: nil)
def generate_pod_target(target_definitions, specs, scope_suffix: nil)
if installation_options.integrate_targets?
target_inspections = result.target_inspections.select { |t, _| target_definitions.include?(t) }.values
user_build_configurations = target_inspections.map(&:build_configurations).reduce({}, &:merge)
......@@ -611,8 +611,56 @@ module Pod
archs = ['$(ARCHS_STANDARD_64_BIT)']
end
end
PodTarget.new(sandbox, target_definitions.any?(&:uses_frameworks?), user_build_configurations, archs, pod_specs,
target_definitions, scope_suffix)
host_requires_frameworks = target_definitions.any?(&:uses_frameworks?)
platform = determine_platform(specs, target_definitions, host_requires_frameworks)
file_accessors = create_file_accessors(specs, platform)
PodTarget.new(sandbox, host_requires_frameworks, user_build_configurations, archs, specs, target_definitions,
platform, file_accessors, scope_suffix)
end
# Creates the file accessors for a given pod.
#
# @param [Array<Specification>] specs
# the specs to map each file accessor to.
#
# @param [Platform] platform
# the platform to use when generating each file accessor.
#
# @return [Array<FileAccessor>]
#
def create_file_accessors(specs, platform)
name = specs.first.name
pod_root = sandbox.pod_dir(name)
path_list = Sandbox::PathList.new(pod_root)
specs.map do |spec|
Sandbox::FileAccessor.new(path_list, spec.consumer(platform))
end
end
# Calculates and returns the platform to use for the given list of specs and target definitions.
#
# @param [Array<Specification>] specs
# the specs to inspect and calculate the platform for.
#
# @param [Array<TargetDefinition>] target_definitions
# the target definitions these specs are part of.
#
# @param [Boolean] host_requires_frameworks
# whether the platform is calculated for a target that needs to be packaged as a framework.
#
# @return [Platform]
#
def determine_platform(specs, target_definitions, host_requires_frameworks)
platform_name = target_definitions.first.platform.name
default = Podfile::TargetDefinition::PLATFORM_DEFAULTS[platform_name]
deployment_target = specs.map do |spec|
Version.new(spec.deployment_target(platform_name) || default)
end.max
if platform_name == :ios && host_requires_frameworks
minimum = Version.new('8.0')
deployment_target = [deployment_target, minimum].max
end
Platform.new(platform_name, deployment_target)
end
# Generates dependencies that require the specific version of the Pods
......
......@@ -393,28 +393,5 @@ module Pod
end
#-------------------------------------------------------------------------#
public
# @!group Pods Helpers
# Creates the file accessors for the given Pod Targets.
#
# @param [Array<PodTarget>] pod_targets
# The Pod Targets to create file accessors for.
#
def create_file_accessors(pod_targets)
pod_targets.each do |pod_target|
pod_root = pod_dir(pod_target.root_spec.name)
path_list = PathList.new(pod_root)
file_accessors = pod_target.specs.map do |spec|
FileAccessor.new(path_list, spec.consumer(pod_target.platform))
end
pod_target.file_accessors ||= []
pod_target.file_accessors.concat(file_accessors)
end
end
#-------------------------------------------------------------------------#
end
end
......@@ -71,7 +71,6 @@ module Pod
@user_target_uuids = user_target_uuids
@pod_targets = pod_targets
@search_paths_aggregate_targets = []
@file_accessors = []
@xcconfigs = {}
end
......
module Pod
# Stores the information relative to the target used to compile a single Pod.
# A pod can have one or more activated spec/subspecs.
# A pod can have one or more activated spec, subspecs and test specs.
#
class PodTarget < Target
# @return [Array<Specification>] the spec and subspecs for the target.
# @return [Array<Specification>] the spec, subspecs and test specs of the target.
#
attr_reader :specs
# @return [Array<Specification>] All of the test specs within this target.
# Subset of #specs.
#
attr_reader :test_specs
# @return [Array<Specification>] All of the specs within this target that are not test specs.
# Subset of #specs.
#
attr_reader :non_test_specs
# @return [Array<TargetDefinition>] the target definitions of the Podfile
# that generated this target.
#
attr_reader :target_definitions
# @return [HeadersStore] the header directory for the target.
# @return [Array<Sandbox::FileAccessor>] the file accessors for the
# specifications of this target.
#
attr_reader :build_headers
attr_reader :file_accessors
# @return [Platform] the platform of this target.
#
attr_reader :platform
# @return [String] the suffix used for this target when deduplicated. May be `nil`.
#
......@@ -23,6 +38,10 @@ module Pod
#
attr_reader :scope_suffix
# @return [HeadersStore] the header directory for the target.
#
attr_reader :build_headers
# @return [Array<PodTarget>] the targets that this target has a dependency
# upon.
#
......@@ -38,27 +57,40 @@ module Pod
#
attr_accessor :test_native_targets
# @return [Array<PBXNativeTarget>] the resource bundle targets belonging
# to this target.
#
attr_reader :resource_bundle_targets
# @return [Array<PBXNativeTarget>] the resource bundle test targets belonging
# to this target.
#
attr_reader :test_resource_bundle_targets
# Initialize a new instance
#
# @param [Sandbox] sandbox @see Target#sandbox
# @param [Boolean] host_requires_frameworks @see Target#host_requires_frameworks
# @param [Hash{String=>Symbol}] user_build_configurations @see Target#user_build_configurations
# @param [Array<String>] archs @see Target#archs
# @param [Platform] platform @see #platform
# @param [Array<TargetDefinition>] target_definitions @see #target_definitions
# @param [Array<Sandbox::FileAccessor>] file_accessors @see #file_accessors
# @param [String] scope_suffix @see #scope_suffix
#
def initialize(sandbox, host_requires_frameworks, user_build_configurations, archs, specs, target_definitions, scope_suffix = nil)
def initialize(sandbox, host_requires_frameworks, user_build_configurations, archs, specs, target_definitions, platform, file_accessors = [], scope_suffix = nil)
super(sandbox, host_requires_frameworks, user_build_configurations, archs)
raise "Can't initialize a PodTarget without specs!" if specs.nil? || specs.empty?
raise "Can't initialize a PodTarget without TargetDefinition!" if target_definitions.nil? || target_definitions.empty?
raise "Can't initialize a PodTarget with only abstract TargetDefinitions" if target_definitions.all?(&:abstract?)
raise "Can't initialize a PodTarget with an empty string scope suffix!" if scope_suffix == ''
@specs = specs.dup.freeze
@test_specs, @non_test_specs = @specs.partition(&:test_specification?)
@target_definitions = target_definitions
@platform = platform
@file_accessors = file_accessors
@scope_suffix = scope_suffix
@test_specs, @non_test_specs = @specs.partition(&:test_specification?)
@build_headers = Sandbox::HeadersStore.new(sandbox, 'Private', :private)
@file_accessors = []
@resource_bundle_targets = []
@test_resource_bundle_targets = []
@test_native_targets = []
......@@ -67,8 +99,11 @@ module Pod
@build_config_cache = {}
end
# Scopes the current target based on the existing pod targets within the cache.
#
# @param [Hash{Array => PodTarget}] cache
# the cached PodTarget for a previously scoped (specs, target_definition)
# the cached target for a previously scoped target.
#
# @return [Array<PodTarget>] a scoped copy for each target definition.
#
def scoped(cache = {})
......@@ -77,10 +112,10 @@ module Pod
if cache[cache_key]
cache[cache_key]
else
target = PodTarget.new(sandbox, host_requires_frameworks, user_build_configurations, archs, specs, [target_definition], target_definition.label)
target.file_accessors = file_accessors
target = PodTarget.new(sandbox, host_requires_frameworks, user_build_configurations, archs, specs, [target_definition], platform, file_accessors, target_definition.label)
target.native_target = native_target
target.dependent_targets = dependent_targets.flat_map { |pt| pt.scoped(cache) }.select { |pt| pt.target_definitions == [target_definition] }
target.test_dependent_targets = test_dependent_targets.flat_map { |pt| pt.scoped(cache) }.select { |pt| pt.target_definitions == [target_definition] }
cache[cache_key] = target
end
end
......@@ -110,32 +145,6 @@ module Pod
root_spec.swift_version
end
# @note The deployment target for the pod target is the maximum of all
# the deployment targets for the current platform of the target
# (or the minimum required to support the current installation
# strategy, if higher).
#
# @return [Platform] the platform for this target.
#
def platform
@platform ||= begin
platform_name = target_definitions.first.platform.name
default = Podfile::TargetDefinition::PLATFORM_DEFAULTS[platform_name]
deployment_target = specs.map do |spec|
Version.new(spec.deployment_target(platform_name) || default)
end.max
if platform_name == :ios && requires_frameworks?
minimum = Version.new('8.0')
deployment_target = [deployment_target, minimum].max
end
Platform.new(platform_name, deployment_target)
end
end
# @visibility private
#
attr_writer :platform
# @return [Podfile] The podfile which declares the dependency.
#
def podfile
......@@ -150,19 +159,6 @@ module Pod
root_spec.module_name
end
# @return [Array<Sandbox::FileAccessor>] the file accessors for the
# specifications of this target.
#
attr_accessor :file_accessors
# @return [Array<PBXNativeTarget>] the resource bundle targets belonging
# to this target.
attr_reader :resource_bundle_targets
# @return [Array<PBXNativeTarget>] the resource bundle test targets belonging
# to this target.
attr_reader :test_resource_bundle_targets
# @return [Bool] Whether or not this target should be built.
#
# A target should not be built if it has no source files.
......@@ -234,14 +230,6 @@ module Pod
!test_specs.empty?
end
# @return [Array<Specification>] All of the test specs within this target.
#
attr_reader :test_specs
# @return [Array<Specification>] All of the specs within this target that are not test specs.
#
attr_reader :non_test_specs
# @return [Array<Symbol>] All of the test supported types within this target.
#
def supported_test_types
......
......@@ -119,27 +119,19 @@ end
def fixture_target_definition(name = 'Pods', platform = Pod::Platform.ios)
platform_hash = { platform.symbolic_name => platform.deployment_target }
parent = Pod::Podfile.new
Pod::Podfile::TargetDefinition.new(name, parent,
'abstract' => false,
'name' => name,
'platform' => platform_hash)
Pod::Podfile::TargetDefinition.new(name, parent, 'abstract' => false, 'name' => name, 'platform' => platform_hash)
end
def fixture_pod_target(spec_or_name, host_requires_frameworks = false, user_build_configurations = {}, target_definitions = [])
def fixture_pod_target(spec_or_name, host_requires_frameworks = false, user_build_configurations = {}, target_definitions = [], platform = Pod::Platform.ios)
spec = spec_or_name.is_a?(Pod::Specification) ? spec_or_name : fixture_spec(spec_or_name)
fixture_pod_target_with_specs([spec], host_requires_frameworks, user_build_configurations, target_definitions)
fixture_pod_target_with_specs([spec], host_requires_frameworks, user_build_configurations, target_definitions, platform)
end
def fixture_pod_target_with_specs(specs, host_requires_frameworks = false, user_build_configurations = {}, target_definitions = [])
def fixture_pod_target_with_specs(specs, host_requires_frameworks = false, user_build_configurations = {}, target_definitions = [], platform = Pod::Platform.ios)
target_definitions << fixture_target_definition if target_definitions.empty?
target_definitions.each { |td| specs.each { |spec| td.store_pod(spec.name) } }
Pod::PodTarget.new(config.sandbox, host_requires_frameworks, user_build_configurations, [], specs, target_definitions, nil).tap do |pod_target|
specs.each do |spec|
pod_target.file_accessors << fixture_file_accessor(spec, pod_target.platform)
consumer = spec.consumer(pod_target.platform)
pod_target.spec_consumers << consumer
end
end
file_accessors = specs.map { |spec| fixture_file_accessor(spec, platform) }
Pod::PodTarget.new(config.sandbox, host_requires_frameworks, user_build_configurations, [], specs, target_definitions, platform, file_accessors)
end
def fixture_aggregate_target(pod_targets = [], target_definition = nil)
......
......@@ -28,8 +28,7 @@ module Pod
user_build_configurations = { 'Debug' => :debug, 'Release' => :release, 'AppStore' => :release, 'Test' => :debug }
@pod_target = PodTarget.new(config.sandbox, false, user_build_configurations, [], [@spec], [@target_definition], nil)
@pod_target.file_accessors = [file_accessor]
@pod_target = PodTarget.new(config.sandbox, false, user_build_configurations, [], [@spec], [@target_definition], Platform.ios, [file_accessor])
@target = AggregateTarget.new(config.sandbox, false, user_build_configurations, [], @target_definition, config.sandbox.root.dirname, nil, nil, [@pod_target])
......
......@@ -196,18 +196,15 @@ module Pod
describe 'Private Helpers' do
describe '#file_accessors' do
it 'returns the file accessors' do
pod_target_1 = PodTarget.new(config.sandbox, false, {}, [], [stub('Spec', :test_specification? => false)], [fixture_target_definition], nil)
pod_target_1.file_accessors = [fixture_file_accessor('banana-lib/BananaLib.podspec')]
pod_target_2 = PodTarget.new(config.sandbox, false, {}, [], [stub('Spec', :test_specification? => false)], [fixture_target_definition], nil)
pod_target_2.file_accessors = [fixture_file_accessor('banana-lib/BananaLib.podspec')]
pod_target_1 = PodTarget.new(config.sandbox, false, {}, [], [stub('Spec', :test_specification? => false)], [fixture_target_definition], Platform.ios, [fixture_file_accessor('banana-lib/BananaLib.podspec')])
pod_target_2 = PodTarget.new(config.sandbox, false, {}, [], [stub('Spec', :test_specification? => false)], [fixture_target_definition], Platform.ios, [fixture_file_accessor('banana-lib/BananaLib.podspec')])
installer = FileReferencesInstaller.new(config.sandbox, [pod_target_1, pod_target_2], @project)
roots = installer.send(:file_accessors).map { |fa| fa.path_list.root }
roots.should == [fixture('banana-lib'), fixture('banana-lib')]
end
it 'handles pods without file accessors' do
pod_target_1 = PodTarget.new(config.sandbox, false, {}, [], [stub('Spec', :test_specification? => false)], [fixture_target_definition], nil)
pod_target_1.file_accessors = []
pod_target_1 = PodTarget.new(config.sandbox, false, {}, [], [stub('Spec', :test_specification? => false)], [fixture_target_definition], Platform.ios, [])
installer = FileReferencesInstaller.new(config.sandbox, [pod_target_1], @project)
installer.send(:file_accessors).should == []
end
......
......@@ -29,21 +29,13 @@ module Pod
@project.add_file_reference(resource, group)
end
@pod_target = PodTarget.new(config.sandbox, false, { 'Debug' => :debug, 'Release' => :release }, [], [@spec], [@target_definition], nil)
@pod_target.file_accessors = [file_accessor]
user_build_configurations = { 'Debug' => :debug, 'Release' => :release }
@pod_target = PodTarget.new(config.sandbox, false, user_build_configurations, [], [@spec], [@target_definition], Platform.new(:ios, '4.3'), [file_accessor])
@installer = PodTargetInstaller.new(config.sandbox, @pod_target)
@spec.prefix_header_contents = '#import "BlocksKit.h"'
end
it 'uses the maximum of all spec deployment targets' do
spec_1 = Pod::Specification.new { |s| s.ios.deployment_target = '10.10' }
spec_2 = Pod::Specification.new { |s| s.ios.deployment_target = '10.9' }
spec_3 = Pod::Specification.new
@pod_target.stubs(:specs).returns([spec_1, spec_2, spec_3])
@installer.send(:deployment_target).should == '10.10'
end
it 'sets the platform and the deployment target for iOS targets' do
@installer.install!
target = @project.targets.first
......@@ -53,6 +45,7 @@ module Pod
end
it 'sets the platform and the deployment target for iOS targets that require frameworks' do
@pod_target.stubs(:platform).returns(Platform.new(:ios, '8.0'))
@pod_target.stubs(:requires_frameworks?).returns(true)
@installer.install!
target = @project.targets.first
......@@ -62,7 +55,7 @@ module Pod
end
it 'sets the platform and the deployment target for OS X targets' do
@pod_target.target_definitions.first.stubs(:platform).returns(Platform.new(:osx, '10.8'))
@pod_target.stubs(:platform).returns(Platform.new(:osx, '10.6'))
@installer.install!
target = @project.targets.first
target.platform_name.should == :osx
......@@ -179,11 +172,12 @@ module Pod
@project.add_file_reference(resource, group)
end
@coconut_pod_target = PodTarget.new(config.sandbox, false, { 'Debug' => :debug, 'Release' => :release }, [], [@coconut_spec, *@coconut_spec.recursive_subspecs], [@target_definition], nil)
@coconut_pod_target.file_accessors = [file_accessor, test_file_accessor]
user_build_configurations = { 'Debug' => :debug, 'Release' => :release }
all_specs = [@coconut_spec, *@coconut_spec.recursive_subspecs]
file_accessors = [file_accessor, test_file_accessor]
@coconut_pod_target = PodTarget.new(config.sandbox, false, user_build_configurations, [], all_specs, [@target_definition], Platform.new(:ios, '6.0'), file_accessors)
@installer = PodTargetInstaller.new(config.sandbox, @coconut_pod_target)
@coconut_pod_target2 = PodTarget.new(config.sandbox, false, { 'Debug' => :debug, 'Release' => :release }, [], [@coconut_spec, *@coconut_spec.recursive_subspecs], [@target_definition2], nil)
@coconut_pod_target2.file_accessors = [file_accessor, test_file_accessor]
@coconut_pod_target2 = PodTarget.new(config.sandbox, false, user_build_configurations, [], all_specs, [@target_definition2], Platform.new(:osx, '10.8'), file_accessors)
@installer2 = PodTargetInstaller.new(config.sandbox, @coconut_pod_target2)
end
......@@ -375,8 +369,7 @@ module Pod
@project.add_file_reference(file, group) if file.fnmatch?('*.m') || file.fnmatch?('*.h')
end
@minions_pod_target = PodTarget.new(config.sandbox, false, { 'Debug' => :debug, 'Release' => :release }, [], [@minions_spec, *@minions_spec.recursive_subspecs], [@target_definition], nil)
@minions_pod_target.file_accessors = [file_accessor]
@minions_pod_target = PodTarget.new(config.sandbox, false, { 'Debug' => :debug, 'Release' => :release }, [], [@minions_spec, *@minions_spec.recursive_subspecs], [@target_definition], Platform.ios, [file_accessor])
@installer = PodTargetInstaller.new(config.sandbox, @minions_pod_target)
@first_json_file = file_accessor.source_files.find { |sf| sf.extname == '.json' }
......@@ -418,7 +411,7 @@ module Pod
File.symlink(file_path, @source_symlink_file)
path_list = Sandbox::PathList.new(fixture('banana-lib'))
file_accessor = Sandbox::FileAccessor.new(path_list, @spec.consumer(:ios))
@pod_target.file_accessors = [file_accessor]
@pod_target.stubs(:file_accessors).returns([file_accessor])
exception = lambda { @installer.install! }.should.raise Errno::ENOENT
exception.message.should.include 'No such file or directory'
exception.message.should.include file_path.to_s
......@@ -429,7 +422,7 @@ module Pod
File.symlink(file_path, @header_symlink_file)
path_list = Sandbox::PathList.new(fixture('banana-lib'))
file_accessor = Sandbox::FileAccessor.new(path_list, @spec.consumer(:ios))
@pod_target.file_accessors = [file_accessor]
@pod_target.stubs(:file_accessors).returns([file_accessor])
exception = lambda { @installer.install! }.should.raise Errno::ENOENT
exception.message.should.include 'No such file or directory'
exception.message.should.include file_path.to_s
......@@ -439,7 +432,7 @@ module Pod
File.symlink(@first_header_file, @header_symlink_file)
path_list = Sandbox::PathList.new(fixture('banana-lib'))
file_accessor = Sandbox::FileAccessor.new(path_list, @spec.consumer(:ios))
@pod_target.file_accessors = [file_accessor]
@pod_target.stubs(:file_accessors).returns([file_accessor])
group = @project.group_for_spec('BananaLib')
@project.add_file_reference(@header_symlink_file.to_s, group)
lambda { @installer.install! }.should.not.raise
......@@ -449,7 +442,7 @@ module Pod
File.symlink(@first_source_file, @source_symlink_file)
path_list = Sandbox::PathList.new(fixture('banana-lib'))
file_accessor = Sandbox::FileAccessor.new(path_list, @spec.consumer(:ios))
@pod_target.file_accessors = [file_accessor]
@pod_target.stubs(:file_accessors).returns([file_accessor])
group = @project.group_for_spec('BananaLib')
@project.add_file_reference(@source_symlink_file.to_s, group)
lambda { @installer.install! }.should.not.raise
......@@ -486,8 +479,7 @@ module Pod
@project.add_file_reference(resource, group)
end
@pod_target = PodTarget.new(config.sandbox, false, { 'Debug' => :debug, 'Release' => :release }, [], [@spec], [@target_definition], nil)
@pod_target.file_accessors = [file_accessor]
@pod_target = PodTarget.new(config.sandbox, false, { 'Debug' => :debug, 'Release' => :release }, [], [@spec], [@target_definition], Platform.ios, [file_accessor])
@installer = PodTargetInstaller.new(config.sandbox, @pod_target)
end
......
......@@ -11,7 +11,7 @@ module Pod
@project.save
@target_definition = fixture_target_definition
@coconut_spec = fixture_spec('coconut-lib/CoconutLib.podspec')
@coconut_pod_target = PodTarget.new(config.sandbox, false, {}, [], [@coconut_spec, *@coconut_spec.recursive_subspecs], [@target_definition], nil)
@coconut_pod_target = PodTarget.new(config.sandbox, false, {}, [], [@coconut_spec, *@coconut_spec.recursive_subspecs], [@target_definition], Platform.ios)
@native_target = stub('NativeTarget', :shell_script_build_phases => [], :build_phases => [], :project => @project)
@test_native_target = stub('TestNativeTarget', :symbol_type => :unit_test_bundle, :build_phases => [], :shell_script_build_phases => [], :project => @project)
@coconut_pod_target.stubs(:native_target).returns(@native_target)
......
......@@ -24,9 +24,9 @@ module Pod
@project.add_file_reference(file, group)
end
@pod_target = PodTarget.new(config.sandbox, false, { 'Debug' => :debug, 'Release' => :release, 'AppStore' => :release, 'Test' => :debug }, ['$(ARCHS_STANDARD_64_BIT)'], [@spec], [@target_definition], nil)
@pod_target.stubs(:platform).returns(Platform.new(:ios, '6.0'))
@pod_target.file_accessors = [file_accessor]
user_build_configurations = { 'Debug' => :debug, 'Release' => :release, 'AppStore' => :release, 'Test' => :debug }
archs = ['$(ARCHS_STANDARD_64_BIT)']
@pod_target = PodTarget.new(config.sandbox, false, user_build_configurations, archs, [@spec], [@target_definition], Platform.ios, [file_accessor])
@installer = TargetInstaller.new(config.sandbox, @pod_target)
end
......
......@@ -134,7 +134,7 @@ module Pod
target_definition.set_platform(:ios, '8.0')
target_definition.abstract = false
target_definition.store_pod('BananaLib')
pod_target = PodTarget.new(config.sandbox, false, {}, [], [spec], [target_definition], nil)
pod_target = PodTarget.new(config.sandbox, false, {}, [], [spec], [target_definition], Platform.ios)
@generator.stubs(:aggregate_targets).returns([])
@generator.stubs(:pod_targets).returns([pod_target])
PodsProjectGenerator::PodTargetInstaller.any_instance.expects(:install!)
......@@ -146,7 +146,7 @@ module Pod
target_definition = Podfile::TargetDefinition.new(:default, nil)
target_definition.set_platform(:ios, '8.0')
target_definition.abstract = false
pod_target = PodTarget.new(config.sandbox, false, {}, [], [spec], [target_definition], nil)
pod_target = PodTarget.new(config.sandbox, false, {}, [], [spec], [target_definition], Platform.ios)
@generator.stubs(:aggregate_targets).returns([])
@generator.stubs(:pod_targets).returns([pod_target])
PodsProjectGenerator::PodTargetInstaller.any_instance.expects(:install!).once
......@@ -181,16 +181,15 @@ module Pod
spec = fixture_spec('banana-lib/BananaLib.podspec')
target_definition = Podfile::TargetDefinition.new(:default, @installer.podfile.root_target_definitions.first)
@pod_target = PodTarget.new(config.sandbox, false, {}, [], [spec], [target_definition], nil)
@target = AggregateTarget.new(config.sandbox, false, {}, [], target_definition, config.sandbox.root.dirname, nil, nil, [])
@pod_target = PodTarget.new(config.sandbox, false, {}, [], [spec], [target_definition], Platform.ios)
@target = AggregateTarget.new(config.sandbox, false, {}, [], target_definition, config.sandbox.root.dirname, nil, nil, [@pod_target])
@mock_target = mock('PodNativeTarget')
mock_project = mock('PodsProject', :frameworks_group => mock('FrameworksGroup'))
@generator.stubs(:project).returns(mock_project)
@target.stubs(:native_target).returns(@mock_target)
@target.stubs(:pod_targets).returns([@pod_target])
@generator.stubs(:pod_targets).returns([@pod_target])
@generator.stubs(:aggregate_targets).returns([@target])
end
......@@ -267,8 +266,8 @@ module Pod
spec = fixture_spec('coconut-lib/CoconutLib.podspec')
target_definition = Podfile::TargetDefinition.new(:default, @installer.podfile.root_target_definitions.first)
@pod_target = PodTarget.new(config.sandbox, false, {}, [], [spec, *spec.recursive_subspecs], [target_definition], nil)
@target = AggregateTarget.new(config.sandbox, false, {}, [], target_definition, config.sandbox.root.dirname, nil, nil, [])
@pod_target = PodTarget.new(config.sandbox, false, {}, [], [spec, *spec.recursive_subspecs], [target_definition], Platform.ios)
@target = AggregateTarget.new(config.sandbox, false, {}, [], target_definition, config.sandbox.root.dirname, nil, nil, [@pod_target])
@mock_target = mock('PodNativeTarget')
......@@ -276,7 +275,7 @@ module Pod
@generator.stubs(:project).returns(mock_project)
@target.stubs(:native_target).returns(@mock_target)
@target.stubs(:pod_targets).returns([@pod_target])
@generator.stubs(:pod_targets).returns([@pod_target])
@generator.stubs(:aggregate_targets).returns([@target])
end
......@@ -470,7 +469,7 @@ module Pod
it 'shares test schemes' do
spec = fixture_spec('coconut-lib/CoconutLib.podspec')
target_definition = Podfile::TargetDefinition.new(:default, @installer.podfile.root_target_definitions.first)
pod_target = Pod::PodTarget.new(config.sandbox, false, {}, [], [spec, *spec.recursive_subspecs], [target_definition], nil)
pod_target = Pod::PodTarget.new(config.sandbox, false, {}, [], [spec, *spec.recursive_subspecs], [target_definition], Platform.ios)
pod_target.stubs(:should_build?).returns(true)
@generator.installation_options.
......
......@@ -22,14 +22,13 @@ module Pod
options.integrate_targets = integrate_targets
end
@analyzer = Analyzer.new(config.sandbox, podfile, lockfile).tap do |analyzer|
@analyzer = Analyzer.new(sandbox, podfile, lockfile).tap do |analyzer|
analyzer.installation_options = installation_options
end
result = @analyzer.analyze
aggregate_targets = result.targets
pod_targets = aggregate_targets.flat_map(&:pod_targets).uniq
sandbox.create_file_accessors(pod_targets)
TargetValidator.new(aggregate_targets, pod_targets)
end
......
......@@ -74,7 +74,6 @@ module Pod
it 'in runs the pre-install hooks before cleaning the Pod sources' do
@installer.unstub(:download_dependencies)
@installer.stubs(:create_file_accessors)
@installer.stubs(:install_pod_sources)
def @installer.run_podfile_pre_install_hooks
@hook_called = true
......
......@@ -87,13 +87,13 @@ module Pod
@target_definition = Podfile::TargetDefinition.new('Pods', nil)
@target_definition.abstract = false
@target_definition.set_platform(:ios, '10.0')
@pod_target = PodTarget.new(config.sandbox, false, {}, [], [@spec], [@target_definition], nil)
@pod_target = PodTarget.new(config.sandbox, false, {}, [], [@spec], [@target_definition], Platform.ios)
@target = AggregateTarget.new(config.sandbox, false, {}, [], @target_definition, config.sandbox.root.dirname, nil, nil, [@pod_target])
end
describe 'with configuration dependent pod targets' do
before do
@pod_target_release = PodTarget.new(config.sandbox, false, {}, [], [@spec], [@target_definition], nil)
@pod_target_release = PodTarget.new(config.sandbox, false, {}, [], [@spec], [@target_definition], Platform.ios)
@pod_target_release.expects(:include_in_build_config?).with(@target_definition, 'Debug').returns(false)
@pod_target_release.expects(:include_in_build_config?).with(@target_definition, 'Release').returns(true)
@target.stubs(:pod_targets).returns([@pod_target, @pod_target_release])
......@@ -116,7 +116,7 @@ module Pod
describe 'frameworks by config and input output paths' do
before do
@coconut_spec = fixture_spec('coconut-lib/CoconutLib.podspec')
@pod_target_release = PodTarget.new(config.sandbox, false, {}, [], [@coconut_spec], [@target_definition], nil)
@pod_target_release = PodTarget.new(config.sandbox, false, {}, [], [@coconut_spec], [@target_definition], Platform.ios)
@target.stubs(:pod_targets).returns([@pod_target])
@target.stubs(:user_build_configurations).returns('Debug' => :debug, 'Release' => :release)
end
......@@ -185,7 +185,7 @@ module Pod
it 'returns vendored frameworks by config' do
path_list = Sandbox::PathList.new(fixture('banana-lib'))
file_accessor = Sandbox::FileAccessor.new(path_list, @spec.consumer(:ios))
@pod_target.file_accessors = [file_accessor]
@pod_target.stubs(:file_accessors).returns([file_accessor])
@pod_target.file_accessors.first.stubs(:vendored_dynamic_artifacts).returns(
[Pathname('/some/absolute/path/to/FrameworkA.framework')],
)
......@@ -214,7 +214,7 @@ module Pod
it 'returns correct input and output paths for vendored frameworks' do
path_list = Sandbox::PathList.new(fixture('banana-lib'))
file_accessor = Sandbox::FileAccessor.new(path_list, @spec.consumer(:ios))
@pod_target.file_accessors = [file_accessor]
@pod_target.stubs(:file_accessors).returns([file_accessor])
@pod_target.file_accessors.first.stubs(:vendored_dynamic_artifacts).returns(
[Pathname('/absolute/path/to/FrameworkA.framework')],
)
......
......@@ -6,8 +6,7 @@ module Pod
spec = fixture_spec('banana-lib/BananaLib.podspec')
@target_definition = Podfile::TargetDefinition.new('Pods', nil)
@target_definition.abstract = false
@pod_target = PodTarget.new(config.sandbox, false, {}, [], [spec], [@target_definition], nil)
@pod_target.stubs(:platform).returns(Platform.ios)
@pod_target = PodTarget.new(config.sandbox, false, {}, [], [spec], [@target_definition], Platform.ios)
end
describe 'Meta' do
......@@ -448,14 +447,24 @@ module Pod
describe 'With dependencies' do
before do
@pod_dependency = fixture_pod_target('orange-framework/OrangeFramework.podspec')
@pod_dependency = fixture_pod_target('orange-framework/OrangeFramework.podspec', false, {}, @pod_target.target_definitions)
@test_pod_dependency = fixture_pod_target('matryoshka/matryoshka.podspec', false, {}, @pod_target.target_definitions)
@pod_target.dependent_targets = [@pod_dependency]
@pod_target.test_dependent_targets = [@test_pod_dependency]
end
it 'resolves simple dependencies' do
@pod_target.recursive_dependent_targets.should == [@pod_dependency]
end
it 'scopes test and non test dependencies' do
scoped_pod_target = @pod_target.scoped
scoped_pod_target.first.dependent_targets.count.should == 1
scoped_pod_target.first.dependent_targets.first.name.should == 'OrangeFramework-Pods'
scoped_pod_target.first.test_dependent_targets.count.should == 1
scoped_pod_target.first.test_dependent_targets.first.name.should == 'matryoshka-Pods'
end
describe 'With cyclic dependencies' do
before do
@pod_dependency = fixture_pod_target('orange-framework/OrangeFramework.podspec')
......
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