Skip to content

Commit

Permalink
Use a std::unique_ptr<GncOptionDB> instead of a raw ptr.
Browse files Browse the repository at this point in the history
Passing references to it to the gnc_register_option functions.

Not tested yet with SWIG, might not work.

Includes introducing fixtures to gtest-gnc-optiondb.cpp.
  • Loading branch information
jralls committed Jul 11, 2021
1 parent 9462809 commit 6ccb9db
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 30 deletions.
19 changes: 8 additions & 11 deletions libgnucash/app-utils/gnc-optiondb.hpp
Expand Up @@ -63,40 +63,37 @@ class GncOptionDB
std::function<void(void*)> m_set_ui_value;
};

using GncOptionDBPtr = std::unique_ptr<GncOptionDB>;
/**
* Create an empty option database.
*
* It would be nice to use a std::shared_ptr here but Swig doesn't implement
* that for Guile.
* @return A newly allocated GncOptionDB. Use delete to destroy it.
*/
GncOptionDB *gnc_option_db_new(void);
GncOptionDBPtr gnc_option_db_new(void);

void gnc_register_string_option(GncOptionDB* db, const char* section,
void gnc_register_string_option(const GncOptionDBPtr& db, const char* section,
const char* name, const char* key,
const char* doc_string, std::string value);


void gnc_register_string_option(GncOptionDB* db, const char* section,
void gnc_register_text_option(const GncOptionDBPtr& db, const char* section,
const char* name, const char* key,
const char* doc_string, std::string value);

void gnc_register_text_option(GncOptionDB* db, const char* section,
const char* name, const char* key,
const char* doc_string, std::string value);

void gnc_register_budget_option(GncOptionDB* db, const char* section,
void gnc_register_budget_option(const GncOptionDBPtr& db, const char* section,
const char* name, const char* key,
const char* doc_string, GncBudget* value);

void gnc_register_commodity_option(GncOptionDB* db, const char* section,
void gnc_register_commodity_option(const GncOptionDBPtr& db, const char* section,
const char* name, const char* key,
const char* doc_string,
gnc_commodity* value);

void gnc_register_currency_option(GncOptionDB* db, const char* section,
void gnc_register_currency_option(const GncOptionDBPtr& db, const char* section,
const char* name, const char* key,
const char* doc_string, gnc_commodity* value);



#endif //GNC_OPTIONDB_HPP_
41 changes: 22 additions & 19 deletions libgnucash/app-utils/test/gtest-gnc-optiondb.cpp
Expand Up @@ -24,44 +24,47 @@
#include <gtest/gtest.h>
#include <gnc-optiondb.hpp>

TEST(GncOptionDB, test_ctor)
class GncOptionDBTest : public ::testing::Test
{
protected:
GncOptionDBTest() : m_db{gnc_option_db_new()} {}

GncOptionDBPtr m_db;
};

TEST_F(GncOptionDBTest, test_ctor)
{
EXPECT_NO_THROW ({ GncOptionDB optiondb; });
}

TEST(GncOptionDB, test_register_option)
TEST_F(GncOptionDBTest, test_register_option)
{
GncOptionDB optiondb;
GncOption option1{"foo", "bar", "baz", "Phony Option",
std::string{"waldo"}};
optiondb.register_option("foo", std::move(option1));
EXPECT_EQ(optiondb.num_sections(), 1);
m_db->register_option("foo", std::move(option1));
EXPECT_EQ(m_db->num_sections(), 1);
}

TEST(GncOptionDB, test_lookup_string_option)
TEST_F(GncOptionDBTest, test_lookup_string_option)
{
GncOptionDB optiondb;
GncOption option1{"foo", "bar", "baz", "Phony Option",
std::string{"waldo"}};
optiondb.register_option("foo", std::move(option1));
EXPECT_STREQ("waldo", optiondb.lookup_string_option("foo", "bar").c_str());
m_db->register_option("foo", std::move(option1));
EXPECT_STREQ("waldo", m_db->lookup_string_option("foo", "bar").c_str());
}

TEST(GncOptionDB, test_unregister_option)
TEST_F(GncOptionDBTest, test_unregister_option)
{
GncOptionDB optiondb;
GncOption option1{"foo", "bar", "baz", "Phony Option",
std::string{"waldo"}};
optiondb.register_option("foo", std::move(option1));
optiondb.unregister_option("foo", "bar");
EXPECT_TRUE(optiondb.lookup_string_option("foo", "bar").empty());
m_db->register_option("foo", std::move(option1));
m_db->unregister_option("foo", "bar");
EXPECT_TRUE(m_db->lookup_string_option("foo", "bar").empty());
}

TEST(GncOptionDB, test_register_string_option)
TEST_F(GncOptionDBTest, test_register_string_option)
{
GncOptionDB* db = gnc_option_db_new();
gnc_register_string_option(db, "foo", "bar", "baz", "Phony Option",
gnc_register_string_option(m_db, "foo", "bar", "baz", "Phony Option",
std::string{"waldo"});
EXPECT_STREQ("waldo", db->lookup_string_option("foo", "bar").c_str());
delete db;
EXPECT_STREQ("waldo", m_db->lookup_string_option("foo", "bar").c_str());
}

0 comments on commit 6ccb9db

Please sign in to comment.