diff --git a/examples/mock-injection/test/test_my_service.cpp b/examples/mock-injection/test/test_my_service.cpp index 34fd366..9ee791a 100755 --- a/examples/mock-injection/test/test_my_service.cpp +++ b/examples/mock-injection/test/test_my_service.cpp @@ -19,7 +19,7 @@ void test_connect(void) When(OverloadedMethod(ArduinoFake(Client), println, size_t(const char *))).AlwaysReturn(); When(OverloadedMethod(ArduinoFake(Client), connect, int(const char*, uint16_t))).Return(1); - std::shared_ptr clientMock(ArduinoFakeMock(Client)); + Client * clientMock(ArduinoFakeInstance0(Client)); MyService service(clientMock); diff --git a/platformio.ini b/platformio.ini index 5cfd931..c85daa0 100644 --- a/platformio.ini +++ b/platformio.ini @@ -20,4 +20,6 @@ build_flags = -std=c++14 ; Recommended for fakeit -O0 + -I src/arduino + -D USBCON debug_build_flags = -O0 -g diff --git a/src/ArduinoFake.h b/src/ArduinoFake.h index 64169c1..d26837c 100644 --- a/src/ArduinoFake.h +++ b/src/ArduinoFake.h @@ -9,18 +9,29 @@ #include #include #include +#if defined(abs) +#undef abs +#endif #include -#include "arduino/Arduino.h" - -#include "Function.h" -#include "Stream.h" -#include "Serial.h" -#include "Wire.h" -#include "Client.h" -#include "Print.h" -#include "SPI.h" -#include "EEPROM.h" +#include +#include +#include +#include +#include +#include +#include +#include + +#include "FunctionFake.h" + +using PrintFake = Print; +using ClientFake = Client; +using StreamFake = Stream; +using SerialFake = Serial_; +using WireFake = TwoWire; +using SPIFake = SPIClass; +using EEPROMFake = EEPROMClass; #define CONCAT2(x,y) x##y #define CONCAT(x,y) CONCAT2(x,y) @@ -45,9 +56,6 @@ #define ArduinoFakeInstance(clazz) \ getArduinoFakeContext()->getFake(clazz) -#define ArduinoFakeMock(mock) \ - std::shared_ptr(new mock##FakeProxy(ArduinoFakeInstance0(mock))) - #define _ArduinoFakeGetMock(mock) \ getArduinoFakeContext()->_##mock @@ -73,17 +81,14 @@ struct IFake virtual void* toFake(void) = 0; }; -template > -struct ProxiedArduinoFake_t : public BaseT, IFake -{ +template > +struct ArduinoFake_t : public BaseT, IFake +{ // Proxy to fake template FakeT* getFake(ArduinoT *instance) { - if (dynamic_cast(instance)) { - return dynamic_cast(instance)->getFake(); - } - throw std::runtime_error("Unknown instance"); + return static_cast(toFake()); } // Get the 'real' fake - the one that is actually mocked. @@ -123,12 +128,12 @@ class FakeOverride_t std::unordered_map _mapping; }; -template > -struct OverrideableProxiedArduinoFake_t : public BaseT +template > +struct OverrideableArduinoFake_t : public BaseT { FakeOverride_t &_overrides; - OverrideableProxiedArduinoFake_t(FakeOverride_t &overrides) + OverrideableArduinoFake_t(FakeOverride_t &overrides) : BaseT() , _overrides(overrides) { @@ -150,13 +155,13 @@ class ArduinoFakeContext public: FakeOverride_t _fakeOverrides; fakeit::Mock _Function; - OverrideableProxiedArduinoFake_t _Serial; - OverrideableProxiedArduinoFake_t _Wire; - OverrideableProxiedArduinoFake_t _Stream; - OverrideableProxiedArduinoFake_t _Client; - OverrideableProxiedArduinoFake_t _Print; - OverrideableProxiedArduinoFake_t _SPI; - OverrideableProxiedArduinoFake_t _EEPROM; + OverrideableArduinoFake_t _Serial; + OverrideableArduinoFake_t _Wire; + OverrideableArduinoFake_t _Stream; + OverrideableArduinoFake_t _Client; + OverrideableArduinoFake_t _Print; + OverrideableArduinoFake_t _SPI; + OverrideableArduinoFake_t _EEPROM; #define _ArduinoFakeInstanceGetter1(mock) \ mock##Fake* mock() \ diff --git a/src/Client.h b/src/Client.h deleted file mode 100644 index c8d83f0..0000000 --- a/src/Client.h +++ /dev/null @@ -1 +0,0 @@ -#include "ClientFake.h" diff --git a/src/ClientFake.cpp b/src/ClientFake.cpp index 9a9cc3d..e7d90ab 100644 --- a/src/ClientFake.cpp +++ b/src/ClientFake.cpp @@ -1,5 +1,4 @@ #include "ArduinoFake.h" -#include "ClientFake.h" #include int Client::connect(IPAddress ip, uint16_t port) @@ -59,10 +58,5 @@ uint8_t Client::connected() Client::operator bool() { - return 1 == 1; -} - -ClientFakeProxy::operator bool() -{ - return 1 == 1; -} + return ArduinoFakeInstance(this)->operator bool(); +} \ No newline at end of file diff --git a/src/ClientFake.h b/src/ClientFake.h deleted file mode 100644 index 0a4b560..0000000 --- a/src/ClientFake.h +++ /dev/null @@ -1,103 +0,0 @@ -#pragma once - -#include "StreamFake.h" -#include "arduino/Client.h" - -struct ClientFake : public StreamFake -{ - virtual int connect(IPAddress ip, uint16_t port) = 0; - - virtual int connect(const char *host, uint16_t port) = 0; - - virtual size_t write(uint8_t) = 0; - - virtual size_t write(const uint8_t *buf, size_t size) = 0; - - virtual int available() = 0; - - virtual int read() = 0; - - virtual int read(uint8_t *buf, size_t size) = 0; - - virtual int peek() = 0; - - virtual void flush() = 0; - - virtual void stop() = 0; - - virtual uint8_t connected() = 0; -}; - -class ClientFakeProxy : public StreamFakeProxy, public Client -{ - private: - ClientFake* clientFake; - - public: - ClientFakeProxy(ClientFake* fake) : StreamFakeProxy(fake) - { - clientFake = fake; - } - - int connect(IPAddress ip, uint16_t port) - { - return clientFake->connect(ip, port); - } - - int connect(const char *host, uint16_t port) - { - return clientFake->connect(host, port); - } - - size_t write(uint8_t value) - { - return clientFake->write(value); - } - - size_t write(const uint8_t *buf, size_t size) - { - return clientFake->write(buf, size); - } - - int available() - { - return clientFake->available(); - } - - int read() - { - return clientFake->read(); - } - - int read(uint8_t *buf, size_t size) - { - return clientFake->read(buf, size); - } - - int peek() - { - return clientFake->peek(); - } - - void flush() - { - clientFake->flush(); - } - - void stop() - { - clientFake->stop(); - } - - uint8_t connected() - { - return clientFake->connected(); - } - - virtual operator bool(); - - ClientFake* getFake() - { - return clientFake; - } -}; diff --git a/src/EEPROM.h b/src/EEPROM.h deleted file mode 100644 index 696f914..0000000 --- a/src/EEPROM.h +++ /dev/null @@ -1 +0,0 @@ -#include "EEPROMFake.h" \ No newline at end of file diff --git a/src/EEPROMFake.cpp b/src/EEPROMFake.cpp index 57b0a4e..2b45d4d 100644 --- a/src/EEPROMFake.cpp +++ b/src/EEPROMFake.cpp @@ -1,6 +1,5 @@ // clang-format off #include "ArduinoFake.h" -#include "EEPROMFake.h" // clang-format on uint8_t EEPROMClass::read(int idx) { @@ -14,4 +13,4 @@ void EEPROMClass::update(int idx, uint8_t val) { }; uint16_t EEPROMClass::length() { return ArduinoFakeInstance(this)->length(); } -EEPROMClass EEPROM = EEPROMFakeProxy(ArduinoFakeInstance0(EEPROM)); +EEPROMClass EEPROM; diff --git a/src/EEPROMFake.h b/src/EEPROMFake.h deleted file mode 100644 index 58fac6d..0000000 --- a/src/EEPROMFake.h +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once - -#include "arduino/EEPROM.h" - -struct EEPROMFake { - virtual uint8_t read(int idx) = 0; - virtual void write(int idx, uint8_t val) = 0; - virtual void update(int idx, uint8_t val) = 0; - virtual uint16_t length() = 0; -}; - -class EEPROMFakeProxy : public EEPROMClass { -private: - EEPROMFake *eepromFake; - -public: - EEPROMFakeProxy(EEPROMFake *fake) { eepromFake = fake; } - - EEPROMFake *getFake() { return eepromFake; } -}; diff --git a/src/Function.h b/src/Function.h deleted file mode 100644 index 6d17965..0000000 --- a/src/Function.h +++ /dev/null @@ -1 +0,0 @@ -#include "FunctionFake.h" diff --git a/src/Print.h b/src/Print.h deleted file mode 100644 index 458f70b..0000000 --- a/src/Print.h +++ /dev/null @@ -1 +0,0 @@ -#include "PrintFake.h" diff --git a/src/PrintFake.cpp b/src/PrintFake.cpp index 17b0432..6779f95 100644 --- a/src/PrintFake.cpp +++ b/src/PrintFake.cpp @@ -1,5 +1,4 @@ #include "ArduinoFake.h" -#include "PrintFake.h" int Print::availableForWrite(void) { diff --git a/src/PrintFake.h b/src/PrintFake.h deleted file mode 100644 index f4059f0..0000000 --- a/src/PrintFake.h +++ /dev/null @@ -1,63 +0,0 @@ -#pragma once - -#include "arduino/Print.h" - -struct PrintFake -{ - virtual int availableForWrite(void) = 0; - - virtual size_t write(const uint8_t *buffer, size_t size) = 0; - virtual size_t write(uint8_t) = 0; - - virtual size_t print(const __FlashStringHelper *) = 0; - virtual size_t print(const String &) = 0; - virtual size_t print(const char[]) = 0; - virtual size_t print(char) = 0; - virtual size_t print(unsigned char, int = DEC) = 0; - virtual size_t print(int, int = DEC) = 0; - virtual size_t print(unsigned int, int = DEC) = 0; - virtual size_t print(long, int = DEC) = 0; - virtual size_t print(unsigned long, int = DEC) = 0; - virtual size_t print(double, int = 2) = 0; - virtual size_t print(const Printable&) = 0; - - virtual size_t println(const __FlashStringHelper *) = 0; - virtual size_t println(const String &s) = 0; - virtual size_t println(const char[]) = 0; - virtual size_t println(char) = 0; - virtual size_t println(unsigned char, int = DEC) = 0; - virtual size_t println(int, int = DEC) = 0; - virtual size_t println(unsigned int, int = DEC) = 0; - virtual size_t println(long, int = DEC) = 0; - virtual size_t println(unsigned long, int = DEC) = 0; - virtual size_t println(double, int = 2) = 0; - virtual size_t println(const Printable&) = 0; - virtual size_t println(void) = 0; -}; - -class PrintFakeProxy : public Print -{ - private: - PrintFake* printFake; - - public: - PrintFakeProxy(PrintFake* fake) - { - printFake = fake; - } - - size_t write(const uint8_t *buffer, size_t size) - { - return printFake->write(buffer, size); - } - - size_t write(uint8_t value) - { - return printFake->write(value); - } - - PrintFake* getFake() - { - return printFake; - } -}; diff --git a/src/SPI.h b/src/SPI.h deleted file mode 100644 index 026d1a5..0000000 --- a/src/SPI.h +++ /dev/null @@ -1 +0,0 @@ -#include "SPIFake.h" \ No newline at end of file diff --git a/src/SPIFake.cpp b/src/SPIFake.cpp index f739930..840a211 100644 --- a/src/SPIFake.cpp +++ b/src/SPIFake.cpp @@ -1,5 +1,4 @@ #include "ArduinoFake.h" -#include "SPIFake.h" void SPIClass::begin() { ArduinoFakeInstance(this)->begin(); }; @@ -25,4 +24,4 @@ void SPIClass::transfer(void *buf, size_t count) { return ArduinoFakeInstance(this)->transfer(buf, count); }; -SPIClass SPI = SPIFakeProxy(ArduinoFakeInstance0(SPI)); +SPIClass SPI; diff --git a/src/SPIFake.h b/src/SPIFake.h deleted file mode 100644 index 09394c4..0000000 --- a/src/SPIFake.h +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once - -#include "arduino/SPI.h" - -struct SPIFake { - virtual uint8_t transfer(uint8_t data) = 0; - virtual uint16_t transfer16(uint16_t data) = 0; - virtual void transfer(void *buf, size_t count) = 0; - - virtual void beginTransaction(SPISettings settings) = 0; - virtual void endTransaction(void) = 0; - - virtual void begin() = 0; - virtual void end() = 0; -}; - -class SPIFakeProxy : public SPIClass { - private: - SPIFake *spiFake; - - public: - SPIFakeProxy(SPIFake *fake) { spiFake = fake; } - - SPIFake *getFake() { return spiFake; } -}; diff --git a/src/Serial.h b/src/Serial.h deleted file mode 100644 index 851d0e7..0000000 --- a/src/Serial.h +++ /dev/null @@ -1 +0,0 @@ -#include "SerialFake.h" diff --git a/src/SerialFake.cpp b/src/SerialFake.cpp index df2f0b9..93bd19a 100644 --- a/src/SerialFake.cpp +++ b/src/SerialFake.cpp @@ -1,5 +1,4 @@ #include "ArduinoFake.h" -#include "SerialFake.h" #if defined(USBCON) @@ -83,6 +82,6 @@ int32_t Serial_::readBreak() return ArduinoFakeInstance(this)->readBreak(); } -Serial_ Serial = SerialFakeProxy(ArduinoFakeInstance0(Serial)); +Serial_ Serial; #endif // USBCON \ No newline at end of file diff --git a/src/SerialFake.h b/src/SerialFake.h deleted file mode 100644 index 98e2a89..0000000 --- a/src/SerialFake.h +++ /dev/null @@ -1,50 +0,0 @@ -#pragma once - -#include "StreamFake.h" -#include "arduino/USBAPI.h" - -#if defined(USBCON) - -struct SerialFake : public StreamFake -{ - virtual void begin(unsigned long) = 0; - virtual void begin(unsigned long, uint8_t) = 0; - virtual void end(void) = 0; - - virtual int available(void) = 0; - virtual int peek(void) = 0; - virtual int read(void) = 0; - virtual void flush(void) = 0; - virtual size_t write(uint8_t) = 0; - virtual size_t write(const uint8_t*, size_t) = 0; - - //operator bool(); - - virtual int32_t readBreak() = 0; - - virtual uint32_t baud() = 0; - virtual uint8_t stopbits() = 0; - virtual uint8_t paritytype() = 0; - virtual uint8_t numbits() = 0; - virtual bool dtr() = 0; - virtual bool rts() = 0; -}; - -class SerialFakeProxy : public StreamFakeProxy, public Serial_ -{ - private: - SerialFake* serialFake; - - public: - SerialFakeProxy(SerialFake* fake) : StreamFakeProxy(fake) - { - serialFake = fake; - } - - SerialFake* getFake() - { - return serialFake; - } -}; - -#endif // USBCON diff --git a/src/Stream.h b/src/Stream.h deleted file mode 100644 index 06f153b..0000000 --- a/src/Stream.h +++ /dev/null @@ -1 +0,0 @@ -#include "StreamFake.h" diff --git a/src/StreamFake.cpp b/src/StreamFake.cpp index f1d3bf1..3166334 100644 --- a/src/StreamFake.cpp +++ b/src/StreamFake.cpp @@ -1,5 +1,4 @@ #include "ArduinoFake.h" -#include "StreamFake.h" void Stream::setTimeout(unsigned long timeout) { diff --git a/src/StreamFake.h b/src/StreamFake.h deleted file mode 100644 index bd8c104..0000000 --- a/src/StreamFake.h +++ /dev/null @@ -1,90 +0,0 @@ -#pragma once - -#include "PrintFake.h" -#include "arduino/Stream.h" - -#ifndef NO_IGNORE_CHAR - #define NO_IGNORE_CHAR '\x01' // a char not found in a valid ASCII numeric field -#endif - -struct StreamFake : public PrintFake -{ - virtual int available() = 0; - virtual int read() = 0; - virtual int peek() = 0; - virtual void flush() = 0; - - virtual void setTimeout(unsigned long timeout) = 0; - virtual unsigned long getTimeout(void) = 0; - - virtual bool find(const char *target) = 0; - - virtual bool find(const char *target, size_t length) = 0; - - virtual bool findUntil(const char *target, const char *terminator) = 0; - - virtual bool findUntil(const char *target, size_t targetLen, const char *terminate, size_t termLen) = 0; - - virtual long parseInt(LookaheadMode lookahead = SKIP_ALL, char ignore = NO_IGNORE_CHAR) = 0; - - virtual float parseFloat(LookaheadMode lookahead = SKIP_ALL, char ignore = NO_IGNORE_CHAR) = 0; - - virtual size_t readBytes(char *buffer, size_t length) = 0; - - virtual size_t readBytesUntil(char terminator, char *buffer, size_t length) = 0; - - virtual String readString() = 0; - virtual String readStringUntil(char terminator) = 0; -}; - -class StreamFakeProxy : public Stream, public PrintFakeProxy -{ - private: - StreamFake* streamFake; - - public: - StreamFakeProxy(StreamFake* fake) : PrintFakeProxy(fake) - { - streamFake = fake; - } - - size_t write(uint8_t value) override - { - return streamFake->write(value); - } - - int available() override - { - return streamFake->available(); - } - - int read() override - { - return streamFake->read(); - } - - int peek() override - { - return streamFake->peek(); - } - - void flush() override - { - streamFake->flush(); - } - - void setTimeout(unsigned long timeout) override - { - getFake()->setTimeout(timeout); - } - - unsigned long getTimeout(void) override - { - return getFake()->getTimeout(); - } - - StreamFake* getFake() - { - return streamFake; - } -}; \ No newline at end of file diff --git a/src/WString.h b/src/WString.h deleted file mode 100644 index e48b819..0000000 --- a/src/WString.h +++ /dev/null @@ -1,2 +0,0 @@ -#pragma once -#include "arduino/WString.h" \ No newline at end of file diff --git a/src/Wire.h b/src/Wire.h deleted file mode 100644 index 7ca50ad..0000000 --- a/src/Wire.h +++ /dev/null @@ -1 +0,0 @@ -#include "WireFake.h" \ No newline at end of file diff --git a/src/WireFake.cpp b/src/WireFake.cpp index 0296bc0..8294921 100644 --- a/src/WireFake.cpp +++ b/src/WireFake.cpp @@ -1,5 +1,4 @@ #include "ArduinoFake.h" -#include "WireFake.h" void TwoWire::begin(void) { ArduinoFakeInstance(this)->begin(); } @@ -88,4 +87,4 @@ void TwoWire::onRequest(void (*function)(void)) { ArduinoFakeInstance(this)->onRequest(function); } -TwoWire Wire = WireFakeProxy(ArduinoFakeInstance0(Wire)); \ No newline at end of file +TwoWire Wire; \ No newline at end of file diff --git a/src/WireFake.h b/src/WireFake.h deleted file mode 100644 index 32dacbc..0000000 --- a/src/WireFake.h +++ /dev/null @@ -1,41 +0,0 @@ -#pragma once - -#include "StreamFake.h" -#include "arduino/Wire.h" - -struct WireFake : public StreamFake { - virtual void begin() = 0; - virtual void begin(uint8_t) = 0; - virtual void begin(int) = 0; - virtual void end() = 0; - virtual void setClock(uint32_t) = 0; - virtual void setWireTimeout(uint32_t timeout = 25000, - bool reset_with_timeout = false) = 0; - virtual bool getWireTimeoutFlag(void) = 0; - virtual void clearWireTimeoutFlag(void) = 0; - virtual void beginTransmission(uint8_t) = 0; - virtual void beginTransmission(int) = 0; - virtual uint8_t endTransmission(void) = 0; - virtual uint8_t endTransmission(bool) = 0; - virtual uint8_t requestFrom(uint8_t, uint8_t) = 0; - virtual uint8_t requestFrom(uint8_t, uint8_t, uint8_t) = 0; - virtual uint8_t requestFrom(uint8_t, uint8_t, uint32_t, uint8_t, uint8_t) = 0; - virtual size_t write(uint8_t) = 0; - virtual size_t write(const uint8_t *, size_t) = 0; - virtual int available(void) = 0; - virtual int read(void) = 0; - virtual int peek(void) = 0; - virtual void flush(void) = 0; - virtual void onReceive(void (*)(int)) = 0; - virtual void onRequest(void (*)(void)) = 0; -}; - -class WireFakeProxy : public StreamFakeProxy, public TwoWire { -private: - WireFake *wireFake; - -public: - WireFakeProxy(WireFake *fake) : StreamFakeProxy(fake) { wireFake = fake; } - - WireFake *getFake() { return wireFake; } -}; \ No newline at end of file diff --git a/src/arduino/Print.h b/src/arduino/Print.h index e7f5b81..574ed33 100644 --- a/src/arduino/Print.h +++ b/src/arduino/Print.h @@ -45,16 +45,16 @@ class Print public: Print() : write_error(0) {} - int getWriteError() { return write_error; } - void clearWriteError() { setWriteError(0); } + virtual int getWriteError() { return write_error; } + virtual void clearWriteError() { setWriteError(0); } virtual size_t write(uint8_t) = 0; - size_t write(const char *str) { + virtual size_t write(const char *str) { if (str == NULL) return 0; return write((const uint8_t *)str, strlen(str)); } virtual size_t write(const uint8_t *buffer, size_t size); - size_t write(const char *buffer, size_t size) { + virtual size_t write(const char *buffer, size_t size) { return write((const uint8_t *)buffer, size); } @@ -62,30 +62,30 @@ class Print // should be overridden by subclasses with buffering virtual int availableForWrite(); - size_t print(const __FlashStringHelper *); - size_t print(const String &); - size_t print(const char[]); - size_t print(char); - size_t print(unsigned char, int = DEC); - size_t print(int, int = DEC); - size_t print(unsigned int, int = DEC); - size_t print(long, int = DEC); - size_t print(unsigned long, int = DEC); - size_t print(double, int = 2); - size_t print(const Printable&); + virtual size_t print(const __FlashStringHelper *); + virtual size_t print(const String &); + virtual size_t print(const char[]); + virtual size_t print(char); + virtual size_t print(unsigned char, int = DEC); + virtual size_t print(int, int = DEC); + virtual size_t print(unsigned int, int = DEC); + virtual size_t print(long, int = DEC); + virtual size_t print(unsigned long, int = DEC); + virtual size_t print(double, int = 2); + virtual size_t print(const Printable&); - size_t println(const __FlashStringHelper *); - size_t println(const String &s); - size_t println(const char[]); - size_t println(char); - size_t println(unsigned char, int = DEC); - size_t println(int, int = DEC); - size_t println(unsigned int, int = DEC); - size_t println(long, int = DEC); - size_t println(unsigned long, int = DEC); - size_t println(double, int = 2); - size_t println(const Printable&); - size_t println(void); + virtual size_t println(const __FlashStringHelper *); + virtual size_t println(const String &s); + virtual size_t println(const char[]); + virtual size_t println(char); + virtual size_t println(unsigned char, int = DEC); + virtual size_t println(int, int = DEC); + virtual size_t println(unsigned int, int = DEC); + virtual size_t println(long, int = DEC); + virtual size_t println(unsigned long, int = DEC); + virtual size_t println(double, int = 2); + virtual size_t println(const Printable&); + virtual size_t println(void); }; #endif diff --git a/src/arduino/Stream.h b/src/arduino/Stream.h index 7466262..f503312 100644 --- a/src/arduino/Stream.h +++ b/src/arduino/Stream.h @@ -68,45 +68,45 @@ class Stream : public Print virtual void setTimeout(unsigned long timeout); // sets maximum milliseconds to wait for stream data, default is 1 second virtual unsigned long getTimeout(void) { return _timeout; } - bool find(const char *target); // reads data from the stream until the target string is found - bool find(const uint8_t *target) { return find ((const char *)target); } + virtual bool find(const char *target); // reads data from the stream until the target string is found + virtual bool find(const uint8_t *target) { return find ((const char *)target); } // returns true if target string is found, false if timed out (see setTimeout) - bool find(const char *target, size_t length); // reads data from the stream until the target string of given length is found - bool find(const uint8_t *target, size_t length) { return find ((const char *)target, length); } + virtual bool find(const char *target, size_t length); // reads data from the stream until the target string of given length is found + virtual bool find(const uint8_t *target, size_t length) { return find ((const char *)target, length); } // returns true if target string is found, false if timed out - bool find(char target) { return find (&target, 1); } + virtual bool find(char target) { return find (&target, 1); } - bool findUntil(const char *target, const char *terminator); // as find but search ends if the terminator string is found - bool findUntil(const uint8_t *target, const char *terminator) { return findUntil((const char *)target, terminator); } + virtual bool findUntil(const char *target, const char *terminator); // as find but search ends if the terminator string is found + virtual bool findUntil(const uint8_t *target, const char *terminator) { return findUntil((const char *)target, terminator); } - bool findUntil(const char *target, size_t targetLen, const char *terminate, size_t termLen); // as above but search ends if the terminate string is found - bool findUntil(const uint8_t *target, size_t targetLen, const char *terminate, size_t termLen) {return findUntil((const char *)target, targetLen, terminate, termLen); } + virtual bool findUntil(const char *target, size_t targetLen, const char *terminate, size_t termLen); // as above but search ends if the terminate string is found + virtual bool findUntil(const uint8_t *target, size_t targetLen, const char *terminate, size_t termLen) {return findUntil((const char *)target, targetLen, terminate, termLen); } - long parseInt(LookaheadMode lookahead = SKIP_ALL, char ignore = NO_IGNORE_CHAR); + virtual long parseInt(LookaheadMode lookahead = SKIP_ALL, char ignore = NO_IGNORE_CHAR); // returns the first valid (long) integer value from the current position. // lookahead determines how parseInt looks ahead in the stream. // See LookaheadMode enumeration at the top of the file. // Lookahead is terminated by the first character that is not a valid part of an integer. // Once parsing commences, 'ignore' will be skipped in the stream. - float parseFloat(LookaheadMode lookahead = SKIP_ALL, char ignore = NO_IGNORE_CHAR); + virtual float parseFloat(LookaheadMode lookahead = SKIP_ALL, char ignore = NO_IGNORE_CHAR); // float version of parseInt - size_t readBytes( char *buffer, size_t length); // read chars from stream into buffer - size_t readBytes( uint8_t *buffer, size_t length) { return readBytes((char *)buffer, length); } + virtual size_t readBytes( char *buffer, size_t length); // read chars from stream into buffer + virtual size_t readBytes( uint8_t *buffer, size_t length) { return readBytes((char *)buffer, length); } // terminates if length characters have been read or timeout (see setTimeout) // returns the number of characters placed in the buffer (0 means no valid data found) - size_t readBytesUntil( char terminator, char *buffer, size_t length); // as readBytes with terminator character - size_t readBytesUntil( char terminator, uint8_t *buffer, size_t length) { return readBytesUntil(terminator, (char *)buffer, length); } + virtual size_t readBytesUntil( char terminator, char *buffer, size_t length); // as readBytes with terminator character + virtual size_t readBytesUntil( char terminator, uint8_t *buffer, size_t length) { return readBytesUntil(terminator, (char *)buffer, length); } // terminates if length characters have been read, timeout, or if the terminator character detected // returns the number of characters placed in the buffer (0 means no valid data found) // Arduino String functions to be added here - String readString(); - String readStringUntil(char terminator); + virtual String readString(); + virtual String readStringUntil(char terminator); protected: long parseInt(char ignore) { return parseInt(SKIP_ALL, ignore); } diff --git a/src/arduino/USBAPI.h b/src/arduino/USBAPI.h index f823024..8d59068 100644 --- a/src/arduino/USBAPI.h +++ b/src/arduino/USBAPI.h @@ -87,9 +87,9 @@ class Serial_ : public Stream int peek_buffer; public: Serial_() { peek_buffer = -1; }; - void begin(unsigned long); - void begin(unsigned long, uint8_t); - void end(void); + virtual void begin(unsigned long); + virtual void begin(unsigned long, uint8_t); + virtual void end(void); virtual int available(void); virtual int peek(void); @@ -119,17 +119,17 @@ class Serial_ : public Stream // first request is lost. // Note that the value returned is a long, so it can return // 0-0xffff as well as -1. - int32_t readBreak(); + virtual int32_t readBreak(); // These return the settings specified by the USB host for the // serial port. These aren't really used, but are offered here // in case a sketch wants to act on these settings. - uint32_t baud(); - uint8_t stopbits(); - uint8_t paritytype(); - uint8_t numbits(); - bool dtr(); - bool rts(); + virtual uint32_t baud(); + virtual uint8_t stopbits(); + virtual uint8_t paritytype(); + virtual uint8_t numbits(); + virtual bool dtr(); + virtual bool rts(); enum { ONE_STOP_BIT = 0, ONE_AND_HALF_STOP_BIT = 1, diff --git a/src/arduino/Wire.h b/src/arduino/Wire.h index a3aba04..8a8085a 100644 --- a/src/arduino/Wire.h +++ b/src/arduino/Wire.h @@ -6,30 +6,30 @@ class TwoWire : public Stream { public: - void begin(); - void begin(uint8_t); - void begin(int); - void end(); - void setClock(uint32_t); - void setWireTimeout(uint32_t timeout = 25000, + virtual void begin(); + virtual void begin(uint8_t); + virtual void begin(int); + virtual void end(); + virtual void setClock(uint32_t); + virtual void setWireTimeout(uint32_t timeout = 25000, bool reset_with_timeout = false); - bool getWireTimeoutFlag(void); - void clearWireTimeoutFlag(void); - void beginTransmission(uint8_t); - void beginTransmission(int); - uint8_t endTransmission(void); - uint8_t endTransmission(bool); - uint8_t requestFrom(uint8_t, uint8_t); - uint8_t requestFrom(uint8_t, uint8_t, uint8_t); - uint8_t requestFrom(uint8_t, uint8_t, uint32_t, uint8_t, uint8_t); + virtual bool getWireTimeoutFlag(void); + virtual void clearWireTimeoutFlag(void); + virtual void beginTransmission(uint8_t); + virtual void beginTransmission(int); + virtual uint8_t endTransmission(void); + virtual uint8_t endTransmission(bool); + virtual uint8_t requestFrom(uint8_t, uint8_t); + virtual uint8_t requestFrom(uint8_t, uint8_t, uint8_t); + virtual uint8_t requestFrom(uint8_t, uint8_t, uint32_t, uint8_t, uint8_t); virtual size_t write(uint8_t); virtual size_t write(const uint8_t *, size_t); virtual int available(void); virtual int read(void); virtual int peek(void); virtual void flush(void); - void onReceive(void (*)(int)); - void onRequest(void (*)(void)); + virtual void onReceive(void (*)(int)); + virtual void onRequest(void (*)(void)); inline size_t write(unsigned long n) { return write((uint8_t)n); } inline size_t write(long n) { return write((uint8_t)n); } diff --git a/test/main.cpp b/test/main.cpp index ca51b69..1e23083 100644 --- a/test/main.cpp +++ b/test/main.cpp @@ -1,5 +1,6 @@ // clang-format off #include +#include #include #include @@ -13,8 +14,7 @@ #include "test_eeprom.h" #include "test_client.h" #include "test_arduino_string.h" -#include "test_ProxiedArduinoFake_t.h" -#include "test_OverrideableProxiedArduinoFake_t.h" +#include "test_OverrideableArduinoFake_t.h" #define RUN_TEST_GROUP(TEST) \ if (!std::getenv("TEST_GROUP") || (strcmp(#TEST, std::getenv("TEST_GROUP")) == 0)) { \ @@ -42,8 +42,7 @@ int main(int argc, char **argv) RUN_TEST_GROUP(SpiTest); RUN_TEST_GROUP(EEPROMTest); RUN_TEST_GROUP(ClientTest); - RUN_TEST_GROUP(ProxiedArduinoFakeTTest); - RUN_TEST_GROUP(OverrideableProxiedArduinoFakeTTest); + RUN_TEST_GROUP(OverrideableArduinoFakeTTest); return UNITY_END(); } diff --git a/test/test_OverrideableProxiedArduinoFake_t.cpp b/test/test_OverrideableArduinoFake_t.cpp similarity index 55% rename from test/test_OverrideableProxiedArduinoFake_t.cpp rename to test/test_OverrideableArduinoFake_t.cpp index 218be55..01dec8e 100644 --- a/test/test_OverrideableProxiedArduinoFake_t.cpp +++ b/test/test_OverrideableArduinoFake_t.cpp @@ -1,4 +1,5 @@ #include +#include #include #include "unity_filename_helper.h" @@ -14,30 +15,22 @@ struct IArduino virtual void bar(void) {} }; -struct IDummyProxy : public IArduino -{ - IDummy *_dummy; - IDummy* getFake(void) { return _dummy; } - - virtual void bar(void) override {} -}; - static void test_getFake(void) { FakeOverride_t overrides; - OverrideableProxiedArduinoFake_t subject(overrides); + OverrideableArduinoFake_t subject(overrides); - // No override, should get the proxy fake - IDummyProxy proxy; - TEST_ASSERT_EQUAL_PTR(proxy.getFake(), subject.getFake(&proxy)); + // No override, should get the real fake + IArduino proxy; + TEST_ASSERT_EQUAL_PTR(&subject.get(), subject.getFake(&proxy)); // Should return the alternate, since it's now overriden - ProxiedArduinoFake_t alternateFake; + ArduinoFake_t alternateFake; overrides.setOverride(&proxy, &alternateFake); TEST_ASSERT_EQUAL_PTR(&alternateFake.get(), subject.getFake(&proxy)); } -namespace OverrideableProxiedArduinoFakeTTest +namespace OverrideableArduinoFakeTTest { void run_tests(void) { diff --git a/test/test_ProxiedArduinoFake_t.h b/test/test_OverrideableArduinoFake_t.h similarity index 53% rename from test/test_ProxiedArduinoFake_t.h rename to test/test_OverrideableArduinoFake_t.h index 45d6bf6..1462817 100644 --- a/test/test_ProxiedArduinoFake_t.h +++ b/test/test_OverrideableArduinoFake_t.h @@ -1,6 +1,6 @@ #pragma once -namespace ProxiedArduinoFakeTTest +namespace OverrideableArduinoFakeTTest { void run_tests(void); } diff --git a/test/test_OverrideableProxiedArduinoFake_t.h b/test/test_OverrideableProxiedArduinoFake_t.h deleted file mode 100644 index 7a11375..0000000 --- a/test/test_OverrideableProxiedArduinoFake_t.h +++ /dev/null @@ -1,6 +0,0 @@ -#pragma once - -namespace OverrideableProxiedArduinoFakeTTest -{ - void run_tests(void); -} diff --git a/test/test_ProxiedArduinoFake_t.cpp b/test/test_ProxiedArduinoFake_t.cpp deleted file mode 100644 index 02c5ed5..0000000 --- a/test/test_ProxiedArduinoFake_t.cpp +++ /dev/null @@ -1,57 +0,0 @@ -#include -#include -#include "unity_filename_helper.h" - -using namespace fakeit; - -struct IDummy -{ - virtual void foo(void) { } -}; - -struct IArduino -{ - virtual void bar(void) {} -}; - -struct IDummyProxy : public IArduino -{ - IDummy *_dummy; - IDummy* getFake(void) { return _dummy; } - - virtual void bar(void) override {} -}; - -static void test_getFake(void) -{ - ProxiedArduinoFake_t subject; - - IDummyProxy proxy; - - proxy._dummy = nullptr; - TEST_ASSERT_EQUAL_PTR(nullptr, subject.getFake(&proxy)); - - IDummy dummy; - proxy._dummy = &dummy; - TEST_ASSERT_EQUAL_PTR(&dummy, subject.getFake(&proxy)); - - // Following should throw exception - try - { - IArduino arduino; - TEST_ASSERT_EQUAL_PTR(&dummy, subject.getFake(&arduino)); - TEST_FAIL(); - } - catch(const std::runtime_error& e) - { - } -} - -namespace ProxiedArduinoFakeTTest -{ - void run_tests(void) - { - unity_filename_helper_t _ufname_helper(__FILE__); - RUN_TEST(test_getFake); - } -} \ No newline at end of file diff --git a/test/test_client.cpp b/test/test_client.cpp index a6ddcac..8d44128 100644 --- a/test/test_client.cpp +++ b/test/test_client.cpp @@ -1,4 +1,5 @@ #include +#include #include #include "unity_filename_helper.h" @@ -31,7 +32,7 @@ static void test_basics(void) When(Method(ArduinoFake(Client), connected)).Return(0, 1); When(OverloadedMethod(ArduinoFake(Client), connect, int(const char*, uint16_t))).Return(1); - std::shared_ptr client(ArduinoFakeMock(Client)); + Client * client(ArduinoFakeInstance0(Client)); TEST_ASSERT_EQUAL(0, client->connected()); TEST_ASSERT_EQUAL(1, client->connect(localhost, 8080)); @@ -56,7 +57,7 @@ static void test_connect(void) IPAddress ipAddress1(62, 145, 182, 225); IPAddress ipAddress2(221, 155, 131, 19); - std::shared_ptr client(ArduinoFakeMock(Client)); + Client * client(ArduinoFakeInstance0(Client)); TEST_ASSERT_EQUAL(1, client->connect(localhost, 8080)); TEST_ASSERT_EQUAL(0, client->connect(localhost, 80)); @@ -82,7 +83,7 @@ static void test_write(void) When(OverloadedMethod(ArduinoFake(Client), write, size_t(uint8_t))).Return(1, 0); When(OverloadedMethod(ArduinoFake(Client), write, size_t(const uint8_t*, size_t))).Return(0, 1); - std::shared_ptr client(ArduinoFakeMock(Client)); + Client * client(ArduinoFakeInstance0(Client)); TEST_ASSERT_EQUAL(1, client->write(val1)); TEST_ASSERT_EQUAL(0, client->write(val2)); @@ -108,7 +109,7 @@ static void test_read(void) When(OverloadedMethod(ArduinoFake(Client), read, int())).Return(10, 20); When(OverloadedMethod(ArduinoFake(Client), read, int(uint8_t*, size_t))).Return(30, 400); - std::shared_ptr client(ArduinoFakeMock(Client)); + Client * client(ArduinoFakeInstance0(Client)); TEST_ASSERT_EQUAL(10, client->read()); TEST_ASSERT_EQUAL(20, client->read()); @@ -129,9 +130,9 @@ static void test_inject_instance(void) When(OverloadedMethod(ArduinoFake(Client), write, size_t(uint8_t))).Return(11, 22); - std::shared_ptr client(ArduinoFakeMock(Client)); + Client * client(ArduinoFakeInstance0(Client)); - MyService service(client.get()); + MyService service(client); TEST_ASSERT_EQUAL(11, service.send(val1)); TEST_ASSERT_EQUAL(22, service.send(val2)); diff --git a/test/test_context.cpp b/test/test_context.cpp index 3b5ba5c..dfea2af 100644 --- a/test/test_context.cpp +++ b/test/test_context.cpp @@ -1,4 +1,5 @@ #include +#include #include #include "unity_filename_helper.h" @@ -53,21 +54,21 @@ static void test_reset_print(void) std::cout << str; return strlen(str); }); - assert_test_reset(method, []() { (ArduinoFakeMock(Print))->print("abc"); }); + assert_test_reset(method, []() { (ArduinoFakeInstance0(Print))->print("abc"); }); } static void test_reset_serial(void) { auto method = Method(ArduinoFake(Serial), end); When(method).AlwaysReturn(); - assert_test_reset(method, []() { (ArduinoFakeMock(Serial))->end(); }); + assert_test_reset(method, []() { (ArduinoFakeInstance0(Serial))->end(); }); } static void test_reset_wire(void) { auto method = Method(ArduinoFake(Wire), end); When(method).AlwaysReturn(); - assert_test_reset(method, []() { (ArduinoFakeMock(Wire))->end(); }); + assert_test_reset(method, []() { (ArduinoFakeInstance0(Wire))->end(); }); } static void test_reset_stream(void) @@ -76,7 +77,7 @@ static void test_reset_stream(void) When(method).AlwaysReturn(false); assert_test_reset(method, []() { char toFind[] = "abc"; - (ArduinoFakeMock(Stream))->find(toFind); + (ArduinoFakeInstance0(Stream))->find(toFind); }); } @@ -84,21 +85,21 @@ static void test_reset_client(void) { auto method = Method(ArduinoFake(Client), available); When(method).AlwaysReturn(); - assert_test_reset(method, []() { (ArduinoFakeMock(Client))->available(); }); + assert_test_reset(method, []() { ArduinoFakeInstance0(Client)->available(); }); } static void test_reset_spi(void) { auto method = Method(ArduinoFake(SPI), end); When(method).AlwaysReturn(); - assert_test_reset(method, []() { (ArduinoFakeMock(SPI))->end(); }); + assert_test_reset(method, []() { (ArduinoFakeInstance0(SPI))->end(); }); } static void test_reset_eeprom(void) { auto method = Method(ArduinoFake(EEPROM), length); When(method).AlwaysReturn(0xffff); - assert_test_reset(method, []() { (ArduinoFakeMock(EEPROM))->length(); }); + assert_test_reset(method, []() { (ArduinoFakeInstance0(EEPROM))->length(); }); } static void test_reset(void) @@ -202,8 +203,8 @@ static void test_unknown_instance_exception(void) static void test_getter_overload_with_proxy(void) { - std::shared_ptr serial(ArduinoFakeMock(Serial)); - PrintFake* serialPrintFake = ArduinoFakeInstance(serial.get()); + Serial_* serial(ArduinoFakeInstance0(Serial)); + PrintFake* serialPrintFake = ArduinoFakeInstance(serial); TEST_ASSERT_EQUAL(getArduinoFakeContext()->Serial(), serialPrintFake); PrintFake* printFake = ArduinoFakeInstance0(Print); diff --git a/test/test_eeprom.cpp b/test/test_eeprom.cpp index fa41be2..a36f953 100644 --- a/test/test_eeprom.cpp +++ b/test/test_eeprom.cpp @@ -1,4 +1,5 @@ #include +#include #include #include "arduino/EEPROM.h" #include "unity_filename_helper.h" diff --git a/test/test_function.cpp b/test/test_function.cpp index 6f9ab90..2410638 100644 --- a/test/test_function.cpp +++ b/test/test_function.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include "unity_filename_helper.h" diff --git a/test/test_print.cpp b/test/test_print.cpp index f04c1cc..cfaa54e 100644 --- a/test/test_print.cpp +++ b/test/test_print.cpp @@ -1,4 +1,5 @@ #include +#include #include #include "unity_filename_helper.h" @@ -8,7 +9,7 @@ static void test_availableForWrite(void) { When(Method(ArduinoFake(Print), availableForWrite)).Return(-100); - std::shared_ptr print(ArduinoFakeMock(Print)); + Print* print(ArduinoFakeInstance0(Print)); int result = print->availableForWrite(); TEST_ASSERT_EQUAL(-100, result); @@ -38,7 +39,7 @@ static void test_print_variables(void) When(OverloadedMethod(ArduinoFake(Print), print, size_t(unsigned int, int))).AlwaysReturn(); When(OverloadedMethod(ArduinoFake(Print), print, size_t(unsigned long, int))).AlwaysReturn(); - std::shared_ptr print(ArduinoFakeMock(Print)); + Print* print(ArduinoFakeInstance0(Print)); print->print(char_var); print->print(char_array_var); @@ -84,7 +85,7 @@ static void test_println_variables(void) When(OverloadedMethod(ArduinoFake(Print), println, size_t(unsigned int, int))).AlwaysReturn(); When(OverloadedMethod(ArduinoFake(Print), println, size_t(unsigned long, int))).AlwaysReturn(); - std::shared_ptr print(ArduinoFakeMock(Print)); + Print* print(ArduinoFakeInstance0(Print)); print->println(); print->println(char_var); diff --git a/test/test_serial.cpp b/test/test_serial.cpp index e89fe6e..935dd7f 100644 --- a/test/test_serial.cpp +++ b/test/test_serial.cpp @@ -1,4 +1,5 @@ #include +#include #include #include "unity_filename_helper.h" @@ -23,11 +24,11 @@ static void test_extends_stream(void) When(OverloadedMethod(ArduinoFake(Serial), print, size_t(char))).AlwaysReturn(); When(OverloadedMethod(ArduinoFake(Serial), print, size_t(int, int))).AlwaysReturn(); - std::shared_ptr stream(ArduinoFakeMock(Stream)); - std::shared_ptr serial(ArduinoFakeMock(Serial)); + Stream* pStream(ArduinoFakeInstance0(Stream)); + Serial_* serial(ArduinoFakeInstance0(Serial)); - stream->print(stream_char_var); - stream->print(stream_int_var, DEC); + pStream->print(stream_char_var); + pStream->print(stream_int_var, DEC); serial->print(print_char_var); serial->print(print_int_var, DEC); diff --git a/test/test_spi.cpp b/test/test_spi.cpp index 595a751..4e55ca0 100644 --- a/test/test_spi.cpp +++ b/test/test_spi.cpp @@ -1,4 +1,5 @@ #include +#include #include #include "arduino/SPI.h" #include "unity_filename_helper.h" diff --git a/test/test_stream.cpp b/test/test_stream.cpp index 2d549e3..1f3ab61 100644 --- a/test/test_stream.cpp +++ b/test/test_stream.cpp @@ -1,4 +1,5 @@ #include +#include #include #include "unity_filename_helper.h" @@ -23,14 +24,14 @@ static void test_extends_print(void) When(OverloadedMethod(ArduinoFake(Print), print, size_t(char))).AlwaysReturn(); When(OverloadedMethod(ArduinoFake(Print), print, size_t(int, int))).AlwaysReturn(); - std::shared_ptr stream(ArduinoFakeMock(Stream)); - std::shared_ptr print(ArduinoFakeMock(Print)); + Stream* pStream(ArduinoFakeInstance0(Stream)); + Print* pPrint(ArduinoFakeInstance0(Print)); - stream->print(stream_char_var); - stream->print(stream_int_var, DEC); + pStream->print(stream_char_var); + pStream->print(stream_int_var, DEC); - print->print(print_char_var); - print->print(print_int_var, DEC); + pPrint->print(print_char_var); + pPrint->print(print_int_var, DEC); Verify(OverloadedMethod(ArduinoFake(Stream), print, size_t(char)).Using(stream_char_var)).Once(); Verify(OverloadedMethod(ArduinoFake(Stream), print, size_t(int, int)).Using(stream_int_var, DEC)).Once(); @@ -48,7 +49,7 @@ static void test_stream_basics(void) When(Method(ArduinoFake(Stream), setTimeout)).AlwaysReturn(); When(Method(ArduinoFake(Stream), getTimeout)).AlwaysReturn(11); - std::shared_ptr stream(ArduinoFakeMock(Stream)); + Stream* stream(ArduinoFakeInstance0(Stream)); TEST_ASSERT_EQUAL(0, stream->available()); TEST_ASSERT_EQUAL(1, stream->available()); @@ -91,7 +92,7 @@ static void test_stream_find(void) When(OverloadedMethod(ArduinoFake(Stream), findUntil, bool(const char*, const char*))).Return(true, false); When(OverloadedMethod(ArduinoFake(Stream), findUntil, bool(const char*, size_t, const char*, size_t))).Return(true, false); - std::shared_ptr stream(ArduinoFakeMock(Stream)); + Stream* stream(ArduinoFakeInstance0(Stream)); TEST_ASSERT_EQUAL(true, stream->find(char_ptr1)); TEST_ASSERT_EQUAL(false, stream->find(char_ptr2)); @@ -120,7 +121,7 @@ static void test_stream_parse(void) When(OverloadedMethod(ArduinoFake(Stream), parseInt, long(LookaheadMode, char))).Return(10, 11); When(OverloadedMethod(ArduinoFake(Stream), parseFloat, float(LookaheadMode, char))).Return(2.0, 2.1); - std::shared_ptr stream(ArduinoFakeMock(Stream)); + Stream* stream(ArduinoFakeInstance0(Stream)); TEST_ASSERT_INT_WITHIN(0, 10, stream->parseInt()); TEST_ASSERT_INT_WITHIN(0, 11, stream->parseInt()); @@ -148,7 +149,7 @@ static void test_stream_read(void) When(Method(ArduinoFake(Stream), readString)).Return(str1, str2); When(Method(ArduinoFake(Stream), readStringUntil)).Return(str1, str2); - std::shared_ptr stream(ArduinoFakeMock(Stream)); + Stream* stream(ArduinoFakeInstance0(Stream)); TEST_ASSERT_EQUAL_INT(1, stream->readBytes(char_ptr1, 10)); TEST_ASSERT_EQUAL_INT(2, stream->readBytes(char_ptr2, 20)); diff --git a/test/test_wire.cpp b/test/test_wire.cpp index a2d1622..aefa6c1 100644 --- a/test/test_wire.cpp +++ b/test/test_wire.cpp @@ -1,4 +1,5 @@ #include +#include #include #include "unity_filename_helper.h" @@ -22,8 +23,8 @@ static void test_extends_stream(void) { When(OverloadedMethod(ArduinoFake(Wire), print, size_t(int, int))) .AlwaysReturn(); - std::shared_ptr stream(ArduinoFakeMock(Stream)); - std::shared_ptr wire(ArduinoFakeMock(Wire)); + Stream* stream(ArduinoFakeInstance0(Stream)); + TwoWire* wire(ArduinoFakeInstance0(Wire)); stream->print(stream_char_var); stream->print(stream_int_var, DEC);