GCC Code Coverage Report
Directory: src/ Exec Total Coverage
File: src/unittests/fs/virtfs/virtfs1_mountzip2.cc Lines: 82 82 100.0 %
Date: 2021-03-17 Branches: 634 1528 41.5 %

Line Branch Exec Source
1
/*
2
 *  The ManaPlus Client
3
 *  Copyright (C) 2016-2019  The ManaPlus Developers
4
 *  Copyright (C) 2019-2021  Andrei Karas
5
 *
6
 *  This file is part of The ManaPlus Client.
7
 *
8
 *  This program is free software; you can redistribute it and/or modify
9
 *  it under the terms of the GNU General Public License as published by
10
 *  the Free Software Foundation; either version 2 of the License, or
11
 *  any later version.
12
 *
13
 *  This program is distributed in the hope that it will be useful,
14
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
 *  GNU General Public License for more details.
17
 *
18
 *  You should have received a copy of the GNU General Public License
19
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
 */
21
22
#include "unittests/unittests.h"
23
24
#include "fs/files.h"
25
26
#include "fs/virtfs/direntry.h"
27
#include "fs/virtfs/fs.h"
28
29
#include "utils/checkutils.h"
30
31
#ifndef UNITTESTS_CATCH
32
#include <algorithm>
33
#endif  // UNITTESTS_CATCH
34
35
#include "debug.h"
36
37
8
TEST_CASE("VirtFs1 mountZip2", "")
38
{
39
24
    VirtFs::init(".");
40
24
    std::string name("data/test/test.zip");
41
12
    std::string prefix;
42
24
    const std::string sep = dirSeparator;
43

6
    if (Files::existsLocal(name) == false)
44
        prefix = "../";
45
46



42
    SECTION("subDir 1")
47
    {
48





7
        REQUIRE(VirtFs::mountZip2(prefix + "data/test/test.zip",
49
            "dir1",
50
            Append_false));
51







10
        REQUIRE(VirtFs::searchByRootInternal(
52
            prefix + "data" + sep + "test" + sep + "test.zip", "dir1" + sep) !=
53
            nullptr);
54






11
        REQUIRE(VirtFs::searchByRootInternal(
55
            prefix + "data" + sep + "test" + sep + "test2.zip",
56
            std::string()) == nullptr);
57




5
        REQUIRE(VirtFs::getEntries().size() == 1);
58






9
        REQUIRE(VirtFs::getEntries()[0]->root ==
59
            prefix + "data" + sep + "test" + sep + "test.zip");
60




5
        REQUIRE(VirtFs::getEntries()[0]->subDir == "dir1" + sep);
61




4
        REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Zip);
62
    }
63
64



42
    SECTION("subDir 2")
65
    {
66





7
        REQUIRE(VirtFs::mountZip2(prefix + "data/test/test.zip",
67
            "dir1",
68
            Append_false));
69





7
        REQUIRE(VirtFs::mountZip2(prefix + "data/test/test2.zip",
70
            "dir2",
71
            Append_false));
72







10
        REQUIRE(VirtFs::searchByRootInternal(
73
            prefix + "data" + sep + "test" + sep + "test.zip", "dir1" + sep) !=
74
            nullptr);
75







10
        REQUIRE(VirtFs::searchByRootInternal(
76
            prefix + "data" + sep + "test" + sep + "test2.zip",
77
            "dir2" + sep) != nullptr);
78




5
        REQUIRE(VirtFs::getEntries().size() == 2);
79






9
        REQUIRE(VirtFs::getEntries()[0]->root ==
80
            prefix + "data" + sep + "test" + sep + "test2.zip");
81




4
        REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Zip);
82




5
        REQUIRE(VirtFs::getEntries()[0]->subDir == "dir2" + sep);
83






9
        REQUIRE(VirtFs::getEntries()[1]->root ==
84
            prefix + "data" + sep + "test" + sep + "test.zip");
85




4
        REQUIRE(VirtFs::getEntries()[1]->type == FsEntryType::Zip);
86




5
        REQUIRE(VirtFs::getEntries()[1]->subDir == "dir1" + sep);
87
    }
88
89



42
    SECTION("subDir 3")
90
    {
91





7
        REQUIRE(VirtFs::mountZip2(prefix + "data/test/test.zip",
92
            "dir1",
93
            Append_true));
94





7
        REQUIRE(VirtFs::mountZip2(prefix + "data/test/test2.zip",
95
            "dir2",
96
            Append_true));
97







10
        REQUIRE(VirtFs::searchByRootInternal(
98
            prefix + "data" + sep + "test" + sep + "test.zip",
99
            "dir1" + sep) != nullptr);
100







10
        REQUIRE(VirtFs::searchByRootInternal(
101
            prefix + "data" + sep + "test" + sep + "test2.zip",
102
            "dir2" + sep) != nullptr);
103




5
        REQUIRE(VirtFs::getEntries().size() == 2);
104






9
        REQUIRE(VirtFs::getEntries()[0]->root ==
105
            prefix + "data" + sep + "test" + sep + "test.zip");
106




4
        REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Zip);
107




5
        REQUIRE(VirtFs::getEntries()[0]->subDir == "dir1" + sep);
108






9
        REQUIRE(VirtFs::getEntries()[1]->root ==
109
            prefix + "data" + sep + "test" + sep + "test2.zip");
110




4
        REQUIRE(VirtFs::getEntries()[1]->type == FsEntryType::Zip);
