spec/unit/system/page_spec.rb in tty-pager-0.1.0 vs spec/unit/system/page_spec.rb in tty-pager-0.2.0

- old
+ new

@@ -1,21 +1,30 @@ # coding: utf-8 RSpec.describe TTY::Pager::SystemPager, '.page' do - let(:input) { StringIO.new } - let(:output) { StringIO.new } + let(:input) { StringIO.new } + let(:output) { StringIO.new } it "executes the pager command in a subprocess" do - text = "I try all things, I achieve what I can.\n" - pager = described_class.new(output: output, input: input) + text = "I try all things, I achieve what I can.\n" + pager = described_class.new(output: output, input: input) + read_io = spy + write_io = spy - allow(pager).to receive(:exec) - allow(Kernel).to receive(:fork).and_return(true) - allow(pager).to receive(:pager_command).and_return('less') - allow(IO).to receive(:select) - allow(input).to receive(:reopen) + allow(IO).to receive(:pipe).and_return([read_io, write_io]) - pager.page(text) + allow(Kernel).to receive(:fork) do |&block| + allow(input).to receive(:reopen) + allow(IO).to receive(:select) + allow(pager).to receive(:pager_command).and_return('less') + allow(pager).to receive(:exec) + block.call + end.and_return(12345) + + status = double(:status, :success? => true) + allow(Process).to receive(:waitpid2).with(12345).and_return([1, status]) + + expect(pager.page(text)).to eq(true) expect(IO).to have_received(:select).with([input]) expect(pager).to have_received(:exec).with('less') expect(output.read).to eq('') end