Skip to content

Commit 9c4276e

Browse files
committed
chore: Only end() active interfaces
1 parent b24bcbe commit 9c4276e

File tree

4 files changed

+265
-15
lines changed

4 files changed

+265
-15
lines changed

src/Notecard.cpp

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -288,16 +288,26 @@ void Notecard::deleteResponse(J *rsp) const
288288
/**************************************************************************/
289289
void Notecard::end(void)
290290
{
291-
// Clear Communication Interfaces
292-
NoteSetFnI2C(0, 0, nullptr, nullptr, nullptr);
293-
NoteSetFnSerial(nullptr, nullptr, nullptr, nullptr);
291+
// Clear I2C Interface
292+
i2cTransmitFn i2c_is_set = nullptr;
293+
NoteGetFnI2C(nullptr, nullptr, nullptr, &i2c_is_set, nullptr);
294+
if (i2c_is_set) {
295+
// Delete Singletons
296+
noteI2c = make_note_i2c(nullptr);
297+
NoteSetFnI2C(0, 0, nullptr, nullptr, nullptr);
298+
}
299+
300+
// Clear Serial Interface
301+
serialTransmitFn serial_is_set = nullptr;
302+
NoteGetFnSerial(nullptr, &serial_is_set, nullptr, nullptr);
303+
if (serial_is_set) {
304+
// Delete Singletons
305+
noteSerial = make_note_serial(nullptr);
306+
NoteSetFnSerial(nullptr, nullptr, nullptr, nullptr);
307+
}
294308

295309
// Clear Platform Callbacks
296310
platformInit(false);
297-
298-
// Delete Singletons
299-
noteI2c = make_note_i2c(nullptr);
300-
noteSerial = make_note_serial(nullptr);
301311
}
302312

303313
/**************************************************************************/

test/Notecard.test.cpp

Lines changed: 100 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1372,7 +1372,46 @@ int test_notecard_begin_serial_sets_serial_receive_function_pointer_to_nullptr_w
13721372
return result;
13731373
}
13741374

1375-
int test_notecard_end_clears_all_i2c_interface_function_pointers()
1375+
int test_notecard_end_does_not_call_wire_end_when_the_i2c_interface_has_not_been_instantiated()
1376+
{
1377+
int result;
1378+
1379+
// Arrange
1380+
////////////
1381+
1382+
Notecard notecard;
1383+
NoteSerial_Mock mockSerial;
1384+
noteSetFnSerial_Parameters.reset();
1385+
twoWireEnd_Parameters.reset();
1386+
notecard.begin(&mockSerial);
1387+
noteGetFnI2C_Parameters.reset();
1388+
noteGetFnSerial_Parameters.reset();
1389+
make_note_i2c_Parameters.reset();
1390+
1391+
// Action
1392+
///////////
1393+
1394+
notecard.end();
1395+
1396+
// Assert
1397+
///////////
1398+
1399+
if (!make_note_i2c_Parameters.invoked)
1400+
{
1401+
result = 0;
1402+
}
1403+
else
1404+
{
1405+
result = static_cast<int>('n' + 'o' + 't' + 'e' + 'c' + 'a' + 'r' + 'd');
1406+
std::cout << "\33[31mFAILED\33[0m] " << __FILE__ << ":" << __LINE__ << std::endl;
1407+
std::cout << "\ttwoWireEnd_Parameters.invoked == " << !!twoWireEnd_Parameters.invoked << ", 0 (false)" << std::endl;
1408+
std::cout << "[";
1409+
}
1410+
1411+
return result;
1412+
}
1413+
1414+
int test_notecard_end_clears_all_i2c_interface_function_pointers_when_the_i2c_interface_has_been_instantiated()
13761415
{
13771416
int result;
13781417

@@ -1383,6 +1422,9 @@ int test_notecard_end_clears_all_i2c_interface_function_pointers()
13831422
NoteI2c_Mock mockI2c;
13841423
noteSetFnI2C_Parameters.reset();
13851424
notecard.begin(&mockI2c);
1425+
noteGetFnSerial_Parameters.reset();
1426+
noteGetFnI2C_Parameters.reset();
1427+
noteGetFnI2C_Parameters.transmitFn_result = reinterpret_cast<i2cTransmitFn>(0x1);
13861428

13871429
// Action
13881430
///////////
@@ -1411,7 +1453,46 @@ int test_notecard_end_clears_all_i2c_interface_function_pointers()
14111453
return result;
14121454
}
14131455

