lib/snapshot/runner.rb in snapshot-1.2.2 vs lib/snapshot/runner.rb in snapshot-1.3.0
- old
+ new
@@ -22,42 +22,87 @@
Helper.log.info "Building and running project - this might take some time...".green
self.number_of_retries = 0
errors = []
+ results = {} # collect all the results for a nice table
+ launch_arguments_set = config_launch_arguments
Snapshot.config[:devices].each do |device|
- Snapshot.config[:languages].each do |language|
- begin
- launch(language, device)
- rescue => ex
- Helper.log.error ex # we should to show right here as well
- errors << ex
+ launch_arguments_set.each do |launch_arguments|
+ Snapshot.config[:languages].each do |language|
+ results[device] ||= {}
- raise ex if Snapshot.config[:stop_after_first_error]
+ begin
+ launch(language, device, launch_arguments)
+ results[device][language] = true
+ rescue => ex
+ Helper.log.error ex # we should to show right here as well
+ errors << ex
+ results[device][language] = false
+ raise ex if Snapshot.config[:stop_after_first_error]
+ end
end
end
end
+ print_results(results)
+
raise errors.join('; ') if errors.count > 0
# Generate HTML report
ReportsGenerator.new.generate
# Clear the Derived Data
FileUtils.rm_rf(TestCommandGenerator.derived_data_path)
end
- def launch(language, device_type)
+ def config_launch_arguments
+ launch_arguments = Array(Snapshot.config[:launch_arguments])
+ # if more than 1 set of arguments, use a tuple with an index
+ if launch_arguments.count == 1
+ [launch_arguments]
+ else
+ launch_arguments.map.with_index { |e, i| [i, e] }
+ end
+ end
+
+ def print_results(results)
+ return if results.count == 0
+
+ rows = []
+ results.each do |device, languages|
+ current = [device]
+ languages.each do |language, value|
+ current << (value == true ? " 💚" : " ❌")
+ end
+ rows << current
+ end
+
+ params = {
+ rows: rows,
+ headings: ["Device"] + results.values.first.keys,
+ title: "snapshot results"
+ }
+ puts ""
+ puts Terminal::Table.new(params)
+ puts ""
+ end
+
+ def launch(language, device_type, launch_arguments)
screenshots_path = TestCommandGenerator.derived_data_path
FileUtils.rm_rf(File.join(screenshots_path, "Logs"))
FileUtils.rm_rf(screenshots_path) if Snapshot.config[:clean]
FileUtils.mkdir_p(screenshots_path)
File.write("/tmp/language.txt", language)
+ File.write("/tmp/snapshot-launch_arguments.txt", launch_arguments.last)
Fixes::SimulatorZoomFix.patch
+ Snapshot.kill_simulator # because of https://github.com/fastlane/snapshot/issues/337
+ `xcrun simctl shutdown booted`
+
command = TestCommandGenerator.generate(device_type: device_type)
Helper.log_alert("#{device_type} - #{language}")
prefix_hash = [
@@ -80,18 +125,18 @@
# no exception raised... that means we need to retry
Helper.log.info "Caught error... #{return_code}".red
self.number_of_retries += 1
if self.number_of_retries < 20
- launch(language, device_type)
+ launch(language, device_type, launch_arguments)
else
# It's important to raise an error, as we don't want to collect the screenshots
raise "Too many errors... no more retries...".red
end
end)
raw_output = File.read(TestCommandGenerator.xcodebuild_log_path)
- Collector.fetch_screenshots(raw_output, language, device_type)
+ Collector.fetch_screenshots(raw_output, language, device_type, launch_arguments.first)
end
def clear_previous_screenshots
Helper.log.info "Clearing previously generated screenshots".yellow
path = File.join(".", Snapshot.config[:output_directory], "*", "*.png")