FreeCAD

Форк
0
/
Metadata.cpp 
236 строк · 8.5 Кб
1
/**************************************************************************
2
 *                                                                         *
3
 *   Copyright (c) 2021-2023 FreeCAD Project Association                   *
4
 *                                                                         *
5
 *   This file is part of FreeCAD.                                         *
6
 *                                                                         *
7
 *   FreeCAD is free software: you can redistribute it and/or modify it    *
8
 *   under the terms of the GNU Lesser General Public License as           *
9
 *   published by the Free Software Foundation, either version 2.1 of the  *
10
 *   License, or (at your option) any later version.                       *
11
 *                                                                         *
12
 *   FreeCAD is distributed in the hope that it will be useful, but        *
13
 *   WITHOUT ANY WARRANTY; without even the implied warranty of            *
14
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      *
15
 *   Lesser General Public License for more details.                       *
16
 *                                                                         *
17
 *   You should have received a copy of the GNU Lesser General Public      *
18
 *   License along with FreeCAD. If not, see                               *
19
 *   <https://www.gnu.org/licenses/>.                                      *
20
 *                                                                         *
21
 ***************************************************************************/
22

23
// NOLINTNEXTLINE
24
#include "gtest/gtest.h"
25

26
#include "App/Metadata.h"
27

28
// NOLINTBEGIN(readability-named-parameter)
29

30
TEST(ContactTest, ContactDefaultConstruction)
31
{
32
    auto contact = App::Meta::Contact();
33
    ASSERT_EQ(contact.name, "");
34
    ASSERT_EQ(contact.email, "");
35
}
36

37
TEST(ContactTest, ContactParameterConstruction)
38
{
39
    auto contact = App::Meta::Contact("Name", "email@some.com");
40
    ASSERT_EQ(contact.name, "Name");
41
    ASSERT_EQ(contact.email, "email@some.com");
42
}
43

44
TEST(ContactTest, ContactNullDomNodeConstruction)
45
{
46
    auto contact = App::Meta::Contact(nullptr);
47
    ASSERT_EQ(contact.name, "");
48
    ASSERT_EQ(contact.email, "");
49
}
50

51
TEST(ContactTest, ContactOperatorEquality)
52
{
53
    auto contact1 = App::Meta::Contact("Name", "Email");
54
    auto contact2 = App::Meta::Contact("Name", "Email");
55
    auto contact3 = App::Meta::Contact("NotName", "Email");
56
    auto contact4 = App::Meta::Contact("Name", "NotEmail");
57
    ASSERT_TRUE(contact1 == contact2);
58
    ASSERT_FALSE(contact1 == contact3);
59
    ASSERT_FALSE(contact1 == contact4);
60
}
61

62
TEST(LicenseTest, LicenseDefaultConstruction)
63
{
64
    auto contact = App::Meta::License();
65
    ASSERT_EQ(contact.name, "");
66
    ASSERT_EQ(contact.file, "");
67
}
68

69
TEST(LicenseTest, LicenseParameterConstruction)
70
{
71
    auto contact = App::Meta::License("Name", "path/to/file");
72
    ASSERT_EQ(contact.name, "Name");
73
    ASSERT_EQ(contact.file, "path/to/file");
74
}
75

76
TEST(LicenseTest, LicenseNullDomNodeConstruction)
77
{
78
    auto contact = App::Meta::License(nullptr);
79
    ASSERT_EQ(contact.name, "");
80
    ASSERT_EQ(contact.file, "");
81
}
82

83
TEST(LicenseTest, LicenseOperatorEquality)
84
{
85
    auto license1 = App::Meta::License("Name", "path/to/file");
86
    auto license2 = App::Meta::License("Name", "path/to/file");
87
    auto license3 = App::Meta::License("NotName", "path/to/file");
88
    auto license4 = App::Meta::License("Name", "not/path/to/file");
89
    ASSERT_TRUE(license1 == license2);
90
    ASSERT_FALSE(license1 == license3);
91
    ASSERT_FALSE(license1 == license4);
92
}
93

94
TEST(UrlTest, UrlDefaultConstruction)
95
{
96
    auto url = App::Meta::Url();
97
    ASSERT_EQ(url.location, "");
98
    ASSERT_EQ(url.type, App::Meta::UrlType::website);
99
}
100

101
TEST(UrlTest, UrlParameterConstruction)
102
{
103
    auto url = App::Meta::Url("https://some.url", App::Meta::UrlType::documentation);
104
    ASSERT_EQ(url.location, "https://some.url");
105
    ASSERT_EQ(url.type, App::Meta::UrlType::documentation);
106
}
107

108
TEST(UrlTest, UrlNullDomNodeConstruction)
109
{
110
    auto url = App::Meta::Url(nullptr);
111
    ASSERT_EQ(url.location, "");
112
}
113

114
TEST(UrlTest, UrlOperatorEquality)
115
{
116
    auto url1 = App::Meta::Url("https://some.url", App::Meta::UrlType::documentation);
117
    auto url2 = App::Meta::Url("https://some.url", App::Meta::UrlType::documentation);
118
    auto url3 = App::Meta::Url("https://not.some.url", App::Meta::UrlType::documentation);
119
    auto url4 = App::Meta::Url("https://some.url", App::Meta::UrlType::website);
120
    ASSERT_TRUE(url1 == url2);
121
    ASSERT_FALSE(url1 == url3);
122
    ASSERT_FALSE(url1 == url4);
123
}
124

