arduino / ArduinoCore-API

Hardware independent layer of the Arduino cores defining the official API
https://www.arduino.cc/reference/en/
GNU Lesser General Public License v2.1
215 stars 119 forks source link

String::replace doesn't work when replacing multiple occurencies of longer String by shorter one #199

Closed kiiv-cz closed 1 year ago

kiiv-cz commented 1 year ago
TEST_CASE ("Testing String::replace(String, String) substr 'find' smaller than 'replace' multiple occurencies", "[String-replace-08]")
{
  arduino::String str("Hello Arduino! Hello, Hello, Hello");
  str.replace(arduino::String("ll"), arduino::String("lll"));
  REQUIRE(str == "Helllo Arduino! Helllo, Helllo, Helllo");
}

TEST_CASE ("Testing String::replace(String, String) substr 'find' same length as 'replace' multiple occurencies", "[String-replace-09]")
{
  arduino::String str("Hello Arduino! Hello, Hello, Hello");
  str.replace(arduino::String("ll"), arduino::String("11"));
  REQUIRE(str == "He11o Arduino! He11o, He11o, He11o");
}

TEST_CASE ("Testing String::replace(String, String) substr 'find' larger than 'replace' multiple occurencies", "[String-replace-10]")
{
  arduino::String str("Helllo Arduino! Helllo, Helllo, Helllo");
  str.replace(arduino::String("lll"), arduino::String("ll"));
  REQUIRE(str == "Hello Arduino! Hello, Hello, Hello");
}

The last testcase fails as it doesn't replace anything at all. Other two works as expected.

Reported in https://github.com/arduino/ArduinoCore-megaavr/issues/109