diff --git a/include/arduino-mock/Arduino.h b/include/arduino-mock/Arduino.h index cbb0b7e..83b5a08 100644 --- a/include/arduino-mock/Arduino.h +++ b/include/arduino-mock/Arduino.h @@ -89,4 +89,43 @@ class ArduinoMock { ArduinoMock* arduinoMockInstance(); void releaseArduinoMock(); +namespace { +std::string ReplaceAll(std::string str, const std::string& from, const std::string& to) { + size_t start_pos = 0; + while((start_pos = str.find(from, start_pos)) != std::string::npos) { + str.replace(start_pos, from.length(), to); + start_pos += to.length(); // Handles case where 'to' is a substring of 'from' + } + return str; +} +} + +class String : public std::string { + public: + String() {} + String(const String& string) : String(string.c_str()) {} + String(const std::string& string) : std::string(string) {} + String(const char* string) : std::string(string) {} + + String substring(int start) { + return substr(start); + } + String substring(int start, int end) { + return substr(start, end - start); + } + + String remove(int start) { + return erase(start); + } + + void replace(const String& from, const String& to) { + ReplaceAll(*this, from, to); + } + + int indexOf(const char needle) { + return find(needle); + } +}; + + #endif // ARDUINO_H diff --git a/include/arduino-mock/Serial.h b/include/arduino-mock/Serial.h index 86d771c..82bb4f7 100644 --- a/include/arduino-mock/Serial.h +++ b/include/arduino-mock/Serial.h @@ -38,6 +38,8 @@ class SerialMock { MOCK_METHOD0(available, uint8_t()); MOCK_METHOD0(read, uint8_t()); + MOCK_METHOD1(readStringUntil, String(const char)); + MOCK_METHOD0(peek, uint8_t()); MOCK_METHOD0(flush, void()); @@ -79,6 +81,8 @@ class Serial_ { uint8_t available(); uint8_t read(); + uint8_t peek(); + String readStringUntil(const char terminator); static void flush(); diff --git a/src/Serial.cc b/src/Serial.cc index eb2d864..a56e539 100644 --- a/src/Serial.cc +++ b/src/Serial.cc @@ -113,5 +113,13 @@ uint8_t Serial_::read() { return gSerialMock->read(); } +uint8_t Serial_::peek() { + return gSerialMock->peek(); +} + +String Serial_::readStringUntil(const char term) { + return gSerialMock->readStringUntil(term); +} + // Preinstantiate Objects Serial_ Serial;