Add test suite for standard tests

Author:    Peter Broadbery <p.broadbery@gmail.com>

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@23026 57a11ea4-9604-0410-9ed3-97b8803252fd
pull/2/head
Geert Janssens 13 years ago
parent 72c7001693
commit 4d8d8bd76e

@ -1,11 +1,15 @@
TESTS=test-load-module
MODULE_TESTS=test-load-module
GNC_TEST_DEPS = --gnc-module-dir ${top_builddir}/src/engine \
GNC_TEST_DEPS = \
--gnc-module-dir ${top_builddir}/src/engine \
--gnc-module-dir ${top_builddir}/src/app-utils \
--gnc-module-dir ${top_builddir}/src/gnome-utils \
--gnc-module-dir ${top_builddir}/src/html \
--gnc-module-dir ${top_builddir}/src/report/app-utils \
--gnc-module-dir ${top_builddir}/src/report/report-system \
--gnc-module-dir ${top_builddir}/src/report/report-system/test \
--gnc-module-dir ${top_builddir}/src/report/standard-reports \
--gnc-module-dir ${top_builddir}/src/report/standard-reports/test \
\
--guile-load-dir ${top_builddir}/src/gnc-module \
--guile-load-dir ${top_builddir}/src/scm \
@ -14,7 +18,9 @@ GNC_TEST_DEPS = --gnc-module-dir ${top_builddir}/src/engine \
--guile-load-dir ${top_builddir}/src/app-utils \
--guile-load-dir ${top_builddir}/src/gnome-utils \
--guile-load-dir ${top_builddir}/src/report/report-system \
--guile-load-dir ${top_builddir}/src/report/report-system/test \
--guile-load-dir ${top_builddir}/src/report/standard-reports \
--guile-load-dir ${top_builddir}/src/report/standard-reports/test \
\
--library-dir ${top_builddir}/src/libqof/qof \
--library-dir ${top_builddir}/src/core-utils \
@ -32,3 +38,52 @@ TESTS_ENVIRONMENT = \
$(shell ${top_srcdir}/src/gnc-test-env --no-exports ${GNC_TEST_DEPS})
EXTRA_DIST = test-load-module
SCM_TESTS = \
test-standard-category-report.scm \
test-standard-net-barchart.scm \
test-standard-net-linechart.scm
if GNUCASH_SEPARATE_BUILDDIR
#For executing test cases
SCM_FILE_LINKS = \
test-generic-category-report.scm \
test-generic-net-barchart.scm \
test-generic-net-linechart.scm \
$(SCM_TESTS)
endif
.scm-links:
$(RM) -rf gnucash
mkdir -p gnucash/report/standard-reports/test
if GNUCASH_SEPARATE_BUILDDIR
for X in ${SCM_FILE_LINKS} ; do \
$(LN_S) -f ${srcdir}/$$X . ; \
done
endif
( cd gnucash/report/standard-reports/test; for A in $(SCM_FILE_LINKS) ; do $(LN_S) -f ../../../../$$A . ; done )
if ! OS_WIN32
# Windows knows no "ln -s" but uses "cp": must copy every time (see bug #566567).
touch .scm-links
endif
$(patsubst %.scm,%,$(SCM_TESTS)): %: Makefile .scm-links
echo 'guile --debug -l $(srcdir)/$*.scm -c "(exit (run-test))"' > $@
chmod a+x $@
interp:
$(TESTS_ENVIRONMENT) guile --debug
debug:
$(TESTS_ENVIRONMENT) gdb --args $(shell cat $(TEST))
TESTS = $(patsubst %.scm,%,$(SCM_TESTS)) $(MODULE_TESTS)
clean-local:
$(RM) -rf gnucash
noinst_DATA = .scm-links
CLEANFILES = .scm-links
DISTCLEANFILES = ${SCM_FILE_LINKS}

