diff --git a/src/report/standard-reports/test/Makefile.am b/src/report/standard-reports/test/Makefile.am index 696de2315da..0406519cb84 100644 --- a/src/report/standard-reports/test/Makefile.am +++ b/src/report/standard-reports/test/Makefile.am @@ -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} + + diff --git a/src/report/standard-reports/test/test-generic-category-report.scm b/src/report/standard-reports/test/test-generic-category-report.scm new file mode 100644 index 00000000000..13d148804b1 --- /dev/null +++ b/src/report/standard-reports/test/test-generic-category-report.scm @@ -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 )) + +;(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 "" + (list (list " ([0-9][0-9])/([0-9][0-9])/([0-9][0-9])" 1 2 3) + (list " ([^<]*)" 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 "" + (list (list " ([0-9][0-9])/([0-9][0-9])/([0-9][0-9])" 1 2 3) + (list " ([^<]*)" 1) + (list " ([^<]*)" 1) + (list " ([^<]*)" 1) + (list " ([^<]*)" 1) + (list " ([^<]*)" 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 "" + (list (list " ([^<]*)list + (pattern-streamer "" + (list (list " ([0-9][0-9])/([0-9][0-9])/([0-9][0-9])" 1 2 3) + (list " ([^<]*)" 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))))))) + diff --git a/src/report/standard-reports/test/test-generic-net-barchart.scm b/src/report/standard-reports/test/test-generic-net-barchart.scm new file mode 100644 index 00000000000..df80935b7fa --- /dev/null +++ b/src/report/standard-reports/test/test-generic-net-barchart.scm @@ -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 )) + +(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 "" + (list (list " ([0-9][0-9])/([0-9][0-9])/([0-9][0-9])" + 1 2 3) + (list " ([^<]*)" 1) + (list " ([^<]*)" 1) + (list " ([^<]*)" 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 "" + (list (list " ([0-9][0-9])/([0-9][0-9])/([0-9][0-9])" + 1 2 3) + (list " ([^<]*)" 1) + (list " ([^<]*)" 1) + (list " ([^<]*)" 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 "" + (list (list " ([0-9][0-9])/([0-9][0-9])/([0-9][0-9])" + 1 2 3) + (list " ([^<]*)" 1) + (list " ([^<]*)" 1) + (list " ([^<]*)" 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 "" + (list (list " ([0-9][0-9])/([0-9][0-9])/([0-9][0-9])" + 1 2 3) + (list " ([^<]*)" 1) + (list " ([^<]*)" 1) + (list " ([^<]*)" 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))))))))) diff --git a/src/report/standard-reports/test/test-generic-net-linechart.scm b/src/report/standard-reports/test/test-generic-net-linechart.scm new file mode 100644 index 00000000000..e6f168fce62 --- /dev/null +++ b/src/report/standard-reports/test/test-generic-net-linechart.scm @@ -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 )) + +(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 "" + (list (list " ([0-9][0-9])/([0-9][0-9])/([0-9][0-9])" + 1 2 3) + (list " ([^<]*)" 1) + (list " ([^<]*)" 1) + (list " ([^<]*)" 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 "" + (list (list " ([0-9][0-9])/([0-9][0-9])/([0-9][0-9])" + 1 2 3) + (list " ([^<]*)" 1) + (list " ([^<]*)" 1) + (list " ([^<]*)" 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 "" + (list (list " ([0-9][0-9])/([0-9][0-9])/([0-9][0-9])" + 1 2 3) + (list " ([^<]*)" 1) + (list " ([^<]*)" 1) + (list " ([^<]*)" 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))))))))) + diff --git a/src/report/standard-reports/test/test-standard-category-report.scm b/src/report/standard-reports/test/test-standard-category-report.scm new file mode 100644 index 00000000000..a6900043de3 --- /dev/null +++ b/src/report/standard-reports/test/test-standard-category-report.scm @@ -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)) diff --git a/src/report/standard-reports/test/test-standard-net-barchart.scm b/src/report/standard-reports/test/test-standard-net-barchart.scm new file mode 100644 index 00000000000..a2ab937298b --- /dev/null +++ b/src/report/standard-reports/test/test-standard-net-barchart.scm @@ -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)) + diff --git a/src/report/standard-reports/test/test-standard-net-linechart.scm b/src/report/standard-reports/test/test-standard-net-linechart.scm new file mode 100644 index 00000000000..2664769f54c --- /dev/null +++ b/src/report/standard-reports/test/test-standard-net-linechart.scm @@ -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)) +