#include "pch.h" #include #include "../SimpleIni.h" class TestRoundTrip : public ::testing::Test { protected: void SetUp() override; void TestMulti(); void TestBOM(bool useBOM); protected: CSimpleIniA ini; std::string input; std::string output; }; void TestRoundTrip::SetUp() { ini.SetUnicode(); } TEST_F(TestRoundTrip, TestStandard) { input = "; File comment\n" "\n" "\n" "; Section 1 comment\n" "[section1]\n" "\n" "\n" "; Section 2 comment\n" "[section2]\n" "key1 = string\n" "key2 = true\n" "key3 = 3.1415\n" ; SI_Error rc = ini.LoadData(input); ASSERT_EQ(rc, SI_OK); const char* result = ini.GetValue("section2", "key1"); ASSERT_STREQ(result, "string"); rc = ini.Save(output); ASSERT_EQ(rc, SI_OK); output.erase(std::remove(output.begin(), output.end(), '\r'), output.end()); ASSERT_STREQ(input.c_str(), output.c_str()); } void TestRoundTrip::TestMulti() { input = "[section]\n" "key = string1\n" "key = string2\n" ; SI_Error rc = ini.LoadData(input); ASSERT_EQ(rc, SI_OK); rc = ini.Save(output); ASSERT_EQ(rc, SI_OK); output.erase(std::remove(output.begin(), output.end(), '\r'), output.end()); } TEST_F(TestRoundTrip, TestMultiGood) { ini.SetMultiKey(true); TestMulti(); ASSERT_STREQ(input.c_str(), output.c_str()); } TEST_F(TestRoundTrip, TestMultiBad) { std::string expected = "[section]\n" "key = string2\n"; ini.SetMultiKey(false); TestMulti(); ASSERT_STRNE(input.c_str(), output.c_str()); ASSERT_STREQ(expected.c_str(), output.c_str()); } TEST_F(TestRoundTrip, TestSpacesTrue) { input = "[section]\n" "key = string1\n"; SI_Error rc = ini.LoadData(input); ASSERT_EQ(rc, SI_OK); ini.SetSpaces(true); rc = ini.Save(output); ASSERT_EQ(rc, SI_OK); output.erase(std::remove(output.begin(), output.end(), '\r'), output.end()); ASSERT_STREQ(input.c_str(), output.c_str()); } TEST_F(TestRoundTrip, TestSpacesFalse) { input = "[section]\n" "key = string1\n"; SI_Error rc = ini.LoadData(input); ASSERT_EQ(rc, SI_OK); ini.SetSpaces(false); rc = ini.Save(output); ASSERT_EQ(rc, SI_OK); output.erase(std::remove(output.begin(), output.end(), '\r'), output.end()); ASSERT_STRNE(input.c_str(), output.c_str()); std::string expected = "[section]\n" "key=string1\n"; ASSERT_STREQ(expected.c_str(), output.c_str()); } void TestRoundTrip::TestBOM(bool useBOM) { const char bom[] = "\xEF\xBB\xBF"; const char input8[] = u8"[テスト1]\n" u8"テスト2 = テスト3\n"; input = bom; input += input8; ini.Reset(); ini.SetUnicode(false); SI_Error rc = ini.LoadData(input); ASSERT_EQ(rc, SI_OK); const char tesuto1[] = u8"テスト1"; const char tesuto2[] = u8"テスト2"; const char tesuto3[] = u8"テスト3"; const char* result = ini.GetValue(tesuto1, tesuto2); ASSERT_STREQ(result, tesuto3); rc = ini.Save(output, useBOM); ASSERT_EQ(rc, SI_OK); output.erase(std::remove(output.begin(), output.end(), '\r'), output.end()); } TEST_F(TestRoundTrip, TestWithBOM) { TestBOM(true); ASSERT_STREQ(input.c_str(), output.c_str()); } TEST_F(TestRoundTrip, TestWithoutBOM) { TestBOM(false); ASSERT_STRNE(input.c_str(), output.c_str()); std::string expected(input, 3); ASSERT_STREQ(expected.c_str(), output.c_str()); }