emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/ebdb 6549647 198/350: More tests


From: Eric Abrahamsen
Subject: [elpa] externals/ebdb 6549647 198/350: More tests
Date: Mon, 14 Aug 2017 11:46:36 -0400 (EDT)

branch: externals/ebdb
commit 6549647a384895771113aaafea4746d6143bf421
Author: Eric Abrahamsen <address@hidden>
Commit: Eric Abrahamsen <address@hidden>

    More tests
    
    * ebdb-test.el (ebdb-test-with-database, ebdb-test-save-vars): Macros
      for set-up and protection against polluting a running EBDB
      environment.
      (ebdb-test-database-1): Make a temp file name for creating a test
      database.
      (ebdb-make-database, ebdb-read-database, ebdb-database-unsynced,
      ebdb-make-record, ebdb-add-record): New tests.
---
 ebdb-test.el | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 73 insertions(+), 1 deletion(-)

diff --git a/ebdb-test.el b/ebdb-test.el
index a1598a3..4687fcf 100644
--- a/ebdb-test.el
+++ b/ebdb-test.el
@@ -24,9 +24,81 @@
 ;;; Code:
 
 (require 'ert)
-(require 'pcase)
 (require 'ebdb)
 (require 'ebdb-snarf)
+(eval-when-compile
+  (require 'cl-macs))
+
+;; Testing macros.
+
+(defmacro ebdb-test-with-database (db-and-filename &rest body)
+  "Macro providing a temporary database to work with."
+  (declare (indent 1) (debug t))
+  `(let ((,(car db-and-filename) (make-instance 'ebdb-db-file
+                                                :file ,(nth 1 db-and-filename)
+                                                :dirty t)))
+     (ebdb-db-save ,(car db-and-filename))
+     (unwind-protect
+        (progn
+          ,@body)
+       (delete-file ,(nth 1 db-and-filename))
+       (setq ebdb-db-list (remove ,(car db-and-filename)
+                                 ebdb-db-list)))))
+
+(defmacro ebdb-test-save-vars (&rest body)
+  "Don't let EBDB tests pollute `ebdb-record-tracker'."
+  (declare (indent 0) (debug t))
+  (let ((old-record-tracker (cl-gensym)))
+    `(let ((,old-record-tracker ebdb-record-tracker)
+          (ebdb-record-tracker nil))
+       (unwind-protect
+          (progn
+            ,@body)
+        (setq ebdb-record-tracker ,old-record-tracker)))))
+
+;; Test database file name.
+(defvar ebdb-test-database-1 (make-temp-name
+                             (expand-file-name
+                              "ebdb-test-db-1-"
+                              temporary-file-directory)))
+
+(ert-deftest ebdb-make-database ()
+  "Make a database and save it to disk."
+  (ebdb-test-with-database (db ebdb-test-database-1)
+    (should (file-exists-p ebdb-test-database-1))
+    (should (null (slot-value db 'dirty)))))
+
+(ert-deftest ebdb-read-database ()
+  "Read a database from file."
+  (ebdb-test-with-database (db ebdb-test-database-1)
+    (let ((reloaded
+          (eieio-persistent-read ebdb-test-database-1 'ebdb-db t)))
+      (should (object-of-class-p reloaded 'ebdb-db-file)))))
+
+(ert-deftest ebdb-database-unsynced ()
+  "Make sure database knows it's unsynced."
+  (ebdb-test-with-database (db ebdb-test-database-1)
+    ;; Sync-time doesn't get updated until we load it.
+    (ebdb-db-load db)
+    ;; Apparently the two calls are too close together to register a
+    ;; difference in time, which I find weird.
+    (sit-for 0.1)
+    (append-to-file "\n;; Junk string" nil (slot-value db 'file))
+    (should (ebdb-db-unsynced db))))
+
+(ert-deftest ebdb-make-record ()
+  (ebdb-test-save-vars
+   (let ((rec (make-instance ebdb-default-record-class)))
+     (should (object-of-class-p rec 'ebdb-record)))))
+
+(ert-deftest ebdb-add-record ()
+  "Create a record, add it to DB, and make sure it has a UUID."
+  (ebdb-test-save-vars
+    (ebdb-test-with-database (db ebdb-test-database-1)
+      (let ((rec (make-instance 'ebdb-record-person)))
+       (should (null (ebdb-record-uuid rec)))
+       (ebdb-db-add-record db rec)
+       (should (stringp (ebdb-record-uuid rec)))))))
 
 ;; Very basic sanity tests for field instances.
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]