GnuCash  2.6.99
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
test-vendor.c
1 /*********************************************************************
2  * test-vendor.c
3  * Test the vendor object.
4  *
5  * Copyright (c) 2001 Derek Atkins <[email protected]>
6  * Copyright (c) 2005 Neil Williams <[email protected]>
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License as
10  * published by the Free Software Foundation; either version 2 of
11  * the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, contact:
20  *
21  * Free Software Foundation Voice: +1-617-542-5942
22  * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652
23  * Boston, MA 02110-1301, USA [email protected]
24  *
25  *********************************************************************/
26 
27 #include <config.h>
28 #include <glib.h>
29 #include <qofinstance-p.h>
30 
31 #include "gncInvoiceP.h"
32 #include "gncCustomerP.h"
33 #include "gncJobP.h"
34 #include "gncVendorP.h"
35 #include "test-stuff.h"
36 
37 static int count = 0;
38 
39 static void
40 test_string_fcn (QofBook *book, const char *message,
41  void (*set) (GncVendor *, const char *str),
42  const char * (*get)(const GncVendor *));
43 
44 #if 0
45 static void
46 test_numeric_fcn (QofBook *book, const char *message,
47  void (*set) (GncVendor *, gnc_numeric),
48  gnc_numeric (*get)(const GncVendor *));
49 #endif
50 
51 static void
52 test_bool_fcn (QofBook *book, const char *message,
53  void (*set) (GncVendor *, gboolean),
54  gboolean (*get) (const GncVendor *));
55 
56 #if 0
57 static void
58 test_gint_fcn (QofBook *book, const char *message,
59  void (*set) (GncVendor *, gint),
60  gint (*get) (const GncVendor *));
61 #endif
62 
63 static void
64 test_vendor (void)
65 {
66  QofBook *book;
67  GncVendor *vendor;
68 
69  book = qof_book_new();
70 
71  /* Test creation/destruction */
72  {
73  do_test (gncVendorCreate (NULL) == NULL, "vendor create NULL");
74  vendor = gncVendorCreate (book);
75  do_test (vendor != NULL, "vendor create");
76  do_test (qof_instance_get_book (QOF_INSTANCE(vendor)) == book,
77  "getbook");
78 
79  gncVendorBeginEdit (vendor);
80  gncVendorDestroy (vendor);
81  success ("create/destroy");
82  }
83 
84  /* Test setting/getting routines; does the active flag get set right? */
85  {
86  GncGUID guid;
87 
88  test_string_fcn (book, "Id", gncVendorSetID, gncVendorGetID);
89  test_string_fcn (book, "Name", gncVendorSetName, gncVendorGetName);
90  test_string_fcn (book, "Notes", gncVendorSetNotes, gncVendorGetNotes);
91 
92  //test_string_fcn (book, "Terms", gncVendorSetTerms, gncVendorGetTerms);
93 
94  //test_bool_fcn (book, "TaxIncluded", gncVendorSetTaxIncluded, gncVendorGetTaxIncluded);
95  test_bool_fcn (book, "Active", gncVendorSetActive, gncVendorGetActive);
96 
97  do_test (gncVendorGetAddr (vendor) != NULL, "Addr");
98 
99  guid_replace (&guid);
100  vendor = gncVendorCreate (book);
101  count++;
102  gncVendorSetGUID (vendor, &guid);
103  do_test (guid_equal (&guid, qof_instance_get_guid(QOF_INSTANCE(vendor))), "guid compare");
104  }
105  {
106  GList *list;
107 
108  list = gncBusinessGetList (book, GNC_ID_VENDOR, TRUE);
109  do_test (list != NULL, "getList all");
110  do_test (g_list_length (list) == count, "correct length: all");
111  g_list_free (list);
112 
113  list = gncBusinessGetList (book, GNC_ID_VENDOR, FALSE);
114  do_test (list != NULL, "getList active");
115  do_test (g_list_length (list) == 1, "correct length: active");
116  g_list_free (list);
117  }
118  {
119  const char *str = get_random_string();
120  const char *res;
121 
122  gncVendorSetName (vendor, str);
123  res = qof_object_printable (GNC_ID_VENDOR, vendor);
124  do_test (res != NULL, "Printable NULL?");
125  do_test (g_strcmp0 (str, res) == 0, "Printable equals");
126  }
127 
128  qof_book_destroy (book);
129 }
130 
131 static void
132 test_string_fcn (QofBook *book, const char *message,
133  void (*set) (GncVendor *, const char *str),
134  const char * (*get)(const GncVendor *))
135 {
136  GncVendor *vendor = gncVendorCreate (book);
137  char const *str = get_random_string ();
138 
139  do_test (!gncVendorIsDirty (vendor), "test if start dirty");
140  gncVendorBeginEdit (vendor);
141  set (vendor, str);
142  /* Vendor record should be dirty */
143  do_test (gncVendorIsDirty (vendor), "test dirty later");
144  gncVendorCommitEdit (vendor);
145  /* Vendor record should be not dirty */
146  /* Skip, because will always fail without a backend.
147  * It's not possible to load a backend in the engine code
148  * without having circular dependencies.
149  */
150  // do_test (!gncVendorIsDirty (vendor), "test dirty after commit");
151  do_test (g_strcmp0 (get (vendor), str) == 0, message);
152  gncVendorSetActive (vendor, FALSE);
153  count++;
154 }
155 
156 #if 0
157 static void
158 test_numeric_fcn (QofBook *book, const char *message,
159  void (*set) (GncVendor *, gnc_numeric),
160  gnc_numeric (*get)(const GncVendor *))
161 {
162  GncVendor *vendor = gncVendorCreate (book);
163  gnc_numeric num = gnc_numeric_create (17, 1);
164 
165  do_test (!gncVendorIsDirty (vendor), "test if start dirty");
166  gncVendoryBeginEdit (vendor);
167  set (vendor, num);
168  /* Vendor record should be dirty */
169  do_test (gncVendorIsDirty (vendor), "test dirty later");
170  gncVendorCommitEdit (vendor);
171  /* Vendor record should be not dirty */
172  /* Skip, because will always fail without a backend.
173  * It's not possible to load a backend in the engine code
174  * without having circular dependencies.
175  */
176  // do_test (!gncVendorIsDirty (vendor), "test dirty after commit");
177  do_test (gnc_numeric_equal (get (vendor), num), message);
178  gncVendorSetActive (vendor, FALSE);
179  count++;
180 }
181 #endif
182 
183 static void
184 test_bool_fcn (QofBook *book, const char *message,
185  void (*set) (GncVendor *, gboolean),
186  gboolean (*get) (const GncVendor *))
187 {
188  GncVendor *vendor = gncVendorCreate (book);
189  gboolean num = get_random_boolean ();
190 
191  do_test (!gncVendorIsDirty (vendor), "test if start dirty");
192  gncVendorBeginEdit (vendor);
193  set (vendor, FALSE);
194  set (vendor, TRUE);
195  set (vendor, num);
196  /* Vendor record should be dirty */
197  do_test (gncVendorIsDirty (vendor), "test dirty later");
198  gncVendorCommitEdit (vendor);
199  /* Vendor record should be not dirty */
200  /* Skip, because will always fail without a backend.
201  * It's not possible to load a backend in the engine code
202  * without having circular dependencies.
203  */
204  // do_test (!gncVendorIsDirty (vendor), "test dirty after commit");
205  do_test (get (vendor) == num, message);
206  gncVendorSetActive (vendor, FALSE);
207  count++;
208 }
209 
210 #if 0
211 static void
212 test_gint_fcn (QofBook *book, const char *message,
213  void (*set) (GncVendor *, gint),
214  gint (*get) (const GncVendor *))
215 {
216  GncVendor *vendor = gncVendorCreate (book);
217  gint num = 17;
218 
219  do_test (!gncVendorIsDirty (vendor), "test if start dirty");
220  gncVendorBeginEdit (vendor);
221  set (vendor, num);
222  /* Vendor record should be dirty */
223  do_test (gncVendorIsDirty (vendor), "test dirty later");
224  gncVendorCommitEdit (vendor);
225  /* Vendor record should be not dirty */
226  /* Skip, because will always fail without a backend.
227  * It's not possible to load a backend in the engine code
228  * without having circular dependencies.
229  */
230  // do_test (!gncVendorIsDirty (vendor), "test dirty after commit");
231  do_test (get (vendor) == num, message);
232  gncVendorSetActive (vendor, FALSE);
233  count++;
234 }
235 #endif
236 
237 int
238 main (int argc, char **argv)
239 {
240  qof_init();
241  do_test (gncInvoiceRegister(), "Cannot register GncInvoice");
242  do_test (gncJobRegister (), "Cannot register GncJob");
243  do_test (gncCustomerRegister(), "Cannot register GncCustomer");
244  do_test (gncVendorRegister(), "Cannot register GncVendor");
245  test_vendor();
246  print_test_results();
247  qof_close();
248  return get_rv();
249 }
void guid_replace(GncGUID *guid)
gboolean gnc_numeric_equal(gnc_numeric a, gnc_numeric b)
const GncGUID * qof_instance_get_guid(gconstpointer)
QofBook * qof_instance_get_book(gconstpointer)
QofBook * qof_book_new(void)
Definition: guid.h:65
gboolean guid_equal(const GncGUID *guid_1, const GncGUID *guid_2)
void qof_close(void)
Safely close down the Query Object Framework.
GList * gncBusinessGetList(QofBook *book, QofIdTypeConst type_name, gboolean all_including_inactive)
const char * qof_object_printable(QofIdTypeConst type_name, gpointer instance)
void qof_init(void)
Initialise the Query Object Framework.
void qof_book_destroy(QofBook *book)