1414-
int test_notecard_end_clears_all_serial_interface_function_pointers()
1456+
int test_notecard_end_does_not_call_serial_end_when_the_serial_interface_has_not_been_instantiated()
1457+
{
1458+
int result;
1459+
1460+
// Arrange
1461+
////////////
1462+
1463+
Notecard notecard;
1464+
NoteSerial_Mock mockI2c;
1465+
noteSetFnDefault_Parameters.reset();
1466+
notecard.begin(&mockI2c);
1467+
hardwareSerialEnd_Parameters.reset();
1468+
noteGetFnI2C_Parameters.reset();
1469+
noteGetFnSerial_Parameters.reset();
1470+
make_note_serial_Parameters.reset();
1471+
1472+
// Action
1473+
///////////
1474+
1475+
notecard.end();
1476+
1477+
// Assert
1478+
///////////
1479+
1480+
if (!make_note_serial_Parameters.invoked)
1481+
{
1482+
result = 0;
1483+
}
1484+
else
1485+
{
1486+
result = static_cast<int>('n' + 'o' + 't' + 'e' + 'c' + 'a' + 'r' + 'd');
1487+
std::cout << "\33[31mFAILED\33[0m] " << __FILE__ << ":" << __LINE__ << std::endl;
1488+
std::cout << "\thardwareSerialEnd_Parameters.invoked == " << !!hardwareSerialEnd_Parameters.invoked << ", EXPECTED: 0 (false)" << std::endl;
1489+
std::cout << "[";
1490+
}
1491+
1492+
return result;
1493+
}
1494+
1495+
int test_notecard_end_clears_all_serial_interface_function_pointers_when_the_serial_interface_has_been_instantiated()
14151496
{
14161497
int result;
14171498

@@ -1422,6 +1503,9 @@ int test_notecard_end_clears_all_serial_interface_function_pointers()
14221503
NoteSerial_Mock mockSerial; // Instantiate NoteSerial (mocked)
14231504
noteSetFnDefault_Parameters.reset();
14241505
notecard.begin(&mockSerial);
1506+
noteGetFnI2C_Parameters.reset();
1507+
noteGetFnSerial_Parameters.reset();
1508+
noteGetFnSerial_Parameters.transmitFn_result = reinterpret_cast<serialTransmitFn>(0x1);
14251509

14261510
// Action
14271511
///////////
@@ -1493,7 +1577,7 @@ int test_notecard_end_clears_all_platform_interface_function_pointers()
14931577
return result;
14941578
}
14951579

1496-
int test_notecard_end_provides_nullptr_to_make_note_i2c_to_free_associated_memory()
1580+
int test_notecard_end_provides_nullptr_to_make_note_i2c_to_free_associated_memory_when_the_i2c_interface_has_been_instantiated()
14971581
{
14981582
int result;
14991583

@@ -1505,6 +1589,9 @@ int test_notecard_end_provides_nullptr_to_make_note_i2c_to_free_associated_memor
15051589
make_note_i2c_Parameters.reset();
15061590
make_note_i2c_Parameters.i2c_parameters = &Wire;
15071591
notecard.begin(&mockI2c);
1592+
noteGetFnSerial_Parameters.reset();
1593+
noteGetFnI2C_Parameters.reset();
1594+
noteGetFnI2C_Parameters.transmitFn_result = reinterpret_cast<i2cTransmitFn>(0x1);
15081595

15091596
// Action
15101597
////////////
@@ -1529,7 +1616,7 @@ int test_notecard_end_provides_nullptr_to_make_note_i2c_to_free_associated_memor
15291616
return result;
15301617
}
15311618

