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