reapack

Package manager for REAPER
Log | Files | Refs | Submodules | README | LICENSE

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:
Msrc/database.cpp | 6++++++
Msrc/database_v1.cpp | 22++++++----------------
Mtest/database.cpp | 37++++++++++++++++++++++++++++++++++---
Mtest/database_v1.cpp | 21++++-----------------
Dtest/db/v1/empty_category.xml | 3---
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>