blob: 81a7c1448d671bfc339ff8d917737d1e3e29a7f9 [file] [log] [blame]
Brian Silvermanf7f267a2017-02-04 16:16:08 -08001/*----------------------------------------------------------------------------*/
2/* Copyright (c) FIRST 2014-2017. 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 "Relay.h" // NOLINT(build/include_order)
9
10#include "DigitalInput.h"
11#include "TestBench.h"
12#include "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 * Test the relay by setting it forward, reverse, off, and on.
41 */
42TEST_F(RelayTest, Relay) {
43 Reset();
44
45 // set the relay to forward
46 m_relay->Set(Relay::kForward);
47 Wait(kDelayTime);
48 EXPECT_TRUE(m_forward->Get()) << "Relay did not set forward";
49 EXPECT_FALSE(m_reverse->Get()) << "Relay did not set forward";
50
51 // set the relay to reverse
52 m_relay->Set(Relay::kReverse);
53 Wait(kDelayTime);
54 EXPECT_TRUE(m_reverse->Get()) << "Relay did not set reverse";
55 EXPECT_FALSE(m_forward->Get()) << "Relay did not set reverse";
56
57 // set the relay to off
58 m_relay->Set(Relay::kOff);
59 Wait(kDelayTime);
60 EXPECT_FALSE(m_forward->Get()) << "Relay did not set off";
61 EXPECT_FALSE(m_reverse->Get()) << "Relay did not set off";
62
63 // set the relay to on
64 m_relay->Set(Relay::kOn);
65 Wait(kDelayTime);
66 EXPECT_TRUE(m_forward->Get()) << "Relay did not set on";
67 EXPECT_TRUE(m_reverse->Get()) << "Relay did not set on";
68}