111




5
        REQUIRE(VirtFs::getEntries()[1]->subDir == "dir2" + sep);
112
    }
113
114



42
    SECTION("subDir 4")
115
    {
116





7
        REQUIRE(VirtFs::mountZip2(prefix + "data/test/test.zip",
117
            "dir1",
118
            Append_false));
119





7
        REQUIRE(VirtFs::mountDir2(prefix + "data/test",
120
            "dir2",
121
            Append_false));
122





7
        REQUIRE(VirtFs::mountZip2(prefix + "data/test/test2.zip",
123
            "dir3",
124
            Append_false));
125







10
        REQUIRE(VirtFs::searchByRootInternal(
126
            prefix + "data" + sep + "test" + sep + "test.zip",
127
            "dir1" + sep) != nullptr);
128







10
        REQUIRE(VirtFs::searchByRootInternal(
129
            prefix + "data" + sep + "test" + sep + "test2.zip",
130
            "dir3" + sep) != nullptr);
131







10
        REQUIRE(VirtFs::searchByRootInternal(
132
            prefix + "data" + sep + "test" + sep + "",
133
            "dir2" + sep) != nullptr);
134




5
        REQUIRE(VirtFs::getEntries().size() == 3);
135






9
        REQUIRE(VirtFs::getEntries()[0]->root ==
136
            prefix + "data" + sep + "test" + sep + "test2.zip");
137




4
        REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Zip);
138




5
        REQUIRE(VirtFs::getEntries()[0]->subDir == "dir3" + sep);
139






9
        REQUIRE(VirtFs::getEntries()[1]->root ==
140
            prefix + "data" + sep + "test" + sep + "");
141




4
        REQUIRE(VirtFs::getEntries()[1]->type == FsEntryType::Dir);
142




5
        REQUIRE(VirtFs::getEntries()[1]->subDir == "dir2" + sep);
143






9
        REQUIRE(VirtFs::getEntries()[2]->root ==
144
            prefix + "data" + sep + "test" + sep + "test.zip");
145




4
        REQUIRE(VirtFs::getEntries()[2]->type == FsEntryType::Zip);
146




5
        REQUIRE(VirtFs::getEntries()[2]->subDir == "dir1" + sep);
147
    }
148
149



42
    SECTION("subDir 5")
150
    {
151





7
        REQUIRE(VirtFs::mountZip2(prefix + "data/test/test.zip",
152
            "dir1",
153
            Append_false));
154





7
        REQUIRE(VirtFs::mountDir2(prefix + "data/test",
155
            "dir2",
156
            Append_false));
157





7
        REQUIRE(VirtFs::mountZip2(prefix + "data/test/test2.zip",
158
            "dir3",
159
            Append_true));
160







10
        REQUIRE(VirtFs::searchByRootInternal(
161
            prefix + "data" + sep + "test" + sep + "test.zip",
162
            "dir1" + sep) != nullptr);
163







10
        REQUIRE(VirtFs::searchByRootInternal(
164
            prefix + "data" + sep + "test" + sep + "test2.zip",
165
            "dir3" + sep) != nullptr);
166







10
        REQUIRE(VirtFs::searchByRootInternal(
167
            prefix + "data" + sep + "test" + sep + "",
168
            "dir2" + sep) != nullptr);
169




5
        REQUIRE(VirtFs::getEntries().size() == 3);
170






9
        REQUIRE(VirtFs::getEntries()[0]->root ==
171
            prefix + "data" + sep + "test" + sep + "");
172




4
        REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Dir);
173




5
        REQUIRE(VirtFs::getEntries()[0]->subDir == "dir2" + sep);
174






9
        REQUIRE(VirtFs::getEntries()[1]->root ==
175
            prefix + "data" + sep + "test" + sep + "test.zip");
176




4
        REQUIRE(VirtFs::getEntries()[1]->type == FsEntryType::Zip);
177




5
        REQUIRE(VirtFs::getEntries()[1]->subDir == "dir1" + sep);
178






9
        REQUIRE(VirtFs::getEntries()[2]->root ==
179
            prefix + "data" + sep + "test" + sep + "test2.zip");
180




4
        REQUIRE(VirtFs::getEntries()[2]->type == FsEntryType::Zip);
181




5
        REQUIRE(VirtFs::getEntries()[2]->subDir == "dir3" + sep);
182
    }
183
184



42
    SECTION("subDir 6")
185
    {
186





7
        REQUIRE(VirtFs::mountZip2(prefix + "data/test/test.zip",
187
            dirSeparator,
188
            Append_false));
189






11
        REQUIRE(VirtFs::searchByRootInternal(
190
            prefix + "data" + sep + "test" + sep + "test.zip",
191
            std::string()) != nullptr);
192






11
        REQUIRE(VirtFs::searchByRootInternal(
193
            prefix + "data" + sep + "test" + sep + "test2.zip",
194
            std::string()) == nullptr);
195




5
        REQUIRE(VirtFs::getEntries().size() == 1);
196






9
        REQUIRE(VirtFs::getEntries()[0]->root ==
197
            prefix + "data" + sep + "test" + sep + "test.zip");
198




4
        REQUIRE(VirtFs::getEntries()[0]->subDir.empty());
199




4
        REQUIRE(VirtFs::getEntries()[0]->type == FsEntryType::Zip);
200
    }
201
202
6
    VirtFs::deinit();
203

9
}