mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2025-10-17 06:47:48 +00:00
Move dead submodules in-tree
Signed-off-by: swurl <swurl@swurl.xyz>
This commit is contained in:
parent
c0cceff365
commit
6c655321e6
4081 changed files with 1185566 additions and 45 deletions
24
externals/simpleini/tests/old/test.cmd
vendored
Normal file
24
externals/simpleini/tests/old/test.cmd
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
@echo off
|
||||
|
||||
Debug\testsi.exe -u -m -l test1-input.ini > test1-blah.ini
|
||||
fc test1-expected.ini test1-output.ini
|
||||
if errorlevel 1 goto error
|
||||
|
||||
"Debug Unicode\testsi.exe" -u -m -l test1-input.ini > test1-blah.ini
|
||||
fc test1-expected.ini test1-output.ini
|
||||
if errorlevel 1 goto error
|
||||
|
||||
Release\testsi.exe -u -m -l test1-input.ini > test1-blah.ini
|
||||
fc test1-expected.ini test1-output.ini
|
||||
if errorlevel 1 goto error
|
||||
|
||||
"Release Unicode\testsi.exe" -u -m -l test1-input.ini > test1-blah.ini
|
||||
fc test1-expected.ini test1-output.ini
|
||||
if errorlevel 1 goto error
|
||||
|
||||
exit /b 0
|
||||
|
||||
:error
|
||||
echo Failed during test run. Output file doesn't match expected file.
|
||||
pause
|
||||
exit /b 1
|
85
externals/simpleini/tests/old/test1-expected.ini
vendored
Normal file
85
externals/simpleini/tests/old/test1-expected.ini
vendored
Normal file
|
@ -0,0 +1,85 @@
|
|||
; testsi-UTF8-std.ini : standard UTF-8 test file for SimpleIni automated testing
|
||||
;
|
||||
; The number after a section or key is the order that it is defined in this file
|
||||
; to make it easier to see if it has been written out correctly. This file should
|
||||
; be loaded with Unicode / MultiKey / MultiLine turned on.
|
||||
|
||||
|
||||
|
||||
; This comment should be joined on to the one below it about the key
|
||||
; with no section.
|
||||
|
||||
; Key with no section
|
||||
lonely-key = nosection
|
||||
another = nosection either
|
||||
|
||||
; This key has no value
|
||||
empty =
|
||||
|
||||
|
||||
; This should be joined with the comment below about japanese.
|
||||
; Another line which will be un-indented.
|
||||
|
||||
; This is a section of keys showing the word Japanese in different syllabies.
|
||||
[ordered-1]
|
||||
a-1 = blah
|
||||
|
||||
; this is in kanji
|
||||
japanese-2 = 日本語
|
||||
|
||||
; this is in hiragana
|
||||
japanese-3 = にほんご
|
||||
|
||||
; this is in katakana
|
||||
japanese-4 = ニホンゴ
|
||||
|
||||
; this is in romaji
|
||||
japanese-5 = nihongo
|
||||
|
||||
; kanji as the key
|
||||
日本語-6 = japanese
|
||||
|
||||
|
||||
[multi-2]
|
||||
|
||||
; value a
|
||||
test = a
|
||||
|
||||
; value b
|
||||
test = b
|
||||
|
||||
; value c
|
||||
test = c
|
||||
|
||||
; value d
|
||||
test = d
|
||||
|
||||
|
||||
[multiline-3]
|
||||
|
||||
; This is obviously a multi-line entry
|
||||
multiline-1 = <<<END_OF_TEXT
|
||||
|
||||
This is a multi-line comment. It
|
||||
will continue until we have the word MULTI
|
||||
on a line by itself.
|
||||
|
||||
日本語も。
|
||||
|
||||
END_OF_TEXT
|
||||
|
||||
; This looks like multi-line, but because the newline following the last
|
||||
; line is discarded, it will be converted into a single line entry.
|
||||
another-2 = This is not a multiline entry.
|
||||
|
||||
; If you wanted a multiline entry with a single line, you need to add
|
||||
; an extra line to it.
|
||||
another-3 = <<<END_OF_TEXT
|
||||
This is a multiline entry.
|
||||
|
||||
END_OF_TEXT
|
||||
|
||||
|
||||
[integer]
|
||||
dec = 42
|
||||
hex = 0x2a
|
76
externals/simpleini/tests/old/test1-input.ini
vendored
Normal file
76
externals/simpleini/tests/old/test1-input.ini
vendored
Normal file
|
@ -0,0 +1,76 @@
|
|||
; testsi-UTF8-std.ini : standard UTF-8 test file for SimpleIni automated testing
|
||||
;
|
||||
; The number after a section or key is the order that it is defined in this file
|
||||
; to make it easier to see if it has been written out correctly. This file should
|
||||
; be loaded with Unicode / MultiKey / MultiLine turned on.
|
||||
|
||||
; This comment should be joined on to the one below it about the key
|
||||
; with no section.
|
||||
|
||||
; Key with no section
|
||||
lonely-key = nosection
|
||||
another = nosection either
|
||||
|
||||
; This key has no value
|
||||
empty =
|
||||
|
||||
; This should be joined with the comment below about japanese.
|
||||
; Another line which will be un-indented.
|
||||
|
||||
; This is a section of keys showing the word Japanese in different syllabies.
|
||||
[ordered-1]
|
||||
a-1 = blah
|
||||
|
||||
; this is in kanji
|
||||
japanese-2 = 日本語
|
||||
|
||||
; this is in hiragana
|
||||
japanese-3 = にほんご
|
||||
|
||||
; this is in katakana
|
||||
japanese-4 = ニホンゴ
|
||||
|
||||
; this is in romaji
|
||||
japanese-5 = nihongo
|
||||
|
||||
; kanji as the key
|
||||
日本語-6 = japanese
|
||||
|
||||
[multi-2]
|
||||
; value a
|
||||
test = a
|
||||
; value b
|
||||
test = b
|
||||
; value c
|
||||
test = c
|
||||
; value d
|
||||
test = d
|
||||
|
||||
[multiline-3]
|
||||
; This is obviously a multi-line entry
|
||||
multiline-1 = <<<MULTI
|
||||
|
||||
This is a multi-line comment. It
|
||||
will continue until we have the word MULTI
|
||||
on a line by itself.
|
||||
|
||||
日本語も。
|
||||
|
||||
MULTI
|
||||
|
||||
; This looks like multi-line, but because the newline following the last
|
||||
; line is discarded, it will be converted into a single line entry.
|
||||
another-2 = <<<MULTI
|
||||
This is not a multiline entry.
|
||||
MULTI
|
||||
|
||||
; If you wanted a multiline entry with a single line, you need to add
|
||||
; an extra line to it.
|
||||
another-3 = <<<MULTI
|
||||
This is a multiline entry.
|
||||
|
||||
MULTI
|
||||
|
||||
[integer]
|
||||
dec = 42
|
||||
hex = 0x2a
|
166
externals/simpleini/tests/old/test1.cpp
vendored
Normal file
166
externals/simpleini/tests/old/test1.cpp
vendored
Normal file
|
@ -0,0 +1,166 @@
|
|||
// File: test1.cpp
|
||||
// Library: SimpleIni
|
||||
// Author: Brodie Thiesfield <code@jellycan.com>
|
||||
// Source: http://code.jellycan.com/simpleini/
|
||||
//
|
||||
// Automated testing for SimpleIni streams
|
||||
|
||||
#ifdef _WIN32
|
||||
# pragma warning(disable: 4786)
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
# include <windows.h>
|
||||
# define DELETE_FILE DeleteFileA
|
||||
#else
|
||||
# include <unistd.h>
|
||||
# define DELETE_FILE unlink
|
||||
#endif
|
||||
#include <fstream>
|
||||
|
||||
#define SI_SUPPORT_IOSTREAMS
|
||||
#include "SimpleIni.h"
|
||||
|
||||
class Test
|
||||
{
|
||||
std::string m_strTest;
|
||||
|
||||
public:
|
||||
Test(const char * a_pszName)
|
||||
: m_strTest(a_pszName)
|
||||
{
|
||||
printf("%s: test starting\n", m_strTest.c_str());
|
||||
}
|
||||
|
||||
bool Success()
|
||||
{
|
||||
printf("%s: test succeeded\n", m_strTest.c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Failure(const char * pszReason)
|
||||
{
|
||||
printf("%s: test FAILED (%s)\n", m_strTest.c_str(), pszReason);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
bool FileComparisonTest(const char * a_pszFile1, const char * a_pszFile2) {
|
||||
// ensure that the two files are the same
|
||||
try {
|
||||
std::string strFile1, strFile2;
|
||||
|
||||
char szBuf[1024];
|
||||
FILE * fp = NULL;
|
||||
|
||||
#if __STDC_WANT_SECURE_LIB__
|
||||
fopen_s(&fp, a_pszFile1, "rb");
|
||||
#else
|
||||
fp = fopen(a_pszFile1, "rb");
|
||||
#endif
|
||||
if (!fp) throw false;
|
||||
while (!feof(fp)) {
|
||||
size_t n = fread(szBuf, 1, sizeof(szBuf), fp);
|
||||
strFile1.append(szBuf, n);
|
||||
}
|
||||
fclose(fp);
|
||||
|
||||
fp = NULL;
|
||||
#if __STDC_WANT_SECURE_LIB__
|
||||
fopen_s(&fp, a_pszFile2, "rb");
|
||||
#else
|
||||
fp = fopen(a_pszFile2, "rb");
|
||||
#endif
|
||||
if (!fp) throw false;
|
||||
while (!feof(fp)) {
|
||||
size_t n = fread(szBuf, 1, sizeof(szBuf), fp);
|
||||
strFile2.append(szBuf, n);
|
||||
}
|
||||
fclose(fp);
|
||||
|
||||
if (strFile1 != strFile2) throw false;
|
||||
}
|
||||
catch (...) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool FileLoadTest(const char * a_pszFile1, const char * a_pszFile2) {
|
||||
// ensure that the two files load into simpleini the same
|
||||
CSimpleIniA ini(true, true, true);
|
||||
bool b;
|
||||
try {
|
||||
ini.Reset();
|
||||
if (ini.LoadFile(a_pszFile1) < 0) throw "Load failed for file 1";
|
||||
if (ini.SaveFile("test1.ini") < 0) throw "Save failed for file 1";
|
||||
|
||||
ini.Reset();
|
||||
if (ini.LoadFile(a_pszFile2) < 0) throw "Load failed for file 2";
|
||||
if (ini.SaveFile("test2.ini") < 0) throw "Save failed for file 2";
|
||||
|
||||
b = FileComparisonTest("test1.ini", "test2.ini");
|
||||
DELETE_FILE("test1.ini");
|
||||
DELETE_FILE("test2.ini");
|
||||
if (!b) throw "File comparison failed in FileLoadTest";
|
||||
}
|
||||
catch (...) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TestStreams()
|
||||
{
|
||||
const char * rgszTestFile[3] = {
|
||||
"test1-input.ini",
|
||||
"test1-output.ini",
|
||||
"test1-expected.ini"
|
||||
};
|
||||
|
||||
Test oTest("TestStreams");
|
||||
|
||||
CSimpleIniW ini;
|
||||
ini.SetUnicode(true);
|
||||
ini.SetMultiKey(true);
|
||||
ini.SetMultiLine(true);
|
||||
|
||||
// load the file
|
||||
try {
|
||||
std::ifstream instream;
|
||||
instream.open(rgszTestFile[0], std::ifstream::in | std::ifstream::binary);
|
||||
if (ini.LoadData(instream) < 0) throw false;
|
||||
instream.close();
|
||||
}
|
||||
catch (...) {
|
||||
return oTest.Failure("Failed to load file");
|
||||
}
|
||||
|
||||
// standard contents test
|
||||
//if (!StandardContentsTest(ini, oTest)) {
|
||||
// return false;
|
||||
//}
|
||||
|
||||
// save the file
|
||||
try {
|
||||
std::ofstream outfile;
|
||||
outfile.open(rgszTestFile[1], std::ofstream::out | std::ofstream::binary);
|
||||
if (ini.Save(outfile, true) < 0) throw false;
|
||||
outfile.close();
|
||||
}
|
||||
catch (...) {
|
||||
return oTest.Failure("Failed to save file");
|
||||
}
|
||||
|
||||
// file comparison test
|
||||
if (!FileComparisonTest(rgszTestFile[1], rgszTestFile[2])) {
|
||||
return oTest.Failure("Failed file comparison");
|
||||
}
|
||||
if (!FileLoadTest(rgszTestFile[1], rgszTestFile[2])) {
|
||||
return oTest.Failure("Failed file load comparison");
|
||||
}
|
||||
|
||||
return oTest.Success();
|
||||
}
|
52
externals/simpleini/tests/old/testsi-EUCJP.ini
vendored
Normal file
52
externals/simpleini/tests/old/testsi-EUCJP.ini
vendored
Normal file
|
@ -0,0 +1,52 @@
|
|||
; test file for SimpleIni
|
||||
|
||||
nosection=ok
|
||||
NOSECTION=still ok
|
||||
whitespace = ok
|
||||
|
||||
[standard]
|
||||
foo=foo1
|
||||
standard-1=foo
|
||||
日本語=ok1
|
||||
|
||||
[Standard]
|
||||
Foo=foo2
|
||||
standard-2=foo
|
||||
日本語=ok2
|
||||
|
||||
[ Whitespace ]
|
||||
|
||||
a=
|
||||
|
||||
[ whitespace in section name ]
|
||||
whitespace in key name = whitespace in value name
|
||||
|
||||
; comments
|
||||
; more comments
|
||||
|
||||
invalid
|
||||
=invalid
|
||||
====invalid
|
||||
|
||||
[Japanese]
|
||||
nihongo = 日本語
|
||||
日本語 = 日本語
|
||||
|
||||
[日本語]
|
||||
nihongo = 日本語
|
||||
日本語 = 日本語
|
||||
|
||||
[]
|
||||
more=no section name
|
||||
|
||||
|
||||
|
||||
[MultiLine]
|
||||
single = This is a single line.
|
||||
multi = <<<MULTI
|
||||
|
||||
This is a multi-line value. It continues until the MULTI tag is found
|
||||
on a line by itself with no whitespace before or after it. This value
|
||||
will be returned to the user with all newlines and whitespace.
|
||||
|
||||
MULTI
|
51
externals/simpleini/tests/old/testsi-SJIS.ini
vendored
Normal file
51
externals/simpleini/tests/old/testsi-SJIS.ini
vendored
Normal file
|
@ -0,0 +1,51 @@
|
|||
; test file for SimpleIni
|
||||
|
||||
nosection=ok
|
||||
NOSECTION=still ok
|
||||
whitespace = ok
|
||||
|
||||
[standard]
|
||||
foo=foo1
|
||||
standard-1=foo
|
||||
日本語=ok1
|
||||
|
||||
[Standard]
|
||||
Foo=foo2
|
||||
standard-2=foo
|
||||
日本語=ok2
|
||||
|
||||
[ Whitespace ]
|
||||
|
||||
a=
|
||||
|
||||
[ whitespace in section name ]
|
||||
whitespace in key name = whitespace in value name
|
||||
|
||||
; comments
|
||||
; more comments
|
||||
|
||||
invalid
|
||||
=invalid
|
||||
====invalid
|
||||
|
||||
[Japanese]
|
||||
nihongo = 日本語
|
||||
日本語 = 日本語
|
||||
|
||||
[日本語]
|
||||
nihongo = 日本語
|
||||
日本語 = 日本語
|
||||
|
||||
[]
|
||||
more=no section name
|
||||
|
||||
|
||||
[MultiLine]
|
||||
single = This is a single line.
|
||||
multi = <<<MULTI
|
||||
|
||||
This is a multi-line value. It continues until the MULTI tag is found
|
||||
on a line by itself with no whitespace before or after it. This value
|
||||
will be returned to the user with all newlines and whitespace.
|
||||
|
||||
MULTI
|
50
externals/simpleini/tests/old/testsi-UTF8.ini
vendored
Normal file
50
externals/simpleini/tests/old/testsi-UTF8.ini
vendored
Normal file
|
@ -0,0 +1,50 @@
|
|||
; test file for SimpleIni
|
||||
|
||||
whitespace = ok
|
||||
nosection=ok
|
||||
NOSECTION=still ok
|
||||
|
||||
[standard]
|
||||
foo=foo1
|
||||
standard-1=foo
|
||||
日本語=ok1
|
||||
|
||||
[Standard]
|
||||
Foo=foo2
|
||||
standard-2=foo
|
||||
日本語=ok2
|
||||
|
||||
[ Whitespace ]
|
||||
|
||||
a=
|
||||
|
||||
[ whitespace in section name ]
|
||||
whitespace in key name = whitespace in value name
|
||||
|
||||
; comments
|
||||
; more comments
|
||||
|
||||
invalid
|
||||
=invalid
|
||||
====invalid
|
||||
|
||||
[Japanese]
|
||||
nihongo = 日本語
|
||||
日本語 = 日本語
|
||||
|
||||
[日本語]
|
||||
nihongo = 日本語
|
||||
日本語 = 日本語
|
||||
|
||||
[]
|
||||
more=no section name
|
||||
|
||||
[MultiLine]
|
||||
single = This is a single line.
|
||||
multi = <<<MULTI
|
||||
|
||||
This is a multi-line value. It continues until the MULTI tag is found
|
||||
on a line by itself with no whitespace before or after it. This value
|
||||
will be returned to the user with all newlines and whitespace.
|
||||
|
||||
MULTI
|
315
externals/simpleini/tests/old/testsi.cpp
vendored
Normal file
315
externals/simpleini/tests/old/testsi.cpp
vendored
Normal file
|
@ -0,0 +1,315 @@
|
|||
// File: testsi.cpp
|
||||
// Library: SimpleIni
|
||||
// Author: Brodie Thiesfield <code@jellycan.com>
|
||||
// Source: http://code.jellycan.com/simpleini/
|
||||
//
|
||||
// Demo of usage
|
||||
|
||||
#ifdef _WIN32
|
||||
# pragma warning(disable: 4786)
|
||||
#endif
|
||||
|
||||
#include <locale.h>
|
||||
#include <stdio.h>
|
||||
#include <cassert>
|
||||
|
||||
#define SI_SUPPORT_IOSTREAMS
|
||||
#if defined(SI_SUPPORT_IOSTREAMS) && !defined(_UNICODE)
|
||||
# include <fstream>
|
||||
#endif
|
||||
|
||||
//#define SI_CONVERT_GENERIC
|
||||
//#define SI_CONVERT_ICU
|
||||
//#define SI_CONVERT_WIN32
|
||||
#include "../SimpleIni.h"
|
||||
|
||||
#ifdef SI_CONVERT_ICU
|
||||
// if converting using ICU then we need the ICU library
|
||||
# pragma comment(lib, "icuuc.lib")
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
# include <tchar.h>
|
||||
#else // !_WIN32
|
||||
# define TCHAR char
|
||||
# define _T(x) x
|
||||
# define _tprintf printf
|
||||
# define _tmain main
|
||||
#endif // _WIN32
|
||||
|
||||
static void
|
||||
Test(
|
||||
CSimpleIni & ini
|
||||
)
|
||||
{
|
||||
const TCHAR *pszSection = 0;
|
||||
const TCHAR *pItem = 0;
|
||||
const TCHAR *pszVal = 0;
|
||||
|
||||
// get the value of the key "foo" in section "standard"
|
||||
bool bHasMulti;
|
||||
pszVal = ini.GetValue(_T("standard"), _T("foo"), 0, &bHasMulti);
|
||||
_tprintf(_T("\n-- Value of standard::foo is '%s' (hasMulti = %d)\n"),
|
||||
pszVal ? pszVal : _T("(null)"), bHasMulti);
|
||||
|
||||
// set the value of the key "foo" in section "standard"
|
||||
ini.SetValue(_T("standard"), _T("foo"), _T("wibble"));
|
||||
pszVal = ini.GetValue(_T("standard"), _T("foo"), 0, &bHasMulti);
|
||||
_tprintf(_T("\n-- Value of standard::foo is '%s' (hasMulti = %d)\n"),
|
||||
pszVal ? pszVal : _T("(null)"), bHasMulti);
|
||||
|
||||
// get all values of the key "foo" in section "standard"
|
||||
CSimpleIni::TNamesDepend values;
|
||||
if (ini.GetAllValues(_T("standard"), _T("foo"), values)) {
|
||||
_tprintf(_T("\n-- Values of standard::foo are:\n"));
|
||||
CSimpleIni::TNamesDepend::const_iterator i = values.begin();
|
||||
for (; i != values.end(); ++i) {
|
||||
pszVal = i->pItem;
|
||||
_tprintf(_T(" -> '%s'\n"), pszVal);
|
||||
}
|
||||
}
|
||||
|
||||
// get the size of the section [standard]
|
||||
_tprintf(_T("\n-- Number of keys in section [standard] = %d\n"),
|
||||
ini.GetSectionSize(_T("standard")));
|
||||
|
||||
// delete the key "foo" in section "standard", if it has value "bar"
|
||||
ini.DeleteValue(_T("standard"), _T("foo"), _T("bar"));
|
||||
pszVal = ini.GetValue(_T("standard"), _T("foo"), 0);
|
||||
_tprintf(_T("\n-- Value of standard::foo is now '%s'\n"),
|
||||
pszVal ? pszVal : _T("(null)"));
|
||||
|
||||
// delete the key "foo" in section "standard"
|
||||
ini.Delete(_T("standard"), _T("foo"));
|
||||
pszVal = ini.GetValue(_T("standard"), _T("foo"), 0);
|
||||
_tprintf(_T("\n-- Value of standard::foo is now '%s'\n"),
|
||||
pszVal ? pszVal : _T("(null)"));
|
||||
|
||||
// get the size of the section [standard]
|
||||
_tprintf(_T("\n-- Number of keys in section [standard] = %d\n"),
|
||||
ini.GetSectionSize(_T("standard")));
|
||||
|
||||
// get the list of all key names for the section "standard"
|
||||
_tprintf(_T("\n-- Dumping keys of section: [standard]\n"));
|
||||
CSimpleIni::TNamesDepend keys;
|
||||
ini.GetAllKeys(_T("standard"), keys);
|
||||
|
||||
// dump all of the key names
|
||||
CSimpleIni::TNamesDepend::const_iterator iKey = keys.begin();
|
||||
for ( ; iKey != keys.end(); ++iKey ) {
|
||||
pItem = iKey->pItem;
|
||||
_tprintf(_T("Key: %s\n"), pItem);
|
||||
}
|
||||
|
||||
// add a decimal value
|
||||
ini.SetLongValue(_T("integer"), _T("dec"), 42, NULL, false);
|
||||
ini.SetLongValue(_T("integer"), _T("hex"), 42, NULL, true);
|
||||
|
||||
// add some bool values
|
||||
ini.SetBoolValue(_T("bool"), _T("t"), true);
|
||||
ini.SetBoolValue(_T("bool"), _T("f"), false);
|
||||
|
||||
// get the values back
|
||||
assert(42 == ini.GetLongValue(_T("integer"), _T("dec")));
|
||||
assert(42 == ini.GetLongValue(_T("integer"), _T("hex")));
|
||||
assert(true == ini.GetBoolValue(_T("bool"), _T("t")));
|
||||
assert(false == ini.GetBoolValue(_T("bool"), _T("f")));
|
||||
|
||||
// delete the section "standard"
|
||||
ini.Delete(_T("standard"), NULL);
|
||||
_tprintf(_T("\n-- Number of keys in section [standard] = %d\n"),
|
||||
ini.GetSectionSize(_T("standard")));
|
||||
|
||||
// iterate through every section in the file
|
||||
_tprintf(_T("\n-- Dumping all sections\n"));
|
||||
CSimpleIni::TNamesDepend sections;
|
||||
ini.GetAllSections(sections);
|
||||
CSimpleIni::TNamesDepend::const_iterator iSection = sections.begin();
|
||||
for ( ; iSection != sections.end(); ++iSection ) {
|
||||
pszSection = iSection->pItem;
|
||||
|
||||
// print the section name
|
||||
printf("\n");
|
||||
if (*pszSection) {
|
||||
_tprintf(_T("[%s]\n"), pszSection);
|
||||
}
|
||||
|
||||
// if there are keys and values...
|
||||
const CSimpleIni::TKeyVal * pSectionData = ini.GetSection(pszSection);
|
||||
if (pSectionData) {
|
||||
// iterate over all keys and dump the key name and value
|
||||
CSimpleIni::TKeyVal::const_iterator iKeyVal = pSectionData->begin();
|
||||
for ( ;iKeyVal != pSectionData->end(); ++iKeyVal) {
|
||||
pItem = iKeyVal->first.pItem;
|
||||
pszVal = iKeyVal->second;
|
||||
_tprintf(_T("%s=%s\n"), pItem, pszVal);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(SI_SUPPORT_IOSTREAMS) && !defined(_UNICODE)
|
||||
static bool
|
||||
TestStreams(
|
||||
const TCHAR * a_pszFile,
|
||||
bool a_bIsUtf8,
|
||||
bool a_bUseMultiKey,
|
||||
bool a_bUseMultiLine
|
||||
)
|
||||
{
|
||||
// load the file
|
||||
CSimpleIni ini(a_bIsUtf8, a_bUseMultiKey, a_bUseMultiLine);
|
||||
_tprintf(_T("Loading file: %s\n"), a_pszFile);
|
||||
std::ifstream instream;
|
||||
instream.open(a_pszFile, std::ifstream::in | std::ifstream::binary);
|
||||
SI_Error rc = ini.LoadData(instream);
|
||||
instream.close();
|
||||
if (rc < 0) {
|
||||
printf("Failed to open file.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
Test(ini);
|
||||
|
||||
// save the file (simple)
|
||||
_tprintf(_T("\n-- Saving file to: testsi-out-streams.ini\n"));
|
||||
std::ofstream outstream;
|
||||
outstream.open("testsi-out-streams.ini", std::ofstream::out | std::ofstream::binary);
|
||||
ini.Save(outstream);
|
||||
outstream.close();
|
||||
|
||||
return true;
|
||||
}
|
||||
#endif // SI_SUPPORT_IOSTREAMS
|
||||
|
||||
static bool
|
||||
TestFile(
|
||||
const TCHAR * a_pszFile,
|
||||
bool a_bIsUtf8,
|
||||
bool a_bUseMultiKey,
|
||||
bool a_bUseMultiLine
|
||||
)
|
||||
{
|
||||
// load the file
|
||||
CSimpleIni ini(a_bIsUtf8, a_bUseMultiKey, a_bUseMultiLine);
|
||||
_tprintf(_T("Loading file: %s\n"), a_pszFile);
|
||||
SI_Error rc = ini.LoadFile(a_pszFile);
|
||||
if (rc < 0) {
|
||||
printf("Failed to open file.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
// run the tests
|
||||
Test(ini);
|
||||
|
||||
// save the file (simple)
|
||||
_tprintf(_T("\n-- Saving file to: testsi-out.ini\n"));
|
||||
ini.SaveFile("testsi-out.ini");
|
||||
|
||||
// save the file (with comments)
|
||||
// Note: to save the file and add a comment to the beginning, use
|
||||
// code such as the following.
|
||||
_tprintf(_T("\n-- Saving file to: testsi-out-comment.ini\n"));
|
||||
FILE * fp = NULL;
|
||||
#if __STDC_WANT_SECURE_LIB__
|
||||
fopen_s(&fp, "testsi-out-comment.ini", "wb");
|
||||
#else
|
||||
fp = fopen("testsi-out-comment.ini", "wb");
|
||||
#endif
|
||||
if (fp) {
|
||||
CSimpleIni::FileWriter writer(fp);
|
||||
if (a_bIsUtf8) {
|
||||
writer.Write(SI_UTF8_SIGNATURE);
|
||||
}
|
||||
|
||||
// add a string to the file in the correct text format
|
||||
CSimpleIni::Converter convert = ini.GetConverter();
|
||||
convert.ConvertToStore(_T("; output from testsi.cpp test program")
|
||||
SI_NEWLINE SI_NEWLINE);
|
||||
writer.Write(convert.Data());
|
||||
|
||||
ini.Save(writer, false);
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
ParseCommandLine(
|
||||
int argc,
|
||||
TCHAR * argv[],
|
||||
const TCHAR * & a_pszFile,
|
||||
bool & a_bIsUtf8,
|
||||
bool & a_bUseMultiKey,
|
||||
bool & a_bUseMultiLine
|
||||
)
|
||||
{
|
||||
a_pszFile = 0;
|
||||
a_bIsUtf8 = false;
|
||||
a_bUseMultiKey = false;
|
||||
a_bUseMultiLine = false;
|
||||
for (--argc; argc > 0; --argc) {
|
||||
if (argv[argc][0] == '-') {
|
||||
switch (argv[argc][1]) {
|
||||
case TCHAR('u'):
|
||||
a_bIsUtf8 = true;
|
||||
break;
|
||||
case TCHAR('m'):
|
||||
a_bUseMultiKey = true;
|
||||
break;
|
||||
case TCHAR('l'):
|
||||
a_bUseMultiLine = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
a_pszFile = argv[argc];
|
||||
}
|
||||
}
|
||||
if (!a_pszFile) {
|
||||
_tprintf(
|
||||
_T("Usage: testsi [-u] [-m] [-l] iniFile\n")
|
||||
_T(" -u Load file as UTF-8 (Default is to use system locale)\n")
|
||||
_T(" -m Enable multiple keys\n")
|
||||
_T(" -l Enable multiple line values\n")
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
extern bool TestStreams();
|
||||
|
||||
int
|
||||
_tmain(
|
||||
int argc,
|
||||
TCHAR * argv[]
|
||||
)
|
||||
{
|
||||
setlocale(LC_ALL, "");
|
||||
|
||||
// start of automated testing...
|
||||
TestStreams();
|
||||
|
||||
// parse the command line
|
||||
const TCHAR * pszFile;
|
||||
bool bIsUtf8, bUseMultiKey, bUseMultiLine;
|
||||
if (!ParseCommandLine(argc, argv, pszFile, bIsUtf8, bUseMultiKey, bUseMultiLine)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// run the test
|
||||
if (!TestFile(pszFile, bIsUtf8, bUseMultiKey, bUseMultiLine)) {
|
||||
return 1;
|
||||
}
|
||||
#if defined(SI_SUPPORT_IOSTREAMS) && !defined(_UNICODE)
|
||||
if (!TestStreams(pszFile, bIsUtf8, bUseMultiKey, bUseMultiLine)) {
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue