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

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

[nongnu] elpa/emacsql 0cb9e47d24 227/427: Test all available backends.


From: ELPA Syncer
Subject: [nongnu] elpa/emacsql 0cb9e47d24 227/427: Test all available backends.
Date: Tue, 13 Dec 2022 02:59:46 -0500 (EST)

branch: elpa/emacsql
commit 0cb9e47d24e439ddd31c7cf971f47a9306083e6d
Author: Christopher Wellons <wellons@nullprogram.com>
Commit: Christopher Wellons <wellons@nullprogram.com>

    Test all available backends.
---
 emacsql-tests.el | 87 +++++++++++++++++++++++++++++++++++---------------------
 1 file changed, 54 insertions(+), 33 deletions(-)

diff --git a/emacsql-tests.el b/emacsql-tests.el
index 4172dd8ad5..15ca448a42 100644
--- a/emacsql-tests.el
+++ b/emacsql-tests.el
@@ -5,10 +5,26 @@
 (require 'ert)
 (require 'emacsql)
 (require 'emacsql-sqlite)
+(require 'emacsql-psql)
 
 (defvar emacsql-tests-timeout 4
   "Be aggressive about not waiting on subprocesses in unit tests.")
 
+(defvar emacsql-tests-connection-factories
+  (let ((factories ())
+        (pgdatabase (getenv "PGDATABASE")))
+    (push (cons "sqlite" (apply-partially #'emacsql-sqlite nil)) factories)
+    (when pgdatabase
+      (push (cons "psql" (apply-partially #'emacsql-psql pgdatabase))
+            factories))
+    (nreverse factories))
+  "List of connection factories to use in unit tests.")
+
+;; Print testing information
+(princ (format "\nTesting %d database(s): %S\n"
+               (length emacsql-tests-connection-factories)
+               (mapcar #'car emacsql-tests-connection-factories)))
+
 (ert-deftest emacsql-escape-identifier ()
   (should (string= (emacsql-escape-identifier "foo") "foo"))
   (should (string= (emacsql-escape-identifier 'foo) "foo"))
@@ -213,32 +229,35 @@
 (ert-deftest emacsql-system ()
   "A short test that fully interacts with SQLite."
   (let ((emacsql-global-timeout emacsql-tests-timeout))
-    (emacsql-with-connection (db (emacsql-sqlite nil))
-      (emacsql db [:create-table foo [x]])
-      (should-error (emacsql db [:create-table foo [x]]))
-      (emacsql db [:insert :into foo :values ([1] [2] [3])])
-      (should (equal (emacsql db [:select * :from foo])
-                     '((1) (2) (3)))))))
+    (dolist (factory emacsql-tests-connection-factories)
+      (emacsql-with-connection (db (funcall (cdr factory)))
+        (emacsql db [:create-table (:temporary foo) [x]])
+        (should-error (emacsql db [:create-table (:temporary foo) [x]]))
+        (emacsql db [:insert :into foo :values ([1] [2] [3])])
+        (should (equal (emacsql db [:select * :from foo])
+                       '((1) (2) (3))))))))
 
 (ert-deftest emacsql-foreign-system ()
   "Tests that foreign keys work properly through Emacsql."
   (let ((emacsql-global-timeout emacsql-tests-timeout))
-    (emacsql-with-connection (db (emacsql-sqlite nil))
-      (emacsql-thread db
-        [:create-table person [(id integer :primary) name]]
-        [:create-table likes
-                       ([(personid integer) color]
-                        :references (personid person id :on-delete :cascade))]
-        [:replace :into person :values ([0 "Chris"] [1 "Brian"])])
-      (should (equal (emacsql db [:select * :from person :order-by id])
-                     '((0 "Chris") (1 "Brian"))))
-      (emacsql db [:insert :into likes :values ([0 red] [0 yellow] [1 
yellow])])
-      (should (equal (emacsql db [:select * :from likes
-                                          :order-by [personid color]])
-                     '((0 red) (0 yellow) (1 yellow))))
-      (emacsql db [:delete :from person :where (= id 0)])
-      (should (equal (emacsql db [:select * :from likes])
-                     '((1 yellow)))))))
+    (dolist (factory emacsql-tests-connection-factories)
+      (emacsql-with-connection (db (funcall (cdr factory)))
+        (emacsql-thread db
+          [:create-table (:temporary person) [(id integer :primary) name]]
+          [:create-table (:temporary likes)
+                         ([(personid integer) color]
+                          :references (personid person id :on-delete 
:cascade))]
+          [:insert :into person :values ([0 "Chris"] [1 "Brian"])])
+        (should (equal (emacsql db [:select * :from person :order-by id])
+                       '((0 "Chris") (1 "Brian"))))
+        (emacsql db [:insert :into likes
+                             :values ([0 red] [0 yellow] [1 yellow])])
+        (should (equal (emacsql db [:select * :from likes
+                                            :order-by [personid color]])
+                       '((0 red) (0 yellow) (1 yellow))))
+        (emacsql db [:delete :from person :where (= id 0)])
+        (should (equal (emacsql db [:select * :from likes])
+                       '((1 yellow))))))))
 
 (ert-deftest emacsql-error ()
   "Check that we're getting expected conditions."
@@ -249,21 +268,23 @@
   (should-error (emacsql-compile nil [:insert :into foo :values 1])
                 :type 'emacsql-syntax)
   (let ((emacsql-global-timeout emacsql-tests-timeout))
-    (emacsql-with-connection (db (emacsql-sqlite nil))
-      (emacsql db [:create-table foo [x]])
-      (should-error (emacsql db [:create-table foo [x]])
-                    :type 'emacsql-error))))
+    (dolist (factory emacsql-tests-connection-factories)
+      (emacsql-with-connection (db (funcall (cdr factory)))
+        (emacsql db [:create-table (:temporary foo) [x]])
+        (should-error (emacsql db [:create-table (:temporary foo) [x]])
+                      :type 'emacsql-error)))))
 
 (ert-deftest emacsql-special-chars ()
   "A short test that interacts with SQLite with special characters."
   (let ((emacsql-global-timeout 4))
-    (emacsql-with-connection (db (emacsql-sqlite nil))
-      (emacsql db [:create-table test-table [x]])
-      (emacsql db [:insert :into test-table
-                           :values ([""] [\])])
-      (should (process-live-p (emacsql-process db)))
-      (should (equal (emacsql db [:select * :from test-table])
-                     '(("") (\)))))))
+    (dolist (factory emacsql-tests-connection-factories)
+      (emacsql-with-connection (db (funcall (cdr factory)))
+        (emacsql db [:create-table (:temporary test-table) [x]])
+        (emacsql db [:insert :into test-table
+                             :values ([""] [\])])
+        (should (process-live-p (emacsql-process db)))
+        (should (equal (emacsql db [:select * :from test-table])
+                       '(("") (\))))))))
 
 (provide 'emacsql-tests)
 



reply via email to

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