Avionics
Core avionics package for CURE flight computers
Loading...
Searching...
No Matches
serial_mock.h
Go to the documentation of this file.
1// Mocks for all serial related Arduino functions
2
3#pragma once
4
5#include <stdint.h>
6#include <stdio.h>
7
8#include <algorithm>
9#include <cstdarg>
10#include <cstdint>
11#include <iostream>
12#include <sstream>
13#include <string>
14#include <vector>
15
17public:
18 // Store the calls and their parameters
19 std::vector<std::string> printCalls;
20 std::vector<std::string> printlnCalls;
21 std::vector<std::string> printfCalls;
22
23 template<typename T>
24 void print(const T& message) {
25 std::ostringstream oss;
26 oss << message;
27 printCalls.push_back(oss.str());
28 std::cout << message;
29 }
30
31 template<typename T>
32 void println(const T& message) {
33 std::ostringstream oss;
34 oss << message;
35 printlnCalls.push_back(oss.str());
36 std::cout << message << std::endl;
37 }
38
39 // printf
40 void printf(const char *fmt, ...) {
41 char buffer[256];
42 va_list args;
43 va_start(args, fmt);
44 vsnprintf(buffer, sizeof(buffer), fmt, args);
45 va_end(args);
46 printfCalls.push_back(buffer);
47 std::cout << buffer;
48 }
49
50 // Clear the stored calls
51 void clear() {
52 printCalls.clear();
53 printlnCalls.clear();
54 printfCalls.clear();
55 }
56
57 // write
58 size_t write(uint8_t) { return 0; }
59 size_t write(const uint8_t* /*buffer*/, size_t size) { return size; }
60};
61
63 static MockSerial serial;
64 return serial;
65}
66
68 static MockSerial serial1;
69 return serial1;
70}
71
72// Header-defined global references for host-native builds.
73// Each translation unit gets an internal reference bound to the same
74// function-local static instance.
75static MockSerial& Serial = serial_global_instance();
76static MockSerial& Serial1 = serial1_global_instance();
77
79
80
81// Mock Stream class
82class Stream {
83public:
84 std::vector<uint8_t> writeCalls;
85
86 virtual int available() { return 0; }
87 virtual int read() { return -1; }
88 virtual int peek() { return -1; }
89 virtual void flush() {}
90 virtual size_t write(uint8_t byte) {
91 this->writeCalls.push_back(byte);
92 return 0;
93 }
94 virtual size_t write(const char* /*str*/) { return 0; }
95 virtual size_t write(const char* /*buffer*/, size_t size) { return size; } // for string literals
96 virtual size_t write(const uint8_t* /*buffer*/, size_t size) { return size; }
98 writeCalls.clear();
99 }
100
101 // Read a string until a newline character
102 std::string readStringUntil(char terminator) {
103 std::string result;
104 const int terminatorInt = static_cast<int>(static_cast<unsigned char>(terminator));
105 int c = read(); // NOLINT(cppcoreguidelines-init-variables)
106 while (c != -1 && c != terminatorInt) {
107 result += static_cast<char>(c);
108 c = read();
109 }
110 return result;
111 }
112
113 template<typename T>
114 void print(const T& message) {
115 std::cout << message;
116 }
117
118 template<typename T>
119 void println(const T& message) {
120 std::cout << message << std::endl;
121 }
122
123 void println() {
124 std::cout << std::endl;
125 }
126
127 // Read a string
128 std::string readString() {
129 std::string result;
130 int c = read(); // NOLINT(cppcoreguidelines-init-variables)
131 while (c != -1) {
132 result += static_cast<char>(c);
133 c = read();
134 }
135 return result;
136 }
137
138 void println(const char* message) {
139 std::cout << message << std::endl;
140 }
141};
std::vector< std::string > printlnCalls
Definition serial_mock.h:20
std::vector< std::string > printfCalls
Definition serial_mock.h:21
std::vector< std::string > printCalls
Definition serial_mock.h:19
void printf(const char *fmt,...)
Definition serial_mock.h:40
size_t write(const uint8_t *, size_t size)
Definition serial_mock.h:59
void clear()
Definition serial_mock.h:51
void println(const T &message)
Definition serial_mock.h:32
size_t write(uint8_t)
Definition serial_mock.h:58
void print(const T &message)
Definition serial_mock.h:24
void println()
virtual size_t write(const uint8_t *, size_t size)
Definition serial_mock.h:96
std::vector< uint8_t > writeCalls
Definition serial_mock.h:84
virtual size_t write(const char *)
Definition serial_mock.h:94
virtual int peek()
Definition serial_mock.h:88
virtual int available()
Definition serial_mock.h:86
void println(const T &message)
virtual size_t write(const char *, size_t size)
Definition serial_mock.h:95
void println(const char *message)
void clearWriteCalls()
Definition serial_mock.h:97
std::string readStringUntil(char terminator)
virtual void flush()
Definition serial_mock.h:89
virtual size_t write(uint8_t byte)
Definition serial_mock.h:90
void print(const T &message)
std::string readString()
virtual int read()
Definition serial_mock.h:87
MockSerial & serial_global_instance()
Definition serial_mock.h:62
MockSerial & serial1_global_instance()
Definition serial_mock.h:67
MockSerial HardwareSerial
Definition serial_mock.h:78