File: test1.cpp

package info (click to toggle)
libsimpleini 4.17+dfsg-5
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster, sid
  • size: 684 kB
  • sloc: cpp: 4,569; makefile: 31
file content (166 lines) | stat: -rw-r--r-- 3,966 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
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();
}