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.2.0'

Class Method Summary collapse

Class Method Details

.run(options = {}) ⇒ Object



448
449
450
451
452
453
# File 'lib/run_loop/core.rb', line 448

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



455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
# File 'lib/run_loop/core.rb', line 455

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



477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
# File 'lib/run_loop/core.rb', line 477

def self.stop(run_loop, out=Dir.pwd)
  return if run_loop.nil?
  results_dir = run_loop[:results_dir]

  dest = out


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


  FileUtils.mkdir_p(dest)

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

.validate_script(options) ⇒ Object



500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
# File 'lib/run_loop/core.rb', line 500

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_fast_uia)
  end
  script
end