Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/windirstat/simpleini.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ts-roundtrip.cpp')
-rw-r--r--tests/ts-roundtrip.cpp163
1 files changed, 163 insertions, 0 deletions
diff --git a/tests/ts-roundtrip.cpp b/tests/ts-roundtrip.cpp
new file mode 100644
index 0000000..3808a08
--- /dev/null
+++ b/tests/ts-roundtrip.cpp
@@ -0,0 +1,163 @@
+#include "pch.h"
+#include <algorithm>
+#include "../SimpleIni.h"
+
+class TestRoundTrip : public ::testing::Test {
+protected:
+ void TestRoundTrip::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());
+}