Module: RunLoop

Defined in:
lib/run_loop/cli.rb,
lib/run_loop/core.rb,
lib/run_loop/version.rb

Defined Under Namespace

Modules: Core Classes: CLI, TimeoutError

Constant Summary collapse

VERSION =
'0.0.20'

Class Method Summary collapse

Class Method Details

.run(options = {}) ⇒ Object



345
346
347
348
349
350
# File 'lib/run_loop/core.rb', line 345

def self.run(options={})
  script = validate_script(options)
  options[:script] = script

  Core.run_with_options(options)
end

.send_command(run_loop, cmd, timeout = 60) ⇒ Object



352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
# File 'lib/run_loop/core.rb', line 352

def self.send_command(run_loop, cmd, timeout=60)

  if not cmd.is_a?(String)
    raise "Illegal command #{cmd} (must be a string)"
  end


  expected_index = Core.write_request(run_loop, cmd)
  result = nil

  begin
    Timeout::timeout(timeout, TimeoutError) do
      result = Core.read_response(run_loop, expected_index)
    end

  rescue TimeoutError => e
    raise TimeoutError, "Time out waiting for UIAutomation run-loop for command #{cmd}. Waiting for index:#{expected_index}"
  end

  result
end

.stop(run_loop, out = Dir.pwd) ⇒ Object



374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
# File 'lib/run_loop/core.rb', line 374

def self.stop(run_loop, out=Dir.pwd)
  return if run_loop.nil?
  results_dir = run_loop[:results_dir]
  udid = run_loop[:udid]
  instruments_prefix = Core.instruments_command_prefix(udid, results_dir)
  pid = run_loop[:pid] || IO.read(File.join(results_dir, "run_loop.pid"))
  dest = out

  Core.pids_for_run_loop(run_loop) do |pid|
    Process.kill('TERM', pid.to_i)
  end

  FileUtils.mkdir_p(dest)
  pngs = Dir.glob(File.join(results_dir, "Run 1", "*.png"))
  FileUtils.cp(pngs, dest) if pngs and pngs.length > 0
end

.validate_script(options) ⇒ Object



392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
# File 'lib/run_loop/core.rb', line 392

def self.validate_script(options)
  script = options[:script]
  if script
    if script.is_a?(Symbol)
      script = Core.script_for_key(script)
      unless script
        raise "Unknown script for symbol: #{options[:script]}. Options: #{Core::SCRIPTS.keys.join(', ')}"
      end
    elsif script.is_a?(String)
      unless File.exist?(script)
        raise "File does not exist: #{script}"
      end
    else
      raise "Unknown type for :script key: #{options[:script].class}"
    end
  else
    script = Core.script_for_key(:run_loop)
  end
  script
end