blob: eb45eebbe9130f66097dcdbae9ba7bfbcecb2bf4 [file] [log] [blame]
Brian Silverman41cdd3e2019-01-19 19:48:58 -08001/*----------------------------------------------------------------------------*/
2/* Copyright (c) 2014-2018 FIRST. All Rights Reserved. */
3/* Open Source Software - may be modified and shared by FRC teams. The code */
4/* must be accompanied by the FIRST BSD license file in the root directory of */
5/* the project. */
6/*----------------------------------------------------------------------------*/
7
8#include "frc/Relay.h" // NOLINT(build/include_order)
9
10#include "TestBench.h"
11#include "frc/DigitalInput.h"
12#include "frc/Timer.h"
13#include "gtest/gtest.h"
14
15using namespace frc;
16
17static const double kDelayTime = 0.01;
18
19class RelayTest : public testing::Test {
20 protected:
21 Relay* m_relay;
22 DigitalInput* m_forward;
23 DigitalInput* m_reverse;
24
25 void SetUp() override {
26 m_relay = new Relay(TestBench::kRelayChannel);
27 m_forward = new DigitalInput(TestBench::kFakeRelayForward);
28 m_reverse = new DigitalInput(TestBench::kFakeRelayReverse);
29 }
30
31 void TearDown() override {
32 delete m_relay;
33 delete m_forward;
34 delete m_reverse;
35 }
36
37 void Reset() { m_relay->Set(Relay::kOff); }
38};
39
40/**
41 * Test the relay by setting it forward, reverse, off, and on.
42 */
43TEST_F(RelayTest, Relay) {
44 Reset();
45
46 // set the relay to forward
47 m_relay->Set(Relay::kForward);
48 Wait(kDelayTime);
49 EXPECT_TRUE(m_forward->Get()) << "Relay did not set forward";
50 EXPECT_FALSE(m_reverse->Get()) << "Relay did not set forward";
51 EXPECT_EQ(m_relay->Get(), Relay::kForward);
52
53 // set the relay to reverse
54 m_relay->Set(Relay::kReverse);
55 Wait(kDelayTime);
56 EXPECT_TRUE(m_reverse->Get()) << "Relay did not set reverse";
57 EXPECT_FALSE(m_forward->Get()) << "Relay did not set reverse";
58 EXPECT_EQ(m_relay->Get(), Relay::kReverse);
59
60 // set the relay to off
61 m_relay->Set(Relay::kOff);
62 Wait(kDelayTime);
63 EXPECT_FALSE(m_forward->Get()) << "Relay did not set off";
64 EXPECT_FALSE(m_reverse->Get()) << "Relay did not set off";
65 EXPECT_EQ(m_relay->Get(), Relay::kOff);
66
67 // set the relay to on
68 m_relay->Set(Relay::kOn);
69 Wait(kDelayTime);
70 EXPECT_TRUE(m_forward->Get()) << "Relay did not set on";
71 EXPECT_TRUE(m_reverse->Get()) << "Relay did not set on";
72 EXPECT_EQ(m_relay->Get(), Relay::kOn);
73
74 // test forward direction
75 delete m_relay;
76 m_relay = new Relay(TestBench::kRelayChannel, Relay::kForwardOnly);
77
78 m_relay->Set(Relay::kOn);
79 Wait(kDelayTime);
80 EXPECT_TRUE(m_forward->Get()) << "Relay did not set forward";
81 EXPECT_FALSE(m_reverse->Get()) << "Relay did not set forward";
82 EXPECT_EQ(m_relay->Get(), Relay::kOn);
83
84 // test reverse direction
85 delete m_relay;
86 m_relay = new Relay(TestBench::kRelayChannel, Relay::kReverseOnly);
87
88 m_relay->Set(Relay::kOn);
89 Wait(kDelayTime);
90 EXPECT_FALSE(m_forward->Get()) << "Relay did not set reverse";
91 EXPECT_TRUE(m_reverse->Get()) << "Relay did not set reverse";
92 EXPECT_EQ(m_relay->Get(), Relay::kOn);
93}