Skip to content

Commit 3d1a788

Browse files
author
Marcus Sonestedt
committed
ServoPID: Add unit tests for serial and fix bug receiving several messages
1 parent 7cb34e3 commit 3d1a788

File tree

7 files changed

+205
-77
lines changed

7 files changed

+205
-77
lines changed

ServoPID/ServoPID.sln.DotSettings

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
22
<s:Boolean x:Key="/Default/CodeInspection/CodeAnnotations/NamespacesWithAnnotations/=ServoPIDControl_002EAnnotations/@EntryIndexedValue">True</s:Boolean>
3+
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CppFormatting/INT_ALIGN_COMMENTS/@EntryValue">True</s:Boolean>
4+
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CppFormatting/INT_ALIGN_DECLARATION_NAMES/@EntryValue">True</s:Boolean>
5+
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_INDENTATION/@EntryValue">Inner</s:String>
6+
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CppFormatting/OUTDENT_COMMAS/@EntryValue">True</s:Boolean>
37
<s:Boolean x:Key="/Default/UserDictionary/Words/=Arduino/@EntryIndexedValue">True</s:Boolean>
48
<s:Boolean x:Key="/Default/UserDictionary/Words/=coeff/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

ServoPID/TestServoPID/ArduinoMock.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,26 @@ class MockSerial
7979
dataRead.assign(str.rbegin(), str.rend());
8080
}
8181

82+
void setMockData(const std::vector<char>& data)
83+
{
84+
dataRead.assign(data.rbegin(), data.rend());
85+
}
86+
8287
template<typename T>
8388
void println(T value, int format = 3) { dataWrite << value; }
8489

8590
template<typename T>
8691
void print(T value, int format = 3) { dataWrite << value; }
8792

93+
void flush() {}
94+
95+
void resetMock()
96+
{
97+
dataRead.clear();
98+
dataWrite.clear();
99+
dataWrite.str(std::string());
100+
}
101+
88102
std::vector<char> dataRead;
89103
std::stringstream dataWrite;
90104
};
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
#include "pch.h"
2+
3+
#include "../servopid.ino"
4+
5+
class SerialTest : public testing::Test
6+
{
7+
public:
8+
SerialTest() = default;
9+
10+
void SetUp() override
11+
{
12+
Serial.resetMock();
13+
serialLen = 0;
14+
memset(serialBuf, 0, sizeof serialBuf);
15+
}
16+
17+
std::string GetSerialLine()
18+
{
19+
std::string resp;
20+
std::getline(Serial.dataWrite, resp);
21+
return resp;
22+
}
23+
24+
void TearDown() override
25+
{
26+
}
27+
};
28+
29+
TEST_F(SerialTest, CheckFixture)
30+
{
31+
EXPECT_EQ(serialLen, 0);
32+
EXPECT_EQ(Serial.available(), 0);
33+
}
34+
35+
TEST_F(SerialTest, CheckReset)
36+
{
37+
Serial.setMockData("RST\n");
38+
EXPECT_GE(Serial.available(), 0);
39+
40+
mySerialEvent();
41+
EXPECT_EQ(serialLen, 0);
42+
43+
EXPECT_EQ("RST ACK", GetSerialLine());
44+
}
45+
46+
TEST_F(SerialTest, CheckGetNumServos)
47+
{
48+
const std::vector<char> data{2, char(Command::GetNumServos)};
49+
50+
Serial.setMockData(data);
51+
mySerialEvent();
52+
EXPECT_EQ(serialLen, 0);
53+
54+
EXPECT_EQ("NS 4", GetSerialLine());
55+
EXPECT_EQ(GetSerialLine().length(), 0);
56+
}
57+
58+
59+
TEST_F(SerialTest, CheckGetNumServosTwice)
60+
{
61+
const std::vector<char> data{2, char(Command::GetNumServos), 2, char(Command::GetNumServos)};
62+
63+
Serial.setMockData(data);
64+
mySerialEvent();
65+
EXPECT_EQ(serialLen, 0);
66+
67+
EXPECT_EQ("NS 4", GetSerialLine());
68+
EXPECT_EQ("NS 4", GetSerialLine());
69+
EXPECT_EQ(GetSerialLine(), "");
70+
}
71+
72+
73+
74+
TEST_F(SerialTest, GetServoParams)
75+
{
76+
const std::vector<char> data{2, char(Command::GetServoParams)};
77+
78+
Serial.setMockData(data);
79+
EXPECT_GE(Serial.available(), 0);
80+
81+
mySerialEvent();
82+
EXPECT_EQ(serialLen, 0);
83+
84+
using ::testing::StartsWith;
85+
86+
EXPECT_THAT(GetSerialLine(), StartsWith("SP 0 "));
87+
EXPECT_THAT(GetSerialLine(), StartsWith("SP 1 "));
88+
EXPECT_THAT(GetSerialLine(), StartsWith("SP 2 "));
89+
EXPECT_THAT(GetSerialLine(), StartsWith("SP 3 "));
90+
ASSERT_EQ(GetSerialLine(), "");
91+
}
92+
93+
TEST_F(SerialTest, GetServoData)
94+
{
95+
const std::vector<char> data{3, char(Command::GetServoData), 5};
96+
97+
Serial.setMockData(data);
98+
EXPECT_GE(Serial.available(), 0);
99+
100+
mySerialEvent();
101+
EXPECT_EQ(serialLen, 0);
102+
103+
using ::testing::StartsWith;
104+
105+
EXPECT_THAT(GetSerialLine(), StartsWith("SD 0 "));
106+
EXPECT_THAT(GetSerialLine(), StartsWith("SD 1 "));
107+
EXPECT_THAT(GetSerialLine(), StartsWith("SD 2 "));
108+
EXPECT_THAT(GetSerialLine(), StartsWith("SD 3 "));
109+
ASSERT_EQ(GetSerialLine(), "");
110+
}

ServoPID/TestServoPID/TestServoPID.vcxproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@
161161
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
162162
</ClCompile>
163163
<ClCompile Include="TestPID.cpp" />
164+
<ClCompile Include="TestSerial.cpp" />
164165
</ItemGroup>
165166
<ItemGroup>
166167
<None Include="README.md" />

ServoPID/TestServoPID/TestServoPID.vcxproj.filters

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@
3030
<ClCompile Include="PCA9685Mock.cpp">
3131
<Filter>Source Files</Filter>
3232
</ClCompile>
33+
<ClCompile Include="TestSerial.cpp">
34+
<Filter>Source Files</Filter>
35+
</ClCompile>
3336
</ItemGroup>
3437
<ItemGroup>
3538
<None Include="README.md" />

ServoPID/TestServoPID/pch.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include <gtest/gtest.h>
4+
#include <gmock/gmock.h>
45

56
#include <vector>
67
#include <string>

0 commit comments

Comments
 (0)