NerfUS / Mbed 2 deprecated NerfUSTarget

Dependencies:   LedController mbed-rtos mbed NerfUSXbee Servomotor TargetManager

Fork of NerfUS by NerfUS

Committer:
Maxime Dupuis
Date:
Wed Apr 12 10:33:32 2017 -0400
Revision:
51:6bf268cd1a1b
Parent:
38:70a1c8bd2877
Update tests to ignore target hits before 750ms threshold

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Maxime Dupuis 28:8fc53a870691 1 #include "gmock/gmock.h"
Maxime Dupuis 28:8fc53a870691 2 #include "gtest/gtest.h"
Maxime Dupuis 28:8fc53a870691 3
Maxime Dupuis 30:412a779cf607 4 #include "mocks/MockNerfusTicker.hpp"
Maxime Dupuis 28:8fc53a870691 5 #include "mocks/MockTarget.hpp"
Maxime Dupuis 28:8fc53a870691 6 #include "TargetManager.hpp"
Maxime Dupuis 28:8fc53a870691 7
Maxime Dupuis 35:7ee45f6d6484 8 #include "stdint.h"
Maxime Dupuis 35:7ee45f6d6484 9
Maxime Dupuis 28:8fc53a870691 10 class TargetManagerTest : public ::testing::Test
Maxime Dupuis 28:8fc53a870691 11 {
Maxime Dupuis 28:8fc53a870691 12 public:
Maxime Dupuis 28:8fc53a870691 13 TargetManagerTest()
Maxime Dupuis 28:8fc53a870691 14 {
Maxime Dupuis 30:412a779cf607 15 targets.push_back(&mock_target_a);
Maxime Dupuis 30:412a779cf607 16 targets.push_back(&mock_target_b);
Maxime Dupuis 38:70a1c8bd2877 17
Maxime Dupuis 38:70a1c8bd2877 18 tickers.push_back(&mock_nerfus_ticker_a);
Maxime Dupuis 38:70a1c8bd2877 19 tickers.push_back(&mock_nerfus_ticker_b);
Maxime Dupuis 28:8fc53a870691 20 }
Maxime Dupuis 28:8fc53a870691 21
Maxime Dupuis 30:412a779cf607 22 MockTarget mock_target_a;
Maxime Dupuis 30:412a779cf607 23 MockTarget mock_target_b;
Maxime Dupuis 30:412a779cf607 24 std::vector<TargetInterface*> targets;
Maxime Dupuis 30:412a779cf607 25
Maxime Dupuis 38:70a1c8bd2877 26 MockNerfusTicker mock_nerfus_ticker_a;
Maxime Dupuis 38:70a1c8bd2877 27 MockNerfusTicker mock_nerfus_ticker_b;
Maxime Dupuis 38:70a1c8bd2877 28 std::vector<NerfusTickerInterface*> tickers;
Maxime Dupuis 28:8fc53a870691 29 };
Maxime Dupuis 28:8fc53a870691 30
Maxime Dupuis 28:8fc53a870691 31 TEST_F(TargetManagerTest, LibraryBuilds)
Maxime Dupuis 28:8fc53a870691 32 {
Maxime Dupuis 38:70a1c8bd2877 33 TargetManager target_manager(targets, tickers);
Maxime Dupuis 28:8fc53a870691 34 }
Maxime Dupuis 28:8fc53a870691 35
Maxime Dupuis 31:c6dc9811ed14 36 TEST_F(TargetManagerTest, WhenNoTargetIsActiveThenCallsToTargetHitAndTargetMissedDoNothing)
Maxime Dupuis 31:c6dc9811ed14 37 {
Maxime Dupuis 38:70a1c8bd2877 38 TargetManager target_manager(targets, tickers);
Maxime Dupuis 31:c6dc9811ed14 39
Maxime Dupuis 31:c6dc9811ed14 40 target_manager.target_missed(0);
Maxime Dupuis 31:c6dc9811ed14 41 target_manager.target_hit(0);
Maxime Dupuis 31:c6dc9811ed14 42 }
Maxime Dupuis 32:50b777bab5a4 43
Maxime Dupuis 32:50b777bab5a4 44 TEST_F(TargetManagerTest, WhenExecutingAllyTargetThenUseTheCorrectTargetTypeAndTimeout)
Maxime Dupuis 32:50b777bab5a4 45 {
Maxime Dupuis 32:50b777bab5a4 46 EXPECT_CALL(mock_target_a, ally_command());
Maxime Dupuis 38:70a1c8bd2877 47 EXPECT_CALL(mock_nerfus_ticker_a, start(1000));
Maxime Dupuis 32:50b777bab5a4 48
Maxime Dupuis 38:70a1c8bd2877 49 TargetManager target_manager(targets, tickers);
Maxime Dupuis 34:85994e0501fb 50 target_manager.execute(make_TargetInfo(0, TARGET_TYPE_ALLY, 1000));
Maxime Dupuis 32:50b777bab5a4 51 }
Maxime Dupuis 32:50b777bab5a4 52
Maxime Dupuis 32:50b777bab5a4 53 TEST_F(TargetManagerTest, WhenExecutingEnemyTargetThenUseTheCorrectTargetTypeAndTimeout)
Maxime Dupuis 32:50b777bab5a4 54 {
Maxime Dupuis 32:50b777bab5a4 55 EXPECT_CALL(mock_target_b, enemy_command());
Maxime Dupuis 38:70a1c8bd2877 56 EXPECT_CALL(mock_nerfus_ticker_b, start(2000));
Maxime Dupuis 32:50b777bab5a4 57
Maxime Dupuis 38:70a1c8bd2877 58 TargetManager target_manager(targets, tickers);
Maxime Dupuis 34:85994e0501fb 59 target_manager.execute(make_TargetInfo(1, TARGET_TYPE_ENEMY, 2000));
Maxime Dupuis 32:50b777bab5a4 60 }
Maxime Dupuis 32:50b777bab5a4 61
Maxime Dupuis 32:50b777bab5a4 62 TEST_F(TargetManagerTest, WhenActiveTargetIsHitThenSendTheEvent)
Maxime Dupuis 32:50b777bab5a4 63 {
Maxime Dupuis 32:50b777bab5a4 64 EXPECT_CALL(mock_target_a, ally_command());
Maxime Dupuis 51:6bf268cd1a1b 65 EXPECT_CALL(mock_nerfus_ticker_a, start(1200));
Maxime Dupuis 38:70a1c8bd2877 66 EXPECT_CALL(mock_nerfus_ticker_a, get_time_ms())
Maxime Dupuis 51:6bf268cd1a1b 67 .WillOnce(::testing::Return(1200));
Maxime Dupuis 38:70a1c8bd2877 68 EXPECT_CALL(mock_nerfus_ticker_a, stop());
Maxime Dupuis 51:6bf268cd1a1b 69 EXPECT_CALL(mock_target_a, hit(1200));
Maxime Dupuis 32:50b777bab5a4 70
Maxime Dupuis 38:70a1c8bd2877 71 TargetManager target_manager(targets, tickers);
Maxime Dupuis 51:6bf268cd1a1b 72 target_manager.execute(make_TargetInfo(0, TARGET_TYPE_ALLY, 1200));
Maxime Dupuis 51:6bf268cd1a1b 73
Maxime Dupuis 51:6bf268cd1a1b 74 target_manager.target_hit(0);
Maxime Dupuis 51:6bf268cd1a1b 75 }
Maxime Dupuis 51:6bf268cd1a1b 76
Maxime Dupuis 51:6bf268cd1a1b 77 TEST_F(TargetManagerTest, WhenActiveTargetIsHitTooSoonBefore750MsThenIgnoreTheEvent)
Maxime Dupuis 51:6bf268cd1a1b 78 {
Maxime Dupuis 51:6bf268cd1a1b 79 EXPECT_CALL(mock_target_a, ally_command());
Maxime Dupuis 51:6bf268cd1a1b 80 EXPECT_CALL(mock_nerfus_ticker_a, start(700));
Maxime Dupuis 51:6bf268cd1a1b 81 EXPECT_CALL(mock_nerfus_ticker_a, get_time_ms())
Maxime Dupuis 51:6bf268cd1a1b 82 .WillOnce(::testing::Return(700));
Maxime Dupuis 51:6bf268cd1a1b 83
Maxime Dupuis 51:6bf268cd1a1b 84 TargetManager target_manager(targets, tickers);
Maxime Dupuis 51:6bf268cd1a1b 85 target_manager.execute(make_TargetInfo(0, TARGET_TYPE_ALLY, 700));
Maxime Dupuis 32:50b777bab5a4 86
Maxime Dupuis 32:50b777bab5a4 87 target_manager.target_hit(0);
Maxime Dupuis 32:50b777bab5a4 88 }
Maxime Dupuis 32:50b777bab5a4 89
Maxime Dupuis 32:50b777bab5a4 90 TEST_F(TargetManagerTest, WhenActiveTargetIsMissedThenSendTheEvent)
Maxime Dupuis 32:50b777bab5a4 91 {
Maxime Dupuis 32:50b777bab5a4 92 EXPECT_CALL(mock_target_a, ally_command());
Maxime Dupuis 38:70a1c8bd2877 93 EXPECT_CALL(mock_nerfus_ticker_a, start(1000));
Maxime Dupuis 38:70a1c8bd2877 94 EXPECT_CALL(mock_nerfus_ticker_a, get_time_ms())
Maxime Dupuis 32:50b777bab5a4 95 .WillOnce(::testing::Return(42));
Maxime Dupuis 38:70a1c8bd2877 96 EXPECT_CALL(mock_nerfus_ticker_a, stop());
Maxime Dupuis 32:50b777bab5a4 97 EXPECT_CALL(mock_target_a, timeout(42));
Maxime Dupuis 32:50b777bab5a4 98
Maxime Dupuis 38:70a1c8bd2877 99 TargetManager target_manager(targets, tickers);
Maxime Dupuis 34:85994e0501fb 100 target_manager.execute(make_TargetInfo(0, TARGET_TYPE_ALLY, 1000));
Maxime Dupuis 32:50b777bab5a4 101
Maxime Dupuis 32:50b777bab5a4 102 target_manager.target_missed(0);
Maxime Dupuis 32:50b777bab5a4 103 }
Maxime Dupuis 32:50b777bab5a4 104
Maxime Dupuis 35:7ee45f6d6484 105 TEST_F(TargetManagerTest, WhenReceivingCommandInBytesThenExecuteIt)
Maxime Dupuis 35:7ee45f6d6484 106 {
Maxime Dupuis 38:70a1c8bd2877 107 TargetManager target_manager(targets, tickers);
Maxime Dupuis 35:7ee45f6d6484 108
Maxime Dupuis 35:7ee45f6d6484 109 EXPECT_CALL(mock_target_b, ally_command());
Maxime Dupuis 38:70a1c8bd2877 110 EXPECT_CALL(mock_nerfus_ticker_b, start(0x1234));
Maxime Dupuis 35:7ee45f6d6484 111
Maxime Dupuis 35:7ee45f6d6484 112 std::vector<uint8_t> target_info_bytes;
Maxime Dupuis 35:7ee45f6d6484 113 target_info_bytes.push_back(0x01); //Second target
Maxime Dupuis 35:7ee45f6d6484 114 target_info_bytes.push_back(0x00); //Mode ally
Maxime Dupuis 35:7ee45f6d6484 115 target_info_bytes.push_back(0x12); //Timeout MSB
Maxime Dupuis 35:7ee45f6d6484 116 target_info_bytes.push_back(0x34); //Timeout MSB
Maxime Dupuis 35:7ee45f6d6484 117
Maxime Dupuis 35:7ee45f6d6484 118 target_manager.execute(target_info_bytes);
Maxime Dupuis 35:7ee45f6d6484 119 }
Maxime Dupuis 35:7ee45f6d6484 120