Added replace methods and unit tests
This commit is contained in:
parent
87abd1cb51
commit
f6b96b2271
@ -139,7 +139,12 @@
|
|||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="Exec.cpp" />
|
<ClCompile Include="main.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\StringTools\StringTools.vcxproj">
|
||||||
|
<Project>{0270ac5e-eba3-4d8f-8d50-995fd44959b4}</Project>
|
||||||
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
</Filter>
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="Exec.cpp">
|
<ClCompile Include="main.cpp">
|
||||||
<Filter>Quelldateien</Filter>
|
<Filter>Quelldateien</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
@ -5,6 +5,16 @@ VisualStudioVersion = 16.0.30907.101
|
|||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StringTools", "StringTools\StringTools.vcxproj", "{0270AC5E-EBA3-4D8F-8D50-995FD44959B4}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StringTools", "StringTools\StringTools.vcxproj", "{0270AC5E-EBA3-4D8F-8D50-995FD44959B4}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Test", "Test\Test.vcxproj", "{64EF270C-0A13-4AD8-8D50-23A1CEEBF98B}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{0270AC5E-EBA3-4D8F-8D50-995FD44959B4} = {0270AC5E-EBA3-4D8F-8D50-995FD44959B4}
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Exec", "Exec\Exec.vcxproj", "{02F9FA44-902F-4695-846B-0B45E952A962}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{0270AC5E-EBA3-4D8F-8D50-995FD44959B4} = {0270AC5E-EBA3-4D8F-8D50-995FD44959B4}
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|x64 = Debug|x64
|
Debug|x64 = Debug|x64
|
||||||
@ -21,6 +31,22 @@ Global
|
|||||||
{0270AC5E-EBA3-4D8F-8D50-995FD44959B4}.Release|x64.Build.0 = Release|x64
|
{0270AC5E-EBA3-4D8F-8D50-995FD44959B4}.Release|x64.Build.0 = Release|x64
|
||||||
{0270AC5E-EBA3-4D8F-8D50-995FD44959B4}.Release|x86.ActiveCfg = Release|Win32
|
{0270AC5E-EBA3-4D8F-8D50-995FD44959B4}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{0270AC5E-EBA3-4D8F-8D50-995FD44959B4}.Release|x86.Build.0 = Release|Win32
|
{0270AC5E-EBA3-4D8F-8D50-995FD44959B4}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{64EF270C-0A13-4AD8-8D50-23A1CEEBF98B}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{64EF270C-0A13-4AD8-8D50-23A1CEEBF98B}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{64EF270C-0A13-4AD8-8D50-23A1CEEBF98B}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{64EF270C-0A13-4AD8-8D50-23A1CEEBF98B}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{64EF270C-0A13-4AD8-8D50-23A1CEEBF98B}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{64EF270C-0A13-4AD8-8D50-23A1CEEBF98B}.Release|x64.Build.0 = Release|x64
|
||||||
|
{64EF270C-0A13-4AD8-8D50-23A1CEEBF98B}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{64EF270C-0A13-4AD8-8D50-23A1CEEBF98B}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{02F9FA44-902F-4695-846B-0B45E952A962}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{02F9FA44-902F-4695-846B-0B45E952A962}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{02F9FA44-902F-4695-846B-0B45E952A962}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{02F9FA44-902F-4695-846B-0B45E952A962}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{02F9FA44-902F-4695-846B-0B45E952A962}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{02F9FA44-902F-4695-846B-0B45E952A962}.Release|x64.Build.0 = Release|x64
|
||||||
|
{02F9FA44-902F-4695-846B-0B45E952A962}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{02F9FA44-902F-4695-846B-0B45E952A962}.Release|x86.Build.0 = Release|Win32
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
@ -0,0 +1,62 @@
|
|||||||
|
#include "StringTools.h"
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
std::string StringTools::Replace(const std::string& str, const char find, const std::string& subst)
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
|
||||||
|
for (std::size_t i = 0; i < str.length(); i++)
|
||||||
|
{
|
||||||
|
if (str[i] != find)
|
||||||
|
ss << str[i];
|
||||||
|
else
|
||||||
|
ss << subst;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ss.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string StringTools::Replace(const std::string& str, const std::string& find, const std::string& subst)
|
||||||
|
{
|
||||||
|
if (find.length() == 0)
|
||||||
|
return str;
|
||||||
|
|
||||||
|
std::stringstream ss;
|
||||||
|
|
||||||
|
std::size_t posFound = 0;
|
||||||
|
std::size_t lastFound = 0;
|
||||||
|
|
||||||
|
while (posFound != std::string::npos)
|
||||||
|
{
|
||||||
|
lastFound = posFound;
|
||||||
|
posFound = str.find(find, posFound);
|
||||||
|
|
||||||
|
if (posFound != std::string::npos)
|
||||||
|
{
|
||||||
|
ss << str.substr(lastFound, posFound - lastFound) << subst;
|
||||||
|
posFound += find.length();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ss << str.substr(lastFound, (str.length()) - lastFound);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ss.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string StringTools::Replace(const std::string& str, const char find, const char subst)
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << subst;
|
||||||
|
|
||||||
|
return Replace(str, find, ss.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string StringTools::Replace(const std::string& str, const std::string& find, const char subst)
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << subst;
|
||||||
|
|
||||||
|
return Replace(str, find, ss.str());
|
||||||
|
}
|
@ -1,5 +1,23 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
/* Handy utensils to manipulate strings */
|
||||||
class StringTools
|
class StringTools
|
||||||
{
|
{
|
||||||
};
|
public:
|
||||||
|
//! Will replace every occurence of `find` in `str` by `subst`.
|
||||||
|
static std::string Replace(const std::string& str, const char find, const std::string& subst);
|
||||||
|
|
||||||
|
//! Will replace every occurence of `find` in `str` by `subst`.
|
||||||
|
static std::string Replace(const std::string& str, const std::string& find, const std::string& subst);
|
||||||
|
|
||||||
|
//! Will replace every occurence of `find` in `str` by `subst`.
|
||||||
|
static std::string Replace(const std::string& str, const char find, const char subst);
|
||||||
|
|
||||||
|
//! Will replace every occurence of `find` in `str` by `subst`.
|
||||||
|
static std::string Replace(const std::string& str, const std::string& find, const char subst);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// No instanciation! >:(
|
||||||
|
StringTools();
|
||||||
|
};
|
||||||
|
@ -18,6 +18,12 @@
|
|||||||
<Platform>x64</Platform>
|
<Platform>x64</Platform>
|
||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="StringTools.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="StringTools.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<VCProjectVersion>16.0</VCProjectVersion>
|
<VCProjectVersion>16.0</VCProjectVersion>
|
||||||
<Keyword>Win32Proj</Keyword>
|
<Keyword>Win32Proj</Keyword>
|
||||||
@ -27,26 +33,26 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<PlatformToolset>v142</PlatformToolset>
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<PlatformToolset>v142</PlatformToolset>
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<PlatformToolset>v142</PlatformToolset>
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<PlatformToolset>v142</PlatformToolset>
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
@ -138,9 +144,6 @@
|
|||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
|
||||||
<ClCompile Include="StringTools.cpp" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
|
@ -14,6 +14,11 @@
|
|||||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||||
</Filter>
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="StringTools.h">
|
||||||
|
<Filter>Headerdateien</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="StringTools.cpp">
|
<ClCompile Include="StringTools.cpp">
|
||||||
<Filter>Quelldateien</Filter>
|
<Filter>Quelldateien</Filter>
|
||||||
|
166
StringTools/Test/Replace_Char.cpp
Normal file
166
StringTools/Test/Replace_Char.cpp
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
#include "CppUnitTest.h"
|
||||||
|
#include "../StringTools/StringTools.h"
|
||||||
|
|
||||||
|
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
|
||||||
|
|
||||||
|
namespace _StringTools
|
||||||
|
{
|
||||||
|
TEST_CLASS(_Replace_Char)
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Tests that replacing something in an empty string returns an empty string
|
||||||
|
TEST_METHOD(EmptyString)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, 'a', "Subst");
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that replacing a char to an empty string works
|
||||||
|
TEST_METHOD(Single_ReplaceToEmpty)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "i";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, 'i', "");
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that replacing to a single char works
|
||||||
|
TEST_METHOD(Single_ReplaceToSingleChar)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "a";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, 'a', "i");
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "i");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that replacing to a single char works, passing a char
|
||||||
|
TEST_METHOD(Single_ReplaceToSingleChar_AsChar)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "Oilbanger";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, 'a', 'i');
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "Oilbinger");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that replacing the find to something longer works
|
||||||
|
TEST_METHOD(Single_ReplaceToLonger)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "Littled";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, 'd', "binger");
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "Littlebinger");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that replacing a char to an empty string works
|
||||||
|
TEST_METHOD(Multiple_ReplaceToEmpty)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "dirty dogs dig dirt daringly";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, 'd', "");
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "irty ogs ig irt aringly");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that replacing to a single char works
|
||||||
|
TEST_METHOD(Multiple_ReplaceToSingleChar)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "Oilbanger, Bangerfanger, Lattle brattle oaly skattle.";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, 'a', "i");
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "Oilbinger, Bingerfinger, Little brittle oily skittle.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that replacing to a single char works, passing a char
|
||||||
|
TEST_METHOD(Multiple_ReplaceToSingleChar_AsChar)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "Oilbanger, Bangerfanger, Lattle brattle oaly skattle.";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, 'a', 'i');
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "Oilbinger, Bingerfinger, Little brittle oily skittle.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that replacing the find to something longer works
|
||||||
|
TEST_METHOD(Multiple_ReplaceToLonger)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "d d d d d d d d";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, 'd', "bla");
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "bla bla bla bla bla bla bla bla");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that the replacer ignores chars put in by the replacer
|
||||||
|
TEST_METHOD(ReplacerIgnoresReplaced)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "b b b b b b b b";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, 'b', "bla");
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "bla bla bla bla bla bla bla bla");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that replacing succesive findings works
|
||||||
|
TEST_METHOD(Replace_Successive)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "bbbbbbbb";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, 'b', "bla");
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "blablablablablablablabla");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
180
StringTools/Test/Replace_String.cpp
Normal file
180
StringTools/Test/Replace_String.cpp
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
#include "CppUnitTest.h"
|
||||||
|
#include "../StringTools/StringTools.h"
|
||||||
|
|
||||||
|
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
|
||||||
|
|
||||||
|
namespace _StringTools
|
||||||
|
{
|
||||||
|
TEST_CLASS(_Replace_String)
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Tests that replacing something in an empty string returns an empty string
|
||||||
|
TEST_METHOD(EmptyString)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, "burger", "Subst");
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that replacing a string to an empty string works
|
||||||
|
TEST_METHOD(Single_ReplaceToEmpty)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "Squarepants";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, "Squarepants", "");
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that replacing to a single char works
|
||||||
|
TEST_METHOD(Single_ReplaceToSingleChar)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "Squarepants";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, "Squarepants", "i");
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "i");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that replacing to a single char works, passing a char
|
||||||
|
TEST_METHOD(Single_ReplaceToSingleChar_AsChar)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "Oilbanger";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, "Oilbanger", 'i');
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "i");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that replacing the find to something longer works
|
||||||
|
TEST_METHOD(Single_ReplaceToLonger)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "LittleDong";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, "Dong", "Binger");
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "LittleBinger");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that replacing a string to an empty string works
|
||||||
|
TEST_METHOD(Multiple_ReplaceToEmpty)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "The fucking dogs are fucking eating the fucking chicken.";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, "fucking ", "");
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "The dogs are eating the chicken.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that replacing to a single char works
|
||||||
|
TEST_METHOD(Multiple_ReplaceToSingleChar)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "Oilbsmearynger, Bsmearyngerfsmearynger, Lsmearyttle brsmearyttle osmearyly sksmearyttle.";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, "smeary", "i");
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "Oilbinger, Bingerfinger, Little brittle oily skittle.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that replacing to a single char works, passing a char
|
||||||
|
TEST_METHOD(Multiple_ReplaceToSingleChar_AsChar)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "Oilbsmearynger, Bsmearyngerfsmearynger, Lsmearyttle brsmearyttle osmearyly sksmearyttle.";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, "smeary", 'i');
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "Oilbinger, Bingerfinger, Little brittle oily skittle.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that replacing the find to something longer works
|
||||||
|
TEST_METHOD(Multiple_ReplaceToLonger)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "honk honk honk honk honk honk honk honk";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, "honk", "hallery");
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "hallery hallery hallery hallery hallery hallery hallery hallery");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that the replacer ignores chars put in by the replacer
|
||||||
|
TEST_METHOD(ReplacerIgnoresReplaced)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "honk honk honk honk honk honk honk honk";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, "honk", "honka");
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "honka honka honka honka honka honka honka honka");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that replacing succesive findings works
|
||||||
|
TEST_METHOD(Replace_Successive)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "honkhonkhonkhonkhonkhonkhonkhonk";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, "honk", "hallery");
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "halleryhalleryhalleryhalleryhalleryhalleryhalleryhallery");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that if find.length() == 0, it returns just the input
|
||||||
|
TEST_METHOD(Find_Length0_Returns_Input)
|
||||||
|
{
|
||||||
|
// Setup
|
||||||
|
const std::string in = "Littled";
|
||||||
|
|
||||||
|
// Exercise
|
||||||
|
const std::string out = StringTools::Replace(in, "", "binger");
|
||||||
|
|
||||||
|
// Verify
|
||||||
|
Assert::AreEqual(out.c_str(), "Littled");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
@ -1,16 +0,0 @@
|
|||||||
#include "pch.h"
|
|
||||||
#include "CppUnitTest.h"
|
|
||||||
|
|
||||||
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
|
|
||||||
|
|
||||||
namespace Test
|
|
||||||
{
|
|
||||||
TEST_CLASS(Test)
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
TEST_METHOD(TestMethod1)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
@ -25,6 +25,7 @@
|
|||||||
<RootNamespace>Test</RootNamespace>
|
<RootNamespace>Test</RootNamespace>
|
||||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||||
<ProjectSubType>NativeUnitTestProject</ProjectSubType>
|
<ProjectSubType>NativeUnitTestProject</ProjectSubType>
|
||||||
|
<ProjectName>Test_Stringtools</ProjectName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
@ -89,7 +90,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<AdditionalIncludeDirectories>$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
@ -104,7 +105,7 @@
|
|||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<AdditionalIncludeDirectories>$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
@ -119,7 +120,7 @@
|
|||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
@ -138,7 +139,7 @@
|
|||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
@ -156,16 +157,13 @@
|
|||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="pch.cpp">
|
<ProjectReference Include="..\StringTools\StringTools.vcxproj">
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
<Project>{0270ac5e-eba3-4d8f-8d50-995fd44959b4}</Project>
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
</ProjectReference>
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="Test.cpp" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="pch.h" />
|
<ClCompile Include="Replace_Char.cpp" />
|
||||||
|
<ClCompile Include="Replace_String.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
@ -15,16 +15,11 @@
|
|||||||
</Filter>
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="Test.cpp">
|
<ClCompile Include="Replace_Char.cpp">
|
||||||
<Filter>Quelldateien</Filter>
|
<Filter>Quelldateien</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="pch.cpp">
|
<ClCompile Include="Replace_String.cpp">
|
||||||
<Filter>Quelldateien</Filter>
|
<Filter>Quelldateien</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
|
||||||
<ClInclude Include="pch.h">
|
|
||||||
<Filter>Headerdateien</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
</Project>
|
Loading…
x
Reference in New Issue
Block a user