Sha256: 9e5cc0c166f956f99131dad98b0c6ebd92302b2a6a73dfb84455a7bf5ef26af9

Contents?: true

Size: 1.53 KB

Versions: 8

Compression:

Stored size: 1.53 KB

Contents

# 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

Version data entries

8 entries across 8 versions & 2 rubygems

Version Path
pokedex-terminal-0.2.8 vendor/bundle/ruby/2.7.0/gems/tty-reader-0.7.0/spec/unit/subscribe_spec.rb
pokedex-terminal-0.2.7 vendor/bundle/ruby/2.7.0/gems/tty-reader-0.7.0/spec/unit/subscribe_spec.rb
pokedex-terminal-0.2.6 vendor/bundle/ruby/2.7.0/gems/tty-reader-0.7.0/spec/unit/subscribe_spec.rb
pokedex-terminal-0.2.5 vendor/bundle/ruby/2.7.0/gems/tty-reader-0.7.0/spec/unit/subscribe_spec.rb
pokedex-terminal-0.2.4 vendor/bundle/ruby/2.7.0/gems/tty-reader-0.7.0/spec/unit/subscribe_spec.rb
tty-reader-0.7.0 spec/unit/subscribe_spec.rb
tty-reader-0.6.0 spec/unit/subscribe_spec.rb
tty-reader-0.5.0 spec/unit/subscribe_spec.rb