r23335 - gnucash/trunk/src/engine - Prohibit setting budget values greater than num_periods
Geert Janssens
gjanssens at code.gnucash.org
Sat Oct 26 04:38:59 EDT 2013
Author: gjanssens
Date: 2013-10-26 04:38:44 -0400 (Sat, 26 Oct 2013)
New Revision: 23335
Trac: http://svn.gnucash.org/trac/changeset/23335
Modified:
gnucash/trunk/src/engine/gnc-budget.c
gnucash/trunk/src/engine/test/utest-Budget.c
Log:
Prohibit setting budget values greater than num_periods
* Add unit test to verify changes
* gnc_budget_set_account_period_value returns without doing anything
if requested period value is greater than num_periods
* Add warning message when setting invalid period
Author: R Ratliff <ratliff.bobby at gmail.com>
Modified: gnucash/trunk/src/engine/gnc-budget.c
===================================================================
--- gnucash/trunk/src/engine/gnc-budget.c 2013-10-25 20:53:31 UTC (rev 23334)
+++ gnucash/trunk/src/engine/gnc-budget.c 2013-10-26 08:38:44 UTC (rev 23335)
@@ -507,6 +507,11 @@
gchar path[BUF_SIZE];
gchar *bufend;
+ if (period_num >= GET_PRIVATE(budget)->num_periods) {
+ PWARN("Period %i does not exist", period_num);
+ return;
+ }
+
gnc_budget_begin_edit(budget);
frame = qof_instance_get_slots(QOF_INSTANCE(budget));
guid = xaccAccountGetGUID(account);
Modified: gnucash/trunk/src/engine/test/utest-Budget.c
===================================================================
--- gnucash/trunk/src/engine/test/utest-Budget.c 2013-10-25 20:53:31 UTC (rev 23334)
+++ gnucash/trunk/src/engine/test/utest-Budget.c 2013-10-26 08:38:44 UTC (rev 23335)
@@ -2545,6 +2545,42 @@
gnc_budget_destroy(budget);
}
+static void
+test_gnc_set_budget_account_period_value()
+{
+ QofBook *book = qof_book_new();
+ GncBudget* budget = gnc_budget_new(book);
+ Account *acc;
+ gnc_numeric val;
+
+ guint log_level = G_LOG_LEVEL_WARNING | G_LOG_FLAG_FATAL;
+ gchar *log_domain = "gnc.engine";
+ gchar *msg = "[gnc_budget_set_account_period_value()] Period 12 does not exist";
+ guint hdlr;
+ TestErrorStruct check = { log_level, log_domain, msg, 0 };
+ GLogFunc oldlogger;
+
+ acc = gnc_account_create_root(book);
+
+ g_assert(!gnc_budget_is_account_period_value_set(budget, acc, 0));
+ gnc_budget_set_account_period_value(budget, acc, 0, gnc_numeric_create(100,1));
+ g_assert(gnc_budget_is_account_period_value_set(budget, acc, 0));
+ val = gnc_budget_get_account_period_value(budget, acc, 0);
+ g_assert (gnc_numeric_equal (val, gnc_numeric_create (100, 1)));
+
+ /* Budget has 12 periods by default, numbered from 0 to 11. Setting
+ * period 12 should throw an error. */
+ oldlogger = g_log_set_default_handler ((GLogFunc)test_null_handler, &check);
+ g_test_log_set_fatal_handler ((GTestLogFatalFunc)test_checked_handler, &check);
+ gnc_budget_set_account_period_value(budget, acc, 12, gnc_numeric_create(100,1));
+ g_assert_cmpint (check.hits, ==, 1);
+ g_log_set_default_handler (oldlogger, NULL);
+
+ g_object_unref(book);
+ g_object_unref(acc);
+ gnc_budget_destroy(budget);
+}
+
void
test_suite_budget(void)
{
@@ -2553,6 +2589,7 @@
GNC_TEST_ADD_FUNC(suitename, "gnc_budget_set_description()", test_gnc_set_budget_description);
GNC_TEST_ADD_FUNC(suitename, "gnc_budget_set_num_periods()", test_gnc_set_budget_num_periods);
GNC_TEST_ADD_FUNC(suitename, "gnc_budget_set_recurrence()", test_gnc_set_budget_recurrence);
+ GNC_TEST_ADD_FUNC(suitename, "gnc_budget_set_account_period_value()", test_gnc_set_budget_account_period_value);
#if 0
GNC_TEST_ADD_FUNC (suitename, "gnc set account separator", test_gnc_set_account_separator);
More information about the gnucash-changes
mailing list