#include "catch.hpp" #include "logger.h" #include #include #include "string_utils.h" TEST_CASE("copy a string") { char src[10] = "hej"; REQUIRE(src[3]=='\0'); char dst[20]; sls::strcpy_safe(dst, src); REQUIRE(dst[0]=='h'); REQUIRE(dst[1]=='e'); REQUIRE(dst[2]=='j'); REQUIRE(dst[3]=='\0'); } #ifdef NDEBUG //This test can only run in release since we assert on the length of the string TEST_CASE("copy a long string"){ auto src = "some very very long sting that does not fit"; char dst[3]; sls::strcpy_safe(dst, src); REQUIRE(dst[0]=='s'); REQUIRE(dst[1]=='o'); REQUIRE(dst[2]=='\0'); } #endif TEST_CASE("Concat") { std::vector v{"one", "one", "one"}; std::vector v2{"one", "one", "one"}; auto r = sls::concatenateIfDifferent(v); REQUIRE(r == std::string("one")); r.clear(); // make sure we didn't modify the string REQUIRE(v == v2); SECTION("add a different value"){ v.emplace_back("two"); REQUIRE(v!=v2); REQUIRE( sls::concatenateIfDifferent(v) == "one+one+one+two+"); } } TEST_CASE("split a string with end delimiter"){ std::string s("abra+kadabra+"); auto r =sls::split(s, '+'); REQUIRE(r.size()==2); REQUIRE(r[0]=="abra"); REQUIRE(r[1]=="kadabra"); } TEST_CASE("split a string without end delimiter"){ std::string s("abra+kadabra+filibom"); auto r =sls::split(s, '+'); REQUIRE(r.size()==3); REQUIRE(r[0]=="abra"); REQUIRE(r[1]=="kadabra"); REQUIRE(r[2]=="filibom"); } TEST_CASE("concatenate non empty strings"){ std::vector vec{"hej", "kalas", "", "foto"}; REQUIRE(vec.size()==4); auto ret = sls::concatenateNonEmptyStrings(vec); REQUIRE(ret == "hej+kalas+foto+"); } TEST_CASE("concatenate non empty strings with only emty"){ std::vector vec{"", "", ""}; REQUIRE(vec.size()==3); auto ret = sls::concatenateNonEmptyStrings(vec); REQUIRE(ret.empty()); } TEST_CASE("concatenate non empty strings with one element"){ std::vector vec{"", "hej", "", "", ""}; REQUIRE(vec.size()==5); auto ret = sls::concatenateNonEmptyStrings(vec); REQUIRE(ret=="hej+"); } TEST_CASE("Remove char from string"){ char str[] = "sometest"; sls::removeChar(str, 'e'); REQUIRE(std::string(str) == "somtst"); } TEST_CASE("Remove char from empty string"){ char str[50] = {}; sls::removeChar(str, 'e'); REQUIRE(std::string(str) == ""); } TEST_CASE("Many characters in a row"){ char str[] = "someeequitellll::ongstring"; sls::removeChar(str, 'l'); REQUIRE(std::string(str) == "someeequite::ongstring"); } // TEST_CASE("concat things not being strings")