From 04d20d75849df5149d6e3cadcade5eedbd4f1ab3 Mon Sep 17 00:00:00 2001 From: Jeffrey Phillips Freeman <the@jeffreyfreeman.me> Date: Tue, 15 Aug 2023 22:21:04 -0400 Subject: [PATCH] Added some more tests for KissAbstract --- CHANGELOG.md | 3 ++- lib/kiss/kiss_abstract.rb | 2 ++ spec/kiss/kiss_abstract_spec.rb | 22 ++++++++++++++++++++-- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f7db49a..5b0d988 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,8 @@ ## 2.0.0 * Moved abstraction over to abstractify library. -* Added more parsing methods so entrypoints now take strings rather than KISS encoded data. +* Added more parsing methods so entry points now take strings rather than KISS encoded data. +* Added errors where appropriate, for example writing invalid frames now throw an IOError. ## 1.0.3 diff --git a/lib/kiss/kiss_abstract.rb b/lib/kiss/kiss_abstract.rb index fd96b61..8cbcb64 100644 --- a/lib/kiss/kiss_abstract.rb +++ b/lib/kiss/kiss_abstract.rb @@ -294,6 +294,8 @@ module Kiss encoded_frame = KissAbstract.encode_frame(frame) if KissAbstract.valid_frame(encoded_frame) self.write_bytes(encoded_frame, *args, **kwargs) + else + raise IOError.new("frame was able to be encoded but was determined not to be valid") end end end diff --git a/spec/kiss/kiss_abstract_spec.rb b/spec/kiss/kiss_abstract_spec.rb index 305b6e3..510e9d9 100644 --- a/spec/kiss/kiss_abstract_spec.rb +++ b/spec/kiss/kiss_abstract_spec.rb @@ -4,7 +4,7 @@ require 'abstractify' ENCODED_FRAME = [192, 0, 158, 154, 142, 64, 64, 64, 96, 174, 100, 142, 154, 136, 64, 98, 174, 146, 136, 138, 98, 64, 98, 174, 146, 136, 138, 100, 64, 101, 3, 240, 116, 101, 115, 116, 95, 101, 110, 99, 111, 100, 101, 95, 102, 114, 97, 109, 101, 192] DECODED_FRAME = { - :source => "W2GMD-1", + :source => " W2GMD-1", :destination => "OMG", :payload => "test_encode_frame", :path => ['WIDE1-1', 'WIDE2-2'] @@ -83,10 +83,18 @@ describe Kiss::KissAbstract do expect(translated_frame).to eql(DECODED_FRAME) end end + + context "Given no bytes on the underlying interface" do + let(:kiss_mock) {KissMock.new} + it "successfully decoded and parsed the frame" do + translated_frame = kiss_mock.read + expect(translated_frame).to be_nil + end + end end describe ".write" do - context "Given a decoded frame" do + context "Given a frame as a map of strings" do let(:kiss_mock) {KissMock.new} it "successfully encodes to the underlying interface" do kiss_mock.write(DECODED_FRAME) @@ -94,6 +102,16 @@ describe Kiss::KissAbstract do expect(all_raw_frames[0]).to eql(ENCODED_FRAME) end end + context "Given a frame that encodes but is invalid" do + let(:kiss_mock) {KissMock.new} + it "successfully encodes to the underlying interface" do + allow(Kiss::KissAbstract).to receive(:valid_frame).and_return(false) + + expect { + kiss_mock.write(DECODED_FRAME) + }.to raise_error(IOError) + end + end end end -- GitLab