summaryrefslogtreecommitdiff
path: root/src/drivers/test/test_gpio_expander.cpp
blob: 7bf44d284f09ed6a5313ed02691f87fd91c8a442 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "gpio_expander.hpp"

#include "catch2/catch.hpp"

#include "i2c.hpp"
#include "i2c_fixture.hpp"

namespace drivers {

TEST_CASE("gpio expander", "[integration]") {
  I2CFixture i2c;
  GpioExpander expander;
  SECTION("with() writes when ") {
    // Initial value.
    expander.Read();
    REQUIRE(expander.get_input(GpioExpander::GPIO_1) == true);

    expander.with(
        [&](auto& gpio) { gpio.set_pin(GpioExpander::GPIO_1, false); });

    expander.Read();
    REQUIRE(expander.get_input(GpioExpander::GPIO_1) == false);
  }

  SECTION("setting individual pins") {
    expander.set_pin(GpioExpander::GPIO_1, true);
    expander.set_pin(GpioExpander::GPIO_2, false);
    expander.set_pin(GpioExpander::GPIO_3, false);
    expander.set_pin(GpioExpander::GPIO_4, true);

    expander.Write();
    expander.Read();

    REQUIRE(expander.get_input(GpioExpander::GPIO_1) == true);
    REQUIRE(expander.get_input(GpioExpander::GPIO_2) == false);
    REQUIRE(expander.get_input(GpioExpander::GPIO_3) == false);
    REQUIRE(expander.get_input(GpioExpander::GPIO_4) == true);

    expander.set_pin(GpioExpander::GPIO_1, false);
    expander.set_pin(GpioExpander::GPIO_2, true);
    expander.set_pin(GpioExpander::GPIO_3, true);
    expander.set_pin(GpioExpander::GPIO_4, false);

    expander.Write();
    expander.Read();

    REQUIRE(expander.get_input(GpioExpander::GPIO_1) == false);
    REQUIRE(expander.get_input(GpioExpander::GPIO_2) == true);
    REQUIRE(expander.get_input(GpioExpander::GPIO_3) == true);
    REQUIRE(expander.get_input(GpioExpander::GPIO_4) == false);
  }
}

}  // namespace drivers