Add TerminalSession helper for managing a tmux session

This commit is contained in:
Eric Freese 2017-01-19 22:33:31 -07:00
parent e6591d5de0
commit 07a6768fcb
2 changed files with 56 additions and 0 deletions

View File

@ -1,4 +1,5 @@
require 'rspec/wait'
require 'terminal_session'
RSpec.configure do |config|
config.expect_with :rspec do |expectations|

55
spec/terminal_session.rb Normal file
View File

@ -0,0 +1,55 @@
require 'securerandom'
class TerminalSession
def initialize(width: 80, height: 24, prompt: '', term: 'xterm-256color')
tmux_command("new-session -d -x #{width} -y #{height} 'PS1=#{prompt} TERM=#{term} zsh -f'")
end
def run_command(command)
send_string(command)
send_keys('enter')
end
def send_string(str)
tmux_command("send-keys -t 0 -l '#{str.gsub("'", "\\'")}'")
end
def send_keys(*keys)
tmux_command("send-keys -t 0 #{keys.join(' ')}")
end
def content(esc_seqs: false)
cmd = 'capture-pane -p -t 0'
cmd += ' -e' if esc_seqs
tmux_command(cmd).strip
end
def clear
send_keys('C-l')
end
def destroy
tmux_command('kill-session')
end
def cursor
tmux_command("display-message -t 0 -p '\#{cursor_x},\#{cursor_y}'").
strip.
split(',').
map(&:to_i)
end
private
def socket_name
@socket_name ||= SecureRandom.hex(6)
end
def tmux_command(cmd)
out = `tmux -u -L #{socket_name} #{cmd}`
raise('tmux error') unless $?.success?
out
end
end