From 6da23f711117f729d17490440e37b98b000aa322 Mon Sep 17 00:00:00 2001 From: Jeffrey Phillips Freeman <the@jeffreyfreeman.me> Date: Tue, 15 Aug 2023 21:54:52 -0400 Subject: [PATCH] Finished adding tests for KissSerial --- lib/kiss/kiss_serial.rb | 2 +- spec/kiss/kiss_serial_spec.rb | 72 +++++++++++++++++++++++++---------- 2 files changed, 52 insertions(+), 22 deletions(-) diff --git a/lib/kiss/kiss_serial.rb b/lib/kiss/kiss_serial.rb index 4bad9d8..60f64ea 100644 --- a/lib/kiss/kiss_serial.rb +++ b/lib/kiss/kiss_serial.rb @@ -77,7 +77,7 @@ module Kiss end if @serial == nil or @serial.closed? - raise 'Attempting to close before the class has been started.' + raise IOError.new('Attempting to close before the class has been started.') else @serial.close end diff --git a/spec/kiss/kiss_serial_spec.rb b/spec/kiss/kiss_serial_spec.rb index 4e8e6e2..fb99551 100644 --- a/spec/kiss/kiss_serial_spec.rb +++ b/spec/kiss/kiss_serial_spec.rb @@ -132,28 +132,58 @@ describe Kiss::KissSerial do kiss_serial.close end end + + context "Given an underlying connection that has been closed" do + let( :serial_port ) { double(SerialPort) } + let( :kiss_serial ) { Kiss::KissSerial.new("/dev/ttyUSB-scs") } + + it "closes underlying serial port" do + allow( SerialPort ).to receive(:new).and_return(serial_port) + allow(serial_port).to receive(:read_timeout=) + kiss_serial.connect + + allow(serial_port).to receive(:closed?).and_return(true) + expect(serial_port).to_not receive(:close) + expect { + kiss_serial.close + }.to raise_error(IOError) + end + end + end + + describe ".write" do + context "Given an underlying connection and valid frame" do + let( :serial_port ) { double(SerialPort) } + let( :kiss_serial ) { Kiss::KissSerial.new("/dev/ttyUSB-scs") } + + it "encodes the frame properly" do + allow( SerialPort ).to receive(:new).and_return(serial_port) + allow(serial_port).to receive(:read_timeout=) + allow(serial_port).to receive(:write).with(Kiss::MODE_INIT_W8DED.map { |b| b.chr }.join) + kiss_serial.connect(Kiss::MODE_INIT_W8DED) + + expect(serial_port).to receive(:write).with(ENCODED_FRAME.map { |b| b.chr }.join).once + kiss_serial.write(DECODED_FRAME) + end + end end - # describe ".read" do - # context "Given an encoded frame as bytes on the underlying interface" do - # let(:kiss_mock) {KissMock.new} - # it "successfully decoded and parsed the frame" do - # kiss_mock.add_read_from_interface(ENCODED_FRAME) - # translated_frame = kiss_mock.read - # expect(translated_frame).to eql(DECODED_FRAME) - # end - # end - # end - # - # describe ".write" do - # context "Given a decoded frame" do - # let(:kiss_mock) {KissMock.new} - # it "successfully encodes to the underlying interface" do - # kiss_mock.write(DECODED_FRAME) - # all_raw_frames = kiss_mock.get_sent_to_interface - # expect(all_raw_frames[0]).to eql(ENCODED_FRAME) - # end - # end - # end + describe ".read" do + context "Given an underlying connection with a valid frame waiting" do + let( :serial_port ) { double(SerialPort) } + let( :kiss_serial ) { Kiss::KissSerial.new("/dev/ttyUSB-scs") } + + it "decodes the frame properly" do + allow( SerialPort ).to receive(:new).and_return(serial_port) + allow(serial_port).to receive(:read_timeout=) + allow(serial_port).to receive(:write).with(Kiss::MODE_INIT_W8DED.map { |b| b.chr }.join) + kiss_serial.connect(Kiss::MODE_INIT_W8DED) + + expect(serial_port).to receive(:read).and_return(ENCODED_FRAME.map { |b| b.chr }.join, nil) + actual_frame = kiss_serial.read + expect(actual_frame).to eql(DECODED_FRAME) + end + end + end end -- GitLab