diff --git a/src/engine/gncEntry.c b/src/engine/gncEntry.c index 2593bed106..f4c17863f5 100644 --- a/src/engine/gncEntry.c +++ b/src/engine/gncEntry.c @@ -535,7 +535,7 @@ void gncEntrySetQuantity (GncEntry *entry, gnc_numeric quantity) void gncEntrySetDocQuantity (GncEntry *entry, gnc_numeric quantity, gboolean is_cn) { if (!entry) return; - if (gnc_numeric_eq (entry->quantity, quantity)) return; + if (gnc_numeric_eq (entry->quantity, (is_cn ? gnc_numeric_neg (quantity) : quantity))) return; gncEntryBeginEdit (entry); entry->quantity = (is_cn ? gnc_numeric_neg (quantity) : quantity); entry->values_dirty = TRUE; diff --git a/src/engine/test/Makefile.am b/src/engine/test/Makefile.am index 12f7929a3f..38fc13a932 100644 --- a/src/engine/test/Makefile.am +++ b/src/engine/test/Makefile.am @@ -115,6 +115,7 @@ test_engine_SOURCES = \ test-engine.c \ utest-Account.c \ utest-Budget.c \ + utest-Entry.c \ utest-Invoice.c test_engine_LDADD = \ diff --git a/src/engine/test/test-engine.c b/src/engine/test/test-engine.c index 508856e8a0..9ef807754c 100644 --- a/src/engine/test/test-engine.c +++ b/src/engine/test/test-engine.c @@ -28,6 +28,7 @@ extern void test_suite_account(); extern void test_suite_budget(); +extern void test_suite_gncEntry(); extern void test_suite_gncInvoice(); extern void test_suite_transaction(); extern void test_suite_split(); @@ -46,6 +47,7 @@ main (int argc, test_suite_account(); test_suite_budget(); + test_suite_gncEntry(); test_suite_gncInvoice(); test_suite_transaction(); test_suite_split(); diff --git a/src/engine/test/utest-Entry.c b/src/engine/test/utest-Entry.c new file mode 100644 index 0000000000..07ec09294b --- /dev/null +++ b/src/engine/test/utest-Entry.c @@ -0,0 +1,116 @@ +/******************************************************************** + * utest-Entry.c: GLib g_test test suite for gncEntry. * + * Copyright 2014 Geert Janssens * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License as * + * published by the Free Software Foundation; either version 2 of * + * the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License* + * along with this program; if not, contact: * + * * + * Free Software Foundation Voice: +1-617-542-5942 * + * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 * + * Boston, MA 02110-1301, USA gnu@gnu.org * +\********************************************************************/ +#include "config.h" +#include +#include +#include +#include +#include "../gncEntry.h" + +static const gchar *suitename = "/engine/gncEntry"; +void test_suite_gncEntry ( void ); + +typedef struct +{ + QofBook *book; + Account *account; + GncOwner owner; + GncCustomer *customer; + gnc_commodity *commodity; +} Fixture; + +static void +setup( Fixture *fixture, gconstpointer pData ) +{ + fixture->book = qof_book_new(); + + fixture->account = xaccMallocAccount(fixture->book); + fixture->commodity = gnc_commodity_new(fixture->book, "foo", "bar", "xy", "xy", 100); + xaccAccountSetCommodity(fixture->account, fixture->commodity); + +} + +static void +teardown( Fixture *fixture, gconstpointer pData ) +{ + xaccAccountBeginEdit(fixture->account); + xaccAccountDestroy(fixture->account); + gnc_commodity_destroy(fixture->commodity); + + qof_book_destroy( fixture->book ); +} + + +static void +test_entry_basics ( Fixture *fixture, gconstpointer pData ) +{ + Timespec ts1 = timespec_now(), ts2; + const char *desc = "Test description with éà unicode chars"; + const char *action = "Test action with éà unicode chars"; + const char *note = "Test note with éà unicode chars"; + gnc_numeric quantity = {500000, 100}; + gboolean is_cn = FALSE; + + GncEntry *entry = gncEntryCreate(fixture->book); + g_assert(entry); + + g_test_message( "Test basic setters/getters" ); + g_test_message( " Date" ); + gncEntrySetDate (entry, ts1); + ts2 = gncEntryGetDate (entry); + g_assert(timespec_equal (&ts2, &ts1)); + g_test_message( " DateEntered" ); + gncEntrySetDateEntered (entry, ts1); + ts2 = gncEntryGetDateEntered (entry); + g_assert(timespec_equal (&ts2, &ts1)); + g_test_message( " Description" ); + gncEntrySetDescription (entry, desc); + g_assert(g_strcmp0 (gncEntryGetDescription (entry), desc) == 0); + g_test_message( " Action" ); + gncEntrySetAction (entry, action); + g_assert(g_strcmp0 (gncEntryGetAction (entry), action) == 0); + g_test_message( " Notes" ); + gncEntrySetNotes (entry, note); + g_assert(g_strcmp0 (gncEntryGetNotes (entry), note) == 0); + g_test_message( " Quantity" ); + gncEntrySetQuantity (entry, quantity); + g_assert(gnc_numeric_eq (gncEntryGetQuantity (entry), quantity)); + g_test_message( " DocQuantity (with is_cn = FALSE)" ); + gncEntrySetDocQuantity (entry, quantity, is_cn); + g_assert(gnc_numeric_eq (gncEntryGetDocQuantity (entry, is_cn), quantity)); + g_assert(gnc_numeric_eq (gncEntryGetQuantity (entry), quantity)); + g_test_message( " DocQuantity (with is_cn = TRUE)"); + is_cn = TRUE; + gncEntrySetDocQuantity (entry, quantity, is_cn); + g_assert(gnc_numeric_eq (gncEntryGetDocQuantity (entry, is_cn), quantity)); + g_assert(gnc_numeric_eq (gncEntryGetQuantity (entry), gnc_numeric_neg (quantity))); + g_test_message( " InvAccount" ); + gncEntrySetInvAccount (entry, fixture->account); + g_assert(gncEntryGetInvAccount (entry) == fixture->account); + +} + +void +test_suite_gncEntry ( void ) +{ + GNC_TEST_ADD( suitename, "basics", Fixture, NULL, setup, test_entry_basics, teardown ); +}