commit 9484a925da5630bbee0f6cb71a91e0485c812097
parent 5fc2a3e2b588cc8b0e99538c604386846ddaf224
Author: cfillion <cfillion@users.noreply.github.com>
Date: Thu, 26 Nov 2015 20:30:05 -0500
silently skip unknown tags instead of failing
Diffstat:
5 files changed, 50 insertions(+), 39 deletions(-)
diff --git a/src/database.cpp b/src/database.cpp
@@ -33,6 +33,9 @@ DatabasePtr Database::load(const char *file)
void Database::addCategory(CategoryPtr cat)
{
+ if(cat->packages().empty())
+ throw reapack_error("empty category");
+
m_categories.push_back(cat);
}
@@ -45,6 +48,9 @@ Category::Category(const std::string &name)
void Category::addPackage(PackagePtr pack)
{
+ if(pack->versions().empty())
+ throw reapack_error("empty package");
+
pack->setCategory(this);
m_packages.push_back(pack);
}
diff --git a/src/database_v1.cpp b/src/database_v1.cpp
@@ -14,13 +14,12 @@ DatabasePtr Database::loadV1(TiXmlElement *root)
{
DatabasePtr db = make_shared<Database>();
- // read categories
- TiXmlElement *catNode = root->FirstChildElement();
+ TiXmlElement *catNode = root->FirstChildElement("category");
while(catNode) {
db->addCategory(LoadCategoryV1(catNode));
- catNode = catNode->NextSiblingElement();
+ catNode = catNode->NextSiblingElement("category");
}
return db;
@@ -28,20 +27,17 @@ DatabasePtr Database::loadV1(TiXmlElement *root)
CategoryPtr LoadCategoryV1(TiXmlElement *catNode)
{
- if(strcmp(catNode->Value(), "category"))
- throw reapack_error("not a category");
-
const char *name = catNode->Attribute("name");
if(!name) name = "";
CategoryPtr cat = make_shared<Category>(name);
- TiXmlElement *packNode = catNode->FirstChildElement();
+ TiXmlElement *packNode = catNode->FirstChildElement("reapack");
while(packNode) {
cat->addPackage(LoadPackageV1(packNode));
- packNode = packNode->NextSiblingElement();
+ packNode = packNode->NextSiblingElement("reapack");
}
return cat;
@@ -49,9 +45,6 @@ CategoryPtr LoadCategoryV1(TiXmlElement *catNode)
PackagePtr LoadPackageV1(TiXmlElement *packNode)
{
- if(strcmp(packNode->Value(), "reapack"))
- throw reapack_error("not a package");
-
const char *name = packNode->Attribute("name");
if(!name) name = "";
@@ -64,12 +57,12 @@ PackagePtr LoadPackageV1(TiXmlElement *packNode)
PackagePtr pack = make_shared<Package>(
Package::convertType(type), name, author);
- TiXmlElement *verNode = packNode->FirstChildElement();
+ TiXmlElement *verNode = packNode->FirstChildElement("version");
while(verNode) {
pack->addVersion(LoadVersionV1(verNode));
- verNode = verNode->NextSiblingElement();
+ verNode = verNode->NextSiblingElement("version");
}
return pack;
@@ -77,9 +70,6 @@ PackagePtr LoadPackageV1(TiXmlElement *packNode)
VersionPtr LoadVersionV1(TiXmlElement *verNode)
{
- if(strcmp(verNode->Value(), "version"))
- throw reapack_error("not a version");
-
const char *name = verNode->Attribute("name");
if(!name) name = "";
diff --git a/test/database.cpp b/test/database.cpp
@@ -61,17 +61,36 @@ TEST_CASE("future version", M) {
}
}
-TEST_CASE("add category to database", M) {
+TEST_CASE("add category", M) {
+ PackagePtr pack = make_shared<Package>(Package::ScriptType, "a", "b");
+ pack->addVersion(make_shared<Version>("1"));
+
+ CategoryPtr cat = make_shared<Category>("a");
+ cat->addPackage(pack);
+
Database db;
CHECK(db.categories().size() == 0);
- db.addCategory(make_shared<Category>("a"));
+ db.addCategory(cat);
REQUIRE(db.categories().size() == 1);
}
-TEST_CASE("add package to category", M) {
+TEST_CASE("add empty category", M) {
+ Database db;
+
+ try {
+ db.addCategory(make_shared<Category>("a"));
+ FAIL();
+ }
+ catch(const reapack_error &e) {
+ REQUIRE(string(e.what()) == "empty category");
+ }
+}
+
+TEST_CASE("add a package", M) {
PackagePtr pack = make_shared<Package>(Package::ScriptType, "a", "b");
+ pack->addVersion(make_shared<Version>("1"));
Category cat("a");
CHECK(cat.packages().size() == 0);
@@ -83,6 +102,18 @@ TEST_CASE("add package to category", M) {
REQUIRE(pack->category() == &cat);
}
+TEST_CASE("add empty package", M) {
+ Category cat("a");
+
+ try {
+ cat.addPackage(make_shared<Package>(Package::ScriptType, "a", "b"));
+ FAIL();
+ }
+ catch(const reapack_error &e) {
+ REQUIRE(string(e.what()) == "empty package");
+ }
+}
+
TEST_CASE("package type from string", M) {
SECTION("unknown") {
REQUIRE(Package::convertType("yoyo") == Package::UnknownType);
diff --git a/test/database_v1.cpp b/test/database_v1.cpp
@@ -21,22 +21,9 @@ TEST_CASE("unnamed category", M) {
}
}
-TEST_CASE("empty category", M) {
- DatabasePtr db = Database::load(DBPATH "empty_category.xml");
-
- REQUIRE(db->categories().size() == 1);
- REQUIRE(db->category(0)->name() == "Hello World");
- REQUIRE(db->category(0)->packages().empty());
-}
-
TEST_CASE("invalid category tag", M) {
- try {
- Database::load(DBPATH "wrong_category_tag.xml");
- FAIL();
- }
- catch(const reapack_error &e) {
- REQUIRE(string(e.what()) == "not a category");
- }
+ DatabasePtr db = Database::load(DBPATH "wrong_category_tag.xml");
+ REQUIRE(db->categories().empty());
}
TEST_CASE("invalid package tag", M) {
@@ -45,7 +32,7 @@ TEST_CASE("invalid package tag", M) {
FAIL();
}
catch(const reapack_error &e) {
- REQUIRE(string(e.what()) == "not a package");
+ REQUIRE(string(e.what()) == "empty category");
}
}
@@ -85,7 +72,7 @@ TEST_CASE("invalid version tag", M) {
FAIL();
}
catch(const reapack_error &e) {
- REQUIRE(string(e.what()) == "not a version");
+ REQUIRE(string(e.what()) == "empty package");
}
}
diff --git a/test/db/v1/empty_category.xml b/test/db/v1/empty_category.xml
@@ -1,3 +0,0 @@
-<index version="1">
- <category name="Hello World"/>
-</index>