branch: externals/pyim commit 02f339821971ff44a851b096b4c1239aec313bb9 Author: Feng Shu <tuma...@163.com> Commit: Feng Shu <tuma...@163.com>
Add pyim-process tests --- pyim-process.el | 30 +++++---- tests/pyim-tests.el | 188 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 206 insertions(+), 12 deletions(-) diff --git a/pyim-process.el b/pyim-process.el index 23345dba4d..3d511f9982 100644 --- a/pyim-process.el +++ b/pyim-process.el @@ -296,22 +296,28 @@ imobj 组合构成在一起,构成了 imobjs 这个概念。比如: "确定 pyim 是否需要启动中文输入模式." (let* ((scheme (pyim-scheme-current)) (first-chars (pyim-scheme-first-chars scheme)) - (rest-chars (pyim-scheme-rest-chars scheme))) - (and (or (pyim-process-force-input-chinese-p) - (and (not pyim-process-input-ascii) - (not (pyim-process-auto-switch-english-input-p)))) - (if (not (string< "" (pyim-entered-get 'point-before))) - (member last-command-event - (mapcar #'identity first-chars)) - (member last-command-event - (mapcar #'identity rest-chars)))))) - -(defun pyim-process-indicator-function () - "Indicator function." + (rest-chars (pyim-scheme-rest-chars scheme)) + (entered (pyim-entered-get 'point-before))) + (and (pyim-process-input-chinese-predicate-1) + (pyim-process-input-chinese-predicate-2 + last-command-event entered first-chars rest-chars)))) + +(defun pyim-process-input-chinese-predicate-1 () + "`pyim-process-input-chinese-p' 内部函数,测试环境。" (or (pyim-process-force-input-chinese-p) (and (not pyim-process-input-ascii) (not (pyim-process-auto-switch-english-input-p))))) +(defun pyim-process-input-chinese-predicate-2 (event entered first-chars rest-chars) + "`pyim-process-input-chinese-p' 内部函数,测试输入。" + (if (not (string< "" entered)) + (member event (mapcar #'identity first-chars)) + (member event (mapcar #'identity rest-chars)))) + +(defun pyim-process-indicator-function () + "Indicator function." + (pyim-process-input-chinese-predicate-1)) + (defun pyim-process-run () "查询 entered 字符串, 显示备选词等待用户选择。" (if (= (length (pyim-entered-get 'point-before)) 0) diff --git a/tests/pyim-tests.el b/tests/pyim-tests.el index 3055d88c32..2ffe390a9f 100644 --- a/tests/pyim-tests.el +++ b/tests/pyim-tests.el @@ -1616,6 +1616,194 @@ Transfer-Encoding: chunked '(4 "aaaa" ("工") ("工"))) '(:select current)))) +;; ** pyim-process 相关单元测试 +(ert-deftest pyim-tests-pyim-process-ui-init () + (let* ((pyim-test nil) + (pyim-process-ui-init-hook + (list (lambda () + (setq pyim-test 'hello))))) + (pyim-process-ui-init) + (should (equal pyim-test 'hello)))) + +(ert-deftest pyim-tests-pyim-process-start-daemon () + (let* ((pyim-test nil) + (pyim-process-start-daemon-hook + (list (lambda () + (setq pyim-test 'hello))))) + (pyim-process-start-daemon) + (should (equal pyim-test 'hello)))) + +(ert-deftest pyim-tests-pyim-process-stop-daemon () + (let* ((pyim-test nil) + (pyim-process-stop-daemon-hook + (list (lambda () + (setq pyim-test 'hello))))) + (pyim-process-stop-daemon) + (should (equal pyim-test 'hello)))) + +(ert-deftest pyim-tests-pyim-process-auto-switch-english-input-p () + (let ((pyim-english-input-switch-functions + (list (lambda () t) + (lambda () nil) + (lambda () nil)))) + (should (pyim-process-auto-switch-english-input-p))) + + (let ((pyim-english-input-switch-functions + (list (lambda () t) + (lambda () t) + (lambda () nil)))) + (should (pyim-process-auto-switch-english-input-p))) + + (let ((pyim-english-input-switch-functions + (list (lambda () nil) + (lambda () nil) + (lambda () nil)))) + (should-not (pyim-process-auto-switch-english-input-p))) + + (let ((pyim-english-input-switch-functions nil)) + (should-not (pyim-process-auto-switch-english-input-p))) + + (let ((pyim-english-input-switch-functions + (lambda () nil))) + (should-not (pyim-process-auto-switch-english-input-p))) + + (let ((pyim-english-input-switch-functions + (lambda () t))) + (should (pyim-process-auto-switch-english-input-p))) + + (let ((pyim-english-input-switch-functions "xxx")) + (should-not (pyim-process-auto-switch-english-input-p)))) + +(ert-deftest pyim-tests-pyim-process-force-input-chinese-p () + (let ((pyim-process-force-input-chinese nil) + (pyim-force-input-chinese-functions + (list (lambda () t) + (lambda () nil) + (lambda () nil)))) + (should (pyim-process-force-input-chinese-p))) + + (let ((pyim-process-force-input-chinese nil) + (pyim-force-input-chinese-functions + (list (lambda () t) + (lambda () t) + (lambda () nil)))) + (should (pyim-process-force-input-chinese-p))) + + (let ((pyim-process-force-input-chinese nil) + (pyim-force-input-chinese-functions + (lambda () t))) + (should (pyim-process-force-input-chinese-p))) + + (let ((pyim-process-force-input-chinese nil) + (pyim-force-input-chinese-functions + (lambda () nil))) + (should-not (pyim-process-force-input-chinese-p))) + + (let ((pyim-process-force-input-chinese nil) + (pyim-force-input-chinese-functions "xxx")) + (should-not (pyim-process-force-input-chinese-p))) + + (let ((pyim-process-force-input-chinese nil) + (pyim-force-input-chinese-functions + (list (lambda () nil) + (lambda () nil) + (lambda () nil)))) + (should-not (pyim-process-force-input-chinese-p))) + + (let ((pyim-process-force-input-chinese t) + (pyim-force-input-chinese-functions nil)) + (should (pyim-process-force-input-chinese-p))) + + (let ((pyim-process-force-input-chinese t) + (pyim-force-input-chinese-functions + (list (lambda () nil) + (lambda () nil) + (lambda () nil)))) + (should (pyim-process-force-input-chinese-p)))) + +(ert-deftest pyim-tests-pyim-process-input-chinese-predicate-1 () + (cl-letf (((symbol-function 'pyim-process-force-input-chinese-p) + (lambda () t)) + (pyim-process-input-ascii t) + ((symbol-function 'pyim-process-auto-switch-english-input-p) + (lambda () t))) + (should (pyim-process-input-chinese-predicate-1))) + + (cl-letf (((symbol-function 'pyim-process-force-input-chinese-p) + (lambda () t)) + (pyim-process-input-ascii nil) + ((symbol-function 'pyim-process-auto-switch-english-input-p) + (lambda () t))) + (should (pyim-process-input-chinese-predicate-1))) + + (cl-letf (((symbol-function 'pyim-process-force-input-chinese-p) + (lambda () t)) + (pyim-process-input-ascii nil) + ((symbol-function 'pyim-process-auto-switch-english-input-p) + (lambda () t))) + (should (pyim-process-input-chinese-predicate-1))) + + (cl-letf (((symbol-function 'pyim-process-force-input-chinese-p) + (lambda () nil)) + (pyim-process-input-ascii nil) + ((symbol-function 'pyim-process-auto-switch-english-input-p) + (lambda () nil))) + (should (pyim-process-input-chinese-predicate-1))) + + (cl-letf (((symbol-function 'pyim-process-force-input-chinese-p) + (lambda () nil)) + (pyim-process-input-ascii t) + ((symbol-function 'pyim-process-auto-switch-english-input-p) + (lambda () nil))) + (should-not (pyim-process-input-chinese-predicate-1))) + + (cl-letf (((symbol-function 'pyim-process-force-input-chinese-p) + (lambda () nil)) + (pyim-process-input-ascii nil) + ((symbol-function 'pyim-process-auto-switch-english-input-p) + (lambda () t))) + (should-not (pyim-process-input-chinese-predicate-1))) + + (cl-letf (((symbol-function 'pyim-process-force-input-chinese-p) + (lambda () nil)) + (pyim-process-input-ascii nil) + ((symbol-function 'pyim-process-auto-switch-english-input-p) + (lambda () nil))) + (should (pyim-process-input-chinese-predicate-1)))) + +(ert-deftest pyim-tests-pyim-process-input-chinese-predicate-2 () + (should (pyim-process-input-chinese-predicate-2 ?a "" "abc" "def")) + (should-not (pyim-process-input-chinese-predicate-2 ?d "" "abc" "def")) + (should (pyim-process-input-chinese-predicate-2 ?d "a" "abc" "def")) + (should-not (pyim-process-input-chinese-predicate-2 ?g "a" "abc" "def"))) + +(ert-deftest pyim-tests-pyim-process-input-chinese-p () + (cl-letf (((symbol-function 'pyim-process-input-chinese-predicate-1) + (lambda (&rest _) nil)) + ((symbol-function 'pyim-process-input-chinese-predicate-2) + (lambda (&rest _) nil))) + (should-not (pyim-process-input-chinese-p))) + + (cl-letf (((symbol-function 'pyim-process-input-chinese-predicate-1) + (lambda (&rest _) t)) + ((symbol-function 'pyim-process-input-chinese-predicate-2) + (lambda (&rest _) nil))) + (should-not (pyim-process-input-chinese-p))) + + (cl-letf (((symbol-function 'pyim-process-input-chinese-predicate-1) + (lambda (&rest _) nil)) + ((symbol-function 'pyim-process-input-chinese-predicate-2) + (lambda (&rest _) t))) + (should-not (pyim-process-input-chinese-p))) + + (cl-letf (((symbol-function 'pyim-process-input-chinese-predicate-1) + (lambda (&rest _) t)) + ((symbol-function 'pyim-process-input-chinese-predicate-2) + (lambda (&rest _) t))) + (should (pyim-process-input-chinese-p))) + + ) + (ert-run-tests-batch-and-exit) ;; * Footer