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

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

[elpa] externals/eglot 5e8fe4c 26/69: Add jsonrpc-tests.el


From: João Távora
Subject: [elpa] externals/eglot 5e8fe4c 26/69: Add jsonrpc-tests.el
Date: Fri, 22 Jun 2018 11:54:58 -0400 (EDT)

branch: externals/eglot
commit 5e8fe4c2153ce110287b4f39276dd3d49f92e127
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>

    Add jsonrpc-tests.el
    
    * Makefile (jsonrpc-check): Add test target.
    
    * jsonrpc-tests.el: New file.
---
 Makefile         |   5 +++
 jsonrpc-tests.el | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 109 insertions(+)

diff --git a/Makefile b/Makefile
index 41619fc..cdfeb79 100644
--- a/Makefile
+++ b/Makefile
@@ -28,6 +28,11 @@ check: compile
                -l eglot-tests                                          \
                -f ert-run-tests-batch-and-exit                         \
 
+jsonrpc-check: jsonrpc.elc
+       $(EMACS) -Q --batch $(LOAD_PATH)                                \
+               -l jsonrpc-tests                                        \
+               -f ert-run-tests-batch-and-exit                         \
+
 # Cleanup
 #
 clean:
diff --git a/jsonrpc-tests.el b/jsonrpc-tests.el
new file mode 100644
index 0000000..a3de884
--- /dev/null
+++ b/jsonrpc-tests.el
@@ -0,0 +1,104 @@
+;;; jsonrpc-tests.el --- tests for jsonrpc.el        -*- lexical-binding: t; 
-*-
+
+;; Copyright (C) 2018 Free Software Foundation, Inc.
+
+;; Author: João Távora <address@hidden>
+;; Maintainer: João Távora <address@hidden>
+;; URL: https://github.com/joaotavora/eglot
+;; Keywords: tests
+
+;; 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 <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; 
+
+;;; Code:
+
+(require 'ert)
+(require 'jsonrpc)
+
+(cl-defmacro jsonrpc--with-emacsrpc-fixture ((endpoint-sym) &body body)
+  (declare (indent 1) (debug t))
+  (let ((server (gensym)))
+    `(let* ((,server (make-network-process
+                      :name "Emacs RPC server" :server t :host "localhost" 
:service 44444
+                      :log (lambda (_server client _message)
+                             (jsonrpc-connect
+                              (process-name client) client
+                              (lambda (endpoint method id params)
+                                (unless (memq method '(+ - * / vconcat append 
sit-for))
+                                  (signal 'jsonrpc-error 
`((jsonrpc-error-message
+                                                            . "Sorry, this 
isn't allowed")
+                                                           (jsonrpc-error-code 
. -32601))))
+                                (jsonrpc-reply endpoint id :result
+                                               (apply method (append params 
nil))))))))
+            (,endpoint-sym (jsonrpc-connect
+                            "Emacs RPC client" '("localhost" 44444)
+                            (lambda (_endpoint method _id &rest _params)
+                              (message "server wants to %s" method)))))
+       (unwind-protect
+           ,@body
+         (unwind-protect
+             (delete-process ,server)
+           (delete-process (jsonrpc--process ,endpoint-sym)))))))
+
+(ert-deftest returns-3 ()
+  "returns 3"
+  (jsonrpc--with-emacsrpc-fixture (server-endpoint)
+    (should (= 3 (jsonrpc-request server-endpoint '+ '(1 2))))))
+
+(ert-deftest errors-with--32601 ()
+  "errors with -32601"
+  (jsonrpc--with-emacsrpc-fixture (server-endpoint)
+    (condition-case err
+        (progn
+          (jsonrpc-request server-endpoint 'delete-directory "~/tmp")
+          (ert-fail "A `jsonrpc-error' should have been signalled!"))
+      (jsonrpc-error
+       (should (= -32601 (cdr (assoc 'jsonrpc-error-code (cdr err)))))))))
+
+(ert-deftest signals-an--32603-JSONRPC-error ()
+  "signals an -32603 JSONRPC error"
+  (jsonrpc--with-emacsrpc-fixture (server-endpoint)
+    (condition-case err
+        (progn
+          (jsonrpc-request server-endpoint '+ '(a 2))
+          (ert-fail "A `jsonrpc-error' should have been signalled!"))
+      (jsonrpc-error
+       (should (= -32603 (cdr (assoc 'jsonrpc-error-code (cdr err)))))))))
+
+(ert-deftest times-out ()
+  "times out"
+  (jsonrpc--with-emacsrpc-fixture (server-endpoint)
+    (should-error
+     (jsonrpc-request server-endpoint 'sit-for '(5) :timeout 2))))
+
+(ert-deftest stretching-it-but-works ()
+  "stretching it, but works"
+  (jsonrpc--with-emacsrpc-fixture (server-endpoint)
+    (should (equal
+             [1 2 3 3 4 5]
+             (jsonrpc-request server-endpoint 'vconcat '([1 2 3] [3 4 5]))))))
+
+(ert-deftest json-el-cant-serialize-this ()
+  "json.el can't serialize this, json.el errors and request isn't sent"
+  (jsonrpc--with-emacsrpc-fixture (server-endpoint)
+    (should-error
+     (jsonrpc-request server-endpoint 'append '((1 2 3)
+                                                (3 4 5))))))
+
+
+(provide 'jsonrpc-tests)
+;;; jsonrpc-tests.el ends here



reply via email to

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