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")