reapack

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

index.cpp (5213B)


      1 #include "helper.hpp"
      2 
      3 #include <errors.hpp>
      4 #include <index.hpp>
      5 
      6 static const char *M = "[index]";
      7 static const Path RIPATH("test/indexes");
      8 
      9 TEST_CASE("index file not found", M) {
     10   UseRootPath root(RIPATH);
     11 
     12   try {
     13     IndexPtr ri = Index::load("404");
     14     FAIL();
     15   }
     16   catch(const reapack_error &e) {
     17     REQUIRE(std::string{e.what()} == "No such file or directory");
     18   }
     19 }
     20 
     21 TEST_CASE("load index from raw data", M) {
     22   SECTION("valid") {
     23     Index::load({}, "<index version=\"1\"/>\n");
     24   }
     25 
     26   SECTION("broken") {
     27     try {
     28       Index::load({}, "<index>\n");
     29       FAIL();
     30     }
     31     catch(const reapack_error &) {}
     32   }
     33 }
     34 
     35 TEST_CASE("no root node", M) {
     36   try {
     37     Index::load({}, R"(<?xml verison="1.0 encoding="utf-8"?>)");
     38     FAIL();
     39   }
     40   catch(const reapack_error &) {}
     41 }
     42 
     43 TEST_CASE("broken index", M) {
     44   UseRootPath root(RIPATH);
     45 
     46   try {
     47     IndexPtr ri = Index::load("broken");
     48     FAIL();
     49   }
     50   catch(const reapack_error &) {}
     51 }
     52 
     53 TEST_CASE("wrong root tag name", M) {
     54   UseRootPath root(RIPATH);
     55 
     56   try {
     57     IndexPtr ri = Index::load("wrong_root");
     58     FAIL();
     59   }
     60   catch(const reapack_error &e) {
     61     REQUIRE(std::string{e.what()} == "invalid index");
     62   }
     63 }
     64 
     65 TEST_CASE("invalid version", M) {
     66   UseRootPath root(RIPATH);
     67 
     68   try {
     69     IndexPtr ri = Index::load("invalid_version");
     70     FAIL();
     71   }
     72   catch(const reapack_error &e) {
     73     REQUIRE(std::string{e.what()} == "index version not found");
     74   }
     75 }
     76 
     77 TEST_CASE("future version", M) {
     78   UseRootPath root(RIPATH);
     79 
     80   try {
     81     IndexPtr ri = Index::load("future_version");
     82     FAIL();
     83   }
     84   catch(const reapack_error &e) {
     85     REQUIRE(std::string{e.what()} == "index version is unsupported");
     86   }
     87 }
     88 
     89 TEST_CASE("add a category", M) {
     90   Index ri("a");
     91   Category *cat = new Category("a", &ri);
     92   Package *pack = new Package(Package::ScriptType, "name", cat);
     93   Version *ver = new Version("1", pack);
     94   Source *source = new Source({}, "google.com", ver);
     95 
     96   ver->addSource(source);
     97   pack->addVersion(ver);
     98   cat->addPackage(pack);
     99 
    100   CHECK(ri.categories().size() == 0);
    101   CHECK(ri.category("a") == nullptr);
    102 
    103   REQUIRE(ri.addCategory(cat));
    104 
    105   REQUIRE(ri.categories().size() == 1);
    106   REQUIRE(ri.category("a") == cat);
    107   REQUIRE(ri.packages() == cat->packages());
    108 }
    109 
    110 TEST_CASE("add owned category", M) {
    111   Index ri1("a");
    112   Index ri2("b");
    113 
    114   Category *cat = new Category("name", &ri1);
    115 
    116   try {
    117     ri2.addCategory(cat);
    118     FAIL();
    119   }
    120   catch(const reapack_error &e) {
    121     delete cat;
    122     REQUIRE(std::string{e.what()} == "category belongs to another index");
    123   }
    124 }
    125 
    126 TEST_CASE("drop empty category", M) {
    127   Index ri("a");
    128   const Category cat("a", &ri);
    129   REQUIRE_FALSE(ri.addCategory(&cat));
    130 
    131   REQUIRE(ri.categories().empty());
    132 }
    133 
    134 TEST_CASE("add a package", M) {
    135   Index ri("a");
    136   Category cat("a", &ri);
    137   Package *pack = new Package(Package::ScriptType, "name", &cat);
    138   Version *ver = new Version("1", pack);
    139   ver->addSource(new Source({}, "google.com", ver));
    140   pack->addVersion(ver);
    141 
    142   CHECK(cat.packages().size() == 0);
    143   CHECK(cat.package("name") == nullptr);
    144 
    145   REQUIRE(cat.addPackage(pack));
    146 
    147   REQUIRE(cat.packages().size() == 1);
    148   REQUIRE(cat.package("name") == pack);
    149   REQUIRE(pack->category() == &cat);
    150 }
    151 
    152 TEST_CASE("add owned package", M) {
    153   Category cat1("a", nullptr);
    154   Package *pack = new Package(Package::ScriptType, "name", &cat1);
    155 
    156   try {
    157     Category cat2("b", nullptr);
    158     cat2.addPackage(pack);
    159     FAIL();
    160   }
    161   catch(const reapack_error &e) {
    162     delete pack;
    163     REQUIRE(std::string{e.what()} == "package belongs to another category");
    164   }
    165 }
    166 
    167 TEST_CASE("drop empty package", M) {
    168   Category cat("a", nullptr);
    169   const Package pkg(Package::ScriptType, "name", &cat);
    170   REQUIRE_FALSE(cat.addPackage(&pkg));
    171   REQUIRE(cat.packages().empty());
    172 }
    173 
    174 TEST_CASE("drop unknown package", M) {
    175   Category cat("a", nullptr);
    176   const Package pkg(Package::UnknownType, "name", &cat);
    177   REQUIRE_FALSE(cat.addPackage(&pkg));
    178   REQUIRE(cat.packages().size() == 0);
    179 }
    180 
    181 TEST_CASE("empty category name", M) {
    182   try {
    183     Category cat{{}, nullptr};
    184     FAIL();
    185   }
    186   catch(const reapack_error &e) {
    187     REQUIRE(std::string{e.what()} == "empty category name");
    188   }
    189 }
    190 
    191 TEST_CASE("category full name", M) {
    192   Index ri("Remote Name");
    193   Category cat2("Category Name", &ri);
    194   REQUIRE(cat2.fullName() == "Remote Name/Category Name");
    195 }
    196 
    197 TEST_CASE("set index name", M) {
    198   SECTION("set") {
    199     Index ri({});
    200     ri.setName("Hello/World!");
    201     REQUIRE(ri.name() == "Hello/World!");
    202   }
    203 
    204   SECTION("override") {
    205     Index ri("hello");
    206     try {
    207       ri.setName("world");
    208       FAIL();
    209     }
    210     catch(const reapack_error &e) {
    211       REQUIRE(std::string{e.what()} == "index name is already set");
    212     }
    213     REQUIRE(ri.name() == "hello");
    214   }
    215 }
    216 
    217 TEST_CASE("find package", M) {
    218   Index ri("index name");
    219   Category *cat = new Category("cat", &ri);
    220   Package *pack = new Package(Package::ScriptType, "pkg", cat);
    221   Version *ver = new Version("1", pack);
    222   Source *source = new Source({}, "google.com", ver);
    223 
    224   ver->addSource(source);
    225   pack->addVersion(ver);
    226   cat->addPackage(pack);
    227   ri.addCategory(cat);
    228 
    229   REQUIRE(ri.find("a", "b") == nullptr);
    230   REQUIRE(ri.find("cat", "b") == nullptr);
    231   REQUIRE(ri.find("cat", "pkg") == pack);
    232 }