diff --git a/CHANGELOG.md b/CHANGELOG.md index f7db49a8bfefacda2304920bf1e6f14307005d57..5b0d98834bf585985f10daa7e51cee856fe781aa 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 fd96b61e6ad3efb5dd567f0062b697c7620e2ac4..8cbcb643cfa5fc25517b0f4780dcff0c0de8544c 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 305b6e3c60f545c2cf1406226b0a0c1941b7f9fd..510e9d991e9e30fb422f36b246906d3a797f3c6d 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