bindings: cxx: tests: add tests for bulk events get_values
authorKent Gibson <warthog618@gmail.com>
Wed, 17 Jun 2020 03:06:37 +0000 (11:06 +0800)
committerBartosz Golaszewski <bgolaszewski@baylibre.com>
Wed, 17 Jun 2020 12:22:41 +0000 (14:22 +0200)
Add tests to verify the behaviour of get_values when applied to a bulk
of event lines.

Reported-by: Gerrit Wyen <ml@ionscale.com>
Signed-off-by: Kent Gibson <warthog618@gmail.com>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
bindings/cxx/tests/tests-event.cpp

index 63b6cc5f2f48e77f0567cfdc78c59b6750bbae5a..6d1c069a1b84451102af011622ee6b85940a58e3 100644 (file)
@@ -193,7 +193,7 @@ TEST_CASE("Event file descriptors can be used for polling", "[event]")
        }
 }
 
-TEST_CASE("It's possible to read values from lines requested for events", "[event][line]")
+TEST_CASE("It's possible to read a value from a line requested for events", "[event][line]")
 {
        mockup::probe_guard mockup_chips({ 8 });
        ::gpiod::chip chip(mockup::instance().chip_name(0));
@@ -219,6 +219,40 @@ TEST_CASE("It's possible to read values from lines requested for events", "[even
        }
 }
 
+TEST_CASE("It's possible to read values from lines requested for events", "[event][bulk]")
+{
+       mockup::probe_guard mockup_chips({ 8 });
+       ::gpiod::chip chip(mockup::instance().chip_name(0));
+       auto lines = chip.get_lines({ 0, 1, 2, 3, 4 });
+       ::gpiod::line_request config;
+
+       config.consumer = consumer.c_str();
+       config.request_type = ::gpiod::line_request::EVENT_BOTH_EDGES;
+
+       mockup::instance().chip_set_pull(0, 5, 1);
+
+       SECTION("active-high (default)")
+       {
+               lines.request(config);
+               REQUIRE(lines.get_values() == ::std::vector<int>({ 0, 0, 0, 0, 0 }));
+               mockup::instance().chip_set_pull(0, 1, 1);
+               mockup::instance().chip_set_pull(0, 3, 1);
+               mockup::instance().chip_set_pull(0, 4, 1);
+               REQUIRE(lines.get_values() == ::std::vector<int>({ 0, 1, 0, 1, 1 }));
+       }
+
+       SECTION("active-low")
+       {
+               config.flags = ::gpiod::line_request::FLAG_ACTIVE_LOW;
+               lines.request(config);
+               REQUIRE(lines.get_values() == ::std::vector<int>({ 1, 1, 1, 1, 1 }));
+               mockup::instance().chip_set_pull(0, 1, 1);
+               mockup::instance().chip_set_pull(0, 3, 1);
+               mockup::instance().chip_set_pull(0, 4, 1);
+               REQUIRE(lines.get_values() == ::std::vector<int>({ 1, 0, 1, 0, 0 }));
+       }
+}
+
 TEST_CASE("It's possible to read more than one line event", "[event][line]")
 {
        mockup::probe_guard mockup_chips({ 8 });