1532-
int test_notecard_end_invokes_make_note_serial_nullptr_method_to_free_associated_memory()
1619+
int test_notecard_end_invokes_make_note_serial_nullptr_method_to_free_associated_memory_when_the_serial_interface_has_been_instantiated()
15331620
{
15341621
int result;
15351622

@@ -1541,6 +1628,9 @@ int test_notecard_end_invokes_make_note_serial_nullptr_method_to_free_associated
15411628
make_note_serial_Parameters.reset();
15421629
make_note_serial_Parameters.serial_parameters = &Serial;
15431630
notecard.begin(&mockSerial);
1631+
noteGetFnI2C_Parameters.reset();
1632+
noteGetFnSerial_Parameters.reset();
1633+
noteGetFnSerial_Parameters.transmitFn_result = reinterpret_cast<serialTransmitFn>(0x1);
15441634

15451635
// Action
15461636
////////////
@@ -4828,11 +4918,13 @@ int main(void)
48284918
{test_notecard_begin_serial_sets_serial_available_function_pointer_to_nullptr_when_interface_has_not_been_instantiated, "test_notecard_begin_serial_sets_serial_available_function_pointer_to_nullptr_when_interface_has_not_been_instantiated"},
48294919
{test_notecard_begin_serial_shares_a_serial_receive_function_pointer, "test_notecard_begin_serial_shares_a_serial_receive_function_pointer"},
48304920
{test_notecard_begin_serial_sets_serial_receive_function_pointer_to_nullptr_when_interface_has_not_been_instantiated, "test_notecard_begin_serial_sets_serial_receive_function_pointer_to_nullptr_when_interface_has_not_been_instantiated"},
4831-
{test_notecard_end_clears_all_i2c_interface_function_pointers, "test_notecard_end_clears_all_i2c_interface_function_pointers"},
4832-
{test_notecard_end_clears_all_serial_interface_function_pointers, "test_notecard_end_clears_all_serial_interface_function_pointers"},
4921+
{test_notecard_end_clears_all_i2c_interface_function_pointers_when_the_i2c_interface_has_been_instantiated, "test_notecard_end_clears_all_i2c_interface_function_pointers_when_the_i2c_interface_has_been_instantiated"},
4922+
{test_notecard_end_does_not_call_wire_end_when_the_i2c_interface_has_not_been_instantiated, "test_notecard_end_does_not_call_wire_end_when_the_i2c_interface_has_not_been_instantiated"},
4923+
{test_notecard_end_does_not_call_serial_end_when_the_serial_interface_has_not_been_instantiated, "test_notecard_end_does_not_call_serial_end_when_the_serial_interface_has_not_been_instantiated"},
4924+
{test_notecard_end_clears_all_serial_interface_function_pointers_when_the_serial_interface_has_been_instantiated, "test_notecard_end_clears_all_serial_interface_function_pointers_when_the_serial_interface_has_been_instantiated"},
48334925
{test_notecard_end_clears_all_platform_interface_function_pointers, "test_notecard_end_clears_all_platform_interface_function_pointers"},
4834-
{test_notecard_end_provides_nullptr_to_make_note_i2c_to_free_associated_memory, "test_notecard_end_provides_nullptr_to_make_note_i2c_to_free_associated_memory"},
4835-
{test_notecard_end_invokes_make_note_serial_nullptr_method_to_free_associated_memory, "test_notecard_end_invokes_make_note_serial_nullptr_method_to_free_associated_memory"},
4926+
{test_notecard_end_provides_nullptr_to_make_note_i2c_to_free_associated_memory_when_the_i2c_interface_has_been_instantiated, "test_notecard_end_provides_nullptr_to_make_note_i2c_to_free_associated_memory_when_the_i2c_interface_has_been_instantiated"},
4927+
{test_notecard_end_invokes_make_note_serial_nullptr_method_to_free_associated_memory_when_the_serial_interface_has_been_instantiated, "test_notecard_end_invokes_make_note_serial_nullptr_method_to_free_associated_memory_when_the_serial_interface_has_been_instantiated"},
48364928
{test_notecard_setDebugOutputStream_shares_a_debug_log_function_pointer, "test_notecard_setDebugOutputStream_shares_a_debug_log_function_pointer"},
48374929
{test_notecard_setDebugOutputStream_clears_the_debug_log_function_pointer_when_nullptr_is_provided, "test_notecard_setDebugOutputStream_clears_the_debug_log_function_pointer_when_nullptr_is_provided"},
48384930
{test_notecard_clearDebugOutputStream_clears_the_debug_log_function_pointer, "test_notecard_clearDebugOutputStream_clears_the_debug_log_function_pointer"},

test/mock/mock-note-c-note.c

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ JAddIntToObject_Parameters jAddIntToObject_Parameters;
44
NoteDebug_Parameters noteDebug_Parameters;
55
NoteDebugSyncStatus_Parameters noteDebugSyncStatus_Parameters;
66
NoteDeleteResponse_Parameters noteDeleteResponse_Parameters;
7+
NoteGetFnI2C_Parameters noteGetFnI2C_Parameters;
8+
NoteGetFnSerial_Parameters noteGetFnSerial_Parameters;
79
NoteNewCommand_Parameters noteNewCommand_Parameters;
810
NoteNewRequest_Parameters noteNewRequest_Parameters;
911
NoteRequest_Parameters noteRequest_Parameters;
@@ -97,6 +99,65 @@ NoteDebugSyncStatus(
9799
return noteDebugSyncStatus_Parameters.result;
98100
}
99101

102+
void NoteGetFnI2C(uint32_t *notecardAddr, uint32_t *maxTransmitSize,
103+
i2cResetFn *resetFn, i2cTransmitFn *transmitFn,
104+
i2cReceiveFn *receiveFn
105+
) {
106+
// Record invocation(s)
107+
++noteGetFnI2C_Parameters.invoked;
108+
109+
// Stash parameter(s)
110+
noteGetFnI2C_Parameters.notecardAddr = notecardAddr;
111+
noteGetFnI2C_Parameters.maxTransmitSize = maxTransmitSize;
112+
noteGetFnI2C_Parameters.resetFn = resetFn;
113+
noteGetFnI2C_Parameters.transmitFn = transmitFn;
114+
noteGetFnI2C_Parameters.receiveFn = receiveFn;
115+
116+
// Return user-supplied result
117+
if (notecardAddr) {
118+
*notecardAddr = noteGetFnI2C_Parameters.notecardAddr_result;
119+
}
120+
if (maxTransmitSize) {
121+
*maxTransmitSize = noteGetFnI2C_Parameters.maxTransmitSize_result;
122+
}
123+
if (resetFn) {
124+
*resetFn = noteGetFnI2C_Parameters.resetFn_result;
125+
}
126+
if (transmitFn) {
127+
*transmitFn = noteGetFnI2C_Parameters.transmitFn_result;
128+
}
129+
if (receiveFn) {
130+
*receiveFn = noteGetFnI2C_Parameters.receiveFn_result;
131+
}
132+
}
133+
134+
void NoteGetFnSerial(serialResetFn *resetFn, serialTransmitFn *transmitFn,
135+
serialAvailableFn *availFn, serialReceiveFn *receiveFn
136+
) {
137+
// Record invocation(s)
138+
++noteGetFnSerial_Parameters.invoked;
139+
140+
// Stash parameter(s)
141+
noteGetFnSerial_Parameters.resetFn = resetFn;
142+
noteGetFnSerial_Parameters.transmitFn = transmitFn;
143+
noteGetFnSerial_Parameters.availFn = availFn;
144+
noteGetFnSerial_Parameters.receiveFn = receiveFn;
145+
146+
// Return user-supplied result
147+
if (resetFn) {
148+
*resetFn = noteGetFnSerial_Parameters.resetFn_result;
149+
}
150+
if (transmitFn) {
151+
*transmitFn = noteGetFnSerial_Parameters.transmitFn_result;
152+
}
153+
if (availFn) {
154+
*availFn = noteGetFnSerial_Parameters.availFn_result;
155+
}
156+
if (receiveFn) {
157+
*receiveFn = noteGetFnSerial_Parameters.receiveFn_result;
158+
}
159+
}
160+
100161
J *
101162
NoteNewCommand(
102163
const char * request_

test/mock/mock-parameters.hpp

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#ifndef MOCK_PARAMETERS_HPP
22
#define MOCK_PARAMETERS_HPP
33

4+
#include <cstdint>
45
#include <string>
56
#include <vector>
67

@@ -111,6 +112,90 @@ struct NoteDeleteResponse_Parameters {
111112
J *response;
112113
};
113114

115+
struct NoteGetFnI2C_Parameters {
116+
NoteGetFnI2C_Parameters(
117+
void
118+
) :
119+
invoked(0),
120+
notecardAddr(nullptr),
121+
maxTransmitSize(nullptr),
122+
resetFn(nullptr),
123+
transmitFn(nullptr),
124+
receiveFn(nullptr),
125+
notecardAddr_result(0),
126+
maxTransmitSize_result(0),
127+
resetFn_result(nullptr),
128+
transmitFn_result(nullptr),
129+
receiveFn_result(nullptr)
130+
{ }
131+
void
132+
reset (
133+
void
134+
) {
135+
invoked = 0;
136+
notecardAddr = nullptr;
137+
maxTransmitSize = nullptr;
138+
resetFn = nullptr;
139+
transmitFn = nullptr;
140+
receiveFn = nullptr;
141+
notecardAddr_result = 0;
142+
maxTransmitSize_result = 0;
143+
resetFn_result = nullptr;
144+
transmitFn_result = nullptr;
145+
receiveFn_result = nullptr;
146+
}
147+
size_t invoked;
148+
uint32_t * notecardAddr;
149+
uint32_t * maxTransmitSize;
150+
i2cResetFn * resetFn;
151+
i2cTransmitFn * transmitFn;
152+
i2cReceiveFn * receiveFn;
153+
uint32_t notecardAddr_result;
154+
uint32_t maxTransmitSize_result;
155+
i2cResetFn resetFn_result;
156+
i2cTransmitFn transmitFn_result;
157+
i2cReceiveFn receiveFn_result;
158+
};
159+
160+
struct NoteGetFnSerial_Parameters {
161+
NoteGetFnSerial_Parameters(
162+
void
163+
) :
164+
invoked(0),
165+
resetFn(nullptr),
166+
transmitFn(nullptr),
167+
availFn(nullptr),
168+
receiveFn(nullptr),
169+
resetFn_result(nullptr),
170+
transmitFn_result(nullptr),
171+
availFn_result(nullptr),
172+
receiveFn_result(nullptr)
173+
{ }
174+
void
175+
reset (
176+
void
177+
) {
178+
invoked = 0;
179+
resetFn = nullptr;
180+
transmitFn = nullptr;
181+
availFn = nullptr;
182+
receiveFn = nullptr;
183+
resetFn_result = nullptr;
184+
transmitFn_result = nullptr;
185+
availFn_result = nullptr;
186+
receiveFn_result = nullptr;
187+
}
188+
size_t invoked;
189+
serialResetFn * resetFn;
190+
serialTransmitFn * transmitFn;
191+
serialAvailableFn * availFn;
192+
serialReceiveFn * receiveFn;
193+
serialResetFn resetFn_result;
194+
serialTransmitFn transmitFn_result;
195+
serialAvailableFn availFn_result;
196+
serialReceiveFn receiveFn_result;
197+
};
198+
114199
struct NoteNewCommand_Parameters {
115200
NoteNewCommand_Parameters(
116201
void
@@ -457,6 +542,8 @@ extern JAddIntToObject_Parameters jAddIntToObject_Parameters;
457542
extern NoteDebug_Parameters noteDebug_Parameters;
458543
extern NoteDebugSyncStatus_Parameters noteDebugSyncStatus_Parameters;
459544
extern NoteDeleteResponse_Parameters noteDeleteResponse_Parameters;
545+
extern NoteGetFnI2C_Parameters noteGetFnI2C_Parameters;
546+
extern NoteGetFnSerial_Parameters noteGetFnSerial_Parameters;
460547
extern NoteNewCommand_Parameters noteNewCommand_Parameters;
461548
extern NoteNewRequest_Parameters noteNewRequest_Parameters;
462549
extern NoteRequest_Parameters noteRequest_Parameters;

0 commit comments

Comments
 (0)