diff options
author | Aaron W. Swenson <titanofold@gentoo.org> | 2019-01-09 08:05:16 -0500 |
---|---|---|
committer | Aaron W. Swenson <titanofold@gentoo.org> | 2019-01-09 08:06:11 -0500 |
commit | 935fed447ee5a63e63e6a82ab5889be407de30b4 (patch) | |
tree | 7ea146410ad35478df296bb26ae5e1d090dd748a /app-office/gnucash | |
parent | app-doc/gnucash-docs: Bump to 3.4 (diff) | |
download | gentoo-935fed447ee5a63e63e6a82ab5889be407de30b4.tar.gz gentoo-935fed447ee5a63e63e6a82ab5889be407de30b4.tar.bz2 gentoo-935fed447ee5a63e63e6a82ab5889be407de30b4.zip |
app-office/gnucash: Bump to 3.4
Manually insert test-stress-options.scm as it is missing from the
source tarball, which causes the test-stress-options unit test to fail.
Add patch to fix test-transaction unit test failure.
Package-Manager: Portage-2.3.51, Repoman-2.3.11
Signed-off-by: Aaron W. Swenson <titanofold@gentoo.org>
Diffstat (limited to 'app-office/gnucash')
-rw-r--r-- | app-office/gnucash/Manifest | 1 | ||||
-rw-r--r-- | app-office/gnucash/files/gnucash-3.4-test-stress-options.scm | 315 | ||||
-rw-r--r-- | app-office/gnucash/files/gnucash-3.4-test-transaction.patch | 25 | ||||
-rw-r--r-- | app-office/gnucash/gnucash-3.4.ebuild | 178 |
4 files changed, 519 insertions, 0 deletions
diff --git a/app-office/gnucash/Manifest b/app-office/gnucash/Manifest index c2508be77204..6bd42515824e 100644 --- a/app-office/gnucash/Manifest +++ b/app-office/gnucash/Manifest @@ -1,3 +1,4 @@ DIST gnucash-3.2.tar.bz2 13383942 BLAKE2B ce4beb9eab290bbc85c4b3bf68b205a8ebb274056bf10ef1721bce48ec18e4df4b488ce885dc767b4f1e951dabcdc2ba702cb5fe239f249ec50c8d2d1d12a434 SHA512 ef74cbf396096a71316e14500a5b4e57670f9e9c0c5d46f3afe051ccbae2e46a5f14edd8dd805dfb61276b934db286d48ae044160699df82689e2718ed2f7573 DIST gnucash-3.3.tar.bz2 13440713 BLAKE2B a308af90d8a8e50eb732d29c7eadac1fb75b63006da5bbaa9044039c43c1c17976c6b6fdb1706a08a527b75b1300df3a8ed469151370097b0308a173a170e41b SHA512 4bf0369ca9b3c91c98a0d916f0befc7e5675a246559a6a72dba6592b64f56f3cbd1885b0711e44e8d9cca290be742812763691ae2f639ea31ec534e52e17b3f9 +DIST gnucash-3.4.tar.bz2 13564432 BLAKE2B 478d8e2e4acbd0725ceaf997a1e62ba3875e9d4a003e8a3e69111a9d29118447fb2da8ef3e5dd5274d83a3adef1ee9f4a153cdfd17cabe69864b53bab8c7e813 SHA512 4cebef0ba70e59a82d3b2b7b0b138ddb22e8866dc761e156ff1f15920145d12923719effef21ad4c65ccd62fbd14a1529cf0bfcaab70c5b33d103761d08062e0 DIST gtest-1.8.0.tar.gz 1281617 BLAKE2B ac052b4d0eb0d8ded03a8c7dff05177818627b8a51f2dbc2c162b2ee2a5d1323539e7d0d02236d9ebb799995e018f0171c2fdaeb4de3bb339548265e50de79e6 SHA512 1dbece324473e53a83a60601b02c92c089f5d314761351974e097b2cf4d24af4296f9eb8653b6b03b1e363d9c5f793897acae1f0c7ac40149216035c4d395d9d diff --git a/app-office/gnucash/files/gnucash-3.4-test-stress-options.scm b/app-office/gnucash/files/gnucash-3.4-test-stress-options.scm new file mode 100644 index 000000000000..e85cd61a8efe --- /dev/null +++ b/app-office/gnucash/files/gnucash-3.4-test-stress-options.scm @@ -0,0 +1,315 @@ +(use-modules (ice-9 textual-ports)) +(use-modules (ice-9 popen)) +(use-modules (gnucash utilities)) +(use-modules (gnucash gnc-module)) +(gnc:module-begin-syntax (gnc:module-load "gnucash/app-utils" 0)) +(use-modules (gnucash engine test test-extras)) +(use-modules (gnucash report standard-reports)) +(use-modules (gnucash report business-reports)) +(use-modules (gnucash report view-column)) +(use-modules (gnucash report stylesheets)) +(use-modules (gnucash report taxinvoice)) +(use-modules (gnucash report report-system)) +(use-modules (gnucash report report-system test test-extras)) +(use-modules (srfi srfi-64)) +(use-modules (srfi srfi-98)) +(use-modules (gnucash engine test srfi64-extras)) +(use-modules (sxml simple)) +(use-modules (sxml xpath)) + +;; NOTE +;; ---- +;; SIMPLE stress tests by default +;; +;; PAIRWISE COMBINATORICS are enabled by setting environment variable COMBINATORICS +;; to the fullpath for the compiled jenny from http://burtleburtle.net/bob/math/jenny.html +;; +;; e.g. COMBINATORICS=/home/user/jenny/jenny ninja check + +(define optionslist '()) + +(define (generate-optionslist) + (gnc:report-templates-for-each + (lambda (report-id template) + (let* ((options-generator (gnc:report-template-options-generator template)) + (name (gnc:report-template-name template)) + (options (options-generator))) + (set! optionslist + (cons (list (cons 'report-id report-id) + (cons 'report-name (gnc:report-template-name template)) + (cons 'options (let ((report-options-tested '())) + (gnc:options-for-each + (lambda (option) + (when (memq (gnc:option-type option) + '(multichoice boolean)) + (set! report-options-tested + (cons (vector + (gnc:option-section option) + (gnc:option-name option) + (gnc:option-type option) + (case (gnc:option-type option) + ((multichoice) (map (lambda (d) (vector-ref d 0)) + (gnc:option-data option))) + ((boolean) (list #t #f)))) + report-options-tested)))) + options) + report-options-tested))) + optionslist)))))) + +;; Explicitly set locale to make the report output predictable +(setlocale LC_ALL "C") + +(define (run-test) + (test-runner-factory gnc:test-runner) + (test-begin "stress options") + (generate-optionslist) + (tests) + (test-end "stress options")) + +(define jennypath + (get-environment-variable "COMBINATORICS")) + +(define jenny-exists? + ;; this is a simple test for presence of jenny - will check + ;; COMBINATORICS env exists, and running it produces exit-code of + ;; zero, and tests the first few letters of its output. + (and (string? jennypath) + (zero? (system jennypath)) + (string=? (string-take (get-string-all (open-input-pipe jennypath)) 6) + "jenny:"))) + +(define (set-option! options section name value) + (let ((option (gnc:lookup-option options section name))) + (if option + (gnc:option-set-value option value)))) + +(define (mnemonic->commodity sym) + (gnc-commodity-table-lookup + (gnc-commodity-table-get-table (gnc-get-current-book)) + (gnc-commodity-get-namespace (gnc-default-report-currency)) + sym)) + +(define structure + (list "Root" (list (cons 'type ACCT-TYPE-ASSET)) + (list "Asset" + (list "Bank") + (list "GBP Bank" (list (cons 'commodity (mnemonic->commodity "GBP")))) + (list "Wallet")) + (list "Income" (list (cons 'type ACCT-TYPE-INCOME))) + (list "Income-GBP" (list (cons 'type ACCT-TYPE-INCOME) + (cons 'commodity (mnemonic->commodity "GBP")))) + (list "Expenses" (list (cons 'type ACCT-TYPE-EXPENSE))) + (list "Liabilities" (list (cons 'type ACCT-TYPE-LIABILITY))) + (list "Equity" (list (cons 'type ACCT-TYPE-EQUITY))) + )) + +(define (simple-stress-test report-name uuid report-options) + (let ((options (gnc:make-report-options uuid))) + (test-assert (format #f "basic test ~a" report-name) + (gnc:options->render uuid options (string-append "stress-" report-name) "test")) + (format #t "Testing SIMPLE combinations for:\n~a" report-name) + (for-each + (lambda (option) + (format #t ",~a/~a" + (vector-ref option 0) + (vector-ref option 1))) + report-options) + (newline) + (for-each + (lambda (idx) + (display report-name) + (for-each + (lambda (option) + (let* ((section (vector-ref option 0)) + (name (vector-ref option 1)) + (value (list-ref (vector-ref option 3) + (modulo idx (length (vector-ref option 3)))))) + (set-option! options section name value) + (format #t ",~a" + (cond + ((boolean? value) (if value 't 'f)) + (else value))))) + report-options) + (catch #t + (lambda () + (gnc:options->render uuid options "stress-test" "test") + (display "[pass]\n")) + (lambda (k . args) + (format #t "[fail]... error: (~s . ~s) options-list are:\n~a" + k args + (gnc:html-render-options-changed options #t)) + (test-assert "logging test failure as above..." + #f)))) + (iota + (apply max + (map (lambda (opt) (length (vector-ref opt 3))) + report-options))) + ))) + +(define (combinatorial-stress-test report-name uuid report-options) + (let* ((options (gnc:make-report-options uuid)) + (render #f)) + (test-assert (format #f "basic test ~a" report-name) + (set! render + (gnc:options->render + uuid options (string-append "stress-" report-name) "test"))) + (if render + (begin + (format #t "Testing n-tuple combinatorics for:\n~a" report-name) + (for-each + (lambda (option) + (format #t ",~a/~a" + (vector-ref option 0) + (vector-ref option 1))) + report-options) + (newline) + ;; generate combinatorics + (let* ((option-lengths (map (lambda (report-option) + (length (vector-ref report-option 3))) + report-options)) + (jennyargs (string-join (map number->string option-lengths) " ")) + (n-tuple (min + ;; the following is the n-tuple + 2 + (length report-options))) + (cmdline (format #f "~a -n~a ~a" + jennypath n-tuple jennyargs)) + (jennyout (get-string-all (open-input-pipe cmdline))) + (test-cases (string-split jennyout #\newline))) + (for-each + (lambda (case) + (unless (string-null? case) + (let* ((choices-str (string-filter char-alphabetic? case)) + (choices-alpha (map char->integer (string->list choices-str))) + (choices (map (lambda (n) + (- n (if (> n 96) 97 39))) ; a-z -> 0-25, and A-Z -> 26-51 + choices-alpha))) + (let loop ((option-idx (1- (length report-options))) + (option-summary '())) + (if (negative? option-idx) + (catch #t + (lambda () + (gnc:options->render uuid options "stress-test" "test") + (format #t "[pass] ~a:~a \n" + report-name + (string-join option-summary ","))) + (lambda (k . args) + (format #t "[fail]... error (~s . ~s) options-list are:\n~a" + k args + (gnc:html-render-options-changed options #t)) + (test-assert "logging test failure as above..." + #f))) + (let* ((option (list-ref report-options option-idx)) + (section (vector-ref option 0)) + (name (vector-ref option 1)) + (value (list-ref (vector-ref option 3) + (list-ref choices option-idx)))) + (set-option! options section name value) + (loop (1- option-idx) + (cons (format #f "~a" + (cond + ((boolean? value) (if value 't 'f)) + (else value))) + option-summary)))))))) + test-cases))) + (display "...aborted due to basic test failure")))) + +(define test + ;; what strategy are we using here? simple stress test (ie tests as + ;; many times as the maximum number of options) or combinatorial + ;; tests (using jenny) + (if jenny-exists? + combinatorial-stress-test + simple-stress-test)) + +(define (create-test-data) + (let* ((env (create-test-env)) + (account-alist (env-create-account-structure-alist env structure)) + (bank (cdr (assoc "Bank" account-alist))) + (gbp-bank (cdr (assoc "GBP Bank" account-alist))) + (wallet (cdr (assoc "Wallet" account-alist))) + (income (cdr (assoc "Income" account-alist))) + (gbp-income (cdr (assoc "Income-GBP" account-alist))) + (expense (cdr (assoc "Expenses" account-alist))) + (liability (cdr (assoc "Liabilities" account-alist))) + (equity (cdr (assoc "Equity" account-alist)))) + ;; populate datafile with old transactions + (env-transfer env 01 01 1970 bank expense 5 #:description "desc-1" #:num "trn1" #:memo "memo-3") + (env-transfer env 31 12 1969 income bank 10 #:description "desc-2" #:num "trn2" #:void-reason "void" #:notes "notes3") + (env-transfer env 31 12 1969 income bank 29 #:description "desc-3" #:num "trn3" + #:reconcile (cons #\c (gnc-dmy2time64 01 03 1970))) + (env-transfer env 01 02 1970 bank expense 15 #:description "desc-4" #:num "trn4" #:notes "notes2" #:memo "memo-1") + (env-transfer env 10 01 1970 liability expense 10 #:description "desc-5" #:num "trn5" #:void-reason "any") + (env-transfer env 10 01 1970 liability expense 11 #:description "desc-6" #:num "trn6" #:notes "notes1") + (env-transfer env 10 02 1970 bank liability 8 #:description "desc-7" #:num "trn7" #:notes "notes1" #:memo "memo-2" + #:reconcile (cons #\y (gnc-dmy2time64 01 03 1970))) + (let ((txn (xaccMallocTransaction (gnc-get-current-book))) + (split-1 (xaccMallocSplit (gnc-get-current-book))) + (split-2 (xaccMallocSplit (gnc-get-current-book))) + (split-3 (xaccMallocSplit (gnc-get-current-book)))) + (xaccTransBeginEdit txn) + (xaccTransSetDescription txn "$100bank -> $80expenses + $20wallet") + (xaccTransSetCurrency txn (xaccAccountGetCommodity bank)) + (xaccTransSetDate txn 14 02 1971) + (xaccSplitSetParent split-1 txn) + (xaccSplitSetParent split-2 txn) + (xaccSplitSetParent split-3 txn) + (xaccSplitSetAccount split-1 bank) + (xaccSplitSetAccount split-2 expense) + (xaccSplitSetAccount split-3 wallet) + (xaccSplitSetValue split-1 -100) + (xaccSplitSetValue split-2 80) + (xaccSplitSetValue split-3 20) + (xaccSplitSetAmount split-1 -100) + (xaccSplitSetAmount split-2 80) + (xaccSplitSetAmount split-3 20) + (xaccTransSetNotes txn "multisplit") + (xaccTransCommitEdit txn)) + (let ((closing-txn (env-transfer env 31 12 1977 expense equity 111 #:description "Closing"))) + (xaccTransSetIsClosingTxn closing-txn #t)) + (env-transfer-foreign env 15 01 2000 gbp-bank bank 10 14 #:description "GBP 10 to USD 14") + (env-transfer-foreign env 15 02 2000 bank gbp-bank 9 6 #:description "USD 9 to GBP 6") + (for-each (lambda (m) + (env-transfer env 08 (1+ m) 1978 gbp-income gbp-bank 51 #:description "#51 income") + (env-transfer env 03 (1+ m) 1978 income bank 103 #:description "$103 income") + (env-transfer env 15 (1+ m) 1978 bank expense 22 #:description "$22 expense") + (env-transfer env 09 (1+ m) 1978 income bank 109 #:description "$109 income")) + (iota 12)) + (let ((mid (floor (/ (+ (gnc-accounting-period-fiscal-start) + (gnc-accounting-period-fiscal-end)) 2)))) + (env-create-transaction env mid bank income 200)))) + +(define (run-tests prefix) + (for-each + (lambda (option-set) + (let ((report-name (assq-ref option-set 'report-name)) + (report-guid (assq-ref option-set 'report-id)) + (report-options (assq-ref option-set 'options))) + (if (member report-name + ;; these reports seem to cause problems when running... + '( + ;; eguile-based reports + "Tax Invoice" + "Receipt" + "Australian Tax Invoice" + "Balance Sheet (eguile)" + + ;; tax-schedule - locale-dependent? + "Tax Schedule Report/TXF Export" + + ;; unusual reports + "Welcome to GnuCash" + "Hello, World" + "Multicolumn View" + "General Journal" + )) + (format #t "\nSkipping ~a ~a...\n" report-name prefix) + (begin + (format #t "\nTesting ~a ~a...\n" report-name prefix) + (test report-name report-guid report-options))))) + optionslist)) + +(define (tests) + (run-tests "with empty book") + (create-test-data) + (run-tests "on a populated book")) diff --git a/app-office/gnucash/files/gnucash-3.4-test-transaction.patch b/app-office/gnucash/files/gnucash-3.4-test-transaction.patch new file mode 100644 index 000000000000..bf7180e664fd --- /dev/null +++ b/app-office/gnucash/files/gnucash-3.4-test-transaction.patch @@ -0,0 +1,25 @@ +From 95bee405cf5568f5899287ba62058cf894361676 Mon Sep 17 00:00:00 2001 +From: Christopher Lam <christopher.lck@gmail.com> +Date: Wed, 2 Jan 2019 00:00:56 +0800 +Subject: [PATCH] [test-transaction] fix a test which was hardcoded to 2018. + +This test was hard-coded to pass in 2018. Fix. +--- + gnucash/report/standard-reports/test/test-transaction.scm | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/gnucash/report/standard-reports/test/test-transaction.scm b/gnucash/report/standard-reports/test/test-transaction.scm +index 755aba2983..2f428e24e9 100644 +--- a/gnucash/report/standard-reports/test/test-transaction.scm ++++ b/gnucash/report/standard-reports/test/test-transaction.scm +@@ -652,8 +652,8 @@ + (list "Grand Total" "$2,280.00" "$2,280.00") + (get-row-col sxml -1 #f)) + (test-equal "dual amount column, first transaction correct" +- (list "01/03/18" "$103 income" "Root.Asset.Bank" "$103.00" "$103.00") +- (get-row-col sxml 1 #f))) ++ (list "$103 income" "Root.Asset.Bank" "$103.00" "$103.00") ++ (cdr (get-row-col sxml 1 #f)))) + ) + + (test-end "display options") diff --git a/app-office/gnucash/gnucash-3.4.ebuild b/app-office/gnucash/gnucash-3.4.ebuild new file mode 100644 index 000000000000..970c9bf9bf22 --- /dev/null +++ b/app-office/gnucash/gnucash-3.4.ebuild @@ -0,0 +1,178 @@ +# Copyright 1999-2019 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +# google{test,mock} version +GV="1.8.0" +PYTHON_COMPAT=( python3_{4,5,6} ) + +inherit cmake-utils gnome2-utils python-single-r1 xdg-utils + +DESCRIPTION="A personal finance manager" +HOMEPAGE="http://www.gnucash.org/" +SRC_URI="https://github.com/Gnucash/${PN}/releases/download/${PV}/${P}.tar.bz2 + https://github.com/google/googletest/archive/release-${GV}.tar.gz -> gtest-${GV}.tar.gz" + +SLOT="0" +LICENSE="GPL-2" +KEYWORDS="~amd64 ~ppc ~ppc64 ~x86" + +IUSE="aqbanking chipcard debug doc examples gnome-keyring +gui mysql nls ofx + postgres python quotes -register2 sqlite" + +REQUIRED_USE=" + chipcard? ( aqbanking ) + python? ( ${PYTHON_REQUIRED_USE} )" + +# libdbi version requirement for sqlite taken from bug #455134 +# +# dev-libs/boost must always be built with nls enabled. +# guile[deprecated] because of SCM_LIST*() use +RDEPEND=" + >=dev-libs/glib-2.46.0:2 + >=dev-libs/libxml2-2.7.0:2 + >=sys-libs/zlib-1.1.4 + >=dev-scheme/guile-2.2.0:12=[deprecated,regex] + dev-libs/boost:=[icu,nls] + dev-libs/icu:= + dev-libs/libxslt + aqbanking? ( + >=net-libs/aqbanking-5[gtk,ofx?] + sys-libs/gwenhywfar[gtk] + chipcard? ( sys-libs/libchipcard ) + ) + gnome-keyring? ( >=app-crypt/libsecret-0.18 ) + gui? ( + gnome-base/dconf + net-libs/webkit-gtk:4= + >=x11-libs/gtk+-3.14.0:3 + ) + mysql? ( + dev-db/libdbi + dev-db/libdbi-drivers[mysql] + ) + ofx? ( >=dev-libs/libofx-0.9.1 ) + postgres? ( + dev-db/libdbi + dev-db/libdbi-drivers[postgres] + ) + python? ( ${PYTHON_DEPS} ) + quotes? ( + >=dev-perl/Finance-Quote-1.11 + dev-perl/Date-Manip + dev-perl/HTML-TableExtract + ) + sqlite? ( + >=dev-db/libdbi-0.9.0 + >=dev-db/libdbi-drivers-0.9.0[sqlite] + ) +" + +DEPEND="${RDEPEND} + ~dev-cpp/gtest-${GV} + >=sys-devel/gettext-0.19.6 + dev-lang/perl + dev-perl/XML-Parser + sys-devel/libtool + virtual/pkgconfig +" + +PDEPEND="doc? ( + ~app-doc/gnucash-docs-${PV} + gnome-extra/yelp +)" + +PATCHES=( "${FILESDIR}"/${PN}-3.2-no-gui.patch + # Fixed in 3.5 + "${FILESDIR}"/${PN}-3.4-test-transaction.patch ) + +pkg_setup() { + use python && python-single-r1_pkg_setup + xdg_environment_reset +} + +src_unpack() { + default + cp "${FILESDIR}"/gnucash-3.4-test-stress-options.scm \ + ${PN}-${PV}/${PN}/report/standard-reports/test/test-stress-options.scm \ + || die "Failed copying scm" +} + +src_configure() { + local sql_on_off="OFF" + if use mysql || use postgres || use sqlite ; then + sql_on_off="ON" + fi + + local mycmakeargs=( + -DGMOCK_ROOT="${WORKDIR}"/googletest-release-${GV}/googlemock + -DGTEST_ROOT="${WORKDIR}"/googletest-release-${GV}/googletest + # Disable fallback to guile-2.0 + -DCMAKE_DISABLE_FIND_PACKAGE_GUILE2=ON + -DCOMPILE_GSCHEMAS=OFF + -DDISABLE_NLS=$(usex !nls) + -DENABLE_REGISTER2=$(usex register2) + -DWITH_AQBANKING=$(usex aqbanking) + -DWITH_OFX=$(usex ofx) + -DWITH_PYTHON=$(usex python) + -DWITH_SQL=${sql_on_off} + -DWITH_GNUCASH=$(usex gui) + ) + + cmake-utils_src_configure +} + +src_test() { + if use python ; then + cp common/test-core/unittest_support.py \ + "${BUILD_DIR}"/common/test-core/ || die + fi + + cd "${BUILD_DIR}" || die + XDG_DATA_HOME="${T}/$(whoami)" emake check +} + +src_install() { + cmake-utils_src_install + + rm "${ED%/}"/usr/share/doc/${PF}/README.dependencies || die + + if use examples ; then + mv "${ED%/}"/usr/share/doc/gnucash \ + "${ED%/}"/usr/share/doc/${PF}/examples || die + pushd "${ED%/}"/usr/share/doc/${PF}/examples/ > /dev/null || die + rm AUTHORS DOCUMENTERS LICENSE NEWS projects.html ChangeLog* \ + *win32-bin.txt || die + popd > /dev/null || die + docompress -x /usr/share/doc/${PF}/examples/ + else + rm -r "${ED%/}"/usr/share/doc/gnucash || die + fi + + use aqbanking && dodoc doc/README.HBCI + use ofx && dodoc doc/README.OFX +} + +pkg_postinst() { + if use gui ; then + gnome2_icon_cache_update + gnome2_schemas_update + fi + xdg_desktop_database_update + xdg_mimeinfo_database_update + + ewarn "Backup all financial files or databases before using GnuCash >=2.7.0!" + ewarn + ewarn "GnuCash 2.7.0 introduced large changes in its file format and database" + ewarn "schema that WILL prevent you from reverting back to GnuCash 2.6." +} + +pkg_postrm() { + if use gui ; then + gnome2_icon_cache_update + gnome2_schemas_update + fi + xdg_desktop_database_update + xdg_mimeinfo_database_update +} |