1
/**************************************************************************
3
* Copyright (c) 2021-2023 FreeCAD Project Association *
5
* This file is part of FreeCAD. *
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. *
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. *
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/>. *
21
***************************************************************************/
24
#include "gtest/gtest.h"
26
#include "App/Metadata.h"
28
// NOLINTBEGIN(readability-named-parameter)
30
TEST(ContactTest, ContactDefaultConstruction)
32
auto contact = App::Meta::Contact();
33
ASSERT_EQ(contact.name, "");
34
ASSERT_EQ(contact.email, "");
37
TEST(ContactTest, ContactParameterConstruction)
39
auto contact = App::Meta::Contact("Name", "email@some.com");
40
ASSERT_EQ(contact.name, "Name");
41
ASSERT_EQ(contact.email, "email@some.com");
44
TEST(ContactTest, ContactNullDomNodeConstruction)
46
auto contact = App::Meta::Contact(nullptr);
47
ASSERT_EQ(contact.name, "");
48
ASSERT_EQ(contact.email, "");
51
TEST(ContactTest, ContactOperatorEquality)
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);
62
TEST(LicenseTest, LicenseDefaultConstruction)
64
auto contact = App::Meta::License();
65
ASSERT_EQ(contact.name, "");
66
ASSERT_EQ(contact.file, "");
69
TEST(LicenseTest, LicenseParameterConstruction)
71
auto contact = App::Meta::License("Name", "path/to/file");
72
ASSERT_EQ(contact.name, "Name");
73
ASSERT_EQ(contact.file, "path/to/file");
76
TEST(LicenseTest, LicenseNullDomNodeConstruction)
78
auto contact = App::Meta::License(nullptr);
79
ASSERT_EQ(contact.name, "");
80
ASSERT_EQ(contact.file, "");
83
TEST(LicenseTest, LicenseOperatorEquality)
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);
94
TEST(UrlTest, UrlDefaultConstruction)
96
auto url = App::Meta::Url();
97
ASSERT_EQ(url.location, "");
98
ASSERT_EQ(url.type, App::Meta::UrlType::website);
101
TEST(UrlTest, UrlParameterConstruction)
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);
108
TEST(UrlTest, UrlNullDomNodeConstruction)
110
auto url = App::Meta::Url(nullptr);
111
ASSERT_EQ(url.location, "");
114
TEST(UrlTest, UrlOperatorEquality)
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);
125
TEST(VersionTest, VersionDefaultConstruction)
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, "");
134
TEST(VersionTest, VersionParameterConstruction)
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");
143
TEST(VersionTest, VersionStringConstruction)
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");
152
TEST(VersionTest, VersionOperatorEqual)
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);
165
TEST(VersionTest, VersionOperatorComparison)
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);
187
// TODO: Test Dependency
188
// TODO: Test GenericMetadata
190
class MetadataTest: public ::testing::Test
193
void SetUp() override
195
xercesc_3_2::XMLPlatformUtils::Initialize();
197
void TearDown() override
199
xercesc_3_2::XMLPlatformUtils::Terminate();
201
std::string GivenSimpleMetadataXMLString()
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"
216
void AssertMetadataMatches(App::Metadata& testObject)
218
ASSERT_EQ(testObject.name(), _name);
219
ASSERT_EQ(testObject.description(), _description);
220
ASSERT_EQ(testObject.version(), App::Meta::Version(_version));
224
std::string _name = "TestAddon";
225
std::string _description = "A package.xml file for unit testing.";
226
std::string _version = "1.2.3beta";
229
TEST_F(MetadataTest, MetadataInMemoryConstruction)
231
auto xml = GivenSimpleMetadataXMLString();
232
auto testObject = App::Metadata(std::string {xml});
233
AssertMetadataMatches(testObject);
236
// NOLINTEND(readability-named-parameter)