Class: Snapshot::TestCommandGeneratorBase

Inherits:
Object
  • Object
show all
Defined in:
snapshot/lib/snapshot/test_command_generator_base.rb

Class Method Summary collapse

Class Method Details

.actionsObject


51
52
53
54
55
56
57
58
59
60
61
# File 'snapshot/lib/snapshot/test_command_generator_base.rb', line 51

def actions
  actions = []
  if Snapshot.config[:test_without_building]
    actions << "test-without-building"
  else
    actions << :clean if Snapshot.config[:clean]
    actions << :build # https://github.com/fastlane/fastlane/issues/2581
    actions << :test
  end
  return actions
end

.build_settingsObject


41
42
43
44
45
46
47
48
49
# File 'snapshot/lib/snapshot/test_command_generator_base.rb', line 41

def build_settings
  config = Snapshot.config

  build_settings = []
  build_settings << "FASTLANE_SNAPSHOT=YES"
  build_settings << "TEST_TARGET_NAME=#{config[:test_target_name].shellescape}" if config[:test_target_name]

  return build_settings
end

.derived_data_pathObject


90
91
92
# File 'snapshot/lib/snapshot/test_command_generator_base.rb', line 90

def derived_data_path
  Snapshot.cache[:derived_data_path] ||= (Snapshot.config[:derived_data_path] || Dir.mktmpdir("snapshot_derived"))
end

.destination(device_name) ⇒ Object


117
118
119
# File 'snapshot/lib/snapshot/test_command_generator_base.rb', line 117

def destination(device_name)
  not_implemented(__method__)
end

.device_udid(device_name, os_version = Snapshot.config[:ios_version]) ⇒ Object


84
85
86
87
88
# File 'snapshot/lib/snapshot/test_command_generator_base.rb', line 84

def device_udid(device_name, os_version = Snapshot.config[:ios_version])
  device = find_device(device_name, os_version)

  return device ? device.udid : nil
end

.find_device(device_name, os_version = Snapshot.config[:ios_version]) ⇒ Object


67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'snapshot/lib/snapshot/test_command_generator_base.rb', line 67

def find_device(device_name, os_version = Snapshot.config[:ios_version])
  # We might get this error message
  # > The requested device could not be found because multiple devices matched the request.
  #
  # This happens when you have multiple simulators for a given device type / iOS combination
  #   { platform:iOS Simulator, id:1685B071-AFB2-4DC1-BE29-8370BA4A6EBD, OS:9.0, name:iPhone 5 }
  #   { platform:iOS Simulator, id:A141F23B-96B3-491A-8949-813B376C28A7, OS:9.0, name:iPhone 5 }
  #
  simulators = FastlaneCore::DeviceManager.simulators
  # Sort devices with matching names by OS version, largest first, so that we can
  # pick the device with the newest OS in case an exact OS match is not available
  name_matches = simulators.find_all { |sim| sim.name.strip == device_name.strip }
                           .sort_by { |sim| Gem::Version.new(sim.os_version) }
                           .reverse
  return name_matches.find { |sim| sim.os_version == os_version } || name_matches.first
end

.initializeObject


109
110
111
# File 'snapshot/lib/snapshot/test_command_generator_base.rb', line 109

def initialize
  not_implemented(__method__)
end

.options(language, locale) ⇒ Object


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'snapshot/lib/snapshot/test_command_generator_base.rb', line 20

def options(language, locale)
  config = Snapshot.config
  result_bundle_path = resolve_result_bundle_path(language, locale) if config[:result_bundle]

  options = []
  options += project_path_array
  options << "-sdk '#{config[:sdk]}'" if config[:sdk]
  options << "-derivedDataPath '#{derived_data_path}'"
  options << "-resultBundlePath '#{result_bundle_path}'" if result_bundle_path
  if FastlaneCore::Helper.xcode_at_least?(11)
    options << "-testPlan '#{config[:testplan]}'" if config[:testplan]
  end
  options << config[:xcargs] if config[:xcargs]

  # detect_values will ensure that these values are present as Arrays if
  # they are present at all
  options += config[:only_testing].map { |test_id| "-only-testing:#{test_id.shellescape}" } if config[:only_testing]
  options += config[:skip_testing].map { |test_id| "-skip-testing:#{test_id.shellescape}" } if config[:skip_testing]
  return options
end

.pipe(device_type, language, locale) ⇒ Object


113
114
115
# File 'snapshot/lib/snapshot/test_command_generator_base.rb', line 113

def pipe(device_type, language, locale)
  not_implemented(__method__)
end

.prefixObject


7
8
9
# File 'snapshot/lib/snapshot/test_command_generator_base.rb', line 7

def prefix
  ["set -o pipefail &&"]
end

.project_path_arrayArray

Path to the project or workspace as parameter This will also include the scheme (if given)

Returns:

  • (Array)

    The array with all the components to join


14
15
16
17
18
# File 'snapshot/lib/snapshot/test_command_generator_base.rb', line 14

def project_path_array
  proj = Snapshot.project.xcodebuild_parameters
  return proj if proj.count > 0
  UI.user_error!("No project/workspace found")
end

.resolve_result_bundle_path(language, locale) ⇒ Object


94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'snapshot/lib/snapshot/test_command_generator_base.rb', line 94

def resolve_result_bundle_path(language, locale)
  Snapshot.cache[:result_bundle_path] = {}
  language_key = locale || language

  unless Snapshot.cache[:result_bundle_path][language_key]
    ext = FastlaneCore::Helper.xcode_at_least?(11) ? '.xcresult' : '.test_result'
    path = File.join(Snapshot.config[:output_directory], "test_output", language_key, Snapshot.config[:scheme]) + ext
    if File.directory?(path)
      FileUtils.remove_dir(path)
    end
    Snapshot.cache[:result_bundle_path][language_key] = path
  end
  return Snapshot.cache[:result_bundle_path][language_key]
end

.suffixObject


63
64
65
# File 'snapshot/lib/snapshot/test_command_generator_base.rb', line 63

def suffix
  return []
end

.xcodebuild_log_path(device_type: nil, language: nil, locale: nil) ⇒ Object


121
122
123
# File 'snapshot/lib/snapshot/test_command_generator_base.rb', line 121

def xcodebuild_log_path(device_type: nil, language: nil, locale: nil)
  not_implemented(__method__)
end