reapack

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

commit ec321a25f2f718b3b79a9b6e0d8e8adf1cde9d62
parent 85b3a3babb9df08f31d79c5539321e331b96fed4
Author: cfillion <cfillion@users.noreply.github.com>
Date:   Wed,  2 Dec 2015 00:21:11 -0500

fix a memory leak preventing the database from being unloaded

Diffstat:
Msrc/database.cpp | 21+++++++++++++++++----
Msrc/database.hpp | 38+++++++++++++++++++++-----------------
Msrc/database_v1.cpp | 37+++++++++++++++++++++++++------------
Msrc/download.cpp | 15++++++++-------
Msrc/download.hpp | 12+++++++++---
Msrc/package.cpp | 18++++++++++++------
Msrc/package.hpp | 19+++++++++----------
Msrc/reapack.cpp | 27+++++++++++++++------------
Msrc/reapack.hpp | 4++--
Msrc/version.cpp | 10++++++++--
Msrc/version.hpp | 21+++++++++------------
Mtest/database.cpp | 46++++++++++++++++++++++++++--------------------
Mtest/database_v1.cpp | 45++++++++++++++++++++++++++++++---------------
Mtest/package.cpp | 17+++++++++--------
Mtest/version.cpp | 46+++++++++++++++++++++++-----------------------
15 files changed, 223 insertions(+), 153 deletions(-)

