test_uart.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include <unity.h>
  2. #include <algorithm>
  3. #include <memory>
  4. #include "kbf.h"
  5. #include "kbf/uart.h"
  6. #define KBF_UART_TEST_ORIGINAL "Just some data."
  7. #define KBF_UART_TEST_FILTERED "Just_some_data."
  8. #define KBF_UART_TEST_WAIT_SIGNAL "signal"
  9. using std::shared_ptr;
  10. shared_ptr<kbf::UART> setupUart() {
  11. auto uart1 = new kbf::UART(1);
  12. uart1->setPins(33, 32, 25, 26); // TODO use Kconfig
  13. return shared_ptr<kbf::UART>(uart1);
  14. }
  15. static void filter(string &data, kbf::UART &uart) {
  16. TEST_ASSERT_EQUAL_STRING(KBF_UART_TEST_ORIGINAL, data.c_str());
  17. std::replace(data.begin(), data.end(), ' ', '_');
  18. }
  19. static void uartReadWriteMasterTest() {
  20. auto uart1 = setupUart();
  21. uart1->onRead = filter;
  22. auto data = uart1->read();
  23. TEST_ASSERT_EQUAL_STRING(KBF_UART_TEST_FILTERED, data.c_str());
  24. uart1->write(data);
  25. }
  26. static void uartReadWriteSlaveTest() {
  27. auto uart1 = setupUart();
  28. uart1->write(KBF_UART_TEST_ORIGINAL);
  29. auto data = uart1->read();
  30. TEST_ASSERT_EQUAL_STRING(KBF_UART_TEST_FILTERED, data.c_str());
  31. }
  32. TEST_CASE_MULTIPLE_DEVICES("UART read/write", "[kbf_uart][multidev]", uartReadWriteMasterTest, uartReadWriteSlaveTest);
  33. static int counter = 0;
  34. static void incrementCounter(string &, kbf::UART &) {
  35. counter++;
  36. }
  37. static void uartWaitMasterTest() {
  38. counter = 0;
  39. auto uart = setupUart();
  40. uart->onRead = incrementCounter;
  41. uart->waitFor(KBF_UART_TEST_WAIT_SIGNAL);
  42. TEST_ASSERT_EQUAL(3, counter);
  43. }
  44. static void uartWaitSlaveTest() {
  45. auto uart = setupUart();
  46. uart->write("not the signal");
  47. uart->write("still not the signal");
  48. uart->write(KBF_UART_TEST_WAIT_SIGNAL);
  49. }
  50. TEST_CASE_MULTIPLE_DEVICES("UART waitFor", "[kbf_uart][multidev]", uartWaitMasterTest, uartWaitSlaveTest);