Application: Use shared pointers

Fixes #1239
This commit is contained in:
Jonas Kvinge
2023-07-21 05:55:24 +02:00
parent d6b53f78ab
commit 2e61235403
316 changed files with 2170 additions and 1643 deletions

View File

@@ -28,15 +28,16 @@
#include <QThread>
#include <QtDebug>
#include "test_utils.h"
#include "core/scoped_ptr.h"
#include "core/shared_ptr.h"
#include "core/song.h"
#include "core/database.h"
#include "core/logging.h"
#include "utilities/timeconstants.h"
#include "collection/collectionbackend.h"
#include "collection/collection.h"
using std::make_unique;
// clazy:excludeall=non-pod-global-static,returning-void-expression
namespace {
@@ -45,8 +46,8 @@ class CollectionBackendTest : public ::testing::Test {
protected:
void SetUp() override {
database_.reset(new MemoryDatabase(nullptr));
backend_ = std::make_unique<CollectionBackend>();
backend_->Init(database_.get(), nullptr, Song::Source::Collection, SCollection::kSongsTable, SCollection::kFtsTable, SCollection::kDirsTable, SCollection::kSubdirsTable);
backend_ = make_unique<CollectionBackend>();
backend_->Init(database_, nullptr, Song::Source::Collection, SCollection::kSongsTable, SCollection::kFtsTable, SCollection::kDirsTable, SCollection::kSubdirsTable);
}
static Song MakeDummySong(int directory_id) {
@@ -60,8 +61,8 @@ class CollectionBackendTest : public ::testing::Test {
return ret;
}
std::shared_ptr<Database> database_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)
std::unique_ptr<CollectionBackend> backend_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)
SharedPtr<Database> database_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)
ScopedPtr<CollectionBackend> backend_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)
};
TEST_F(CollectionBackendTest, EmptyDatabase) {
@@ -77,7 +78,7 @@ TEST_F(CollectionBackendTest, EmptyDatabase) {
TEST_F(CollectionBackendTest, AddDirectory) {
QSignalSpy spy(backend_.get(), &CollectionBackend::DirectoryDiscovered);
QSignalSpy spy(&*backend_, &CollectionBackend::DirectoryDiscovered);
backend_->AddDirectory("/tmp");
@@ -98,7 +99,7 @@ TEST_F(CollectionBackendTest, RemoveDirectory) {
dir.path = "/tmp";
backend_->AddDirectory(dir.path);
QSignalSpy spy(backend_.get(), &CollectionBackend::DirectoryDeleted);
QSignalSpy spy(&*backend_, &CollectionBackend::DirectoryDeleted);
// Remove the directory again
backend_->RemoveDirectory(dir);
@@ -131,8 +132,8 @@ class SingleSong : public CollectionBackendTest {
}
void AddDummySong() {
QSignalSpy added_spy(backend_.get(), &CollectionBackend::SongsDiscovered);
QSignalSpy deleted_spy(backend_.get(), &CollectionBackend::SongsDeleted);
QSignalSpy added_spy(&*backend_, &CollectionBackend::SongsDiscovered);
QSignalSpy deleted_spy(&*backend_, &CollectionBackend::SongsDeleted);
// Add the song
backend_->AddOrUpdateSongs(SongList() << song_);
@@ -264,8 +265,8 @@ TEST_F(SingleSong, UpdateSong) {
new_song.set_id(1);
new_song.set_title("A different title");
QSignalSpy deleted_spy(backend_.get(), &CollectionBackend::SongsDeleted);
QSignalSpy added_spy(backend_.get(), &CollectionBackend::SongsDiscovered);
QSignalSpy deleted_spy(&*backend_, &CollectionBackend::SongsDeleted);
QSignalSpy added_spy(&*backend_, &CollectionBackend::SongsDiscovered);
backend_->AddOrUpdateSongs(SongList() << new_song);
@@ -291,7 +292,7 @@ TEST_F(SingleSong, DeleteSongs) {
Song new_song(song_);
new_song.set_id(1);
QSignalSpy deleted_spy(backend_.get(), &CollectionBackend::SongsDeleted);
QSignalSpy deleted_spy(&*backend_, &CollectionBackend::SongsDeleted);
backend_->DeleteSongs(SongList() << new_song);
@@ -324,7 +325,7 @@ TEST_F(SingleSong, MarkSongsUnavailable) {
Song new_song(song_);
new_song.set_id(1);
QSignalSpy deleted_spy(backend_.get(), &CollectionBackend::SongsDeleted);
QSignalSpy deleted_spy(&*backend_, &CollectionBackend::SongsDeleted);
backend_->MarkSongsUnavailable(SongList() << new_song);
@@ -388,7 +389,7 @@ TEST_F(TestUrls, TestUrls) {
}
QSignalSpy spy(backend_.get(), &CollectionBackend::SongsDiscovered);
QSignalSpy spy(&*backend_, &CollectionBackend::SongsDiscovered);
backend_->AddOrUpdateSongs(songs);
if (HasFatalFailure()) return;
@@ -473,7 +474,7 @@ TEST_F(UpdateSongsBySongID, UpdateSongsBySongID) {
}
QSignalSpy spy(backend_.get(), &CollectionBackend::SongsDiscovered);
QSignalSpy spy(&*backend_, &CollectionBackend::SongsDiscovered);
backend_->UpdateSongsBySongID(songs);
@@ -511,8 +512,8 @@ TEST_F(UpdateSongsBySongID, UpdateSongsBySongID) {
}
{ // Remove some songs
QSignalSpy spy1(backend_.get(), &CollectionBackend::SongsDiscovered);
QSignalSpy spy2(backend_.get(), &CollectionBackend::SongsDeleted);
QSignalSpy spy1(&*backend_, &CollectionBackend::SongsDiscovered);
QSignalSpy spy2(&*backend_, &CollectionBackend::SongsDeleted);
SongMap songs;
@@ -556,8 +557,8 @@ TEST_F(UpdateSongsBySongID, UpdateSongsBySongID) {
}
{ // Update some songs
QSignalSpy spy1(backend_.get(), &CollectionBackend::SongsDeleted);
QSignalSpy spy2(backend_.get(), &CollectionBackend::SongsDiscovered);
QSignalSpy spy1(&*backend_, &CollectionBackend::SongsDeleted);
QSignalSpy spy2(&*backend_, &CollectionBackend::SongsDiscovered);
SongMap songs;

View File

@@ -31,14 +31,17 @@
#include <QSortFilterProxyModel>
#include <QtDebug>
#include "test_utils.h"
#include "core/logging.h"
#include "core/scoped_ptr.h"
#include "core/shared_ptr.h"
#include "core/database.h"
#include "collection/collectionmodel.h"
#include "collection/collectionbackend.h"
#include "collection/collection.h"
using std::make_unique;
using std::make_shared;
// clazy:excludeall=non-pod-global-static,returning-void-expression
namespace {
@@ -49,15 +52,15 @@ class CollectionModelTest : public ::testing::Test {
protected:
void SetUp() override {
database_ = std::make_shared<MemoryDatabase>(nullptr);
backend_ = std::make_unique<CollectionBackend>();
backend_->Init(database_.get(), nullptr, Song::Source::Collection, SCollection::kSongsTable, SCollection::kFtsTable, SCollection::kDirsTable, SCollection::kSubdirsTable);
model_ = std::make_unique<CollectionModel>(backend_.get(), nullptr);
database_ = make_shared<MemoryDatabase>(nullptr);
backend_ = make_shared<CollectionBackend>();
backend_->Init(database_, nullptr, Song::Source::Collection, SCollection::kSongsTable, SCollection::kFtsTable, SCollection::kDirsTable, SCollection::kSubdirsTable);
model_ = make_unique<CollectionModel>(backend_, nullptr);
added_dir_ = false;
model_sorted_ = std::make_unique<QSortFilterProxyModel>();
model_sorted_->setSourceModel(model_.get());
model_sorted_ = make_unique<QSortFilterProxyModel>();
model_sorted_->setSourceModel(&*model_);
model_sorted_->setSortRole(CollectionModel::Role_SortText);
model_sorted_->setDynamicSortFilter(true);
model_sorted_->sort(0);
@@ -88,10 +91,10 @@ class CollectionModelTest : public ::testing::Test {
return AddSong(song);
}
std::shared_ptr<Database> database_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)
std::unique_ptr<CollectionBackend> backend_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)
std::unique_ptr<CollectionModel> model_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)
std::unique_ptr<QSortFilterProxyModel> model_sorted_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)
SharedPtr<Database> database_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)
SharedPtr<CollectionBackend> backend_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)
ScopedPtr<CollectionModel> model_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)
ScopedPtr<QSortFilterProxyModel> model_sorted_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)
bool added_dir_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)
};
@@ -258,9 +261,9 @@ TEST_F(CollectionModelTest, RemoveSongsLazyLoaded) {
ASSERT_EQ(3, model_->rowCount(album_index));
// Remove the first two songs
QSignalSpy spy_preremove(model_.get(), &CollectionModel::rowsAboutToBeRemoved);
QSignalSpy spy_remove(model_.get(), &CollectionModel::rowsRemoved);
QSignalSpy spy_reset(model_.get(), &CollectionModel::modelReset);
QSignalSpy spy_preremove(&*model_, &CollectionModel::rowsAboutToBeRemoved);
QSignalSpy spy_remove(&*model_, &CollectionModel::rowsRemoved);
QSignalSpy spy_reset(&*model_, &CollectionModel::modelReset);
backend_->DeleteSongs(SongList() << one << two);
@@ -283,9 +286,9 @@ TEST_F(CollectionModelTest, RemoveSongsNotLazyLoaded) {
model_->Init(false);
// Remove the first two songs
QSignalSpy spy_preremove(model_.get(), &CollectionModel::rowsAboutToBeRemoved);
QSignalSpy spy_remove(model_.get(), &CollectionModel::rowsRemoved);
QSignalSpy spy_reset(model_.get(), &CollectionModel::modelReset);
QSignalSpy spy_preremove(&*model_, &CollectionModel::rowsAboutToBeRemoved);
QSignalSpy spy_remove(&*model_, &CollectionModel::rowsRemoved);
QSignalSpy spy_reset(&*model_, &CollectionModel::modelReset);
backend_->DeleteSongs(SongList() << one << two);
@@ -548,28 +551,28 @@ TEST_F(CollectionModelTest, TestContainerNodes) {
qLog(Debug) << "Testing collection model grouping: " << f << s << t;
std::unique_ptr<Database> database1;
std::unique_ptr<Database> database2;
std::unique_ptr<Database> database3;
std::unique_ptr<CollectionBackend> backend1;
std::unique_ptr<CollectionBackend> backend2;
std::unique_ptr<CollectionBackend> backend3;
std::unique_ptr<CollectionModel> model1;
std::unique_ptr<CollectionModel> model2;
std::unique_ptr<CollectionModel> model3;
ScopedPtr<Database> database1;
ScopedPtr<Database> database2;
ScopedPtr<Database> database3;
ScopedPtr<CollectionBackend> backend1;
ScopedPtr<CollectionBackend> backend2;
ScopedPtr<CollectionBackend> backend3;
ScopedPtr<CollectionModel> model1;
ScopedPtr<CollectionModel> model2;
ScopedPtr<CollectionModel> model3;
database1 = std::make_unique<MemoryDatabase>(nullptr);
database2 = std::make_unique<MemoryDatabase>(nullptr);
database3 = std::make_unique<MemoryDatabase>(nullptr);
backend1 = std::make_unique<CollectionBackend>();
backend2= std::make_unique<CollectionBackend>();
backend3 = std::make_unique<CollectionBackend>();
database1 = make_unique<MemoryDatabase>(nullptr);
database2 = make_unique<MemoryDatabase>(nullptr);
database3 = make_unique<MemoryDatabase>(nullptr);
backend1 = make_unique<CollectionBackend>();
backend2= make_unique<CollectionBackend>();
backend3 = make_unique<CollectionBackend>();
backend1->Init(database1.get(), Song::Source::Collection, SCollection::kSongsTable, SCollection::kFtsTable, SCollection::kDirsTable, SCollection::kSubdirsTable);
backend2->Init(database2.get(), Song::Source::Collection, SCollection::kSongsTable, SCollection::kFtsTable, SCollection::kDirsTable, SCollection::kSubdirsTable);
backend3->Init(database3.get(), Song::Source::Collection, SCollection::kSongsTable, SCollection::kFtsTable, SCollection::kDirsTable, SCollection::kSubdirsTable);
model1 = std::make_unique<CollectionModel>(backend1.get(), nullptr);
model2 = std::make_unique<CollectionModel>(backend2.get(), nullptr);
model3 = std::make_unique<CollectionModel>(backend3.get(), nullptr);
model1 = make_unique<CollectionModel>(backend1.get(), nullptr);
model2 = make_unique<CollectionModel>(backend2.get(), nullptr);
model3 = make_unique<CollectionModel>(backend3.get(), nullptr);
backend1->AddDirectory("/mnt/music");
backend2->AddDirectory("/mnt/music");

View File

@@ -30,8 +30,11 @@
#include "test_utils.h"
#include "core/scoped_ptr.h"
#include "playlist/songplaylistitem.h"
using std::make_unique;
// clazy:excludeall=non-pod-global-static
namespace {
@@ -49,7 +52,7 @@ class SongPlaylistItemTest : public ::testing::TestWithParam<const char*> {
song_.Init("Title", "Artist", "Album", 123);
song_.set_url(QUrl::fromLocalFile(absolute_file_name_));
item_ = std::make_unique<SongPlaylistItem>(song_);
item_ = make_unique<SongPlaylistItem>(song_);
if (!absolute_file_name_.startsWith('/'))
absolute_file_name_.prepend('/');
@@ -58,7 +61,7 @@ class SongPlaylistItemTest : public ::testing::TestWithParam<const char*> {
Song song_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)
QTemporaryFile temp_file_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)
QString absolute_file_name_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)
std::unique_ptr<SongPlaylistItem> item_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)
ScopedPtr<SongPlaylistItem> item_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)
};
INSTANTIATE_TEST_SUITE_P(RealFiles, SongPlaylistItemTest, testing::Values( // clazy:exclude=function-args-by-value,clazy-non-pod-global-static