Line data Source code
1 : #include "pch.h" 2 : 3 : #include "can_listener.h" 4 : 5 : using ::testing::StrictMock; 6 : using ::testing::_; 7 : 8 : class MockCanListener : public CanListener { 9 : public: 10 2 : MockCanListener(uint32_t id) : CanListener(id) { } 11 : 12 2 : MOCK_METHOD(void, decodeFrame, (const CANRxFrame& frame, efitick_t nowNt), (override)); 13 4 : MOCK_METHOD(bool, acceptFrame, (const CANRxFrame& frame), (const, override)); 14 : }; 15 : 16 4 : TEST(CanListener, FrameAccepted) { 17 1 : StrictMock<MockCanListener> dut(0x123); 18 : 19 1 : CANRxFrame frame; 20 : 21 : // Accept should be called, returns true 22 1 : EXPECT_CALL(dut, acceptFrame(_)).WillOnce(Return(true)); 23 : 24 : // Because accept returns true, decode is called 25 1 : EXPECT_CALL(dut, decodeFrame(_, 1234)); 26 : 27 1 : dut.processFrame(frame, 1234); 28 2 : } 29 : 30 4 : TEST(CanListener, FrameNotAccepted) { 31 1 : StrictMock<MockCanListener> dut(0x123); 32 : 33 1 : CANRxFrame frame; 34 : 35 : // Accept should be called, returns false, so decode not called 36 1 : EXPECT_CALL(dut, acceptFrame(_)).WillOnce(Return(false)); 37 : 38 1 : dut.processFrame(frame, 1234); 39 2 : } 40 : 41 : struct CanListenerNoDecode : public CanListener { 42 2 : CanListenerNoDecode(uint32_t id) : CanListener(id) { } 43 : 44 0 : void decodeFrame(const CANRxFrame& frame, efitick_t nowNt) override { } 45 : }; 46 : 47 4 : TEST(CanListener, FrameAcceptedChecksId) { 48 1 : CanListenerNoDecode dut(0x123); 49 : 50 1 : CANRxFrame frame; 51 : 52 1 : frame.SID = 0x123; 53 1 : frame.IDE = false; 54 : 55 1 : EXPECT_TRUE(dut.acceptFrame(frame)); 56 1 : } 57 : 58 4 : TEST(CanListener, FrameNotAcceptedChecksId) { 59 1 : CanListenerNoDecode dut(0x123); 60 : 61 1 : CANRxFrame frame; 62 : 63 1 : frame.SID = 0x456; 64 1 : frame.IDE = false; 65 : 66 1 : EXPECT_FALSE(dut.acceptFrame(frame)); 67 1 : }