29 #include "gnc-module.h"
30 #include "import-parse.h"
32 #include "test-stuff.h"
42 const char* period_numbers[] = {
" $+2000.00",
"-2.00",
"1,182,183.1827", NULL };
43 const char* comma_numbers[] = {
" $2000,00",
"-2,00",
"1.182.183,1827", NULL };
44 const char* period_numbers_ambig[] = {
" -$1,000 ",
"100.277", NULL };
45 const char* comma_numbers_ambig[] = {
" -$1.000 ",
"100,277", NULL };
48 const char* dates_ymd[] = {
"1999/12/31",
"2001-6-17",
"20020726", NULL };
49 my_ymd_t dates_ymd_vals[] = { {1999, 12, 31}, {2001, 6, 17}, {2002, 7, 26}, {0, 0, 0} };
50 const char* dates_ydm[] = {
"1999/31/12",
"2001-17-6",
"20012311", NULL };
51 my_ymd_t dates_ydm_vals[] = { {1999, 12, 31}, {2001, 6, 17}, {2001, 11, 23}, {0, 0, 0} };
52 const char* dates_mdy[] = {
"1/16/2001",
"12-31-1999",
"01171983", NULL };
53 my_ymd_t dates_mdy_vals[] = { {2001, 1, 16}, {1999, 12, 31}, {1983, 1, 17}, {0, 0, 0} };
54 const char* dates_dmy[] = {
"16/1/2001",
"31-12-1999",
"17011976", NULL };
55 my_ymd_t dates_dmy_vals[] = { {2001, 1, 16}, {1999, 12, 31}, {1976, 1, 17}, {0, 0, 0} };
57 const char* dates_yxx[] = {
"99/1/6",
"1999-12'10",
"20010306", NULL };
58 const char* dates_xxy[] = {
"1/3/99",
"12-10'1999",
"03062001", NULL };
61 run_check(GncImportFormat (*check_fcn)(
const char*, GncImportFormat),
62 const char *numbers[], GncImportFormat formats,
63 const char* msg, GncImportFormat expected)
67 do_test(check_fcn(*numbers, formats) == expected, msg);
73 test_check_numeric(
void)
77 fmts = GNCIF_NUM_PERIOD | GNCIF_NUM_COMMA | GNCIF_DATE_MDY;
79 run_check(gnc_import_test_numeric, period_numbers, fmts,
80 "Period numbers", GNCIF_NUM_PERIOD);
81 run_check(gnc_import_test_numeric, comma_numbers, fmts,
82 "Comma numbers", GNCIF_NUM_COMMA);
84 run_check(gnc_import_test_numeric, period_numbers_ambig, fmts,
85 "Ambiguous Period numbers", GNCIF_NUM_PERIOD | GNCIF_NUM_COMMA);
86 run_check(gnc_import_test_numeric, comma_numbers_ambig, fmts,
87 "Ambiguous Comma numbers", GNCIF_NUM_PERIOD | GNCIF_NUM_COMMA);
95 fmts = GNCIF_DATE_DMY | GNCIF_DATE_MDY | GNCIF_DATE_YMD | GNCIF_DATE_YDM;
97 run_check(gnc_import_test_date, dates_ymd, fmts,
"y/m/d dates", GNCIF_DATE_YMD);
98 run_check(gnc_import_test_date, dates_ydm, fmts,
"y/d/m dates", GNCIF_DATE_YDM);
99 run_check(gnc_import_test_date, dates_mdy, fmts,
"m/d/y dates", GNCIF_DATE_MDY);
100 run_check(gnc_import_test_date, dates_dmy, fmts,
"d/m/y dates", GNCIF_DATE_DMY);
102 run_check(gnc_import_test_date, dates_yxx, fmts,
"y/x/x dates",
103 GNCIF_DATE_YMD | GNCIF_DATE_YDM);
104 run_check(gnc_import_test_date, dates_xxy, fmts,
"x/x/y dates",
105 GNCIF_DATE_DMY | GNCIF_DATE_MDY);
109 test_numbers(
const char* pstr,
const char* cstr)
113 do_test(gnc_import_parse_numeric(pstr, GNCIF_NUM_PERIOD, &pval),
"Parsing Period");
114 do_test(gnc_import_parse_numeric(cstr, GNCIF_NUM_COMMA, &cval),
"Parsing Comma");
120 test_number_strings(
const char** pstrs,
const char** cstrs)
122 while (*pstrs && *cstrs)
124 test_numbers(*pstrs, *cstrs);
131 test_parse_numeric(
void)
133 test_number_strings(period_numbers, comma_numbers);
134 test_number_strings(period_numbers_ambig, comma_numbers_ambig);
138 test_date(
const char* str, GncImportFormat fmt,
my_ymd_t date)
142 do_test(gnc_import_parse_date(str, fmt, &ts),
"Parsing date");
148 test_date_list(
const char** strs, GncImportFormat fmt,
my_ymd_t *dates)
150 while (*strs && (*dates).y)
152 test_date(*strs, fmt, *dates);
159 test_parse_date(
void)
161 test_date_list(dates_ymd, GNCIF_DATE_YMD, dates_ymd_vals);
162 test_date_list(dates_ydm, GNCIF_DATE_YDM, dates_ydm_vals);
163 test_date_list(dates_mdy, GNCIF_DATE_MDY, dates_mdy_vals);
164 test_date_list(dates_dmy, GNCIF_DATE_DMY, dates_dmy_vals);
168 test_import_parse(
void)
170 test_check_numeric();
172 test_parse_numeric();
177 main_helper(
void *closure,
int argc,
char **argv)
179 gnc_module_system_init ();
180 gnc_module_load(
"gnucash/import-export", 0);
182 print_test_results();
187 main(
int argc,
char **argv)
189 g_setenv (
"GNC_UNINSTALLED",
"1", TRUE);
190 scm_boot_guile(argc, argv, main_helper, NULL);
gboolean gnc_numeric_equal(gnc_numeric a, gnc_numeric b)
gboolean timespec_equal(const Timespec *ta, const Timespec *tb)
Use a 64-bit unsigned int timespec.
Timespec gnc_dmy2timespec(gint day, gint month, gint year)