125
TEST(VersionTest, VersionDefaultConstruction)
126
{
127
    auto version = App::Meta::Version();
128
    ASSERT_EQ(version.major, 0);
129
    ASSERT_EQ(version.minor, 0);
130
    ASSERT_EQ(version.patch, 0);
131
    ASSERT_EQ(version.suffix, "");
132
}
133

134
TEST(VersionTest, VersionParameterConstruction)
135
{
136
    auto version = App::Meta::Version(1, 2, 3, "delta");
137
    ASSERT_EQ(version.major, 1);
138
    ASSERT_EQ(version.minor, 2);
139
    ASSERT_EQ(version.patch, 3);
140
    ASSERT_EQ(version.suffix, "delta");
141
}
142

143
TEST(VersionTest, VersionStringConstruction)
144
{
145
    auto version = App::Meta::Version("1.2.3delta");
146
    ASSERT_EQ(version.major, 1);
147
    ASSERT_EQ(version.minor, 2);
148
    ASSERT_EQ(version.patch, 3);
149
    ASSERT_EQ(version.suffix, "delta");
150
}
151

152
TEST(VersionTest, VersionOperatorEqual)
153
{
154
    auto version1 = App::Meta::Version(1, 2, 3, "delta");
155
    auto version2 = App::Meta::Version(1, 2, 3, "delta");
156
    auto version3 = App::Meta::Version(1, 3, 3, "delta");
157
    auto version4 = App::Meta::Version(1, 2, 4, "delta");
158
    auto version5 = App::Meta::Version(1, 2, 3, "gamma");
159
    ASSERT_EQ(version1, version2);
160
    ASSERT_NE(version1, version3);
161
    ASSERT_NE(version1, version4);
162
    ASSERT_NE(version1, version5);
163
}
164

165
TEST(VersionTest, VersionOperatorComparison)
166
{
167
    auto version_2_3_4_delta = App::Meta::Version(2, 3, 4, "delta");
168
    auto version_1_3_4_delta = App::Meta::Version(1, 3, 4, "delta");
169
    auto version_3_3_4_delta = App::Meta::Version(3, 3, 4, "delta");
170
    auto version_2_2_4_delta = App::Meta::Version(2, 2, 4, "delta");
171
    auto version_2_4_4_delta = App::Meta::Version(2, 4, 4, "delta");
172
    auto version_2_3_3_delta = App::Meta::Version(2, 3, 3, "delta");
173
    // NOLINTNEXTLINE Five is not really a "magic number" in this test
174
    auto version_2_3_5_delta = App::Meta::Version(2, 3, 5, "delta");
175
    auto version_2_3_4_epsilon = App::Meta::Version(2, 3, 4, "epsilon");
176
    auto version_2_3_4_beta = App::Meta::Version(2, 3, 4, "beta");
177
    ASSERT_GT(version_2_3_4_delta, version_1_3_4_delta);
178
    ASSERT_LT(version_2_3_4_delta, version_3_3_4_delta);
179
    ASSERT_GT(version_2_3_4_delta, version_2_2_4_delta);
180
    ASSERT_LT(version_2_3_4_delta, version_2_4_4_delta);
181
    ASSERT_GT(version_2_3_4_delta, version_2_3_3_delta);
182
    ASSERT_LT(version_2_3_4_delta, version_2_3_5_delta);
183
    ASSERT_GT(version_2_3_4_delta, version_2_3_4_beta);
184
    ASSERT_LT(version_2_3_4_delta, version_2_3_4_epsilon);
185
}
186

187
// TODO: Test Dependency
188
// TODO: Test GenericMetadata
189

190
class MetadataTest: public ::testing::Test
191
{
192
protected:
193
    void SetUp() override
194
    {
195
        xercesc_3_2::XMLPlatformUtils::Initialize();
196
    }
197
    void TearDown() override
198
    {
199
        xercesc_3_2::XMLPlatformUtils::Terminate();
200
    }
201
    std::string GivenSimpleMetadataXMLString()
202
    {
203
        std::ostringstream stream;
204
        stream << "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\" ?>\n"
205
               << "<package format=\"1\" xmlns=\"https://wiki.freecad.org/Package_Metadata\">\n"
206
               << "  <name>" << _name << "</name>\n"
207
               << "  <description>" << _description << "</description>\n"
208
               << "  <version>" << _version << "</version>\n"
209
               << "  <date>2022-01-07</date>\n"
210
               << "  <url type=\"repository\" "
211
                  "branch=\"main\">https://github.com/FreeCAD/FreeCAD</url>\n"
212
               << "</package>";
213
        return stream.str();
214
    }
215

216
    void AssertMetadataMatches(App::Metadata& testObject)
217
    {
218
        ASSERT_EQ(testObject.name(), _name);
219
        ASSERT_EQ(testObject.description(), _description);
220
        ASSERT_EQ(testObject.version(), App::Meta::Version(_version));
221
    }
222

223
private:
224
    std::string _name = "TestAddon";
225
    std::string _description = "A package.xml file for unit testing.";
226
    std::string _version = "1.2.3beta";
227
};
228

229
TEST_F(MetadataTest, MetadataInMemoryConstruction)
230
{
231
    auto xml = GivenSimpleMetadataXMLString();
232
    auto testObject = App::Metadata(std::string {xml});
233
    AssertMetadataMatches(testObject);
234
}
235

236
// NOLINTEND(readability-named-parameter)
237

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.