emacs-config/local/lib/org-x/test/org-x-dag-test.el

104 lines
3.6 KiB
EmacsLisp

;;; org-x-dag-test.el --- Smesh my API -*- lexical-binding: t -*-
;; Copyright (C) 2015 Free Software Foundation, Inc.
;; 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 3 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, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; run tests with this (in the org-x directory above this one):
;; emacs -batch -l ../../../init.el -l test/org-x-dag-test.el -f buttercup-run
;;; Code:
(require 's)
(require 'either)
(require 'dash)
(require 'org-x)
(defun setup ()
(setq org-directory "test/dag"
org-x-action-files (list "action1.org" "action2.org")
org-x-endpoint-goal-file "endpoint.org"
org-x-lifetime-goal-file "lifetime.org"
org-x-survival-goal-file "survival.org"
org-x-daily-plan-file "daily.org"
org-x-weekly-plan-file "weekly.org"
org-x-quarterly-plan-file "quarterly.org"))
(buttercup-define-matcher :to-be-left-with (a x)
(cl-destructuring-bind
((a-expr . a) (x-expr . x))
(mapcar #'buttercup--expr-and-value (list a x))
(either-from a
(lambda (l)
(if (equal l x)
`(t . ,(format "Expected %s left with %s" a-expr x))
`(nil . ,(format "Expected %s left with %s, but got left with %s"
a-expr x l))))
(lambda ()
`(nil . ,(format "Expected %s to be a left, got a right" a-expr))))))
(buttercup-define-matcher :to-have-same-as-plist (a b)
(cl-destructuring-bind
((a-expr . a) (b-expr . b))
(mapcar #'buttercup--expr-and-value (list a b))
(let* ((a* (-partition 2 a))
(b* (-partition 2 b))
(a-diff (->> (-difference a* b*) (--map (format "%S" it)) (s-join ", ")))
(b-diff (->> (-difference b* a*) (--map (format "%S" it)) (s-join ", "))))
(cond
((and a-diff b-diff)
(cons nil (format "Expected %s to have pairs '%s' and not to have pairs '%s'"
a-expr b-diff a-diff)))
(a-diff
(cons nil (format "Expected %s not to have pairs '%s'" a-expr a-diff)))
(b-diff
(cons nil (format "Expected %s to have pairs '%s'" a-expr b-diff)))
(t
(cons t (format "Expected %s not to have same items as '%s'"
a-expr b-expr)))))))
;; (defun bs-error (id left)
;; (let ((bs (org-x-dag-id->bs id)))
;; (expect (either-is-left-p bs))
;; (expect (either-from-left bs nil) :to-equal left)))
;; (defun bs-action-equal (id ancestry local)
;; (let ((bs (org-x-dag-id-bs id)))
;; (expect (either-is-right-p bs))
;; (from-either (org-x-dag-id-bs id)
;; (expect (org-x-dag-id-bs id) :to-equal bs))
(describe "Sync DAG"
;; TODO this won't actually fail if there is an error
(it "Sync completes without error"
(setup)
(org-x-dag-sync t))
(it "One random hash is present in the dag"
(expect (org-x-dag-id->title "06592f95-9cf5-4d7e-8546-da7796d76813")
:to-equal
"don't be a dick"))
(it "test my own macros"
(expect (either :left "blabla") :to-be-left-with "blabla"))
(it "test my own macros"
(expect '(:a 1) :to-have-same-as-plist '(:b 1))))
(provide 'org-x-dag-test)
;;; org-x-dag-test.el ends here