summaryrefslogtreecommitdiffstats
path: root/winpr/libwinpr/utils/test/TestIni.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 01:24:41 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 01:24:41 +0000
commita9bcc81f821d7c66f623779fa5147e728eb3c388 (patch)
tree98676963bcdd537ae5908a067a8eb110b93486a6 /winpr/libwinpr/utils/test/TestIni.c
parentInitial commit. (diff)
downloadfreerdp3-a9bcc81f821d7c66f623779fa5147e728eb3c388.tar.xz
freerdp3-a9bcc81f821d7c66f623779fa5147e728eb3c388.zip
Adding upstream version 3.3.0+dfsg1.upstream/3.3.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'winpr/libwinpr/utils/test/TestIni.c')
-rw-r--r--winpr/libwinpr/utils/test/TestIni.c160
1 files changed, 160 insertions, 0 deletions
diff --git a/winpr/libwinpr/utils/test/TestIni.c b/winpr/libwinpr/utils/test/TestIni.c
new file mode 100644
index 0000000..2dd24f0
--- /dev/null
+++ b/winpr/libwinpr/utils/test/TestIni.c
@@ -0,0 +1,160 @@
+
+#include <winpr/crt.h>
+#include <winpr/ini.h>
+
+static const char TEST_INI_01[] = "; This is a sample .ini config file\n"
+ "\n"
+ "[first_section]\n"
+ "one = 1\n"
+ "five = 5\n"
+ "animal = BIRD\n"
+ "\n"
+ "[second_section]\n"
+ "path = \"/usr/local/bin\"\n"
+ "URL = \"http://www.example.com/~username\"\n"
+ "\n";
+
+static const char TEST_INI_02[] = "[FreeRDS]\n"
+ "prefix=\"/usr/local\"\n"
+ "bindir=\"bin\"\n"
+ "sbindir=\"sbin\"\n"
+ "libdir=\"lib\"\n"
+ "datarootdir=\"share\"\n"
+ "localstatedir=\"var\"\n"
+ "sysconfdir=\"etc\"\n"
+ "\n";
+
+static const char TEST_INI_03[] = "[FreeRDS]\n"
+ "prefix=\"/usr/local\"\n"
+ "bindir=\"bin\"\n"
+ "# some illegal string\n"
+ "sbindir=\"sbin\"\n"
+ "libdir=\"lib\"\n"
+ "invalid key-value pair\n"
+ "datarootdir=\"share\"\n"
+ "localstatedir=\"var\"\n"
+ "sysconfdir=\"etc\"\n"
+ "\n";
+
+int TestIni(int argc, char* argv[])
+{
+ int rc = -1;
+ size_t nKeys = 0;
+ size_t nSections = 0;
+ UINT32 iValue = 0;
+ wIniFile* ini = NULL;
+ const char* sValue = NULL;
+ char** keyNames = NULL;
+ char** sectionNames = NULL;
+
+ WINPR_UNUSED(argc);
+ WINPR_UNUSED(argv);
+
+ /* First Sample */
+ ini = IniFile_New();
+ if (!ini)
+ goto fail;
+
+ if (IniFile_ReadBuffer(ini, TEST_INI_01) < 0)
+ goto fail;
+
+ free(sectionNames);
+ sectionNames = IniFile_GetSectionNames(ini, &nSections);
+ if (!sectionNames && (nSections > 0))
+ goto fail;
+
+ for (size_t i = 0; i < nSections; i++)
+ {
+ free(keyNames);
+ keyNames = IniFile_GetSectionKeyNames(ini, sectionNames[i], &nKeys);
+ printf("[%s]\n", sectionNames[i]);
+ if (!keyNames && (nKeys > 0))
+ goto fail;
+ for (size_t j = 0; j < nKeys; j++)
+ {
+ sValue = IniFile_GetKeyValueString(ini, sectionNames[i], keyNames[j]);
+ printf("%s = %s\n", keyNames[j], sValue);
+ }
+ }
+
+ iValue = IniFile_GetKeyValueInt(ini, "first_section", "one");
+
+ if (iValue != 1)
+ {
+ printf("IniFile_GetKeyValueInt failure\n");
+ goto fail;
+ }
+
+ iValue = IniFile_GetKeyValueInt(ini, "first_section", "five");
+
+ if (iValue != 5)
+ {
+ printf("IniFile_GetKeyValueInt failure\n");
+ goto fail;
+ }
+
+ sValue = IniFile_GetKeyValueString(ini, "first_section", "animal");
+
+ if (strcmp(sValue, "BIRD") != 0)
+ {
+ printf("IniFile_GetKeyValueString failure\n");
+ goto fail;
+ }
+
+ sValue = IniFile_GetKeyValueString(ini, "second_section", "path");
+
+ if (strcmp(sValue, "/usr/local/bin") != 0)
+ {
+ printf("IniFile_GetKeyValueString failure\n");
+ goto fail;
+ }
+
+ sValue = IniFile_GetKeyValueString(ini, "second_section", "URL");
+
+ if (strcmp(sValue, "http://www.example.com/~username") != 0)
+ {
+ printf("IniFile_GetKeyValueString failure\n");
+ goto fail;
+ }
+
+ IniFile_Free(ini);
+ /* Second Sample */
+ ini = IniFile_New();
+ if (!ini)
+ goto fail;
+ if (IniFile_ReadBuffer(ini, TEST_INI_02) < 0)
+ goto fail;
+ free(sectionNames);
+ sectionNames = IniFile_GetSectionNames(ini, &nSections);
+ if (!sectionNames && (nSections > 0))
+ goto fail;
+
+ for (size_t i = 0; i < nSections; i++)
+ {
+ free(keyNames);
+ keyNames = IniFile_GetSectionKeyNames(ini, sectionNames[i], &nKeys);
+ printf("[%s]\n", sectionNames[i]);
+
+ if (!keyNames && (nKeys > 0))
+ goto fail;
+ for (size_t j = 0; j < nKeys; j++)
+ {
+ sValue = IniFile_GetKeyValueString(ini, sectionNames[i], keyNames[j]);
+ printf("%s = %s\n", keyNames[j], sValue);
+ }
+ }
+
+ IniFile_Free(ini);
+ /* Third sample - invalid input */
+ ini = IniFile_New();
+
+ if (IniFile_ReadBuffer(ini, TEST_INI_03) != -1)
+ goto fail;
+
+ rc = 0;
+fail:
+ free(keyNames);
+ free(sectionNames);
+ IniFile_Free(ini);
+ return rc;
+}