diff --git a/src/database.cpp b/src/database.cpp @@ -4,7 +4,7 @@ #include <WDL/tinyxml/tinyxml.h> -DatabasePtr Database::load(const char *file) +Database *Database::load(const char *file) { TiXmlDocument doc(file); @@ -31,11 +31,18 @@ DatabasePtr Database::load(const char *file) } } -void Database::addCategory(CategoryPtr cat) +Database::~Database() +{ + for(Category *cat : m_categories) + delete cat; +} + +void Database::addCategory(Category *cat) { if(cat->packages().empty()) return; + cat->setDatabase(this); m_categories.push_back(cat); m_packages.insert(m_packages.end(), @@ -49,13 +56,19 @@ Category::Category(const std::string &name) throw reapack_error("empty category name"); } -void Category::addPackage(PackagePtr pack) +Category::~Category() +{ + for(Package *pack : m_packages) + delete pack; +} + +void Category::addPackage(Package *pack) { if(pack->type() == Package::UnknownType) return; // silently discard unknown package types else if(pack->versions().empty()) return; - pack->setCategory(shared_from_this()); + pack->setCategory(this); m_packages.push_back(pack); } diff --git a/src/database.hpp b/src/database.hpp @@ -9,42 +9,46 @@ class TiXmlElement; -class Database; -typedef std::shared_ptr<Database> DatabasePtr; - class Category; -typedef std::shared_ptr<Category> CategoryPtr; class Database { public: - static DatabasePtr load(const char *); + static Database *load(const char *); + + ~Database(); - void addCategory(CategoryPtr cat); - const std::vector<CategoryPtr> &categories() const { return m_categories; } - CategoryPtr category(const int i) const { return m_categories[i]; } + void addCategory(Category *cat); + const std::vector<Category *> &categories() const { return m_categories; } + Category *category(const int i) const { return m_categories[i]; } - const std::vector<PackagePtr> &packages() const { return m_packages; } + const std::vector<Package *> &packages() const { return m_packages; } private: - static DatabasePtr loadV1(TiXmlElement *); + static Database *loadV1(TiXmlElement *); - std::vector<CategoryPtr> m_categories; - std::vector<PackagePtr> m_packages; + std::vector<Category *> m_categories; + std::vector<Package *> m_packages; }; -class Category : public std::enable_shared_from_this<Category> { +class Category { public: Category(const std::string &name); + ~Category(); const std::string &name() const { return m_name; } - void addPackage(PackagePtr pack); - const std::vector<PackagePtr> &packages() const { return m_packages; } - PackagePtr package(const int i) const { return m_packages[i]; } + void setDatabase(Database *db) { m_database = db; } + Database *database() const { return m_database; } + + void addPackage(Package *pack); + const std::vector<Package *> &packages() const { return m_packages; } + Package *package(const int i) const { return m_packages[i]; } private: + Database *m_database; + std::string m_name; - std::vector<PackagePtr> m_packages; + std::vector<Package *> m_packages; }; #endif diff --git a/src/database_v1.cpp b/src/database_v1.cpp @@ -4,15 +4,21 @@ #include <WDL/tinyxml/tinyxml.h> +#include <memory> + using namespace std; -static CategoryPtr LoadCategoryV1(TiXmlElement *); -static PackagePtr LoadPackageV1(TiXmlElement *); -static VersionPtr LoadVersionV1(TiXmlElement *); +static Category *LoadCategoryV1(TiXmlElement *); +static Package *LoadPackageV1(TiXmlElement *); +static Version *LoadVersionV1(TiXmlElement *); -DatabasePtr Database::loadV1(TiXmlElement *root) +Database *Database::loadV1(TiXmlElement *root) { - DatabasePtr db = make_shared<Database>(); + Database *db = new Database; + + // ensure the memory is released if an exception is + // thrown during the loading process + unique_ptr<Database> ptr(db); TiXmlElement *catNode = root->FirstChildElement("category"); @@ -22,15 +28,17 @@ DatabasePtr Database::loadV1(TiXmlElement *root) catNode = catNode->NextSiblingElement("category"); } + ptr.release(); return db; } -CategoryPtr LoadCategoryV1(TiXmlElement *catNode) +Category *LoadCategoryV1(TiXmlElement *catNode) { const char *name = catNode->Attribute("name"); if(!name) name = ""; - CategoryPtr cat = make_shared<Category>(name); + Category *cat = new Category(name); + unique_ptr<Category> ptr(cat); TiXmlElement *packNode = catNode->FirstChildElement("reapack"); @@ -40,10 +48,11 @@ CategoryPtr LoadCategoryV1(TiXmlElement *catNode) packNode = packNode->NextSiblingElement("reapack"); } + ptr.release(); return cat; } -PackagePtr LoadPackageV1(TiXmlElement *packNode) +Package *LoadPackageV1(TiXmlElement *packNode) { const char *type = packNode->Attribute("type"); if(!type) type = ""; @@ -51,7 +60,8 @@ PackagePtr LoadPackageV1(TiXmlElement *packNode) const char *name = packNode->Attribute("name"); if(!name) name = ""; - PackagePtr pack = make_shared<Package>(Package::convertType(type), name); + Package *pack = new Package(Package::convertType(type), name); + unique_ptr<Package> ptr(pack); TiXmlElement *verNode = packNode->FirstChildElement("version"); @@ -61,15 +71,17 @@ PackagePtr LoadPackageV1(TiXmlElement *packNode) verNode = verNode->NextSiblingElement("version"); } + ptr.release(); return pack; } -VersionPtr LoadVersionV1(TiXmlElement *verNode) +Version *LoadVersionV1(TiXmlElement *verNode) { const char *name = verNode->Attribute("name"); if(!name) name = ""; - VersionPtr ver = make_shared<Version>(name); + Version *ver = new Version(name); + unique_ptr<Version> ptr(ver); TiXmlElement *node = verNode->FirstChildElement("source"); @@ -80,7 +92,7 @@ VersionPtr LoadVersionV1(TiXmlElement *verNode) const char *url = node->GetText(); if(!url) url = ""; - ver->addSource(make_shared<Source>(Source::convertPlatform(platform), url)); + ver->addSource(new Source(Source::convertPlatform(platform), url)); node = node->NextSiblingElement("source"); } @@ -94,5 +106,6 @@ VersionPtr LoadVersionV1(TiXmlElement *verNode) ver->setChangelog(changelog); } + ptr.release(); return ver; } diff --git a/src/download.cpp b/src/download.cpp @@ -10,8 +10,8 @@ vector<Download *> Download::s_active; static const int DOWNLOAD_TIMEOUT = 5; -Download::Download(const std::string &url) - : m_threadHandle(0), m_url(url) +Download::Download(const std::string &name, const std::string &url) + : m_threadHandle(0), m_name(name), m_url(url) { reset(); } @@ -179,7 +179,7 @@ void Download::execCallbacks() } for(DownloadCallback callback : m_callback) - callback(m_status, m_contents); + callback(this); } bool Download::isFinished() @@ -214,14 +214,15 @@ DownloadQueue::~DownloadQueue() } } -void DownloadQueue::push(const std::string &url, DownloadCallback cb) +void DownloadQueue::push(const string &name, + const string &url, DownloadCallback cb) { - Download *download = new Download(url); + Download *download = new Download(name, url); download->addCallback(cb); - download->addCallback([=](const int, const string &) { + download->addCallback([=](Download *dl) { m_queue.pop(); - delete download; + delete dl; if(!m_queue.empty()) m_queue.front()->start(); diff --git a/src/download.hpp b/src/download.hpp @@ -10,14 +10,18 @@ #include <reaper_plugin.h> -typedef std::function<void(int, const std::string &)> DownloadCallback; +class Download; +typedef std::function<void(Download *)> DownloadCallback; class Download { public: - Download(const std::string &url); + Download(const std::string &name, const std::string &url); ~Download(); + const std::string &name() const { return m_name; } const std::string &url() const { return m_url; } + int status() const { return m_status; } + const std::string &contents() const { return m_contents; } bool isFinished(); bool isAborted(); @@ -45,6 +49,7 @@ private: int m_status; std::string m_contents; + std::string m_name; std::string m_url; std::vector<DownloadCallback> m_callback; @@ -55,7 +60,8 @@ class DownloadQueue { public: ~DownloadQueue(); - void push(const std::string &url, DownloadCallback); + void push(const std::string &name, const std::string &url, DownloadCallback); + int size() const { return m_queue.size(); } private: std::queue<Download *> m_queue; diff --git a/src/package.cpp b/src/package.cpp @@ -18,7 +18,13 @@ Package::Package(const Type type, const std::string &name) throw reapack_error("empty package name"); } -void Package::addVersion(VersionPtr ver) +Package::~Package() +{ + for(Version *ver : m_versions) + delete ver; +} + +void Package::addVersion(Version *ver) { if(ver->sources().empty()) return; @@ -26,7 +32,7 @@ void Package::addVersion(VersionPtr ver) m_versions.insert(ver); } -VersionPtr Package::version(const int index) const +Version *Package::version(const int index) const { auto it = m_versions.begin(); @@ -36,7 +42,7 @@ VersionPtr Package::version(const int index) const return *it; } -VersionPtr Package::lastVersion() const +Version *Package::lastVersion() const { return *prev(m_versions.end()); } @@ -58,10 +64,10 @@ Path Package::scriptLocation() const path.append("Scripts"); path.append("ReaScripts"); - if(category()) - path.append(category()->name()); + if(m_category) + path.append(m_category->name()); - path.append(name()); + path.append(m_name); return path; } diff --git a/src/package.hpp b/src/package.hpp @@ -4,11 +4,8 @@ #include "path.hpp" #include "version.hpp" -class Package; -typedef std::shared_ptr<Package> PackagePtr; - class Category; -typedef std::shared_ptr<Category> CategoryPtr; +class Database; class Package { public: @@ -20,24 +17,26 @@ public: static Type convertType(const char *); Package(const Type, const std::string &name); + ~Package(); - void setCategory(CategoryPtr cat) { m_category = cat; } - CategoryPtr category() const { return m_category; } + void setCategory(Category *cat) { m_category = cat; } + Category *category() const { return m_category; } Type type() const { return m_type; } const std::string &name() const { return m_name; } - void addVersion(VersionPtr ver); + void addVersion(Version *ver); const VersionSet &versions() const { return m_versions; } - VersionPtr version(const int i) const; - VersionPtr lastVersion() const; + Version *version(const int i) const; + Version *lastVersion() const; Path targetLocation() const; private: Path scriptLocation() const; - CategoryPtr m_category; + Category *m_category; + Type m_type; std::string m_name; VersionSet m_versions; diff --git a/src/reapack.cpp b/src/reapack.cpp @@ -68,9 +68,9 @@ void ReaPack::synchronizeAll() void ReaPack::synchronize(const Repository &repo) { - m_downloadQueue.push(repo.url(), [=](const int code, const string &data) { - if(code != 200) { - ShowMessageBox(data.c_str(), repo.name().c_str(), 0); + m_downloadQueue.push(repo.name(), repo.url(), [=](Download *dl) { + if(dl->status() != 200) { + ShowMessageBox(dl->contents().c_str(), repo.name().c_str(), 0); return; } @@ -82,14 +82,14 @@ void ReaPack::synchronize(const Repository &repo) return; } - file << data; + file << dl->contents(); file.close(); synchronize(Database::load(path.cjoin())); }); } -void ReaPack::synchronize(DatabasePtr database) +void ReaPack::synchronize(Database *database) { if(database->packages().empty()) { ShowMessageBox("The package database is empty, nothing to do!", @@ -98,7 +98,7 @@ void ReaPack::synchronize(DatabasePtr database) return; } - for(PackagePtr pkg : database->packages()) { + for(Package *pkg : database->packages()) { try { installPackage(pkg); } @@ -108,13 +108,16 @@ void ReaPack::synchronize(DatabasePtr database) } } -void ReaPack::installPackage(PackagePtr pkg) +void ReaPack::installPackage(Package *pkg) { const std::string &url = pkg->lastVersion()->source(0)->url(); - m_downloadQueue.push(url, [=](const int code, const string &data) { - if(code != 200) { - ShowMessageBox(data.c_str(), pkg->name().c_str(), 0); + m_downloadQueue.push(pkg->name(), url, [=](Download *dl) { + if(m_downloadQueue.size() == 1) + delete pkg->category()->database(); + + if(dl->status() != 200) { + ShowMessageBox(dl->contents().c_str(), dl->name().c_str(), 0); return; } @@ -123,11 +126,11 @@ void ReaPack::installPackage(PackagePtr pkg) ofstream file(path.join()); if(file.bad()) { - ShowMessageBox(strerror(errno), pkg->name().c_str(), 0); + ShowMessageBox(strerror(errno), dl->name().c_str(), 0); return; } - file << data; + file << dl->contents(); file.close(); }); } diff --git a/src/reapack.hpp b/src/reapack.hpp @@ -25,8 +25,8 @@ public: void synchronizeAll(); void synchronize(const Repository &); - void synchronize(DatabasePtr); - void installPackage(PackagePtr); + void synchronize(Database *); + void installPackage(Package *); private: std::map<int, ActionCallback> m_actions; diff --git a/src/version.cpp b/src/version.cpp @@ -31,7 +31,13 @@ Version::Version(const std::string &str) } } -void Version::addSource(SourcePtr source) +Version::~Version() +{ + for(Source *source : m_sources) + delete source; +} + +void Version::addSource(Source *source) { const Source::Platform p = source->platform(); @@ -67,7 +73,7 @@ void Version::setChangelog(const std::string &changelog) m_changelog = changelog; } -bool Version::operator<(const Version &o) +bool Version::operator<(const Version &o) const { return m_code < o.code(); } diff --git a/src/version.hpp b/src/version.hpp @@ -5,15 +5,12 @@ #include <string> #include <vector> -class Version; -typedef std::shared_ptr<Version> VersionPtr; - class Source; -typedef std::shared_ptr<Source> SourcePtr; class Version { public: Version(const std::string &); + ~Version(); const std::string &name() const { return m_name; } unsigned long code() const { return m_code; } @@ -21,29 +18,29 @@ public: void setChangelog(const std::string &); const std::string &changelog() const { return m_changelog; } - void addSource(SourcePtr source); - const std::vector<SourcePtr> &sources() const { return m_sources; } - SourcePtr source(const int i) const { return m_sources[i]; } + void addSource(Source *source); + const std::vector<Source *> &sources() const { return m_sources; } + Source *source(const int i) const { return m_sources[i]; } - bool operator<(const Version &); + bool operator<(const Version &) const; private: std::string m_name; unsigned long m_code; std::string m_changelog; - std::vector<SourcePtr> m_sources; + std::vector<Source *> m_sources; }; class VersionCompare { public: - constexpr bool operator() (const VersionPtr &l, const VersionPtr &r) const + constexpr bool operator()(const Version *l, const Version *r) const { - return *l.get() < *r.get(); + return *l < *r; } }; -typedef std::set<VersionPtr, VersionCompare> VersionSet; +typedef std::set<Version *, VersionCompare> VersionSet; class Source { public: diff --git a/test/database.cpp b/test/database.cpp @@ -6,6 +6,7 @@ #include <string> #define DBPATH "test/db/" +#define DBPTR(ptr) unique_ptr<Database> dbptr(ptr) using namespace std; @@ -13,7 +14,8 @@ static const char *M = "[database]"; TEST_CASE("file not found", M) { try { - Database::load(DBPATH "404.xml"); + Database *db = Database::load(DBPATH "404.xml"); + DBPTR(db); FAIL(); } catch(const reapack_error &e) { @@ -23,7 +25,8 @@ TEST_CASE("file not found", M) { TEST_CASE("broken xml", M) { try { - Database::load(DBPATH "broken.xml"); + Database *db = Database::load(DBPATH "broken.xml"); + DBPTR(db); FAIL(); } catch(const reapack_error &e) { @@ -33,7 +36,8 @@ TEST_CASE("broken xml", M) { TEST_CASE("wrong root tag name", M) { try { - Database::load(DBPATH "wrong_root.xml"); + Database *db = Database::load(DBPATH "wrong_root.xml"); + DBPTR(db); FAIL(); } catch(const reapack_error &e) { @@ -43,7 +47,8 @@ TEST_CASE("wrong root tag name", M) { TEST_CASE("invalid version", M) { try { - Database::load(DBPATH "invalid_version.xml"); + Database *db = Database::load(DBPATH "invalid_version.xml"); + DBPTR(db); FAIL(); } catch(const reapack_error &e) { @@ -53,7 +58,8 @@ TEST_CASE("invalid version", M) { TEST_CASE("future version", M) { try { - Database::load(DBPATH "future_version.xml"); + Database *db = Database::load(DBPATH "future_version.xml"); + DBPTR(db); FAIL(); } catch(const reapack_error &e) { @@ -61,13 +67,13 @@ TEST_CASE("future version", M) { } } TEST_CASE("add category", M) { - VersionPtr ver = make_shared<Version>("1"); - ver->addSource(make_shared<Source>(Source::GenericPlatform, "google.com")); + Version *ver = new Version("1"); + ver->addSource(new Source(Source::GenericPlatform, "google.com")); - PackagePtr pack = make_shared<Package>(Package::ScriptType, "name"); + Package *pack = new Package(Package::ScriptType, "name"); pack->addVersion(ver); - CategoryPtr cat = make_shared<Category>("a"); + Category *cat = new Category("a"); cat->addPackage(pack); Database db; @@ -81,38 +87,38 @@ TEST_CASE("add category", M) { TEST_CASE("drop empty category", M) { Database db; - db.addCategory(make_shared<Category>("a")); + db.addCategory(new Category("a")); REQUIRE(db.categories().empty()); } TEST_CASE("add a package", M) { - VersionPtr ver = make_shared<Version>("1"); - ver->addSource(make_shared<Source>(Source::GenericPlatform, "google.com")); + Version *ver = new Version("1"); + ver->addSource(new Source(Source::GenericPlatform, "google.com")); - PackagePtr pack = make_shared<Package>(Package::ScriptType, "name"); + Package *pack = new Package(Package::ScriptType, "name"); pack->addVersion(ver); - CategoryPtr cat = make_shared<Category>("a"); - CHECK(cat->packages().size() == 0); + Category cat("a"); + CHECK(cat.packages().size() == 0); CHECK_FALSE(pack->category()); - cat->addPackage(pack); + cat.addPackage(pack); - REQUIRE(cat->packages().size() == 1); - REQUIRE(pack->category().get() == cat.get()); + REQUIRE(cat.packages().size() == 1); + REQUIRE(pack->category() == &cat); } TEST_CASE("drop empty package", M) { Category cat("a"); - cat.addPackage(make_shared<Package>(Package::ScriptType, "name")); + cat.addPackage(new Package(Package::ScriptType, "name")); REQUIRE(cat.packages().empty()); } TEST_CASE("drop unknown package", M) { Category cat("a"); - cat.addPackage(make_shared<Package>(Package::UnknownType, "name")); + cat.addPackage(new Package(Package::UnknownType, "name")); REQUIRE(cat.packages().size() == 0); } diff --git a/test/database_v1.cpp b/test/database_v1.cpp @@ -3,9 +3,11 @@ #include <database.hpp> #include <errors.hpp> +#include <memory> #include <string> #define DBPATH "test/db/v1/" +#define DBPTR(ptr) unique_ptr<Database> dbptr(ptr) using namespace std; @@ -13,7 +15,8 @@ static const char *M = "[reapack_v1]"; TEST_CASE("unnamed category", M) { try { - Database::load(DBPATH "unnamed_category.xml"); + Database *db = Database::load(DBPATH "unnamed_category.xml"); + DBPTR(db); FAIL(); } catch(const reapack_error &e) { @@ -22,19 +25,23 @@ TEST_CASE("unnamed category", M) { } TEST_CASE("invalid category tag", M) { - DatabasePtr db = Database::load(DBPATH "wrong_category_tag.xml"); + Database *db = Database::load(DBPATH "wrong_category_tag.xml"); + DBPTR(db); + REQUIRE(db->categories().empty()); } TEST_CASE("invalid package tag", M) { - DatabasePtr db = Database::load(DBPATH "wrong_package_tag.xml"); + Database *db = Database::load(DBPATH "wrong_package_tag.xml"); + DBPTR(db); REQUIRE(db->categories().empty()); } TEST_CASE("null package name", M) { try { - Database::load(DBPATH "unnamed_package.xml"); + Database *db = Database::load(DBPATH "unnamed_package.xml"); + DBPTR(db); FAIL(); } catch(const reapack_error &e) { @@ -44,7 +51,8 @@ TEST_CASE("null package name", M) { TEST_CASE("null package type", M) { try { - Database::load(DBPATH "missing_type.xml"); + Database *db = Database::load(DBPATH "missing_type.xml"); + DBPTR(db); } catch(const reapack_error &e) { // no segfault -> test passes! @@ -52,14 +60,16 @@ TEST_CASE("null package type", M) { } TEST_CASE("invalid version tag", M) { - DatabasePtr db = Database::load(DBPATH "wrong_version_tag.xml"); + Database *db = Database::load(DBPATH "wrong_version_tag.xml"); + DBPTR(db); REQUIRE(db->categories().empty()); } TEST_CASE("null package version", M) { try { - Database::load(DBPATH "missing_version.xml"); + Database *db = Database::load(DBPATH "missing_version.xml"); + DBPTR(db); FAIL(); } catch(const reapack_error &e) { @@ -69,7 +79,8 @@ TEST_CASE("null package version", M) { TEST_CASE("null source url", M) { try { - Database::load(DBPATH "missing_source_url.xml"); + Database *db = Database::load(DBPATH "missing_source_url.xml"); + DBPTR(db); FAIL(); } catch(const reapack_error &e) { @@ -78,14 +89,16 @@ TEST_CASE("null source url", M) { } TEST_CASE("default platform", M) { - DatabasePtr db = Database::load(DBPATH "missing_platform.xml"); + Database *db = Database::load(DBPATH "missing_platform.xml"); + DBPTR(db); REQUIRE(db->category(0)->package(0)->version(0)->source(0)->platform() == Source::GenericPlatform); } TEST_CASE("version changelog", M) { - DatabasePtr db = Database::load(DBPATH "changelog.xml"); + Database *db = Database::load(DBPATH "changelog.xml"); + DBPTR(db); CHECK_FALSE(db->categories().empty()); CHECK_FALSE(db->category(0)->packages().empty()); @@ -96,24 +109,26 @@ TEST_CASE("version changelog", M) { } TEST_CASE("full database", M) { - DatabasePtr db = Database::load(DBPATH "full_database.xml"); + Database *db = Database::load(DBPATH "full_database.xml"); + DBPTR(db); + REQUIRE(db->categories().size() == 1); - CategoryPtr cat = db->category(0); + Category *cat = db->category(0); REQUIRE(cat->name() == "Category Name"); REQUIRE(cat->packages().size() == 1); - PackagePtr pack = cat->package(0); + Package *pack = cat->package(0); REQUIRE(pack->type() == Package::ScriptType); REQUIRE(pack->name() == "Hello World.lua"); REQUIRE(pack->versions().size() == 1); - VersionPtr ver = pack->version(0); + Version *ver = pack->version(0); REQUIRE(ver->name() == "1.0"); REQUIRE(ver->sources().size() == 1); REQUIRE(ver->changelog() == "Fixed a division by zero error."); - SourcePtr source = ver->source(0); + Source *source = ver->source(0); REQUIRE(source->platform() == Source::GenericPlatform); REQUIRE(source->url() == "https://google.com/"); } diff --git a/test/package.cpp b/test/package.cpp @@ -26,13 +26,14 @@ TEST_CASE("package versions are sorted", M) { Package pack(Package::ScriptType, "a"); CHECK(pack.versions().size() == 0); - SourcePtr source = make_shared<Source>(Source::GenericPlatform, "google.com"); + Source *sourceA = new Source(Source::GenericPlatform, "google.com"); + Source *sourceB = new Source(Source::GenericPlatform, "google.com"); - VersionPtr final = make_shared<Version>("1"); - final->addSource(source); + Version *final = new Version("1"); + final->addSource(sourceA); - VersionPtr alpha = make_shared<Version>("0.1"); - alpha->addSource(source); + Version *alpha = new Version("0.1"); + alpha->addSource(sourceB); pack.addVersion(final); CHECK(pack.versions().size() == 1); @@ -47,7 +48,7 @@ TEST_CASE("package versions are sorted", M) { TEST_CASE("drop empty version", M) { Package pack(Package::ScriptType, "a"); - pack.addVersion(make_shared<Version>("1")); + pack.addVersion(new Version("1")); REQUIRE(pack.versions().empty()); } @@ -65,10 +66,10 @@ TEST_CASE("unknown target location", M) { } TEST_CASE("script target location", M) { - CategoryPtr cat = make_shared<Category>("Category Name"); + Category cat("Category Name"); Package pack(Package::ScriptType, "file.name"); - pack.setCategory(cat); + pack.setCategory(&cat); const Path path = pack.targetLocation(); diff --git a/test/version.cpp b/test/version.cpp @@ -106,7 +106,7 @@ TEST_CASE("empty source url", M) { TEST_CASE("drow sources for unknown platforms") { Version ver("1"); - ver.addSource(make_shared<Source>(Source::UnknownPlatform, "a")); + ver.addSource(new Source(Source::UnknownPlatform, "a")); REQUIRE(ver.sources().size() == 0); } @@ -114,9 +114,9 @@ TEST_CASE("drow sources for unknown platforms") { #ifdef __APPLE__ TEST_CASE("drop windows sources on os x", M) { Version ver("1"); - ver.addSource(make_shared<Source>(Source::WindowsPlatform, "a")); - ver.addSource(make_shared<Source>(Source::Win32Platform, "a")); - ver.addSource(make_shared<Source>(Source::Win64Platform, "a")); + ver.addSource(new Source(Source::WindowsPlatform, "a")); + ver.addSource(new Source(Source::Win32Platform, "a")); + ver.addSource(new Source(Source::Win64Platform, "a")); REQUIRE(ver.sources().size() == 0); } @@ -124,32 +124,32 @@ TEST_CASE("drop windows sources on os x", M) { #ifdef __x86_64__ TEST_CASE("drop 32-bit sources on os x 64-bit", M) { Version ver("1"); - ver.addSource(make_shared<Source>(Source::Darwin32Platform, "a")); + ver.addSource(new Source(Source::Darwin32Platform, "a")); REQUIRE(ver.sources().size() == 0); } TEST_CASE("valid sources for os x 64-bit", M) { Version ver("1"); - ver.addSource(make_shared<Source>(Source::GenericPlatform, "a")); - ver.addSource(make_shared<Source>(Source::DarwinPlatform, "a")); - ver.addSource(make_shared<Source>(Source::Darwin64Platform, "a")); + ver.addSource(new Source(Source::GenericPlatform, "a")); + ver.addSource(new Source(Source::DarwinPlatform, "a")); + ver.addSource(new Source(Source::Darwin64Platform, "a")); REQUIRE(ver.sources().size() == 3); } #else TEST_CASE("drop 64-bit sources on os x 32-bit", M) { Version ver("1"); - ver.addSource(make_shared<Source>(Source::Darwin64Platform, "a")); + ver.addSource(new Source(Source::Darwin64Platform, "a")); REQUIRE(ver.sources().size() == 0); } TEST_CASE("valid sources for os x 32-bit", M) { Version ver("1"); - ver.addSource(make_shared<Source>(Source::GenericPlatform, "a")); - ver.addSource(make_shared<Source>(Source::DarwinPlatform, "a")); - ver.addSource(make_shared<Source>(Source::Darwin32Platform, "a")); + ver.addSource(new Source(Source::GenericPlatform, "a")); + ver.addSource(new Source(Source::DarwinPlatform, "a")); + ver.addSource(new Source(Source::Darwin32Platform, "a")); REQUIRE(ver.sources().size() == 3); } @@ -158,9 +158,9 @@ TEST_CASE("valid sources for os x 32-bit", M) { #elif _WIN32 TEST_CASE("drop os x sources on windows", M) { Version ver("1"); - ver.addSource(make_shared<Source>(Source::DarwinPlatform, "a")); - ver.addSource(make_shared<Source>(Source::Darwin32Platform, "a")); - ver.addSource(make_shared<Source>(Source::Darwin64Platform, "a")); + ver.addSource(new Source(Source::DarwinPlatform, "a")); + ver.addSource(new Source(Source::Darwin32Platform, "a")); + ver.addSource(new Source(Source::Darwin64Platform, "a")); REQUIRE(ver.sources().size() == 0); } @@ -168,32 +168,32 @@ TEST_CASE("drop os x sources on windows", M) { #ifdef _WIN64 TEST_CASE("drop 32-bit sources on windows 64-bit", M) { Version ver("1"); - ver.addSource(make_shared<Source>(Source::Win32Platform, "a")); + ver.addSource(new Source(Source::Win32Platform, "a")); REQUIRE(ver.sources().size() == 0); } TEST_CASE("valid sources for windows 64-bit", M) { Version ver("1"); - ver.addSource(make_shared<Source>(Source::GenericPlatform, "a")); - ver.addSource(make_shared<Source>(Source::WindowsPlatform, "a")); - ver.addSource(make_shared<Source>(Source::Win64Platform, "a")); + ver.addSource(new Source(Source::GenericPlatform, "a")); + ver.addSource(new Source(Source::WindowsPlatform, "a")); + ver.addSource(new Source(Source::Win64Platform, "a")); REQUIRE(ver.sources().size() == 3); } #else TEST_CASE("drop 64-bit sources on windows 32-bit", M) { Version ver("1"); - ver.addSource(make_shared<Source>(Source::Win64Platform, "a")); + ver.addSource(new Source(Source::Win64Platform, "a")); REQUIRE(ver.sources().size() == 0); } TEST_CASE("valid sources for windows 32-bit", M) { Version ver("1"); - ver.addSource(make_shared<Source>(Source::GenericPlatform, "a")); - ver.addSource(make_shared<Source>(Source::WindowsPlatform, "a")); - ver.addSource(make_shared<Source>(Source::Win32Platform, "a")); + ver.addSource(new Source(Source::GenericPlatform, "a")); + ver.addSource(new Source(Source::WindowsPlatform, "a")); + ver.addSource(new Source(Source::Win32Platform, "a")); REQUIRE(ver.sources().size() == 3); }