branch: elpa/emacsql commit f52af86b058f68de86834cd2e239b9cdc1d39826 Author: Christopher Wellons <well...@nullprogram.com> Commit: Christopher Wellons <well...@nullprogram.com>
Break apart and organize compilation tests. --- emacsql-tests.el | 69 ++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 24 deletions(-) diff --git a/emacsql-tests.el b/emacsql-tests.el index 867678aef9..eb5fcc880c 100644 --- a/emacsql-tests.el +++ b/emacsql-tests.el @@ -54,32 +54,53 @@ (should (string= (apply #'emacsql-format (emacsql-expand query) args) result))) -(ert-deftest emacsql-expand () - (emacsql-tests-query [:select [$1 name] :from $2] '(id people) - "SELECT id, name FROM people;") - (emacsql-tests-query [:select * :from employees] () - "SELECT * FROM employees;") - (emacsql-tests-query [:select * :from employees :where (< salary 50000)] () - "SELECT * FROM employees WHERE salary < 50000;") - (emacsql-tests-query [:create-table foo [a b c]] () - "CREATE TABLE foo (a, b, c);") - (emacsql-tests-query [:drop-table $1] '(foo) - "DROP TABLE foo;") - (emacsql-tests-query [:update people :set (= id $1)] '(10) - "UPDATE people SET id = 10;") - (emacsql-tests-query [:select * :from people :where (in name $1)] '([FOO BAR]) - "SELECT * FROM people WHERE name IN ('FOO', 'BAR');") - (emacsql-tests-query [:insert :into foo :values [nil $1]] '(10.1) - "INSERT INTO foo VALUES (NULL, 10.1);") - (emacsql-tests-query [:create-table (:temporary :if-not-exists x) [y]] '() - "CREATE TEMPORARY TABLE IF NOT EXISTS x (y);")) +(defmacro emacsql-tests-with-queries (&rest queries) + "Thread `emacsql-tests-query' through QUERIES." + (declare (indent 0)) + (cons 'progn (mapcar (lambda (q) (cons 'emacsql-tests-query q)) queries))) + +(ert-deftest emacsql-select () + (emacsql-tests-with-queries + ([:select [$1 name] :from $2] '(id people) + "SELECT id, name FROM people;") + ([:select * :from employees] '() + "SELECT * FROM employees;") + ([:select * :from employees :where (< salary 50000)] '() + "SELECT * FROM employees WHERE salary < 50000;") + ([:select * :from people :where (in name $1)] '([FOO BAR]) + "SELECT * FROM people WHERE name IN ('FOO', 'BAR');"))) + +(ert-deftest emacsql-create-table () + (emacsql-tests-with-queries + ([:create-table foo [a b c]] () + "CREATE TABLE foo (a, b, c);") + ([:create-table (:temporary :if-not-exists x) [y]] '() + "CREATE TEMPORARY TABLE IF NOT EXISTS x (y);") + ([:drop-table $1] '(foo) + "DROP TABLE foo;"))) + +(ert-deftest emacsql-update () + (emacsql-tests-with-queries + ([:update people :set (= id $1)] '(10) + "UPDATE people SET id = 10;"))) + +(ert-deftest emacsql-insert () + (emacsql-tests-with-queries + ([:insert :into foo :values [nil $1]] '(10.1) + "INSERT INTO foo VALUES (NULL, 10.1);") + ([:replace :into $1 :values $2] '(bar ([1 2] [3 4])) + "REPLACE INTO bar VALUES (1, 2), (3, 4);"))) (ert-deftest emacsql-order-by () - (emacsql-tests-query [:order-by foo] '() "ORDER BY foo;") - (emacsql-tests-query [:order-by [$1]] '(bar) "ORDER BY bar;") - (emacsql-tests-query [:order-by (- foo)] '() "ORDER BY -(foo);") - (emacsql-tests-query [:order-by [(a :asc) ((/ b 2) :desc)]] '() - "ORDER BY a ASC, b / 2 DESC;")) + (emacsql-tests-with-queries + ([:order-by foo] '() + "ORDER BY foo;") + ([:order-by [$1]] '(bar) + "ORDER BY bar;") + ([:order-by (- foo)] '() + "ORDER BY -(foo);") + ([:order-by [(a :asc) ((/ b 2) :desc)]] '() + "ORDER BY a ASC, b / 2 DESC;"))) (ert-deftest emacsql-system () (should-not (emacsql-sqlite3-unavailable-p))