@ -0,0 +1,243 @@
(define-module (gnucash report standard-reports test test-generic-category-report))
(use-modules (ice-9 format))
(use-modules (ice-9 streams))
(use-modules (srfi srfi-1))
(use-modules (gnucash gnc-module))
(gnc:module-load "gnucash/report/report-system" 0)
(use-modules (gnucash main)) ;; FIXME: delete after we finish modularizing.
(use-modules (gnucash printf))
(use-modules (gnucash report report-system))
(use-modules (gnucash app-utils))
(use-modules (gnucash engine))
(use-modules (sw_engine))
(use-modules (gnucash report report-system streamers))
(use-modules (gnucash report report-system test test-extras))
(export run-category-income-expense-test)
(export run-category-asset-liability-test)
(define (set-option report page tag value)
((gnc:option-setter (gnc:lookup-option (gnc:report-options report)
page tag)) value))
(define constructor (record-constructor <report>))
;(set-option income-report gnc:pagename-general "Start Date" (cons 'relative 'start-prev-year))
;(set-option income-report gnc:pagename-general "End Date" (cons 'relative 'end-this-month))
;(set-option income-report gnc:pagename-general "Show table" #t)
;(set-option income-report gnc:pagename-general "Price Source" 'pricedb-nearest)
;(set-option income-report gnc:pagename-general "Report's currency" (gnc-default-report-currency))
(define (run-category-income-expense-test income-report-uuid expense-report-uuid)
(and (null-test income-report-uuid)
(null-test expense-report-uuid)
(single-txn-test income-report-uuid)
(multi-acct-test expense-report-uuid)
#t))
(define (run-category-asset-liability-test asset-report-uuid liability-report-uuid)
(and (null-test asset-report-uuid)
(null-test liability-report-uuid)
(asset-test asset-report-uuid)
#t))
(define (null-test uuid)
(let* ((template (gnc:find-report-template uuid))
(options (gnc:make-report-options uuid))
(report (constructor uuid "bar" options
#t #t #f #f))
(renderer (gnc:report-template-renderer template)))
(let ((doc (renderer report)))
(gnc:html-document-set-style-sheet! doc
(gnc:report-stylesheet report))
(format #t "render: ~a\n" (gnc:html-document-render doc #f))
)))
(define (single-txn-test uuid)
(let* ((income-template (gnc:find-report-template uuid))
(income-options (gnc:make-report-options uuid))
(income-report (constructor uuid "bar" income-options
#t #t #f #f))
(income-renderer (gnc:report-template-renderer income-template)))
(let* ((env (create-test-env))
(my-asset-account (env-create-root-account env ACCT-TYPE-ASSET
(gnc-default-report-currency)))
(my-expense-account (env-create-root-account env ACCT-TYPE-EXPENSE
(gnc-default-report-currency)))
(my-income-account (env-create-root-account env ACCT-TYPE-INCOME
(gnc-default-report-currency))))
(env-create-daily-transactions env
(gnc:get-start-this-month)
(gnc:get-end-this-month)
my-asset-account my-income-account)
(begin
(set-option income-report gnc:pagename-display "Show table" #t)
(set-option income-report gnc:pagename-general "Start Date" (cons 'relative 'start-this-month))
(set-option income-report gnc:pagename-general "End Date" (cons 'relative 'end-this-month))
(set-option income-report gnc:pagename-general "Step Size" 'DayDelta)
(set-option income-report gnc:pagename-general "Price Source" 'pricedb-nearest)
(set-option income-report gnc:pagename-general "Report's currency" (gnc-default-report-currency))
(set-option income-report gnc:pagename-accounts "Accounts" (list my-income-account))
(set-option income-report gnc:pagename-accounts "Show Accounts until level" 'all)
(gnc:options-for-each (lambda (option)
(format #t "Option: ~a.~a Value ~a\n"
(gnc:option-section option)
(gnc:option-name option)
(gnc:option-value option)))
income-options)
(let ((doc (income-renderer income-report)))
(gnc:html-document-set-style-sheet! doc
(gnc:report-stylesheet income-report))
(let* ((result (gnc:html-document-render doc #f))
(tbl (stream->list
(pattern-streamer "<tr>"
(list (list "<string> ([0-9][0-9])/([0-9][0-9])/([0-9][0-9])</td>" 1 2 3)
(list "<number> ([^<]*)</td>" 1))
result))))
(every (lambda (date value-list)
(let ((day (second date))
(value (first value-list)))
(format #t "[~a] [~a]\n"
(string->number day) (string->number value))
(= (string->number day) (string->number value))))
(map first tbl)
(map second tbl))))))))
(define (list-leaves list)
(if (not (pair? list))
(cons list '())
(fold (lambda (next acc)
(append (list-leaves next)
acc))
'()
list)))
(define (multi-acct-test expense-report-uuid)
(let* ((expense-template (gnc:find-report-template expense-report-uuid))
(expense-options (gnc:make-report-options expense-report-uuid))
(expense-report (constructor expense-report-uuid "bar" expense-options
#t #t #f #f))
(expense-renderer (gnc:report-template-renderer expense-template)))
(let* ((env (create-test-env))
(expense-accounts (env-expense-account-structure env))
(asset-accounts (env-create-account-structure
env
(list "Assets"
(list (cons 'type ACCT-TYPE-ASSET))
(list "Bank"))))
(leaf-expense-accounts (list-leaves expense-accounts))
(bank-account (car (car (cdr asset-accounts)))))
(format #t "Expense accounts ~a\n" leaf-expense-accounts)
(for-each (lambda (expense-account)
(env-create-daily-transactions env
(gnc:get-start-this-month)
(gnc:get-end-this-month)
expense-account
bank-account))
leaf-expense-accounts)
(begin
(set-option expense-report gnc:pagename-display "Show table" #t)
(set-option expense-report gnc:pagename-general "Start Date" (cons 'relative 'start-this-month))
(set-option expense-report gnc:pagename-general "End Date" (cons 'relative 'end-this-month))
(set-option expense-report gnc:pagename-general "Step Size" 'DayDelta)
(set-option expense-report gnc:pagename-general "Price Source" 'pricedb-nearest)
(set-option expense-report gnc:pagename-general "Report's currency" (gnc-default-report-currency))
(set-option expense-report gnc:pagename-accounts "Accounts" leaf-expense-accounts)
(set-option expense-report gnc:pagename-accounts "Show Accounts until level" 2)
(let ((doc (expense-renderer expense-report)))
(gnc:html-document-set-style-sheet! doc
(gnc:report-stylesheet expense-report))
(let* ((html-document (gnc:html-document-render doc #f))
(columns (columns-from-report-document html-document))
(tbl (stream->list
(pattern-streamer "<tr>"
(list (list "<string> ([0-9][0-9])/([0-9][0-9])/([0-9][0-9])</td>" 1 2 3)
(list "<number> ([^<]*)</td>" 1)
(list "<number> ([^<]*)</td>" 1)
(list "<number> ([^<]*)</td>" 1)
(list "<number> ([^<]*)</td>" 1)
(list "<number> ([^<]*)</td>" 1))
html-document))))
;(format #t "~a" html-document)
(and (= 6 (length columns))
(equal? "Date" (first columns))
(equal? "Auto" (second columns))
;; maybe should try to check actual values
)))))))
(define (columns-from-report-document doc)
(let ((columns (stream->list (pattern-streamer "<th>"
(list (list "<string> ([^<]*)</" 1))
doc))))
(format #t "Columns ~a\n" columns)
(map caar columns)))
;;
;;
;;
(define (asset-test uuid)
(let* ((asset-template (gnc:find-report-template uuid))
(asset-options (gnc:make-report-options uuid))
(asset-report (constructor uuid "bar" asset-options
#t #t #f #f))
(asset-renderer (gnc:report-template-renderer asset-template)))
(let* ((env (create-test-env))
(my-asset-account (env-create-root-account env ACCT-TYPE-ASSET
(gnc-default-report-currency)))
(my-expense-account (env-create-root-account env ACCT-TYPE-EXPENSE
(gnc-default-report-currency)))
(my-income-account (env-create-root-account env ACCT-TYPE-INCOME
(gnc-default-report-currency))))
(env-create-daily-transactions env
(gnc:get-start-this-month)
(gnc:get-end-this-month)
my-asset-account my-income-account)
(begin
(set-option asset-report gnc:pagename-display "Show table" #t)
(set-option asset-report gnc:pagename-general "Start Date" (cons 'relative 'start-this-month))
(set-option asset-report gnc:pagename-general "End Date" (cons 'relative 'end-this-month))
(set-option asset-report gnc:pagename-general "Step Size" 'DayDelta)
(set-option asset-report gnc:pagename-general "Price Source" 'pricedb-nearest)
(set-option asset-report gnc:pagename-general "Price Source" 'pricedb-nearest)
(set-option asset-report gnc:pagename-general "Report's currency" (gnc-default-report-currency))
(set-option asset-report gnc:pagename-accounts "Accounts" (list my-asset-account))
(set-option asset-report gnc:pagename-accounts "Show Accounts until level" 'all)
(gnc:options-for-each (lambda (option)
(format #t "Option: ~a.~a Value ~a\n"
(gnc:option-section option)
(gnc:option-name option)
(gnc:option-value option)))
asset-options)
(let ((doc (asset-renderer asset-report)))
(gnc:html-document-set-style-sheet! doc
(gnc:report-stylesheet asset-report))
(let* ((html-document (gnc:html-document-render doc #f))
(columns (columns-from-report-document html-document))
(tbl (stream->list
(pattern-streamer "<tr>"
(list (list "<string> ([0-9][0-9])/([0-9][0-9])/([0-9][0-9])</td>" 1 2 3)
(list "<number> ([^<]*)</td>" 1))
html-document)))
(row-count (tbl-row-count tbl)))
(format #t "Report: ~a\n" tbl)
(logging-and (member "account-1" columns)
(= 2 (length columns))
(= 1 (string->number (car (tbl-ref tbl 0 1))))
(= (/ (* row-count (+ row-count 1)) 2)
(string->number (car (tbl-ref tbl (- row-count 1) 1))))
#t)))))))

@ -0,0 +1,266 @@
(define-module (gnucash report standard-reports test test-generic-net-barchart))
(use-modules (ice-9 format))
(use-modules (ice-9 streams))
(use-modules (srfi srfi-1))
(use-modules (gnucash gnc-module))
(gnc:module-load "gnucash/report/report-system" 0)
(use-modules (gnucash report report-system test test-extras))
(export run-net-asset-income-test)
(define (set-option report page tag value)
((gnc:option-setter (gnc:lookup-option (gnc:report-options report)
page tag)) value))
(define constructor (record-constructor <report>))
(define (run-net-asset-income-test asset-report-uuid income-report-uuid)
(logging-and (two-txn-test asset-report-uuid)
(two-txn-test-2 asset-report-uuid)
(two-txn-test-income income-report-uuid)
(null-test asset-report-uuid)
(null-test income-report-uuid)
(single-txn-test asset-report-uuid)
#t))
;; Just prove that the report exists.
(define (null-test uuid)
(let* ((template (gnc:find-report-template uuid))
(options (gnc:make-report-options uuid))
(report (constructor uuid "bar" options
#t #t #f #f))
(renderer (gnc:report-template-renderer template)))
(let ((doc (renderer report)))
(gnc:html-document-set-style-sheet! doc
(gnc:report-stylesheet report))
(format #t "render: ~a\n" (gnc:html-document-render doc #f))
)))
(define (single-txn-test uuid)
(let* ((template (gnc:find-report-template uuid))
(options (gnc:make-report-options uuid))
(report (constructor uuid "bar" options
#t #t #f #f))
(renderer (gnc:report-template-renderer template)))
(let* ((env (create-test-env))
(my-asset-account (env-create-root-account env ACCT-TYPE-ASSET
(gnc-default-report-currency)))
(my-expense-account (env-create-root-account env ACCT-TYPE-EXPENSE
(gnc-default-report-currency)))
(my-income-account (env-create-root-account env ACCT-TYPE-INCOME
(gnc-default-report-currency))))
(env-create-transaction env
(gnc:get-start-this-month)
my-income-account
my-asset-account
(gnc:make-gnc-numeric -1 1))
(begin
(set-option report gnc:pagename-display "Show table" #t)
(set-option report gnc:pagename-general "Start Date"
(cons 'absolute (gnc:get-start-this-month)))
(set-option report gnc:pagename-general "End Date"
(cons 'absolute (gnc:get-start-this-month)))
(set-option report gnc:pagename-general "Step Size" 'DayDelta)
(set-option report gnc:pagename-general "Price Source" 'pricedb-nearest)
(set-option report gnc:pagename-general "Report's currency" (gnc-default-report-currency))
(set-option report gnc:pagename-accounts "Accounts" (list my-asset-account))
(let ((doc (renderer report)))
(gnc:html-document-set-style-sheet! doc
(gnc:report-stylesheet report))
(let* ((result (gnc:html-document-render doc #f))
(tbl (stream->list
(pattern-streamer "<tr>"
(list (list "<string> ([0-9][0-9])/([0-9][0-9])/([0-9][0-9])</td>"
1 2 3)
(list "<number> ([^<]*)</td>" 1)
(list "<number> ([^<]*)</td>" 1)
(list "<number> ([^<]*)</td>" 1))
result))))
(format #t "~a\n" tbl)
(logging-and (= 1 (tbl-ref->number tbl 0 1))
(= 0 (tbl-ref->number tbl 0 2))
(= 1 (tbl-ref->number tbl 0 3))
(= 1 (tbl-row-count tbl))
(= 4 (tbl-column-count tbl)))))))))
(define (two-txn-test uuid)
(let* ((template (gnc:find-report-template uuid))
(options (gnc:make-report-options uuid))
(report (constructor uuid "bar" options
#t #t #f #f))
(renderer (gnc:report-template-renderer template)))
(let* ((env (create-test-env))
(my-asset-account (env-create-root-account env ACCT-TYPE-ASSET
(gnc-default-report-currency)))
(my-expense-account (env-create-root-account env ACCT-TYPE-EXPENSE
(gnc-default-report-currency)))
(my-income-account (env-create-root-account env ACCT-TYPE-INCOME
(gnc-default-report-currency)))
(date-0 (gnc:get-start-this-month))
(date-1 (gnc:timepair-next-day date-0))
(date-2 (gnc:timepair-next-day date-1)))
(env-create-transaction env
date-1
my-income-account
my-asset-account
(gnc:make-gnc-numeric -1 1))
(env-create-transaction env
date-2
my-income-account
my-asset-account
(gnc:make-gnc-numeric -5 1))
(begin
(set-option report gnc:pagename-display "Show table" #t)
(set-option report gnc:pagename-general "Start Date" (cons 'absolute date-0))
(set-option report gnc:pagename-general "End Date" (cons 'absolute date-2))
(set-option report gnc:pagename-general "Step Size" 'DayDelta)
(set-option report gnc:pagename-general "Price Source" 'pricedb-nearest)
(set-option report gnc:pagename-general "Report's currency" (gnc-default-report-currency))
(set-option report gnc:pagename-accounts "Accounts" (list my-asset-account))
(let ((doc (renderer report)))
(gnc:html-document-set-style-sheet! doc
(gnc:report-stylesheet report))
(let* ((result (gnc:html-document-render doc #f))
(tbl (stream->list
(pattern-streamer "<tr>"
(list (list "<string> ([0-9][0-9])/([0-9][0-9])/([0-9][0-9])</td>"
1 2 3)
(list "<number> ([^<]*)</td>" 1)
(list "<number> ([^<]*)</td>" 1)
(list "<number> ([^<]*)</td>" 1))
result))))
(format #t "~a\n~a\n" result tbl)
(logging-and (every (lambda (row)
(and (equal? (second row) (fourth row))
(= 0 (string->number (car (third row))))))
tbl)
(= 0 (tbl-ref->number tbl 0 1))
(= 1 (tbl-ref->number tbl 1 1))
(= 6 (tbl-ref->number tbl 2 1))
(= 3 (tbl-row-count tbl))
(= 4 (tbl-column-count tbl)))))))))
(define (two-txn-test-2 uuid)
(let* ((template (gnc:find-report-template uuid))
(options (gnc:make-report-options uuid))
(report (constructor uuid "bar" options
#t #t #f #f))
(renderer (gnc:report-template-renderer template)))
(let* ((env (create-test-env))
(my-asset-account (env-create-root-account env ACCT-TYPE-ASSET
(gnc-default-report-currency)))
(my-liability-account (env-create-root-account env ACCT-TYPE-LIABILITY
(gnc-default-report-currency)))
(my-expense-account (env-create-root-account env ACCT-TYPE-EXPENSE
(gnc-default-report-currency)))
(my-income-account (env-create-root-account env ACCT-TYPE-INCOME
(gnc-default-report-currency)))
(date-0 (gnc:get-start-this-month))
(date-1 (gnc:timepair-next-day date-0))
(date-2 (gnc:timepair-next-day date-1)))
(env-create-transaction env date-1 my-income-account my-asset-account (gnc:make-gnc-numeric -1 1))
(env-create-transaction env date-1 my-expense-account my-liability-account (gnc:make-gnc-numeric -1 1))
(env-create-transaction env date-2 my-income-account my-asset-account (gnc:make-gnc-numeric -5 1))
(env-create-transaction env date-2 my-expense-account my-liability-account (gnc:make-gnc-numeric -5 1))
(begin
(set-option report gnc:pagename-display "Show table" #t)
(set-option report gnc:pagename-general "Start Date" (cons 'absolute date-0))
(set-option report gnc:pagename-general "End Date" (cons 'absolute date-2))
(set-option report gnc:pagename-general "Step Size" 'DayDelta)
(set-option report gnc:pagename-general "Price Source" 'pricedb-nearest)
(set-option report gnc:pagename-general "Report's currency" (gnc-default-report-currency))
(set-option report gnc:pagename-accounts "Accounts" (list my-asset-account my-liability-account))
(let ((doc (renderer report)))
(gnc:html-document-set-style-sheet! doc
(gnc:report-stylesheet report))
(let* ((result (gnc:html-document-render doc #f))
(tbl (stream->list
(pattern-streamer "<tr>"
(list (list "<string> ([0-9][0-9])/([0-9][0-9])/([0-9][0-9])</td>"
1 2 3)
(list "<number> ([^<]*)</td>" 1)
(list "<number> ([^<]*)</td>" 1)
(list "<number> ([^<]*)</td>" 1))
result))))
(format #t "~a\n" tbl)
(logging-and (every (lambda (row)
(and (= (string->number (car (fourth row)))
(+ (string->number (car (second row)))
(string->number (car (third row)))))
;; txns added in pairs, so assets = liability
(equal? (second row) (third row))))
tbl)
(= 0 (tbl-ref->number tbl 0 1))
(= 1 (tbl-ref->number tbl 1 1))
(= 6 (tbl-ref->number tbl 2 1))
(= 3 (tbl-row-count tbl))
(= 4 (tbl-column-count tbl)))))))))
(define (two-txn-test-income uuid)
(let* ((template (gnc:find-report-template uuid))
(options (gnc:make-report-options uuid))
(report (constructor uuid "bar" options
#t #t #f #f))
(renderer (gnc:report-template-renderer template)))
(let* ((env (create-test-env))
(my-asset-account (env-create-root-account env ACCT-TYPE-ASSET
(gnc-default-report-currency)))
(my-liability-account (env-create-root-account env ACCT-TYPE-LIABILITY
(gnc-default-report-currency)))
(my-expense-account (env-create-root-account env ACCT-TYPE-EXPENSE
(gnc-default-report-currency)))
(my-income-account (env-create-root-account env ACCT-TYPE-INCOME
(gnc-default-report-currency)))
(date-0 (gnc:get-start-this-month))
(date-1 (gnc:timepair-next-day date-0))
(date-2 (gnc:timepair-next-day date-1)))
(env-create-transaction env date-1 my-income-account my-asset-account (gnc:make-gnc-numeric -1 1))
(env-create-transaction env date-1 my-expense-account my-liability-account (gnc:make-gnc-numeric -1 1))
(env-create-transaction env date-2 my-income-account my-asset-account (gnc:make-gnc-numeric -5 1))
(env-create-transaction env date-2 my-expense-account my-liability-account (gnc:make-gnc-numeric -5 1))
(begin
(set-option report gnc:pagename-display "Show table" #t)
(set-option report gnc:pagename-general "Start Date" (cons 'absolute date-0))
(set-option report gnc:pagename-general "End Date" (cons 'absolute date-2))
(set-option report gnc:pagename-general "Step Size" 'DayDelta)
(set-option report gnc:pagename-general "Price Source" 'pricedb-nearest)
(set-option report gnc:pagename-general "Report's currency" (gnc-default-report-currency))
(set-option report gnc:pagename-accounts "Accounts" (list my-income-account my-expense-account))
(let ((doc (renderer report)))
(gnc:html-document-set-style-sheet! doc
(gnc:report-stylesheet report))
(let* ((result (gnc:html-document-render doc #f))
(tbl (stream->list
(pattern-streamer "<tr>"
(list (list "<string> ([0-9][0-9])/([0-9][0-9])/([0-9][0-9])</td>"
1 2 3)
(list "<number> ([^<]*)</td>" 1)
(list "<number> ([^<]*)</td>" 1)
(list "<number> ([^<]*)</td>" 1))
result))))
(format #t "~a\n" tbl)
(logging-and (every (lambda (row)
(and (= (string->number (car (fourth row)))
(+ (string->number (car (second row)))
(string->number (car (third row)))))
;; txns added in pairs, so assets = liability
(equal? (second row) (third row))))
tbl)
(= 0 (tbl-ref->number tbl 0 1))
(= 1 (tbl-ref->number tbl 1 1))
(= 5 (tbl-ref->number tbl 2 1))
(= 3 (tbl-row-count tbl))
(= 4 (tbl-column-count tbl)))))))))

@ -0,0 +1,208 @@
(define-module (gnucash report standard-reports test test-generic-net-linechart))
(use-modules (ice-9 format))
(use-modules (ice-9 streams))
(use-modules (srfi srfi-1))
(use-modules (gnucash gnc-module))
(gnc:module-load "gnucash/report/report-system" 0)
(use-modules (gnucash report report-system test test-extras))
(export run-net-asset-test)
(define (set-option report page tag value)
((gnc:option-setter (gnc:lookup-option (gnc:report-options report)
page tag)) value))
(define constructor (record-constructor <report>))
(define (run-net-asset-test asset-report-uuid)
(logging-and (two-txn-test asset-report-uuid)
(two-txn-test-2 asset-report-uuid)
(null-test asset-report-uuid)
(single-txn-test asset-report-uuid)
#t))
;; Just prove that the report exists.
(define (null-test uuid)
(let* ((template (gnc:find-report-template uuid))
(options (gnc:make-report-options uuid))
(report (constructor uuid "bar" options
#t #t #f #f))
(renderer (gnc:report-template-renderer template)))
(let ((doc (renderer report)))
(gnc:html-document-set-style-sheet! doc
(gnc:report-stylesheet report))
(format #t "render: ~a\n" (gnc:html-document-render doc #f))
)))
(define (single-txn-test uuid)
(let* ((template (gnc:find-report-template uuid))
(options (gnc:make-report-options uuid))
(report (constructor uuid "bar" options
#t #t #f #f))
(renderer (gnc:report-template-renderer template)))
(let* ((env (create-test-env))
(my-asset-account (env-create-root-account env ACCT-TYPE-ASSET
(gnc-default-report-currency)))
(my-expense-account (env-create-root-account env ACCT-TYPE-EXPENSE
(gnc-default-report-currency)))
(my-income-account (env-create-root-account env ACCT-TYPE-INCOME
(gnc-default-report-currency))))
(env-create-transaction env
(gnc:get-start-this-month)
my-income-account
my-asset-account
(gnc:make-gnc-numeric -1 1))
(begin
(set-option report gnc:pagename-display "Show table" #t)
(set-option report gnc:pagename-general "Start Date"
(cons 'absolute (gnc:get-start-this-month)))
(set-option report gnc:pagename-general "End Date"
(cons 'absolute (gnc:get-start-this-month)))
(set-option report gnc:pagename-general "Step Size" 'DayDelta)
(set-option report gnc:pagename-general "Price Source" 'pricedb-nearest)
(set-option report gnc:pagename-general "Report's currency" (gnc-default-report-currency))
(set-option report gnc:pagename-accounts "Accounts" (list my-asset-account))
(let ((doc (renderer report)))
(gnc:html-document-set-style-sheet! doc
(gnc:report-stylesheet report))
(let* ((result (gnc:html-document-render doc #f))
(tbl (stream->list
(pattern-streamer "<tr>"
(list (list "<string> ([0-9][0-9])/([0-9][0-9])/([0-9][0-9])</td>"
1 2 3)
(list "<number> ([^<]*)</td>" 1)
(list "<number> ([^<]*)</td>" 1)
(list "<number> ([^<]*)</td>" 1))
result))))
(format #t "~a\n" tbl)
(logging-and (= 1 (tbl-ref->number tbl 0 1))
(= 0 (tbl-ref->number tbl 0 2))
(= 1 (tbl-ref->number tbl 0 3))
(= 1 (tbl-row-count tbl))
(= 4 (tbl-column-count tbl)))))))))
(define (two-txn-test uuid)
(let* ((template (gnc:find-report-template uuid))
(options (gnc:make-report-options uuid))
(report (constructor uuid "bar" options
#t #t #f #f))
(renderer (gnc:report-template-renderer template)))
(let* ((env (create-test-env))
(my-asset-account (env-create-root-account env ACCT-TYPE-ASSET
(gnc-default-report-currency)))
(my-expense-account (env-create-root-account env ACCT-TYPE-EXPENSE
(gnc-default-report-currency)))
(my-income-account (env-create-root-account env ACCT-TYPE-INCOME
(gnc-default-report-currency)))
(date-0 (gnc:get-start-this-month))
(date-1 (gnc:timepair-next-day date-0))
(date-2 (gnc:timepair-next-day date-1)))
(env-create-transaction env
date-1
my-income-account
my-asset-account
(gnc:make-gnc-numeric -1 1))
(env-create-transaction env
date-2
my-income-account
my-asset-account
(gnc:make-gnc-numeric -5 1))
(begin
(set-option report gnc:pagename-display "Show table" #t)
(set-option report gnc:pagename-general "Start Date" (cons 'absolute date-0))
(set-option report gnc:pagename-general "End Date" (cons 'absolute date-2))
(set-option report gnc:pagename-general "Step Size" 'DayDelta)
(set-option report gnc:pagename-general "Price Source" 'pricedb-nearest)
(set-option report gnc:pagename-general "Report's currency" (gnc-default-report-currency))
(set-option report gnc:pagename-accounts "Accounts" (list my-asset-account))
(let ((doc (renderer report)))
(gnc:html-document-set-style-sheet! doc
(gnc:report-stylesheet report))
(let* ((result (gnc:html-document-render doc #f))
(tbl (stream->list
(pattern-streamer "<tr>"
(list (list "<string> ([0-9][0-9])/([0-9][0-9])/([0-9][0-9])</td>"
1 2 3)
(list "<number> ([^<]*)</td>" 1)
(list "<number> ([^<]*)</td>" 1)
(list "<number> ([^<]*)</td>" 1))
result))))
(format #t "~a\n~a\n" result tbl)
(logging-and (every (lambda (row)
(and (equal? (second row) (fourth row))
(= 0 (string->number (car (third row))))))
tbl)
(= 0 (tbl-ref->number tbl 0 1))
(= 1 (tbl-ref->number tbl 1 1))
(= 6 (tbl-ref->number tbl 2 1))
(= 3 (tbl-row-count tbl))
(= 4 (tbl-column-count tbl)))))))))
(define (two-txn-test-2 uuid)
(let* ((template (gnc:find-report-template uuid))
(options (gnc:make-report-options uuid))
(report (constructor uuid "bar" options
#t #t #f #f))
(renderer (gnc:report-template-renderer template)))
(let* ((env (create-test-env))
(my-asset-account (env-create-root-account env ACCT-TYPE-ASSET
(gnc-default-report-currency)))
(my-liability-account (env-create-root-account env ACCT-TYPE-LIABILITY
(gnc-default-report-currency)))
(my-expense-account (env-create-root-account env ACCT-TYPE-EXPENSE
(gnc-default-report-currency)))
(my-income-account (env-create-root-account env ACCT-TYPE-INCOME
(gnc-default-report-currency)))
(date-0 (gnc:get-start-this-month))
(date-1 (gnc:timepair-next-day date-0))
(date-2 (gnc:timepair-next-day date-1)))
(env-create-transaction env date-1 my-income-account my-asset-account (gnc:make-gnc-numeric -1 1))
(env-create-transaction env date-1 my-expense-account my-liability-account (gnc:make-gnc-numeric -1 1))
(env-create-transaction env date-2 my-income-account my-asset-account (gnc:make-gnc-numeric -5 1))
(env-create-transaction env date-2 my-expense-account my-liability-account (gnc:make-gnc-numeric -5 1))
(begin
(set-option report gnc:pagename-display "Show table" #t)
(set-option report gnc:pagename-general "Start Date" (cons 'absolute date-0))
(set-option report gnc:pagename-general "End Date" (cons 'absolute date-2))
(set-option report gnc:pagename-general "Step Size" 'DayDelta)
(set-option report gnc:pagename-general "Price Source" 'pricedb-nearest)
(set-option report gnc:pagename-general "Report's currency" (gnc-default-report-currency))
(set-option report gnc:pagename-accounts "Accounts" (list my-asset-account my-liability-account))
(let ((doc (renderer report)))
(gnc:html-document-set-style-sheet! doc
(gnc:report-stylesheet report))
(let* ((result (gnc:html-document-render doc #f))
(tbl (stream->list
(pattern-streamer "<tr>"
(list (list "<string> ([0-9][0-9])/([0-9][0-9])/([0-9][0-9])</td>"
1 2 3)
(list "<number> ([^<]*)</td>" 1)
(list "<number> ([^<]*)</td>" 1)
(list "<number> ([^<]*)</td>" 1))
result))))
(format #t "~a\n" tbl)
(logging-and (every (lambda (row)
(and (= (string->number (car (fourth row)))
(+ (string->number (car (second row)))
(string->number (car (third row)))))
;; txns added in pairs, so assets = liability
(equal? (second row) (third row))))
tbl)
(= 0 (tbl-ref->number tbl 0 1))
(= 1 (tbl-ref->number tbl 1 1))
(= 6 (tbl-ref->number tbl 2 1))
(= 3 (tbl-row-count tbl))
(= 4 (tbl-column-count tbl)))))))))

@ -0,0 +1,26 @@
(use-modules (ice-9 format))
(use-modules (ice-9 streams))
(use-modules (srfi srfi-1))
(use-modules (gnucash gnc-module))
(gnc:module-load "gnucash/report/report-system" 0)
(use-modules (gnucash main)) ;; FIXME: delete after we finish modularizing.
(use-modules (gnucash printf))
(use-modules (gnucash report report-system))
(use-modules (gnucash app-utils))
(use-modules (gnucash engine))
(use-modules (sw_engine))
(use-modules (gnucash report standard-reports net-barchart))
(use-modules (gnucash report report-system streamers))
;(use-modules (gnucash report new-reports reports-2))
(use-modules (gnucash report report-system test test-extras))
(use-modules (gnucash report standard-reports test test-generic-category-report))
(use-modules (gnucash report standard-reports category-barchart))
(define (run-test)
(run-category-income-expense-test category-barchart-income-uuid category-barchart-expense-uuid)
(run-category-asset-liability-test category-barchart-asset-uuid category-barchart-liability-uuid))

@ -0,0 +1,15 @@
;(use-modules (gnucash report new-reports reports-2))
(use-modules (gnucash gnc-module))
(gnc:module-load "gnucash/report/report-system" 0)
(use-modules (gnucash engine))
(use-modules (sw_engine))
(use-modules (gnucash report report-system test test-extras))
(use-modules (gnucash report standard-reports test test-generic-net-barchart))
(use-modules (gnucash report standard-reports net-barchart))
(define (run-test)
(run-net-asset-income-test net-worth-barchart-uuid income-expense-barchart-uuid))

@ -0,0 +1,15 @@
;(use-modules (gnucash report new-reports reports-2))
(use-modules (gnucash gnc-module))
(gnc:module-load "gnucash/report/report-system" 0)
(use-modules (gnucash engine))
(use-modules (sw_engine))
(use-modules (gnucash report report-system test test-extras))
(use-modules (gnucash report standard-reports test test-generic-net-linechart))
(use-modules (gnucash report standard-reports net-linechart))
(define (run-test)
(run-net-asset-test net-worth-linechart-uuid))
Loading…
Cancel
Save