Skip to content

Commit abee6d1

Browse files
committed
Fixing a couple of issues within StreamMock so that it's now fully functional
1 parent ff7e4a6 commit abee6d1

File tree

3 files changed

+66
-17
lines changed

3 files changed

+66
-17
lines changed

test/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ set(TEST_SRCS
4848
src/Ringbuffer/test_read_char.cpp
4949
src/Ringbuffer/test_store_char.cpp
5050
src/Stream/test_getTimeout.cpp
51+
src/Stream/test_readString.cpp
5152
src/Stream/test_setTimeout.cpp
5253
src/String/test_concat.cpp
5354
src/String/test_operators.cpp
@@ -91,8 +92,9 @@ set(TEST_TARGET_SRCS
9192
src/main.cpp
9293
src/dtostrf.cpp
9394
src/itoa.cpp
94-
src/PrintMock.cpp
9595
src/MillisFake.cpp
96+
src/PrintMock.cpp
97+
src/StreamMock.cpp
9698
${TEST_SRCS}
9799
${TEST_DUT_SRCS}
98100
)

test/include/StreamMock.h

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* INCLUDE
1010
**************************************************************************************/
1111

12-
#include <sstream>
12+
#include <deque>
1313

1414
#include <Stream.h>
1515

@@ -20,21 +20,17 @@
2020
class StreamMock : public arduino::Stream
2121
{
2222
public:
23-
std::stringstream _ss;
24-
25-
virtual size_t write(uint8_t ch) override { _ss << static_cast<char>(ch); return 1; }
26-
virtual int available() override { return _ss.gcount(); }
27-
virtual int read() override
28-
{
29-
char ch;
30-
_ss >> ch;
31-
return ch;
32-
}
33-
virtual int peek() override
34-
{
35-
char ch = _ss.peek();
36-
return ch;
37-
}
23+
24+
void operator << (char const * str);
25+
26+
virtual size_t write(uint8_t ch) override;
27+
virtual int available() override;
28+
virtual int read() override;
29+
virtual int peek() override;
30+
31+
private:
32+
std::deque<char> _stream;
33+
3834
};
3935

4036
#endif /* STREAM_MOCK_H_ */

test/src/StreamMock.cpp

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*
2+
* Copyright (c) 2020 Arduino. All rights reserved.
3+
*/
4+
5+
/**************************************************************************************
6+
* INCLUDE
7+
**************************************************************************************/
8+
9+
#include <StreamMock.h>
10+
11+
/**************************************************************************************
12+
* PUBLIC MEMBER FUNCTIONS
13+
**************************************************************************************/
14+
15+
void StreamMock::operator << (char const * str)
16+
{
17+
for (size_t c = 0; c < strlen(str); c++)
18+
_stream.push_back(str[c]);
19+
}
20+
21+
size_t StreamMock::write(uint8_t ch)
22+
{
23+
_stream.push_back(static_cast<char>(ch));
24+
return 1;
25+
}
26+
27+
int StreamMock::available()
28+
{
29+
return _stream.size();
30+
}
31+
32+
int StreamMock::read()
33+
{
34+
if (available() == 0)
35+
return -1;
36+
37+
/* Extract first/oldest element. */
38+
char const c = _stream.at(0);
39+
/* Erase first/oldest element. */
40+
_stream.pop_front();
41+
42+
return c;
43+
}
44+
45+
int StreamMock::peek()
46+
{
47+
if (available() == 0)
48+
return -1;
49+
50+
return _stream.at(0);
51+
}

0 commit comments

Comments
 (0)