1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
# frozen_string_literal: true
RSpec.describe TTY::Reader, "#subscribe" do
let(:input) { StringIO.new }
let(:output) { StringIO.new }
let(:env) { { "TTY_TEST" => true } }
it "subscribes to receive events" do
stub_const("Context", Class.new do
def initialize(events)
@events = events
end
def keypress(event)
@events << [:keypress, event.value]
end
end)
reader = TTY::Reader.new(input: input, output: output, env: env)
events = []
context = Context.new(events)
reader.subscribe(context)
input << "aa\n"
input.rewind
answer = reader.read_line
expect(answer).to eq("aa\n")
expect(events).to eq([
[:keypress, "a"],
[:keypress, "a"],
[:keypress, "\n"]
])
events.clear
reader.unsubscribe(context)
input.rewind
answer = reader.read_line
expect(events).to eq([])
end
it "subscribes to listen to events only in a block" do
stub_const("Context", Class.new do
def initialize(events)
@events = events
end
def keypress(event)
@events << [:keypress, event.value]
end
end)
reader = TTY::Reader.new(input: input, output: output, env: env)
events = []
context = Context.new(events)
input << "aa\nbb\n"
input.rewind
reader.subscribe(context) do
reader.read_line
end
answer = reader.read_line
expect(answer).to eq("bb\n")
expect(events).to eq([
[:keypress, "a"],
[:keypress, "a"],
[:keypress, "\n"]
])
end
end
|