gnucash/libgnucash/backend/xml/test/test-load-xml2.cpp
lmat 34e0d6cfa0 kvp frame to template and correcting failure macro
The template avoids the need to cast to and from void*, and adds flexibility to
the targeted function's signature.

test-stuff.h defines a macro, "failure" which is used as an identifier
in the standard IO library, so I moved any inclusion of test-stuff.h to
the last include position so that "failure" wouldn't be defined before
the IO library was included.
2017-12-21 07:39:32 -05:00

175 lines
4.7 KiB
C++

/***************************************************************************
* test-load-xml2.c
*
* Fri Oct 7 20:51:46 2005
* Copyright 2005 Neil Williams
* linux@codehelp.co.uk
****************************************************************************/
/*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
/* @file test-load-xml2.c
* @brief test the loading of a version-2 gnucash XML file
*/
extern "C"
{
#include <config.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dirent.h>
#include <string.h>
#include <glib.h>
#include <glib-object.h>
#include <glib/gstdio.h>
#include <cashobjects.h>
#include <TransLog.h>
#include <gnc-engine.h>
#include <gnc-prefs.h>
#include <unittest-support.h>
#include <test-engine-stuff.h>
}
#include "../gnc-backend-xml.h"
#include "../io-gncxml-v2.h"
#include "test-file-stuff.h"
#include <test-stuff.h>
#define GNC_LIB_NAME "gncmod-backend-xml"
#define GNC_LIB_REL_PATH "xml"
static void
remove_files_pattern (const char* begining, const char* ending)
{
}
static void
remove_locks (const char* filename)
{
GStatBuf buf;
char* to_remove;
{
to_remove = g_strdup_printf ("%s.LCK", filename);
if (g_stat (to_remove, &buf) != -1)
{
g_unlink (to_remove);
}
g_free (to_remove);
}
remove_files_pattern (filename, ".LCK");
}
static void
test_load_file (const char* filename)
{
QofSession* session;
QofBook* book;
Account* root;
gboolean ignore_lock;
const char* logdomain = "backend.xml";
GLogLevelFlags loglevel = static_cast<decltype (loglevel)>
(G_LOG_LEVEL_WARNING);
TestErrorStruct check = { loglevel, const_cast<char*> (logdomain), NULL };
g_log_set_handler (logdomain, loglevel,
(GLogFunc)test_checked_handler, &check);
session = qof_session_new ();
remove_locks (filename);
ignore_lock = (g_strcmp0 (g_getenv ("SRCDIR"), ".") != 0);
/* gnc_prefs_set_file_save_compressed(FALSE); */
qof_session_begin (session, filename, ignore_lock, FALSE, TRUE);
qof_session_load (session, NULL);
book = qof_session_get_book (session);
root = gnc_book_get_root_account (book);
do_test (gnc_account_get_book (root) == book,
"book and root account don't match");
do_test_args (qof_session_get_error (session) == ERR_BACKEND_NO_ERR,
"session load xml2", __FILE__, __LINE__,
"qof error=%d for file [%s]",
qof_session_get_error (session), filename);
/* Uncomment the line below to generate corrected files */
/* qof_session_save( session, NULL ); */
qof_session_end (session);
}
int
main (int argc, char** argv)
{
g_setenv ("GNC_UNINSTALLED", "1", TRUE);
const char* location = g_getenv ("GNC_TEST_FILES");
int files_tested = 0;
GDir* xml2_dir;
qof_init ();
cashobjects_register ();
do_test (qof_load_backend_library (GNC_LIB_REL_PATH, GNC_LIB_NAME),
" loading gnc-backend-xml GModule failed");
if (!location)
{
location = "test-files/xml2";
}
xaccLogDisable ();
if ((xml2_dir = g_dir_open (location, 0, NULL)) == NULL)
{
failure ("unable to open xml2 directory");
}
else
{
const gchar* entry;
while ((entry = g_dir_read_name (xml2_dir)) != NULL)
{
if (g_str_has_suffix (entry, ".gml2"))
{
gchar* to_open = g_build_filename (location, entry, (gchar*)NULL);
if (!g_file_test (to_open, G_FILE_TEST_IS_DIR))
{
test_load_file (to_open);
files_tested++;
}
g_free (to_open);
}
}
}
g_dir_close (xml2_dir);
if (files_tested == 0)
{
failure ("handled 0 files in test-load-xml2");
}
print_test_results ();
qof_close ();
exit (get_rv ());
}