gnucash stable: Multiple changes pushed
John Ralls
jralls at code.gnucash.org
Thu Aug 3 14:14:32 EDT 2023
Updated via https://github.com/Gnucash/gnucash/commit/4d46a819 (commit)
via https://github.com/Gnucash/gnucash/commit/35bee138 (commit)
via https://github.com/Gnucash/gnucash/commit/ab4e5956 (commit)
from https://github.com/Gnucash/gnucash/commit/f8593a3c (commit)
commit 4d46a8191dcb347cbcaa547c3a1a36f201ad8a73
Merge: f8593a3c3f 35bee1382d
Author: John Ralls <jralls at ceridwen.us>
Date: Thu Aug 3 11:05:11 2023 -0700
Merge Simon Arlott's 'test-xml-save' into stable.
commit 35bee1382da6d4fb108c564384259fbd91ad8538
Author: Simon Arlott <sa.me.uk>
Date: Tue Jun 27 19:08:13 2023 +0100
Test loading and saving XML files with and without compression
Add new test files that are written with the latest version of GnuCash.
Test loading them, saving to compressed files, loading those compressed
files and writing to an uncompressed file. At every stage check it matches
the canonical version.
diff --git a/libgnucash/backend/xml/test/CMakeLists.txt b/libgnucash/backend/xml/test/CMakeLists.txt
index 125fdf1dba..84bc00b2ef 100644
--- a/libgnucash/backend/xml/test/CMakeLists.txt
+++ b/libgnucash/backend/xml/test/CMakeLists.txt
@@ -14,12 +14,17 @@ set(XML_TEST_INCLUDE_DIRS
set(XML_TEST_LIBS gnc-engine gnc-test-engine test-core ${LIBXML2_LDFLAGS} -lz)
+set(XML_GTEST_LIBS ${XML_TEST_LIBS} gtest)
function(add_xml_test _TARGET _SOURCE_FILES)
gnc_add_test(${_TARGET} "${_SOURCE_FILES}" XML_TEST_INCLUDE_DIRS XML_TEST_LIBS ${ARGN})
target_compile_options(${_TARGET} PRIVATE -DU_SHOW_CPLUSPLUS_API=0 -DG_LOG_DOMAIN=\"gnc.backend.xml\")
endfunction()
+function(add_xml_gtest _TARGET _SOURCE_FILES)
+ gnc_add_test(${_TARGET} "${_SOURCE_FILES}" XML_TEST_INCLUDE_DIRS XML_GTEST_LIBS ${ARGN})
+ target_compile_options(${_TARGET} PRIVATE -DU_SHOW_CPLUSPLUS_API=0 -DG_LOG_DOMAIN=\"gnc.backend.xml\")
+endfunction()
################################
@@ -55,13 +60,28 @@ set(test_backend_xml_module_SOURCES
${CMAKE_SOURCE_DIR}/libgnucash/backend/xml/gnc-pricedb-xml-v2.cpp
)
-set_local_dist(test_backend_xml_DIST_local CMakeLists.txt grab-types.pl
- README test-dom-converters1.cpp
- test-dom-parser1.cpp test-file-stuff.cpp test-file-stuff.h test-kvp-frames.cpp
- test-load-backend.cpp test-load-example-account.cpp test-load-xml2.cpp
- test-save-in-lang.cpp test-string-converters.cpp test-xml2-is-file.cpp
- test-xml-account.cpp test-real-data.sh test-xml-commodity.cpp
- test-xml-pricedb.cpp test-xml-transaction.cpp)
+set_local_dist(test_backend_xml_DIST_local
+ CMakeLists.txt
+ grab-types.pl
+ README
+ test-dom-converters1.cpp
+ test-dom-parser1.cpp
+ test-file-stuff.cpp
+ test-file-stuff.h
+ test-kvp-frames.cpp
+ test-load-backend.cpp
+ test-load-example-account.cpp
+ test-load-save-files.cpp
+ test-load-xml2.cpp
+ test-real-data.sh
+ test-save-in-lang.cpp
+ test-string-converters.cpp
+ test-xml2-is-file.cpp
+ test-xml-account.cpp
+ test-xml-commodity.cpp
+ test-xml-pricedb.cpp
+ test-xml-transaction.cpp
+)
set(test_backend_xml_DIST ${test_backend_xml_DIST_local} ${test_backend_xml_test_files_DIST} PARENT_SCOPE)
add_xml_test(test-dom-converters1 "${test_backend_xml_base_SOURCES};test-dom-converters1.cpp")
@@ -80,6 +100,9 @@ add_xml_test(test-load-example-account
GNC_ACCOUNT_PATH=${CMAKE_SOURCE_DIR}/data/accounts/C
)
target_compile_options(test-load-example-account PRIVATE -DU_SHOW_CPLUSPLUS_API=0)
+add_xml_gtest(test-load-save-files gtest-load-save-files.cpp
+ GNC_TEST_FILES=${CMAKE_CURRENT_SOURCE_DIR}/test-files/load-save
+)
add_xml_test(test-string-converters "${test_backend_xml_base_SOURCES};test-string-converters.cpp")
add_xml_test(test-xml-account "${test_backend_xml_module_SOURCES};test-xml-account.cpp;test-file-stuff.cpp")
add_xml_test(test-xml-commodity "${test_backend_xml_module_SOURCES};test-xml-commodity.cpp;test-file-stuff.cpp")
diff --git a/libgnucash/backend/xml/test/README b/libgnucash/backend/xml/test/README
index 483b13183d..83fd282ba6 100644
--- a/libgnucash/backend/xml/test/README
+++ b/libgnucash/backend/xml/test/README
@@ -6,6 +6,7 @@ TESTS:
test-dom-converters1.c: test each simple dom converter
test-dom-parser1.c: unused now
test-kvp-frames.c: test the kvp frame dom generators and parsers
+test-load-save-files.c: test loading and saving compressed and uncompressed files
test-load-xml2.c: test the larger xml loading
test-save-in-lang.c: incomplete test to test saving in different LANGs
test-string-converters.c: test some string converters
@@ -15,4 +16,3 @@ test-xml-transaction.c: ditto Transaction's
test-xml2-is-file.c: test the is_file function
test-real-data.sh: run the test-xml-{account,commodity,transaction} programs
on real data rather than random data
-
diff --git a/libgnucash/backend/xml/test/gtest-load-save-files.cpp b/libgnucash/backend/xml/test/gtest-load-save-files.cpp
new file mode 100644
index 0000000000..d978d54f11
--- /dev/null
+++ b/libgnucash/backend/xml/test/gtest-load-save-files.cpp
@@ -0,0 +1,318 @@
+/********************************************************************\
+ * 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 at gnu.org *
+ * *
+\********************************************************************/
+#include <glib.h>
+#include <glib/gfileutils.h>
+#include <glib/gstdio.h>
+
+#include <config.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <errno.h>
+#include <string.h>
+#include <zlib.h>
+
+#include <cstdlib>
+#include <functional>
+#include <memory>
+#include <string>
+#include <vector>
+
+#include <cashobjects.h>
+#include <TransLog.h>
+#include <gnc-engine.h>
+#include <gnc-prefs.h>
+
+#include <gtest/gtest.h>
+#include <unittest-support.h>
+
+#include "../gnc-backend-xml.h"
+#include "../io-gncxml-v2.h"
+
+#define GNC_LIB_NAME "gncmod-backend-xml"
+#define GNC_LIB_REL_PATH "xml"
+
+static std::vector<unsigned char> read_file (std::string filename)
+{
+ gchar *contents;
+ gsize length = 0;
+
+ if (g_file_get_contents (filename.c_str (), &contents, &length, nullptr))
+ {
+ std::vector<unsigned char> data(length);
+
+ memcpy (data.data (), contents, length);
+ g_free (contents);
+ return data;
+ }
+ else
+ {
+ return {};
+ }
+}
+
+static bool
+compare_files (std::string filename1, std::string filename2)
+{
+ auto contents1 = read_file (filename1);
+ auto contents2 = read_file (filename2);
+
+ if (contents1.size () > 0 && contents1.size () == contents2.size ()
+ && !memcmp(contents1.data (), contents2.data (), contents1.size ())) {
+ return true;
+ } else {
+ ADD_FAILURE() << "compare_files: " << filename1 << " and " << filename2 << " are different";
+ return false;
+ }
+}
+
+static bool
+decompress_file (std::string filename, const std::vector<unsigned char> &in, std::vector<unsigned char> &out)
+{
+ /* 037 0213 are the header id bytes for a gzipped file. */
+ if (in.size () < 2 || in[0] != 037 || in[1] != 0213)
+ {
+ ADD_FAILURE() << "decompress_file: " << filename << " is not compressed";
+ return false;
+ }
+
+ z_stream stream{};
+ stream.next_in = const_cast<unsigned char*>(in.data ());
+ stream.avail_in = in.size ();
+ stream.zalloc = Z_NULL;
+ stream.zfree = Z_NULL;
+ stream.opaque = Z_NULL;
+ stream.next_out = out.data ();
+ stream.avail_out = out.size ();
+
+ /* "add 16 to decode only the gzip format" */
+ int ret = inflateInit2 (&stream, 16 + MAX_WBITS);
+ if (ret != Z_OK)
+ {
+ ADD_FAILURE() << "decompress_file: " << filename << " could not be uncompressed (inflateInit): " << ret;
+ return false;
+ }
+
+ ret = inflate (&stream, Z_NO_FLUSH);
+ if (ret != Z_STREAM_END)
+ {
+ ADD_FAILURE() << "decompress_file: " << filename << " could not be uncompressed (inflate "
+ << in.size () << " into " << out.size() << "): " << ret << " " << stream.msg
+ << " (avail_in " << stream.avail_in << " avail_out " << stream.avail_out << ")";
+ inflateEnd (&stream);
+ return false;
+ }
+
+ ret = inflateEnd (&stream);
+ if (ret != Z_OK)
+ {
+ ADD_FAILURE() << "decompress_file: " << filename << " could not be uncompressed (inflateEnd): " << ret;
+ return false;
+ }
+
+ if (stream.avail_in)
+ {
+ ADD_FAILURE() << "decompress_file: " << filename << " has unused compressed data: " << stream.avail_in;
+ return false;
+ }
+
+ out.resize (stream.avail_out);
+
+ return true;
+}
+
+static bool
+compare_compressed_files (std::string uncompressed_filename1, std::string compressed_filename2)
+{
+ auto uncompressed_contents1 = read_file (uncompressed_filename1);
+ auto compressed_contents2 = read_file (compressed_filename2);
+ /* Allow some space to grow beyond the expected size */
+ std::vector<unsigned char> uncompressed_contents2(uncompressed_contents1.size () * 2);
+
+ if (!decompress_file (compressed_filename2, compressed_contents2, uncompressed_contents2))
+ return false;
+
+ if (uncompressed_contents1.size () > 0
+ && uncompressed_contents1.size () != uncompressed_contents2.size ())
+ {
+ ADD_FAILURE() << "compare_compressed_files: " << uncompressed_filename1
+ << " and " << compressed_filename2 << " are different sizes or empty ("
+ << uncompressed_contents1.size () << " and "
+ << uncompressed_contents2.size () << ")";
+ return false;
+ }
+
+ if (!memcmp(uncompressed_contents1.data (), uncompressed_contents2.data (), uncompressed_contents1.size ())) {
+ return true;
+ } else {
+ ADD_FAILURE() << "compare_compressed_files: " << uncompressed_filename1
+ << " and " << compressed_filename2 << " are different";
+ return false;
+ }
+}
+
+/* The original file is used for comparisons. The file will be different when
+ * there are future changes in the GnuCash output and needs to be updated if
+ * that happens.
+ *
+ * Using the same file each time also checks that nothing in the file will swap
+ * between two stable states (bug 746937).
+ */
+class LoadSaveFiles : public testing::TestWithParam<std::string>
+{
+public:
+ static void SetUpTestSuite ()
+ {
+ g_setenv ("GNC_UNINSTALLED", "1", TRUE);
+ qof_init ();
+ cashobjects_register ();
+ ASSERT_TRUE(qof_load_backend_library (GNC_LIB_REL_PATH, GNC_LIB_NAME)) << "loading gnc-backend-xml GModule failed";
+ xaccLogDisable ();
+ }
+
+ static void TearDownTestSuite ()
+ {
+ qof_close ();
+ }
+};
+
+#define QOF_SESSION_CHECKED_CALL(_function, _session, ...) \
+ do { \
+ _function (_session.get (), ## __VA_ARGS__); \
+ ASSERT_EQ (qof_session_get_error (_session.get ()), 0) << #_function \
+ << " (" << #_session << ".get (), " << #__VA_ARGS__ << "): " << qof_session_get_error (_session.get ()) \
+ << " \"" << qof_session_get_error_message (_session.get ()) << "\""; \
+ } while (0)
+
+TEST_P(LoadSaveFiles, test_file)
+{
+ auto filename = GetParam();
+ /* Verify that we can write a compressed version of the original file that
+ * has the original content when uncompressed.
+ */
+ auto new_compressed_file = filename + "-test-compressed~";
+ /* Verify that we can read a compressed file and write an uncompressed file
+ * that has the original content.
+ */
+ auto new_uncompressed_file = filename + "-test-uncompressed~";
+ const char *logdomain = "backend.xml";
+ GLogLevelFlags loglevel = static_cast<decltype (loglevel)>
+ (G_LOG_LEVEL_WARNING);
+ TestErrorStruct check = { loglevel, const_cast<char*> (logdomain), nullptr };
+ g_log_set_handler (logdomain, loglevel,
+ (GLogFunc)test_checked_handler, &check);
+
+ {
+ auto load_uncompressed_session = std::shared_ptr<QofSession>{qof_session_new (qof_book_new ()), qof_session_destroy};
+
+ QOF_SESSION_CHECKED_CALL(qof_session_begin, load_uncompressed_session, filename.c_str (), SESSION_READ_ONLY);
+ QOF_SESSION_CHECKED_CALL(qof_session_load, load_uncompressed_session, nullptr);
+
+ auto save_compressed_session = std::shared_ptr<QofSession>{qof_session_new (nullptr), qof_session_destroy};
+
+ g_unlink (new_compressed_file.c_str ());
+ g_unlink ((new_compressed_file + ".LCK").c_str ());
+ QOF_SESSION_CHECKED_CALL(qof_session_begin, save_compressed_session, new_compressed_file.c_str (), SESSION_NEW_OVERWRITE);
+
+ qof_event_suspend ();
+ qof_session_swap_data (load_uncompressed_session.get (), save_compressed_session.get ());
+ qof_book_mark_session_dirty (qof_session_get_book (save_compressed_session.get ()));
+ qof_event_resume ();
+
+ qof_session_end (load_uncompressed_session.get ());
+
+ gnc_prefs_set_file_save_compressed (TRUE);
+ QOF_SESSION_CHECKED_CALL(qof_session_save, save_compressed_session, nullptr);
+
+ qof_session_end (save_compressed_session.get ());
+ }
+
+ if (!compare_compressed_files (filename, new_compressed_file))
+ return;
+
+ {
+ auto load_compressed_session = std::shared_ptr<QofSession>{qof_session_new (qof_book_new ()), qof_session_destroy};
+
+ QOF_SESSION_CHECKED_CALL(qof_session_begin, load_compressed_session, new_compressed_file.c_str (), SESSION_READ_ONLY);
+ QOF_SESSION_CHECKED_CALL(qof_session_load, load_compressed_session, nullptr);
+
+ auto save_uncompressed_session = std::shared_ptr<QofSession>{qof_session_new (nullptr), qof_session_destroy};
+
+ g_unlink (new_uncompressed_file.c_str ());
+ g_unlink ((new_uncompressed_file + ".LCK").c_str ());
+ QOF_SESSION_CHECKED_CALL(qof_session_begin, save_uncompressed_session, new_uncompressed_file.c_str (), SESSION_NEW_OVERWRITE);
+
+ qof_event_suspend ();
+ qof_session_swap_data (load_compressed_session.get (), save_uncompressed_session.get ());
+ qof_book_mark_session_dirty (qof_session_get_book (save_uncompressed_session.get ()));
+ qof_event_resume ();
+
+ qof_session_end (load_compressed_session.get ());
+
+ gnc_prefs_set_file_save_compressed (FALSE);
+ QOF_SESSION_CHECKED_CALL(qof_session_save, save_uncompressed_session, nullptr);
+
+ qof_session_end (save_uncompressed_session.get ());
+ }
+
+ if (!compare_files (filename, new_uncompressed_file))
+ return;
+}
+
+std::vector<std::string> ListTestCases ();
+
+INSTANTIATE_TEST_SUITE_P(
+ LoadSaveFilesDir,
+ LoadSaveFiles,
+ testing::ValuesIn (ListTestCases ()));
+
+std::vector<std::string> ListTestCases ()
+{
+ std::vector<std::string> files;
+ const char *location = g_getenv ("GNC_TEST_FILES");
+
+ if (!location)
+ location = "test-files/load-save";
+
+ std::shared_ptr<GDir> dir{g_dir_open (location, 0, nullptr), g_dir_close};
+ if (dir)
+ {
+ const gchar *entry;
+
+ while ((entry = g_dir_read_name (dir.get ())) != nullptr)
+ {
+ if (g_str_has_suffix (entry, ".gnucash"))
+ {
+ std::shared_ptr<gchar> to_open{g_build_filename (location, entry, (gchar*)nullptr), g_free};
+
+ if (!g_file_test (to_open.get (), G_FILE_TEST_IS_DIR))
+ files.push_back (to_open.get());
+ }
+ }
+ }
+ else
+ {
+ ADD_FAILURE() << "unable to open directory " << location;
+ }
+
+ EXPECT_FALSE(files.empty()) << "no files found in " << location;
+ return files;
+}
diff --git a/libgnucash/backend/xml/test/test-files/CMakeLists.txt b/libgnucash/backend/xml/test/test-files/CMakeLists.txt
index 6f517814ea..126fc36391 100644
--- a/libgnucash/backend/xml/test/test-files/CMakeLists.txt
+++ b/libgnucash/backend/xml/test/test-files/CMakeLists.txt
@@ -1,6 +1,6 @@
+add_subdirectory(load-save)
add_subdirectory(xml2)
set_local_dist(test_backend_xml_test_files_DIST_local CMakeLists.txt )
-set(test_backend_xml_test_files_DIST ${test_backend_xml_test_files_DIST_local} ${xml2_DIST} PARENT_SCOPE)
-
+set(test_backend_xml_test_files_DIST ${test_backend_xml_test_files_DIST_local} ${load_save_DIST} ${xml2_DIST} PARENT_SCOPE)
diff --git a/libgnucash/backend/xml/test/test-files/load-save/CMakeLists.txt b/libgnucash/backend/xml/test/test-files/load-save/CMakeLists.txt
new file mode 100644
index 0000000000..aebb105997
--- /dev/null
+++ b/libgnucash/backend/xml/test/test-files/load-save/CMakeLists.txt
@@ -0,0 +1,4 @@
+set_dist_list(load_save_DIST
+ bug-746937-sx-split-order.gnucash
+ sample1.gnucash
+)
diff --git a/libgnucash/backend/xml/test/test-files/load-save/README b/libgnucash/backend/xml/test/test-files/load-save/README
new file mode 100644
index 0000000000..cbf193f3dc
--- /dev/null
+++ b/libgnucash/backend/xml/test/test-files/load-save/README
@@ -0,0 +1,6 @@
+These files are used for testing loading and saving
+
+If the "load-save-files" test fails because the written XML file is now
+different, zcat *.gnucash-compressed~ to *.gnucash, check that the changes
+are appropriate, expected and have the right backward/forward compatibility
+then commit the new versions of the files.
diff --git a/libgnucash/backend/xml/test/test-files/load-save/bug-746937-sx-split-order.gnucash b/libgnucash/backend/xml/test/test-files/load-save/bug-746937-sx-split-order.gnucash
new file mode 100644
index 0000000000..f48f318462
--- /dev/null
+++ b/libgnucash/backend/xml/test/test-files/load-save/bug-746937-sx-split-order.gnucash
@@ -0,0 +1,406 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<gnc-v2
+ xmlns:gnc="http://www.gnucash.org/XML/gnc"
+ xmlns:act="http://www.gnucash.org/XML/act"
+ xmlns:book="http://www.gnucash.org/XML/book"
+ xmlns:cd="http://www.gnucash.org/XML/cd"
+ xmlns:cmdty="http://www.gnucash.org/XML/cmdty"
+ xmlns:price="http://www.gnucash.org/XML/price"
+ xmlns:slot="http://www.gnucash.org/XML/slot"
+ xmlns:split="http://www.gnucash.org/XML/split"
+ xmlns:sx="http://www.gnucash.org/XML/sx"
+ xmlns:trn="http://www.gnucash.org/XML/trn"
+ xmlns:ts="http://www.gnucash.org/XML/ts"
+ xmlns:fs="http://www.gnucash.org/XML/fs"
+ xmlns:bgt="http://www.gnucash.org/XML/bgt"
+ xmlns:recurrence="http://www.gnucash.org/XML/recurrence"
+ xmlns:lot="http://www.gnucash.org/XML/lot"
+ xmlns:addr="http://www.gnucash.org/XML/addr"
+ xmlns:billterm="http://www.gnucash.org/XML/billterm"
+ xmlns:bt-days="http://www.gnucash.org/XML/bt-days"
+ xmlns:bt-prox="http://www.gnucash.org/XML/bt-prox"
+ xmlns:cust="http://www.gnucash.org/XML/cust"
+ xmlns:employee="http://www.gnucash.org/XML/employee"
+ xmlns:entry="http://www.gnucash.org/XML/entry"
+ xmlns:invoice="http://www.gnucash.org/XML/invoice"
+ xmlns:job="http://www.gnucash.org/XML/job"
+ xmlns:order="http://www.gnucash.org/XML/order"
+ xmlns:owner="http://www.gnucash.org/XML/owner"
+ xmlns:taxtable="http://www.gnucash.org/XML/taxtable"
+ xmlns:tte="http://www.gnucash.org/XML/tte"
+ xmlns:vendor="http://www.gnucash.org/XML/vendor">
+<gnc:count-data cd:type="book">1</gnc:count-data>
+<gnc:book version="2.0.0">
+<book:id type="guid">78552b4ebbba9bf429f6a1f4b861b538</book:id>
+<gnc:count-data cd:type="commodity">1</gnc:count-data>
+<gnc:count-data cd:type="account">9</gnc:count-data>
+<gnc:count-data cd:type="schedxaction">1</gnc:count-data>
+<gnc:commodity version="2.0.0">
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>GBP</cmdty:id>
+ <cmdty:get_quotes/>
+ <cmdty:quote_source>currency</cmdty:quote_source>
+ <cmdty:quote_tz/>
+</gnc:commodity>
+<gnc:commodity version="2.0.0">
+ <cmdty:space>template</cmdty:space>
+ <cmdty:id>template</cmdty:id>
+ <cmdty:name>template</cmdty:name>
+ <cmdty:xcode>template</cmdty:xcode>
+ <cmdty:fraction>1</cmdty:fraction>
+</gnc:commodity>
+<gnc:account version="2.0.0">
+ <act:name>Root Account</act:name>
+ <act:id type="guid">22067e5b3cf257e20070e0d2307ac0b0</act:id>
+ <act:type>ROOT</act:type>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Assets</act:name>
+ <act:id type="guid">1244bef69b14889a06271df59645c35d</act:id>
+ <act:type>ASSET</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>GBP</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Assets</act:description>
+ <act:slots>
+ <slot>
+ <slot:key>placeholder</slot:key>
+ <slot:value type="string">true</slot:value>
+ </slot>
+ </act:slots>
+ <act:parent type="guid">22067e5b3cf257e20070e0d2307ac0b0</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Current Assets</act:name>
+ <act:id type="guid">be6deddf8a970ff14cb8be91a958a3eb</act:id>
+ <act:type>ASSET</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>GBP</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Current Assets</act:description>
+ <act:slots>
+ <slot>
+ <slot:key>placeholder</slot:key>
+ <slot:value type="string">true</slot:value>
+ </slot>
+ </act:slots>
+ <act:parent type="guid">1244bef69b14889a06271df59645c35d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Bank</act:name>
+ <act:id type="guid">9b0050507226d570c754f688caf3e577</act:id>
+ <act:type>BANK</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>GBP</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:slots>
+ <slot>
+ <slot:key>placeholder</slot:key>
+ <slot:value type="string">true</slot:value>
+ </slot>
+ </act:slots>
+ <act:parent type="guid">be6deddf8a970ff14cb8be91a958a3eb</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Current Account</act:name>
+ <act:id type="guid">f0d5a52f1fd957b8a414aedf3f55c626</act:id>
+ <act:type>BANK</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>GBP</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:parent type="guid">9b0050507226d570c754f688caf3e577</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Liabilities</act:name>
+ <act:id type="guid">1f5a3d5c6157c5e78d9961bbd3afc85f</act:id>
+ <act:type>LIABILITY</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>GBP</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Liabilities</act:description>
+ <act:slots>
+ <slot>
+ <slot:key>placeholder</slot:key>
+ <slot:value type="string">true</slot:value>
+ </slot>
+ </act:slots>
+ <act:parent type="guid">22067e5b3cf257e20070e0d2307ac0b0</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Company</act:name>
+ <act:id type="guid">59b2fcdab565c906362f5a24f4a909f7</act:id>
+ <act:type>LIABILITY</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>GBP</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:parent type="guid">1f5a3d5c6157c5e78d9961bbd3afc85f</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Account 1</act:name>
+ <act:id type="guid">b5c34f61b594d4e6c8ce18591a9813ad</act:id>
+ <act:type>LIABILITY</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>GBP</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:parent type="guid">59b2fcdab565c906362f5a24f4a909f7</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Account 2</act:name>
+ <act:id type="guid">bce28fe18ad558edb87c8282369ed373</act:id>
+ <act:type>LIABILITY</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>GBP</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:slots>
+ <slot>
+ <slot:key>color</slot:key>
+ <slot:value type="string">Not Set</slot:value>
+ </slot>
+ </act:slots>
+ <act:parent type="guid">59b2fcdab565c906362f5a24f4a909f7</act:parent>
+</gnc:account>
+<gnc:template-transactions>
+<gnc:account version="2.0.0">
+ <act:name>Template Root</act:name>
+ <act:id type="guid">4586cdb4267a59437526549e14b0e74b</act:id>
+ <act:type>ROOT</act:type>
+ <act:commodity>
+ <cmdty:space>template</cmdty:space>
+ <cmdty:id>template</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>1</act:commodity-scu>
+ <act:non-standard-scu/>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>52f96837087e9670c933f9421b0ac626</act:name>
+ <act:id type="guid">22f2905cbcfa0b910c0dbc348cfc1161</act:id>
+ <act:type>BANK</act:type>
+ <act:commodity>
+ <cmdty:space>template</cmdty:space>
+ <cmdty:id>template</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>1</act:commodity-scu>
+ <act:non-standard-scu/>
+ <act:parent type="guid">4586cdb4267a59437526549e14b0e74b</act:parent>
+</gnc:account>
+<gnc:transaction version="2.0.0">
+ <trn:id type="guid">68bf5e7740392eb15a079ee99f18a357</trn:id>
+ <trn:currency>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>GBP</cmdty:id>
+ </trn:currency>
+ <trn:date-posted>
+ <ts:date>2010-08-01 08:40:17 +0000</ts:date>
+ </trn:date-posted>
+ <trn:date-entered>
+ <ts:date>2010-08-01 08:40:17 +0000</ts:date>
+ </trn:date-entered>
+ <trn:description>Description 2</trn:description>
+ <trn:splits>
+ <trn:split>
+ <split:id type="guid">676a518eb1cf05ca552434533288a5cd</split:id>
+ <split:reconciled-state>n</split:reconciled-state>
+ <split:value>0/100</split:value>
+ <split:quantity>0/1</split:quantity>
+ <split:account type="guid">22f2905cbcfa0b910c0dbc348cfc1161</split:account>
+ <split:slots>
+ <slot>
+ <slot:key>sched-xaction</slot:key>
+ <slot:value type="frame">
+ <slot>
+ <slot:key>account</slot:key>
+ <slot:value type="guid">bce28fe18ad558edb87c8282369ed373</slot:value>
+ </slot>
+ <slot>
+ <slot:key>credit-formula</slot:key>
+ <slot:value type="string"></slot:value>
+ </slot>
+ <slot>
+ <slot:key>credit-numeric</slot:key>
+ <slot:value type="numeric">0/1</slot:value>
+ </slot>
+ <slot>
+ <slot:key>debit-formula</slot:key>
+ <slot:value type="string">456</slot:value>
+ </slot>
+ <slot>
+ <slot:key>debit-numeric</slot:key>
+ <slot:value type="numeric">456/1</slot:value>
+ </slot>
+ </slot:value>
+ </slot>
+ </split:slots>
+ </trn:split>
+ <trn:split>
+ <split:id type="guid">1b779b05012759adbac315f1f50af621</split:id>
+ <split:reconciled-state>n</split:reconciled-state>
+ <split:value>0/100</split:value>
+ <split:quantity>0/1</split:quantity>
+ <split:account type="guid">22f2905cbcfa0b910c0dbc348cfc1161</split:account>
+ <split:slots>
+ <slot>
+ <slot:key>sched-xaction</slot:key>
+ <slot:value type="frame">
+ <slot>
+ <slot:key>account</slot:key>
+ <slot:value type="guid">f0d5a52f1fd957b8a414aedf3f55c626</slot:value>
+ </slot>
+ <slot>
+ <slot:key>credit-formula</slot:key>
+ <slot:value type="string">456</slot:value>
+ </slot>
+ <slot>
+ <slot:key>credit-numeric</slot:key>
+ <slot:value type="numeric">456/1</slot:value>
+ </slot>
+ <slot>
+ <slot:key>debit-formula</slot:key>
+ <slot:value type="string"></slot:value>
+ </slot>
+ <slot>
+ <slot:key>debit-numeric</slot:key>
+ <slot:value type="numeric">0/1</slot:value>
+ </slot>
+ </slot:value>
+ </slot>
+ </split:slots>
+ </trn:split>
+ </trn:splits>
+</gnc:transaction>
+<gnc:transaction version="2.0.0">
+ <trn:id type="guid">2fbcf6cc8224673bc93501399d4ca7be</trn:id>
+ <trn:currency>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>GBP</cmdty:id>
+ </trn:currency>
+ <trn:date-posted>
+ <ts:date>2010-09-11 23:00:00 +0000</ts:date>
+ </trn:date-posted>
+ <trn:date-entered>
+ <ts:date>2010-09-12 08:51:53 +0000</ts:date>
+ </trn:date-entered>
+ <trn:description>Description 1</trn:description>
+ <trn:slots>
+ <slot>
+ <slot:key>notes</slot:key>
+ <slot:value type="string"></slot:value>
+ </slot>
+ </trn:slots>
+ <trn:splits>
+ <trn:split>
+ <split:id type="guid">378dd92bd1819a52e491b6d8c123f662</split:id>
+ <split:reconciled-state>n</split:reconciled-state>
+ <split:value>0/100</split:value>
+ <split:quantity>0/1</split:quantity>
+ <split:account type="guid">22f2905cbcfa0b910c0dbc348cfc1161</split:account>
+ <split:slots>
+ <slot>
+ <slot:key>sched-xaction</slot:key>
+ <slot:value type="frame">
+ <slot>
+ <slot:key>account</slot:key>
+ <slot:value type="guid">b5c34f61b594d4e6c8ce18591a9813ad</slot:value>
+ </slot>
+ <slot>
+ <slot:key>credit-formula</slot:key>
+ <slot:value type="string"></slot:value>
+ </slot>
+ <slot>
+ <slot:key>credit-numeric</slot:key>
+ <slot:value type="numeric">0/1</slot:value>
+ </slot>
+ <slot>
+ <slot:key>debit-formula</slot:key>
+ <slot:value type="string">123</slot:value>
+ </slot>
+ <slot>
+ <slot:key>debit-numeric</slot:key>
+ <slot:value type="numeric">123/1</slot:value>
+ </slot>
+ </slot:value>
+ </slot>
+ </split:slots>
+ </trn:split>
+ <trn:split>
+ <split:id type="guid">75e005248499f7dfb46a80c9778e2e13</split:id>
+ <split:reconciled-state>n</split:reconciled-state>
+ <split:value>0/100</split:value>
+ <split:quantity>0/1</split:quantity>
+ <split:account type="guid">22f2905cbcfa0b910c0dbc348cfc1161</split:account>
+ <split:slots>
+ <slot>
+ <slot:key>sched-xaction</slot:key>
+ <slot:value type="frame">
+ <slot>
+ <slot:key>account</slot:key>
+ <slot:value type="guid">f0d5a52f1fd957b8a414aedf3f55c626</slot:value>
+ </slot>
+ <slot>
+ <slot:key>credit-formula</slot:key>
+ <slot:value type="string">123</slot:value>
+ </slot>
+ <slot>
+ <slot:key>credit-numeric</slot:key>
+ <slot:value type="numeric">123/1</slot:value>
+ </slot>
+ <slot>
+ <slot:key>debit-formula</slot:key>
+ <slot:value type="string"></slot:value>
+ </slot>
+ <slot>
+ <slot:key>debit-numeric</slot:key>
+ <slot:value type="numeric">0/1</slot:value>
+ </slot>
+ </slot:value>
+ </slot>
+ </split:slots>
+ </trn:split>
+ </trn:splits>
+</gnc:transaction>
+</gnc:template-transactions>
+<gnc:schedxaction version="2.0.0">
+ <sx:id type="guid">52f96837087e9670c933f9421b0ac626</sx:id>
+ <sx:name>Scheduled Transaction</sx:name>
+ <sx:enabled>n</sx:enabled>
+ <sx:autoCreate>y</sx:autoCreate>
+ <sx:autoCreateNotify>n</sx:autoCreateNotify>
+ <sx:advanceCreateDays>90</sx:advanceCreateDays>
+ <sx:advanceRemindDays>0</sx:advanceRemindDays>
+ <sx:instanceCount>5</sx:instanceCount>
+ <sx:start>
+ <gdate>2010-10-05</gdate>
+ </sx:start>
+ <sx:last>
+ <gdate>2011-11-07</gdate>
+ </sx:last>
+ <sx:templ-acct type="guid">22f2905cbcfa0b910c0dbc348cfc1161</sx:templ-acct>
+ <sx:schedule>
+ <gnc:recurrence version="1.0.0">
+ <recurrence:mult>1</recurrence:mult>
+ <recurrence:period_type>month</recurrence:period_type>
+ <recurrence:start>
+ <gdate>2010-10-05</gdate>
+ </recurrence:start>
+ <recurrence:weekend_adj>forward</recurrence:weekend_adj>
+ </gnc:recurrence>
+ </sx:schedule>
+</gnc:schedxaction>
+</gnc:book>
+</gnc-v2>
+
diff --git a/libgnucash/backend/xml/test/test-files/load-save/sample1.gnucash b/libgnucash/backend/xml/test/test-files/load-save/sample1.gnucash
new file mode 100644
index 0000000000..99228ce533
--- /dev/null
+++ b/libgnucash/backend/xml/test/test-files/load-save/sample1.gnucash
@@ -0,0 +1,1563 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<gnc-v2
+ xmlns:gnc="http://www.gnucash.org/XML/gnc"
+ xmlns:act="http://www.gnucash.org/XML/act"
+ xmlns:book="http://www.gnucash.org/XML/book"
+ xmlns:cd="http://www.gnucash.org/XML/cd"
+ xmlns:cmdty="http://www.gnucash.org/XML/cmdty"
+ xmlns:price="http://www.gnucash.org/XML/price"
+ xmlns:slot="http://www.gnucash.org/XML/slot"
+ xmlns:split="http://www.gnucash.org/XML/split"
+ xmlns:sx="http://www.gnucash.org/XML/sx"
+ xmlns:trn="http://www.gnucash.org/XML/trn"
+ xmlns:ts="http://www.gnucash.org/XML/ts"
+ xmlns:fs="http://www.gnucash.org/XML/fs"
+ xmlns:bgt="http://www.gnucash.org/XML/bgt"
+ xmlns:recurrence="http://www.gnucash.org/XML/recurrence"
+ xmlns:lot="http://www.gnucash.org/XML/lot"
+ xmlns:addr="http://www.gnucash.org/XML/addr"
+ xmlns:billterm="http://www.gnucash.org/XML/billterm"
+ xmlns:bt-days="http://www.gnucash.org/XML/bt-days"
+ xmlns:bt-prox="http://www.gnucash.org/XML/bt-prox"
+ xmlns:cust="http://www.gnucash.org/XML/cust"
+ xmlns:employee="http://www.gnucash.org/XML/employee"
+ xmlns:entry="http://www.gnucash.org/XML/entry"
+ xmlns:invoice="http://www.gnucash.org/XML/invoice"
+ xmlns:job="http://www.gnucash.org/XML/job"
+ xmlns:order="http://www.gnucash.org/XML/order"
+ xmlns:owner="http://www.gnucash.org/XML/owner"
+ xmlns:taxtable="http://www.gnucash.org/XML/taxtable"
+ xmlns:tte="http://www.gnucash.org/XML/tte"
+ xmlns:vendor="http://www.gnucash.org/XML/vendor">
+<gnc:count-data cd:type="book">1</gnc:count-data>
+<gnc:book version="2.0.0">
+<book:id type="guid">ec608cfecd73462ebeba062ec5f9c4b4</book:id>
+<book:slots>
+ <slot>
+ <slot:key>counters</slot:key>
+ <slot:value type="frame">
+ <slot>
+ <slot:key>gncVendor</slot:key>
+ <slot:value type="integer">1</slot:value>
+ </slot>
+ </slot:value>
+ </slot>
+ <slot>
+ <slot:key>options</slot:key>
+ <slot:value type="frame">
+ <slot>
+ <slot:key>Budgeting</slot:key>
+ <slot:value type="frame"/>
+ </slot>
+ </slot:value>
+ </slot>
+</book:slots>
+<gnc:count-data cd:type="commodity">1</gnc:count-data>
+<gnc:count-data cd:type="account">105</gnc:count-data>
+<gnc:count-data cd:type="transaction">2</gnc:count-data>
+<gnc:count-data cd:type="gnc:GncEntry">1</gnc:count-data>
+<gnc:count-data cd:type="gnc:GncInvoice">1</gnc:count-data>
+<gnc:count-data cd:type="gnc:GncVendor">1</gnc:count-data>
+<gnc:commodity version="2.0.0">
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ <cmdty:get_quotes/>
+ <cmdty:quote_source>currency</cmdty:quote_source>
+ <cmdty:quote_tz/>
+</gnc:commodity>
+<gnc:commodity version="2.0.0">
+ <cmdty:space>template</cmdty:space>
+ <cmdty:id>template</cmdty:id>
+ <cmdty:name>template</cmdty:name>
+ <cmdty:xcode>template</cmdty:xcode>
+ <cmdty:fraction>1</cmdty:fraction>
+</gnc:commodity>
+<gnc:account version="2.0.0">
+ <act:name>Root Account</act:name>
+ <act:id type="guid">3e8c57e826724328a2438b654dadb594</act:id>
+ <act:type>ROOT</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Assets</act:name>
+ <act:id type="guid">63448b8608404281b9b89de25a2447a7</act:id>
+ <act:type>ASSET</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Assets</act:description>
+ <act:slots>
+ <slot>
+ <slot:key>placeholder</slot:key>
+ <slot:value type="string">true</slot:value>
+ </slot>
+ </act:slots>
+ <act:parent type="guid">3e8c57e826724328a2438b654dadb594</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Current Assets</act:name>
+ <act:id type="guid">e45d737f375745b7bf2ad678d8d29226</act:id>
+ <act:type>ASSET</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Current Assets</act:description>
+ <act:slots>
+ <slot>
+ <slot:key>placeholder</slot:key>
+ <slot:value type="string">true</slot:value>
+ </slot>
+ </act:slots>
+ <act:parent type="guid">63448b8608404281b9b89de25a2447a7</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Checking Account</act:name>
+ <act:id type="guid">547d8ff75f4347e3b3607c40b40a3fef</act:id>
+ <act:type>BANK</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Checking Account</act:description>
+ <act:parent type="guid">e45d737f375745b7bf2ad678d8d29226</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Savings Account</act:name>
+ <act:id type="guid">dd3f5b6a496148ba945ea6d6e1bcf3c4</act:id>
+ <act:type>BANK</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Savings Account</act:description>
+ <act:parent type="guid">e45d737f375745b7bf2ad678d8d29226</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Cash in Wallet</act:name>
+ <act:id type="guid">2e10b191529f4e41a9b269cea72932c2</act:id>
+ <act:type>CASH</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Cash in Wallet</act:description>
+ <act:parent type="guid">e45d737f375745b7bf2ad678d8d29226</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Petty Cash</act:name>
+ <act:id type="guid">4260ecb71d9443fdb983046e1f1b3221</act:id>
+ <act:type>CASH</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Petty Cash</act:description>
+ <act:parent type="guid">e45d737f375745b7bf2ad678d8d29226</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Accounts Receivable</act:name>
+ <act:id type="guid">f74cd14ec90842ab9bb8c196b6942089</act:id>
+ <act:type>RECEIVABLE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Accounts Receivable</act:description>
+ <act:parent type="guid">63448b8608404281b9b89de25a2447a7</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Liabilities</act:name>
+ <act:id type="guid">fc61ce59f30740398f79251db8145e79</act:id>
+ <act:type>LIABILITY</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Liabilities</act:description>
+ <act:slots>
+ <slot>
+ <slot:key>placeholder</slot:key>
+ <slot:value type="string">true</slot:value>
+ </slot>
+ </act:slots>
+ <act:parent type="guid">3e8c57e826724328a2438b654dadb594</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Credit Card</act:name>
+ <act:id type="guid">142e19ca2f6346229817f40fa119bfa8</act:id>
+ <act:type>CREDIT</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Credit Card</act:description>
+ <act:parent type="guid">fc61ce59f30740398f79251db8145e79</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Accounts Payable</act:name>
+ <act:id type="guid">81438d8393264c71bb965baa171c5ffe</act:id>
+ <act:type>PAYABLE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Accounts Payable</act:description>
+ <act:parent type="guid">fc61ce59f30740398f79251db8145e79</act:parent>
+ <act:lots>
+ <gnc:lot version="2.0.0">
+ <lot:id type="guid">c35d998d200a4fed97c0a4b61c285d49</lot:id>
+ <lot:slots>
+ <slot>
+ <slot:key>gncInvoice</slot:key>
+ <slot:value type="frame">
+ <slot>
+ <slot:key>invoice-guid</slot:key>
+ <slot:value type="guid">8786e1cf6e534cde9c227373b505ef62</slot:value>
+ </slot>
+ </slot:value>
+ </slot>
+ <slot>
+ <slot:key>title</slot:key>
+ <slot:value type="string">Bill yoyo1</slot:value>
+ </slot>
+ </lot:slots>
+ </gnc:lot>
+ </act:lots>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Income</act:name>
+ <act:id type="guid">4a16f6e753fb4562845df25d2dd3fc4e</act:id>
+ <act:type>INCOME</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Income</act:description>
+ <act:slots>
+ <slot>
+ <slot:key>placeholder</slot:key>
+ <slot:value type="string">true</slot:value>
+ </slot>
+ </act:slots>
+ <act:parent type="guid">3e8c57e826724328a2438b654dadb594</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Bonus</act:name>
+ <act:id type="guid">3e886a032b2d4a28a3ae85846ad161aa</act:id>
+ <act:type>INCOME</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Bonus</act:description>
+ <act:parent type="guid">4a16f6e753fb4562845df25d2dd3fc4e</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Gifts Received</act:name>
+ <act:id type="guid">3dc73385f0e8436ab28bee085baf9e5c</act:id>
+ <act:type>INCOME</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Gifts Received</act:description>
+ <act:parent type="guid">4a16f6e753fb4562845df25d2dd3fc4e</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Interest Income</act:name>
+ <act:id type="guid">ec4b2003ed464343a2fc04d6d5b2e9c2</act:id>
+ <act:type>INCOME</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Interest Income</act:description>
+ <act:parent type="guid">4a16f6e753fb4562845df25d2dd3fc4e</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Checking Interest</act:name>
+ <act:id type="guid">0a6afd4e8dca4d809e58e211aa38a2a8</act:id>
+ <act:type>INCOME</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Checking Interest</act:description>
+ <act:parent type="guid">ec4b2003ed464343a2fc04d6d5b2e9c2</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Other Interest</act:name>
+ <act:id type="guid">8e17053df6cd4437abbd60390ddc4d08</act:id>
+ <act:type>INCOME</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Other Interest</act:description>
+ <act:parent type="guid">ec4b2003ed464343a2fc04d6d5b2e9c2</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Savings Interest</act:name>
+ <act:id type="guid">c02c9a7cdb184a15ad13b3a25b6289c8</act:id>
+ <act:type>INCOME</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Savings Interest</act:description>
+ <act:parent type="guid">ec4b2003ed464343a2fc04d6d5b2e9c2</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Other Income</act:name>
+ <act:id type="guid">28fea126891047f68e157ba82c62f782</act:id>
+ <act:type>INCOME</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Other Income</act:description>
+ <act:parent type="guid">4a16f6e753fb4562845df25d2dd3fc4e</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Salary</act:name>
+ <act:id type="guid">926aae38873c463e833aeb66cc4d69e5</act:id>
+ <act:type>INCOME</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Salary</act:description>
+ <act:parent type="guid">4a16f6e753fb4562845df25d2dd3fc4e</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Reimbursed Expenses</act:name>
+ <act:id type="guid">5076a53c0e694a359011b7cb95d07888</act:id>
+ <act:type>INCOME</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Reimbursed Expenses</act:description>
+ <act:parent type="guid">4a16f6e753fb4562845df25d2dd3fc4e</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Sales</act:name>
+ <act:id type="guid">0752201142ef4d7eafd4dd38f7a73a5a</act:id>
+ <act:type>INCOME</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Sales</act:description>
+ <act:parent type="guid">4a16f6e753fb4562845df25d2dd3fc4e</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Expenses</act:name>
+ <act:id type="guid">f7272eab95d34caf92889017e022a9ae</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Expenses</act:description>
+ <act:slots>
+ <slot>
+ <slot:key>placeholder</slot:key>
+ <slot:value type="string">true</slot:value>
+ </slot>
+ </act:slots>
+ <act:parent type="guid">3e8c57e826724328a2438b654dadb594</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Adjustment</act:name>
+ <act:id type="guid">f982b3f6f8f24934a29d1de5960065db</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Adjustment</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Auto</act:name>
+ <act:id type="guid">15ca372927bd4ce59ff67ab7395fe46f</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Auto</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Fees</act:name>
+ <act:id type="guid">0f1599f7ddd64a05bc2a8e0634125d4d</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Fees</act:description>
+ <act:parent type="guid">15ca372927bd4ce59ff67ab7395fe46f</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Gas</act:name>
+ <act:id type="guid">230475084c2644fe83a8c3e08236c3be</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Gas</act:description>
+ <act:parent type="guid">15ca372927bd4ce59ff67ab7395fe46f</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Parking</act:name>
+ <act:id type="guid">d55298bde0fc4179984e427ede06e9d8</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Parking</act:description>
+ <act:parent type="guid">15ca372927bd4ce59ff67ab7395fe46f</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Repair and Maintenance</act:name>
+ <act:id type="guid">137fc2f6c5d5479e88d463b11c15db96</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Repair and Maintenance</act:description>
+ <act:parent type="guid">15ca372927bd4ce59ff67ab7395fe46f</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Bank Service Charge</act:name>
+ <act:id type="guid">a6dfc99152504f2985402f0c297e39cf</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Bank Service Charge</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Books</act:name>
+ <act:id type="guid">244d9d7ae3be453998b5ed831b91bd13</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Books</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Cable</act:name>
+ <act:id type="guid">7534f33ee5c9415db75f7bec66dfe045</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Cable</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Charity</act:name>
+ <act:id type="guid">6365420696404a169c5bc982395ede40</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Charity</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Clothes</act:name>
+ <act:id type="guid">3d0489205bfe433da15d29a4ca062aae</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Clothes</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Computer</act:name>
+ <act:id type="guid">1f9893f5d2254f73a45b1687d5c6c562</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Computer</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Dining</act:name>
+ <act:id type="guid">838b9ddd7cdb4594ab1680f5a3c0677d</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Dining</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Education</act:name>
+ <act:id type="guid">53ba4bf5217f41eda3da8c7f9fc0ab90</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Education</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Entertainment</act:name>
+ <act:id type="guid">9cde1ef6f1c14793a4402c32a3b6e259</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Entertainment</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Music/Movies</act:name>
+ <act:id type="guid">5f4618c4e0524e3ebfe3f97a942e2963</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Music/Movies</act:description>
+ <act:parent type="guid">9cde1ef6f1c14793a4402c32a3b6e259</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Recreation</act:name>
+ <act:id type="guid">4788e8cdb0f449f8a0ff9c52dc60b932</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Recreation</act:description>
+ <act:parent type="guid">9cde1ef6f1c14793a4402c32a3b6e259</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Travel</act:name>
+ <act:id type="guid">36b7f25b7a4741c49d64ccc0cda5e4d2</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Travel</act:description>
+ <act:parent type="guid">9cde1ef6f1c14793a4402c32a3b6e259</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Gifts</act:name>
+ <act:id type="guid">72e9642cf7614baba5cfd0e3e3be6e0a</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Gifts</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Groceries</act:name>
+ <act:id type="guid">d38bfa7d4e7e4b8b9829d965c6d9d39d</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Groceries</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Hobbies</act:name>
+ <act:id type="guid">b69732077c624daeb8340d30e977593f</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Hobbies</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Insurance</act:name>
+ <act:id type="guid">3f6a0bf52ffa4c4989475bff495dd80e</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Insurance</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Auto Insurance</act:name>
+ <act:id type="guid">1710fa62f4d54952bfd5a1b5c027d969</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Auto Insurance</act:description>
+ <act:parent type="guid">3f6a0bf52ffa4c4989475bff495dd80e</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Health Insurance</act:name>
+ <act:id type="guid">16c48d49e2244622980bfed9b50c64ac</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Health Insurance</act:description>
+ <act:parent type="guid">3f6a0bf52ffa4c4989475bff495dd80e</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Life Insurance</act:name>
+ <act:id type="guid">23bb2250a5904083ad670831fe926038</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Life Insurance</act:description>
+ <act:parent type="guid">3f6a0bf52ffa4c4989475bff495dd80e</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Disability Insurance</act:name>
+ <act:id type="guid">49493494497d423aa2e9be344481632d</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Disability Insurance</act:description>
+ <act:parent type="guid">3f6a0bf52ffa4c4989475bff495dd80e</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Liability Insurance</act:name>
+ <act:id type="guid">6f7e3b4827b94754bd5a2f2c78353b98</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Liability Insurance</act:description>
+ <act:parent type="guid">3f6a0bf52ffa4c4989475bff495dd80e</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Workers Comp</act:name>
+ <act:id type="guid">dd8c05a8e9954e0786e56d6889030c7a</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Workers Comp</act:description>
+ <act:parent type="guid">3f6a0bf52ffa4c4989475bff495dd80e</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Laundry/Dry Cleaning</act:name>
+ <act:id type="guid">a4c968d4663447cbb63db8eea7c828a7</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Laundry/Dry Cleaning</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Medical Expenses</act:name>
+ <act:id type="guid">01d0068463464eed835b5c59864bba96</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Medical Expenses</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Miscellaneous</act:name>
+ <act:id type="guid">eb59c82aef304e24abd1b93912df45d3</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Miscellaneous</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Online Services</act:name>
+ <act:id type="guid">3976761209174a52bf873df9e4fccd59</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Online Services</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Phone</act:name>
+ <act:id type="guid">7b3995f1953b4881b99e4ee2baa21011</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Phone</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Public Transportation</act:name>
+ <act:id type="guid">487483ba68a34753b6896801a221722d</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Public Transportation</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Subscriptions</act:name>
+ <act:id type="guid">a12b6d326e08474a8116817c4494cb42</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Subscriptions</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Supplies</act:name>
+ <act:id type="guid">b0db68d7aad04acba8d266a6ad2bc116</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Supplies</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Taxes</act:name>
+ <act:id type="guid">2c0a7aabdcaa4a5e9254ceb87d3c09d2</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Taxes</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Federal</act:name>
+ <act:id type="guid">de87b359e7ce4690898f1cb861430a78</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Federal</act:description>
+ <act:parent type="guid">2c0a7aabdcaa4a5e9254ceb87d3c09d2</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Medicare</act:name>
+ <act:id type="guid">342a68753f7e4bea9c33a818a6c44766</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Medicare</act:description>
+ <act:parent type="guid">2c0a7aabdcaa4a5e9254ceb87d3c09d2</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Other Tax</act:name>
+ <act:id type="guid">80f588c4f31c43579bb90f4d5e609e0c</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Other Tax</act:description>
+ <act:parent type="guid">2c0a7aabdcaa4a5e9254ceb87d3c09d2</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Social Security</act:name>
+ <act:id type="guid">28a46ebba32048e9839e4efb549d3ee2</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Social Security</act:description>
+ <act:parent type="guid">2c0a7aabdcaa4a5e9254ceb87d3c09d2</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>State/Province</act:name>
+ <act:id type="guid">6a5f8523ab354aaaa3630b51f6028687</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>State/Province</act:description>
+ <act:parent type="guid">2c0a7aabdcaa4a5e9254ceb87d3c09d2</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Emp-FICA</act:name>
+ <act:id type="guid">0d21bc3e6a264364ab8c1499de2680e4</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Employer SS/Med</act:description>
+ <act:parent type="guid">2c0a7aabdcaa4a5e9254ceb87d3c09d2</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>FICA</act:name>
+ <act:id type="guid">f1d5c3063f2b46efbbacd6cdf332a1a5</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>SS/Med</act:description>
+ <act:parent type="guid">2c0a7aabdcaa4a5e9254ceb87d3c09d2</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>FUTA</act:name>
+ <act:id type="guid">2845608bd13941fc9cb5be777bd15f04</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>FUTA</act:description>
+ <act:parent type="guid">2c0a7aabdcaa4a5e9254ceb87d3c09d2</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Local</act:name>
+ <act:id type="guid">2efbcefdc543469fb3281b31a2893ad7</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Local</act:description>
+ <act:parent type="guid">2c0a7aabdcaa4a5e9254ceb87d3c09d2</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Property</act:name>
+ <act:id type="guid">950a65eabaaa49c78364dc924d9eb384</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Property</act:description>
+ <act:parent type="guid">2c0a7aabdcaa4a5e9254ceb87d3c09d2</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Utilities</act:name>
+ <act:id type="guid">7bbabca9279f490bbaaa3da21b59a7cf</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Utilities</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Electric</act:name>
+ <act:id type="guid">54dc897a4503435a9c2391f67845b2c4</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Electric</act:description>
+ <act:parent type="guid">7bbabca9279f490bbaaa3da21b59a7cf</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Garbage collection</act:name>
+ <act:id type="guid">c0acee2af64d4245a50cf53f221d0639</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Garbage collection</act:description>
+ <act:parent type="guid">7bbabca9279f490bbaaa3da21b59a7cf</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Gas</act:name>
+ <act:id type="guid">51d66ffe6da848898769e5342cfd9d57</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Gas</act:description>
+ <act:parent type="guid">7bbabca9279f490bbaaa3da21b59a7cf</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Water</act:name>
+ <act:id type="guid">63663216ed3e4a469bfb72e58adfa7b4</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Water</act:description>
+ <act:parent type="guid">7bbabca9279f490bbaaa3da21b59a7cf</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Cable</act:name>
+ <act:id type="guid">3e06c49869fe407799785a574eefae1e</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Cable</act:description>
+ <act:parent type="guid">7bbabca9279f490bbaaa3da21b59a7cf</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Cell Phone</act:name>
+ <act:id type="guid">69bd12ebf9e4406b8779a014ba17fa54</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Cell Phone</act:description>
+ <act:parent type="guid">7bbabca9279f490bbaaa3da21b59a7cf</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Internet</act:name>
+ <act:id type="guid">0f3cc274202542b8b2e86c22b3b5c1d9</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Internet</act:description>
+ <act:parent type="guid">7bbabca9279f490bbaaa3da21b59a7cf</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Phone</act:name>
+ <act:id type="guid">3383b9e88fa44dd7b7549267aa4a4713</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Phone</act:description>
+ <act:parent type="guid">7bbabca9279f490bbaaa3da21b59a7cf</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Cash Discounts</act:name>
+ <act:id type="guid">e3ffbde0fcb341509ee941e46d0c811e</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Cash Discounts</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Depreciation</act:name>
+ <act:id type="guid">191afc571b1b46f5a2bcf4a3ad0afef9</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Depreciation</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Dues and Subscriptions</act:name>
+ <act:id type="guid">f2fec74304bd4363a40e2e11ede60218</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Dues and Subscriptions</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Equipment Rental</act:name>
+ <act:id type="guid">94ee8084d90a4c6285c412a41d74a8fa</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Equipment Rental</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Licenses and Permits</act:name>
+ <act:id type="guid">6cc6e7ed7e9e454bb70773b0cf1aa5bb</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Licenses and Permits</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Office Supplies</act:name>
+ <act:id type="guid">d667e8254fca42a5a0d8445b157f1ead</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Office Supplies</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Outside Services</act:name>
+ <act:id type="guid">d9a9a262b20840958bddf122acaefdb0</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Outside Services</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Payroll Expenses</act:name>
+ <act:id type="guid">70da238d20ec4dcb979ceb77d1408b2c</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Payroll Expenses</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Postage and Delivery</act:name>
+ <act:id type="guid">3b83fcdc8b0b461b9303c8ba444c0a40</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Postage and Delivery</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Printing and Reproduction</act:name>
+ <act:id type="guid">fa44c0628385429181483c6877467058</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Printing and Reproduction</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Professional Fees</act:name>
+ <act:id type="guid">d45a07d1ca8e4811bae8855a7fc32bdb</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Professional Fees</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Accounting</act:name>
+ <act:id type="guid">1791f2bcc03b40d4a10cb4e208f25b0b</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Accounting</act:description>
+ <act:parent type="guid">d45a07d1ca8e4811bae8855a7fc32bdb</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Legal Fees</act:name>
+ <act:id type="guid">241042e126a9479faa6de28e2da1cb72</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Legal Fees</act:description>
+ <act:parent type="guid">d45a07d1ca8e4811bae8855a7fc32bdb</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Rent</act:name>
+ <act:id type="guid">5fd6d83125f04a598163ccf1981a3390</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Rent</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Repairs</act:name>
+ <act:id type="guid">b26eca64c5324a0dbf21177ae9892fb9</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Repairs</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Building Repairs</act:name>
+ <act:id type="guid">88af782bb5b04556a02c8231e3171bf8</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Building Repairs</act:description>
+ <act:parent type="guid">b26eca64c5324a0dbf21177ae9892fb9</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Computer Repairs</act:name>
+ <act:id type="guid">eed8f49d3260484c876fdd355be3d632</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Computer Repairs</act:description>
+ <act:parent type="guid">b26eca64c5324a0dbf21177ae9892fb9</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Equipment Repairs</act:name>
+ <act:id type="guid">aefdf3812a3f4f8a86ea008dfd097b29</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Equipment Repairs</act:description>
+ <act:parent type="guid">b26eca64c5324a0dbf21177ae9892fb9</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Janitorial Expenses</act:name>
+ <act:id type="guid">31814364403d409489c4f50d21832ae9</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Janitorial Expenses</act:description>
+ <act:parent type="guid">b26eca64c5324a0dbf21177ae9892fb9</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Travel and Entertainment</act:name>
+ <act:id type="guid">df08e533003b440d9813a4937414f20d</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Travel and Entertainment</act:description>
+ <act:parent type="guid">f7272eab95d34caf92889017e022a9ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Entertainment</act:name>
+ <act:id type="guid">5cb45cedd52e474cbf038b2e5fa0c136</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Entertainment</act:description>
+ <act:parent type="guid">df08e533003b440d9813a4937414f20d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Meals</act:name>
+ <act:id type="guid">1520050ae83845daaf499584d927eea4</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Meals</act:description>
+ <act:parent type="guid">df08e533003b440d9813a4937414f20d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Travel</act:name>
+ <act:id type="guid">b53efe029d144e429b580c9fb11214cd</act:id>
+ <act:type>EXPENSE</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Travel</act:description>
+ <act:parent type="guid">df08e533003b440d9813a4937414f20d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Equity</act:name>
+ <act:id type="guid">9570d426dee34682a9b2304ce3c38c6f</act:id>
+ <act:type>EQUITY</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Equity</act:description>
+ <act:slots>
+ <slot>
+ <slot:key>placeholder</slot:key>
+ <slot:value type="string">true</slot:value>
+ </slot>
+ </act:slots>
+ <act:parent type="guid">3e8c57e826724328a2438b654dadb594</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Opening Balances</act:name>
+ <act:id type="guid">b9ed26eaf02b4656b378bd60d809bcb4</act:id>
+ <act:type>EQUITY</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Opening Balances</act:description>
+ <act:parent type="guid">9570d426dee34682a9b2304ce3c38c6f</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+ <act:name>Retained Earnings</act:name>
+ <act:id type="guid">f62b8783b93f435498ab249ec8e523b1</act:id>
+ <act:type>EQUITY</act:type>
+ <act:commodity>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </act:commodity>
+ <act:commodity-scu>100</act:commodity-scu>
+ <act:description>Retained Earnings</act:description>
+ <act:parent type="guid">9570d426dee34682a9b2304ce3c38c6f</act:parent>
+</gnc:account>
+<gnc:transaction version="2.0.0">
+ <trn:id type="guid">f18fa0198b104215b1a7365d1eaaf1ed</trn:id>
+ <trn:currency>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </trn:currency>
+ <trn:date-posted>
+ <ts:date>2018-02-23 10:59:00 +0000</ts:date>
+ </trn:date-posted>
+ <trn:date-entered>
+ <ts:date>2018-02-23 20:33:58 +0000</ts:date>
+ </trn:date-entered>
+ <trn:description>Opening Balance</trn:description>
+ <trn:slots>
+ <slot>
+ <slot:key>date-posted</slot:key>
+ <slot:value type="gdate">
+ <gdate>2018-02-23</gdate>
+ </slot:value>
+ </slot>
+ </trn:slots>
+ <trn:splits>
+ <trn:split>
+ <split:id type="guid">bf69b191406448e3b52a6956d0df5b98</split:id>
+ <split:reconciled-state>n</split:reconciled-state>
+ <split:value>1000000/100</split:value>
+ <split:quantity>1000000/100</split:quantity>
+ <split:account type="guid">547d8ff75f4347e3b3607c40b40a3fef</split:account>
+ </trn:split>
+ <trn:split>
+ <split:id type="guid">d6493e7650ac4c50b9b2496b29c72c11</split:id>
+ <split:reconciled-state>n</split:reconciled-state>
+ <split:value>-1000000/100</split:value>
+ <split:quantity>-1000000/100</split:quantity>
+ <split:account type="guid">b9ed26eaf02b4656b378bd60d809bcb4</split:account>
+ </trn:split>
+ </trn:splits>
+</gnc:transaction>
+<gnc:transaction version="2.0.0">
+ <trn:id type="guid">c300ddab09df4e9aa0af929ffc38f550</trn:id>
+ <trn:currency>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </trn:currency>
+ <trn:num>yoyo1</trn:num>
+ <trn:date-posted>
+ <ts:date>2018-02-23 10:59:00 +0000</ts:date>
+ </trn:date-posted>
+ <trn:date-entered>
+ <ts:date>2018-02-23 20:39:41 +0000</ts:date>
+ </trn:date-entered>
+ <trn:description>Yoyodyne, Inc.</trn:description>
+ <trn:slots>
+ <slot>
+ <slot:key>gncInvoice</slot:key>
+ <slot:value type="frame">
+ <slot>
+ <slot:key>invoice-guid</slot:key>
+ <slot:value type="guid">8786e1cf6e534cde9c227373b505ef62</slot:value>
+ </slot>
+ </slot:value>
+ </slot>
+ <slot>
+ <slot:key>trans-date-due</slot:key>
+ <slot:value type="timespec">
+ <ts:date>2018-02-23 08:00:00 +0000</ts:date>
+ </slot:value>
+ </slot>
+ <slot>
+ <slot:key>trans-read-only</slot:key>
+ <slot:value type="string">Generated from an invoice. Try unposting the invoice.</slot:value>
+ </slot>
+ <slot>
+ <slot:key>trans-txn-type</slot:key>
+ <slot:value type="string">I</slot:value>
+ </slot>
+ </trn:slots>
+ <trn:splits>
+ <trn:split>
+ <split:id type="guid">641fcd0ace1249228212e4ea68225c1c</split:id>
+ <split:memo>Fuzzy Dice</split:memo>
+ <split:action>Bill</split:action>
+ <split:reconciled-state>n</split:reconciled-state>
+ <split:value>58500/100</split:value>
+ <split:quantity>58500/100</split:quantity>
+ <split:account type="guid">d667e8254fca42a5a0d8445b157f1ead</split:account>
+ </trn:split>
+ <trn:split>
+ <split:id type="guid">a1c11ef10e6343d3949dcc38a9e68f11</split:id>
+ <split:memo>Fuzzy Dice</split:memo>
+ <split:action>Bill</split:action>
+ <split:reconciled-state>n</split:reconciled-state>
+ <split:value>-58500/100</split:value>
+ <split:quantity>-58500/100</split:quantity>
+ <split:account type="guid">81438d8393264c71bb965baa171c5ffe</split:account>
+ <split:lot type="guid">c35d998d200a4fed97c0a4b61c285d49</split:lot>
+ </trn:split>
+ </trn:splits>
+</gnc:transaction>
+<gnc:GncEntry version="2.0.0">
+ <entry:guid type="guid">b3ee32323fe145828ccde43f36dd4225</entry:guid>
+ <entry:date>
+ <ts:date>2010-12-07 08:00:00 +0000</ts:date>
+ </entry:date>
+ <entry:entered>
+ <ts:date>2010-12-08 01:10:43 +0000</ts:date>
+ </entry:entered>
+ <entry:description>Fuzzy Dice</entry:description>
+ <entry:action>Material</entry:action>
+ <entry:qty>300000000/1000000</entry:qty>
+ <entry:b-acct type="guid">d667e8254fca42a5a0d8445b157f1ead</entry:b-acct>
+ <entry:b-price>1950000/1000000</entry:b-price>
+ <entry:bill type="guid">8786e1cf6e534cde9c227373b505ef62</entry:bill>
+ <entry:billable>0</entry:billable>
+ <entry:b-taxable>0</entry:b-taxable>
+ <entry:b-taxincluded>0</entry:b-taxincluded>
+ <entry:b-pay>CASH</entry:b-pay>
+</gnc:GncEntry>
+<gnc:GncInvoice version="2.0.0">
+ <invoice:guid type="guid">8786e1cf6e534cde9c227373b505ef62</invoice:guid>
+ <invoice:id>yoyo1</invoice:id>
+ <invoice:owner version="2.0.0">
+ <owner:type>gncVendor</owner:type>
+ <owner:id type="guid">c48cb82168c44c179316d8befe6634e2</owner:id>
+ </invoice:owner>
+ <invoice:opened>
+ <ts:date>2010-12-07 08:00:00 +0000</ts:date>
+ </invoice:opened>
+ <invoice:posted>
+ <ts:date>2010-12-07 08:00:00 +0000</ts:date>
+ </invoice:posted>
+ <invoice:billing_id>Zax4379</invoice:billing_id>
+ <invoice:active>1</invoice:active>
+ <invoice:posttxn type="guid">c300ddab09df4e9aa0af929ffc38f550</invoice:posttxn>
+ <invoice:postlot type="guid">c35d998d200a4fed97c0a4b61c285d49</invoice:postlot>
+ <invoice:postacc type="guid">81438d8393264c71bb965baa171c5ffe</invoice:postacc>
+ <invoice:currency>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </invoice:currency>
+ <invoice:slots>
+ <slot>
+ <slot:key>credit-note</slot:key>
+ <slot:value type="integer">0</slot:value>
+ </slot>
+ </invoice:slots>
+</gnc:GncInvoice>
+<gnc:GncVendor version="2.0.0">
+ <vendor:guid type="guid">c48cb82168c44c179316d8befe6634e2</vendor:guid>
+ <vendor:name>Yoyodyne, Inc.</vendor:name>
+ <vendor:id>000001</vendor:id>
+ <vendor:addr version="2.0.0">
+ <addr:name>Yoyodyne, Inc.</addr:name>
+ <addr:addr1>236 Hansen Way</addr:addr1>
+ <addr:addr2>Palo Alto, CA 94301</addr:addr2>
+ <addr:phone>(650)555-1212</addr:phone>
+ <addr:email>sales at yoyodyne.com</addr:email>
+ </vendor:addr>
+ <vendor:taxincluded>USEGLOBAL</vendor:taxincluded>
+ <vendor:active>1</vendor:active>
+ <vendor:currency>
+ <cmdty:space>CURRENCY</cmdty:space>
+ <cmdty:id>USD</cmdty:id>
+ </vendor:currency>
+ <vendor:use-tt>0</vendor:use-tt>
+ <vendor:slots>
+ <slot>
+ <slot:key>last-posted-to-acct</slot:key>
+ <slot:value type="guid">81438d8393264c71bb965baa171c5ffe</slot:value>
+ </slot>
+ </vendor:slots>
+</gnc:GncVendor>
+</gnc:book>
+</gnc-v2>
+
commit ab4e5956701888a8c2e74fb5d15c7d3186f5534d
Author: Simon Arlott <sa.me.uk>
Date: Tue Jun 27 19:07:27 2023 +0100
Add failuref() test function that allows the use of format strings
diff --git a/common/test-core/test-stuff.h b/common/test-core/test-stuff.h
index 6c51e136f1..c14cf6fed1 100644
--- a/common/test-core/test-stuff.h
+++ b/common/test-core/test-stuff.h
@@ -133,6 +133,8 @@ void failure_args(
#define do_test( result, title ) do_test_call( result, title, __FILE__, __LINE__ )
#define success( title ) success_call( title, __FILE__, __LINE__ );
#define failure( title ) failure_call( title, __FILE__, __LINE__ );
+#define failuref( title, format, ... ) failure_args( title, __FILE__, __LINE__, format, ## __VA_ARGS__ );
+
/** This one doesn't work because macros can't take a variable number of arguments.
* well, apparently gcc can, but it's non-standard.
Summary of changes:
common/test-core/test-stuff.h | 2 +
libgnucash/backend/xml/test/CMakeLists.txt | 37 +-
libgnucash/backend/xml/test/README | 2 +-
.../backend/xml/test/gtest-load-save-files.cpp | 318 ++++
.../backend/xml/test/test-files/CMakeLists.txt | 4 +-
.../xml/test/test-files/load-save/CMakeLists.txt | 4 +
.../backend/xml/test/test-files/load-save/README | 6 +
.../load-save/bug-746937-sx-split-order.gnucash | 406 +++++
.../xml/test/test-files/load-save/sample1.gnucash | 1563 ++++++++++++++++++++
9 files changed, 2332 insertions(+), 10 deletions(-)
create mode 100644 libgnucash/backend/xml/test/gtest-load-save-files.cpp
create mode 100644 libgnucash/backend/xml/test/test-files/load-save/CMakeLists.txt
create mode 100644 libgnucash/backend/xml/test/test-files/load-save/README
create mode 100644 libgnucash/backend/xml/test/test-files/load-save/bug-746937-sx-split-order.gnucash
create mode 100644 libgnucash/backend/xml/test/test-files/load-save/sample1.gnucash
More information about the gnucash-changes
mailing list