Skip to content

Commit 725c63c

Browse files
committed
Add tests
New tests for: - Modeline change - Mode change in prefix conversion - Partial deletion after prefix mazegaki in isearch
1 parent 3c55356 commit 725c63c

2 files changed

Lines changed: 217 additions & 28 deletions

File tree

test/tctest-play.el

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ Specifying :show-buf t displays the result buffer with additional info."
7878
(cleanup-fun (gethash :cleanup-fun params))
7979
(conf (current-window-configuration))
8080
buf result status)
81-
(when show-buf
81+
(when (eq show-buf :defer-cleanup)
8282
(puthash :cleanup-postponed cleanup-fun params)
8383
(puthash :cleanup-fun nil params))
8484
(setq buf (apply #'tctest-play keys args))
@@ -155,11 +155,14 @@ hash-table DEFAULT-PARAMS."
155155

156156
(defun tctest--show-status (params status)
157157
"Append information to the result buffer of tctest-play."
158-
(let ((initial (gethash :initial params))
159-
(expect (gethash :expect params))
160-
(buf (gethash :buf params))
161-
(keys (gethash :keys params))
162-
status-pos)
158+
(let* ((initial (gethash :initial params))
159+
(expect (gethash :expect params))
160+
(buf (gethash :buf params))
161+
(keys (gethash :keys params))
162+
(show-buf (gethash :show-buf params))
163+
(cleanup-msg (if (eq show-buf :defer-cleanup)
164+
" and call cleanup-fun" ""))
165+
status-pos)
163166
(with-current-buffer buf
164167
(goto-char (point-max))
165168
(unless (bolp) (insert "\n"))
@@ -169,7 +172,7 @@ hash-table DEFAULT-PARAMS."
169172
(insert "----------- status -----------\n")
170173
(insert (if status "OK" "FAILURE"))
171174
(setq status-pos (point))
172-
(insert " ('q' to kill buffer and call cleanup-fun)\n")
175+
(insert " ('q' to kill buffer" cleanup-msg ")\n")
173176
(insert "----------- initial -----------\n")
174177
(insert (or initial "No :initial specified"))
175178
(unless (bolp) (insert "\n"))
@@ -235,12 +238,14 @@ hash-table DEFAULT-PARAMS."
235238
(puthash :cleanup-fun #'tctest--cleanup params)
236239
(tctest-check (tctest-key-filter keys) :params params)))
237240

241+
(defvar tctest--insert-mode-key "C-x i" ; isearch-mode-map で空いているキー
242+
"tctest-insert-mode を起動するキー。")
238243
(defvar tctest-key-abbrevs
239-
'(("[MATCH]" "C-c C-m") ; isearchのマッチ範囲を[]で囲む。
244+
`(("[MATCH]" "C-c C-m") ; isearchのマッチ範囲を[]で囲む。
245+
("[MODE]" ,tctest--insert-mode-key) ; モードラインの[]部分を挿入する。
240246
("[IMON]" "C-\\") ; キー入力列の読みやすさのため、ON/OFF 別にする。
241247
("[IMOFF]" "C-\\")
242-
("[UNDO]" "C-x u")
243-
))
248+
("[UNDO]" "C-x u")))
244249

245250
(defun tctest-where (cmd)
246251
"コマンド CMD に割り当てられた T-Code キー列(文字のリスト)。"
@@ -327,6 +332,11 @@ hash-table DEFAULT-PARAMS."
327332
"文字列 KEYS の中の T-Code 文字と特殊キーワードをキー列に置換する。"
328333
(tctest--untc (tctest--expand-key-abbrevs keys)))
329334

335+
(defun tctest-insert-mode ()
336+
"モードラインの[]部分をバッファに挿入する。"
337+
(interactive)
338+
(insert (format "[%s]" (or current-input-method-title ""))))
339+
330340
(defun tctest-show-match ()
331341
"直前のサーチのマッチ位置を[]で囲む。"
332342
(interactive)
@@ -347,6 +357,7 @@ hash-table DEFAULT-PARAMS."
347357
(let ((map (make-sparse-keymap)))
348358
(define-key map (kbd "C-c C-q") 'tctest-quit-buffer)
349359
(define-key map (kbd "C-c C-m") 'tctest-show-match)
360+
(define-key map (kbd tctest--insert-mode-key) 'tctest-insert-mode)
350361
map)
351362
"tctest-cmp によるテストで使用するキーバインディング。")
352363

@@ -369,6 +380,8 @@ hash-table DEFAULT-PARAMS."
369380
(toggle-input-method)) ; 初期状態はIMオフ。
370381
(when vars
371382
(tctest--set-local-vars vars))
383+
(define-key isearch-mode-map (kbd tctest--insert-mode-key)
384+
#'tctest-insert-mode)
372385
(when setup-user-fun
373386
(funcall setup-user-fun params))))
374387

@@ -379,6 +392,7 @@ hash-table DEFAULT-PARAMS."
379392
(cleanup-user-fun (gethash :cleanup-user-fun params)))
380393
(when cleanup-user-fun
381394
(funcall cleanup-user-fun params))
395+
(define-key isearch-mode-map (kbd tctest--insert-mode-key) nil)
382396
(dolist (pair set-keys)
383397
(apply #'tcode-set-key pair))
384398
(when bak-input-method
@@ -399,6 +413,8 @@ tctest-cmp によるテスト終了時にこのバインディングは解除さ
399413

400414
(defun tctest-bind-katakana (params)
401415
"`#' でカタカナモードをオン/オフできるようにする。"
416+
(tctest--set-local-vars '((tcode-katakana-mode-indicator "")
417+
(tcode-hiragana-mode-indicator "")))
402418
(tctest-tcode-set-key params "#" 'tcode-toggle-katakana-mode))
403419

404420
(provide 'tctest-play)

test/tctest.el

Lines changed: 191 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -153,58 +153,86 @@
153153
"句読点を変更できる。"
154154
(should-not (tctest-cmp "[IMON] 。、 [KUTEN_A] 。、 [KUTEN_J] 。、"
155155
:expect "。、. , 。、<!>")))
156+
157+
(ert-deftest tctest-katakana-in-prefix-maze ()
158+
"前置交ぜ書き変換中にカタカナモードに変更できる。"
159+
:tags '(:prefix)
160+
(should-not (tctest-cmp "[IMON] あ [PREMAZE] # え # SPC い"
161+
:expect "あヱい<!>"
162+
:setup-fun #'tctest-bind-katakana)))
163+
164+
(ert-deftest tctest-katakana-in-prefix-bushu ()
165+
"前置部首変換中にカタカナモードに変更できる。"
166+
:tags '(:prefix)
167+
(should-not (tctest-cmp "[IMON] あ [PREBUSHU] # い # い"
168+
:expect "あ似<!>"
169+
:setup-fun #'tctest-bind-katakana)))
170+
171+
(ert-deftest tctest-kuten-in-prefix-bushu ()
172+
"前置部首変換中に句点を変更できる。"
173+
:tags '(:prefix)
174+
(should-not (tctest-cmp "[IMON] [KUTEN_A] 、 [PREBUSHU] 大 [KUTEN_J] 、"
175+
:expect ", 犬<!>")))
176+
156177
;;;
157178
;;; *tcode-isearch-start-state
158179
;;;
159180
(ert-deftest tctest-isearch-start-nil-off ()
160181
"tcode-isearch-start-state nil、IM off で isearch 開始時 IM off"
161182
:tags '(:isearch-start)
162-
(should-not (tctest-cmp "am C-s ma [MATCH]"
163-
:initial "...人.ma"
164-
:expect "am...人.[ma<!>]"
183+
(skip-unless tcode-use-isearch)
184+
(should-not (tctest-cmp "am C-s ma [IMON] 人 [MATCH]"
185+
:initial "...人人..ma人..人ma..mama"
186+
:expect "am...人人..[ma人<!>]..人ma..mama"
165187
:vars '((tcode-isearch-start-state nil)))))
166188

167189
(ert-deftest tctest-isearch-start-nil-on ()
168190
"tcode-isearch-start-state nil、IM on で isearch 開始時 IM on"
169191
:tags '(:isearch-start)
170192
(skip-unless tcode-use-isearch)
171-
(should-not (tctest-cmp "[IMON] 色 C-s 人 [MATCH]"
172-
:initial "...人.ma"
173-
:expect "色...[人<!>].ma"
193+
(should-not (tctest-cmp "[IMON] 色 C-s 人 [IMOFF] ma [MATCH]"
194+
:initial "...人人..ma人..人ma..mama"
195+
:expect "色...人人..ma人..[人ma<!>]..mama"
174196
:vars '((tcode-isearch-start-state nil)))))
175197

176198
(ert-deftest tctest-isearch-start-0-off ()
177199
"tcode-isearch-start-state 0、IM off で isearch 開始時 IM off"
178200
:tags '(:isearch-start)
179-
(should-not (tctest-cmp "am C-s ma [MATCH]"
180-
:initial "...人.ma"
181-
:expect "am...人.[ma<!>]"
201+
(skip-unless tcode-use-isearch)
202+
(should-not (tctest-cmp "am C-s ma [IMON] 人 [MATCH]"
203+
:initial "...人人..ma人..人ma..mama"
204+
:expect "am...人人..[ma人<!>]..人ma..mama"
182205
:vars '((tcode-isearch-start-state 0)))))
183206

184207
(ert-deftest tctest-isearch-start-0-on ()
185208
"tcode-isearch-start-state 0、IM on で isearch 開始時 IM off"
186209
:tags '(:isearch-start)
187-
(should-not (tctest-cmp "[IMON] 色 C-s ma [MATCH]"
188-
:initial "...人.ma"
189-
:expect "色...人.[ma<!>]"
210+
;; tc-is22 実装では、isearch 中初回の切り換えでオフのまま
211+
:expected-result (if (eq tcode-use-isearch t) :failed :passed)
212+
(skip-unless tcode-use-isearch)
213+
(should-not (tctest-cmp "[IMON] 色 C-s ma [IMON] 人 [MATCH]"
214+
:initial "...人人..ma人..人ma..mama"
215+
:expect "色...人人..[ma人<!>]..人ma..mama"
190216
:vars '((tcode-isearch-start-state 0)))))
191217

192218
(ert-deftest tctest-isearch-start-1-off ()
193219
"tcode-isearch-start-state 1、IM off で isearch 開始時 IM on"
194220
:tags '(:isearch-start)
221+
;; tc-is22 実装では、isearch 中初回の切り換えでオンのまま
222+
:expected-result (if (eq tcode-use-isearch t) :failed :passed)
195223
(skip-unless tcode-use-isearch)
196-
(should-not (tctest-cmp "am C-s 人 [MATCH]"
197-
:initial "...人.ma"
198-
:expect "am...[人<!>].ma"
224+
(should-not (tctest-cmp "am C-s 人 [IMOFF] ma [MATCH]"
225+
:initial "...人人..ma人..人ma..mama"
226+
:expect "am...人人..ma人..[人ma<!>]..mama"
199227
:vars '((tcode-isearch-start-state 1)))))
200228

201229
(ert-deftest tctest-isearch-start-1-on ()
202230
"tcode-isearch-start-state 1、IM on で isearch 開始時 IM on"
203231
:tags '(:isearch-start)
204232
(skip-unless tcode-use-isearch)
205-
(should-not (tctest-cmp "[IMON] 色 C-s 人 [MATCH]"
206-
:initial "...人.ma"
207-
:expect "色...[人<!>].ma"
233+
(should-not (tctest-cmp "[IMON] 色 C-s 人 [IMOFF] ma [MATCH]"
234+
:initial "...人人..ma人..人ma..mama"
235+
:expect "色...人人..ma人..[人ma<!>]..mama"
208236
:vars '((tcode-isearch-start-state 1)))))
209237

210238
;;;
@@ -306,6 +334,24 @@
306334
:initial "...歌手 か手"
307335
:expect "...[歌手<!>] か手")))
308336

337+
(ert-deftest tctest-delete-postfix-maze-in-isearch ()
338+
"isearch 中の後置交ぜ書き変換結果を1文字だけ削除できる。"
339+
:tags '(:postfix)
340+
;; 非 :im 実装では変換後も minibuffer にいるので問題にならない。
341+
(skip-unless (eq tcode-use-isearch :im))
342+
(should-not (tctest-cmp "[IMON] C-s ななめ [POSTMAZE] RET DEL 陽 [MATCH]"
343+
:initial "...斜陽...斜め"
344+
:expect "<DING>...[斜陽<!>]...斜め")))
345+
346+
(ert-deftest tctest-delete-prefix-maze-in-isearch ()
347+
"isearch 中の後置交ぜ書き変換結果を1文字だけ削除できる。"
348+
:tags '(:postfix)
349+
;; 非 :im 実装では変換後も minibuffer にいるので問題にならない。
350+
(skip-unless (eq tcode-use-isearch :im))
351+
(should-not (tctest-cmp "[IMON] C-s [PREMAZE] ななめ SPC DEL 陽 [MATCH]"
352+
:initial "...斜陽...斜め"
353+
:expect "...[斜陽<!>]...斜め")))
354+
309355
;;;
310356
;;; *isearch での各種入力モード
311357
;;;
@@ -372,6 +418,133 @@
372418
:initial "...|. , . , . , |。、. , 。、|。、。、。、"
373419
:expect "...|. , . , . , |[。、. , 。、<!>]|。、。、。、")))
374420

421+
(ert-deftest tctest-katakana-in-isearch-prefix-maze ()
422+
"isearch 中の前置交ぜ書き変換中にカタカナモードに変更できる。"
423+
:tags '(:prefix)
424+
;; 非 :im 実装では確定後、minibufferを出るための RET が必要。次テストにて。
425+
(skip-unless (eq tcode-use-isearch :im))
426+
(should-not (tctest-cmp "[IMON] C-s あ [PREMAZE] # え # SPC い [MATCH]"
427+
:initial "...あえい..あヱい"
428+
:expect "...あえい..[あヱい<!>]"
429+
:setup-fun #'tctest-bind-katakana)))
430+
431+
(ert-deftest tctest-katakana-in-isearch-prefix-maze-is22 ()
432+
"isearch 中の前置交ぜ書き変換中にカタカナモードに変更できる。"
433+
:tags '(:prefix)
434+
;; 非 :im 実装では確定後、minibufferを出るための RET が必要。
435+
(skip-unless (tctest-is-non-im-p))
436+
(should-not (tctest-cmp "[IMON] C-s あ [PREMAZE] # え # SPC RET い [MATCH]"
437+
:initial "...あえい..あヱい"
438+
:expect "...あえい..[あヱい<!>]"
439+
:setup-fun #'tctest-bind-katakana)))
440+
441+
(ert-deftest tctest-katakana-in-isearch-prefix-bushu ()
442+
"isearch 中の前置部首変換中にカタカナモードに変更できる。"
443+
:tags '(:prefix)
444+
;; :im でのみ実装。
445+
:expected-result (if (eq tcode-use-isearch :im) :passed :failed)
446+
(skip-unless tcode-use-isearch)
447+
(should-not (tctest-cmp "[IMON] C-s あ [PREBUSHU] # い # い [MATCH]"
448+
:initial "...あ似"
449+
:expect "...[あ似<!>]"
450+
:setup-fun #'tctest-bind-katakana)))
451+
452+
(ert-deftest tctest-kuten-in-isearch-prefix-bushu ()
453+
"isearch 中の前置部首変換中に句点を変更できる。"
454+
:tags '(:prefix)
455+
;; :im でのみ実装。
456+
:expected-result (if (eq tcode-use-isearch :im) :passed :failed)
457+
(skip-unless tcode-use-isearch)
458+
(should-not (tctest-cmp
459+
"[IMON] C-s [KUTEN_A] 、 [PREBUSHU] 大 [KUTEN_J] 、 [MATCH]"
460+
:initial "..., 犬"
461+
:expect "...[, 犬<!>]")))
462+
463+
;;;
464+
;;; *モード表示
465+
;;;
466+
467+
(ert-deftest tctest-start-mode ()
468+
"テスト開始のモード表示は[]。" ; 初回 C-\ するまでは空。
469+
(should-not (tctest-cmp "[MODE]"
470+
:expect "[]<!>")))
471+
472+
(ert-deftest tctest-im-mode ()
473+
"[IMON][IMOFF] で [TC] 表示が切り換わる。"
474+
(should-not (tctest-cmp "[IMON] [MODE] 人 [IMOFF] [MODE] ma"
475+
:expect "[TC]人[--]ma<!>")))
476+
477+
(ert-deftest tctest-alnum-mode ()
478+
"[ALNUM_ZEN][ALNUM_HAN] で [T]表示が切り換わる。"
479+
(should-not (tctest-cmp
480+
"[IMON] [MODE] A [ALNUM_ZEN] [MODE] A [ALNUM_HAN] [MODE] A"
481+
:expect "[TC]A[T]A[TC]A<!>")))
482+
483+
(ert-deftest tctest-katakana-mode ()
484+
"カタカナモードの表示が切り換わる。"
485+
(should-not (tctest-cmp
486+
"[IMON] [MODE] あ # [MODE] ア # [MODE] あ"
487+
:expect "[TCひ]あ[TCカ]ア[TCひ]あ<!>"
488+
:setup-fun #'tctest-bind-katakana)))
489+
490+
491+
;;;
492+
;;; *tcode-isearch-start-stateのモード表示
493+
;;;
494+
(ert-deftest tctest-isearch-start-nil-off-mode ()
495+
"t-i-s-s nil、IM off で isearch 開始時、モード表示 []"
496+
:tags '(:isearch-start)
497+
(should-not (tctest-cmp "[MODE] C-s [MODE] ma [MATCH]"
498+
:initial "...人.ma"
499+
:expect "[][]...人.[ma<!>]"
500+
:vars '((tcode-isearch-start-state nil)))))
501+
502+
(ert-deftest tctest-isearch-start-nil-on-mode ()
503+
"t-i-s-s nil、IM on で isearch 開始時、モード表示 [TC]"
504+
:tags '(:isearch-start)
505+
(skip-unless tcode-use-isearch)
506+
(should-not (tctest-cmp "[IMON] [MODE] C-s [MODE] 人 [MATCH]"
507+
:initial "...人.ma"
508+
:expect "[TC][TC]...[人<!>].ma"
509+
:vars '((tcode-isearch-start-state nil)))))
510+
511+
(ert-deftest tctest-isearch-start-0-off-mode ()
512+
"t-i-s-s 0、IM off で isearch 開始時、モード表示 []"
513+
:tags '(:isearch-start)
514+
(should-not (tctest-cmp "[MODE] C-s [MODE] ma [MATCH]"
515+
:initial "...人.ma"
516+
:expect "[][]...人.[ma<!>]"
517+
:vars '((tcode-isearch-start-state 0)))))
518+
519+
(ert-deftest tctest-isearch-start-0-on-mode ()
520+
"t-i-s-s 0、IM on で isearch 開始時、モード表示 [--]"
521+
:tags '(:isearch-start)
522+
:expected-result (if (eq tcode-use-isearch t) :failed :passed)
523+
(skip-unless tcode-use-isearch)
524+
(should-not (tctest-cmp "[IMON] [MODE] C-s [MODE] ma [MATCH]"
525+
:initial "...人.ma"
526+
:expect "[TC][--]...人.[ma<!>]"
527+
:vars '((tcode-isearch-start-state 0)))))
528+
529+
(ert-deftest tctest-isearch-start-1-off-mode ()
530+
"t-i-s-s 1、IM off で isearch 開始時、モード表示 [TC]"
531+
:tags '(:isearch-start)
532+
:expected-result (if (eq tcode-use-isearch t) :failed :passed)
533+
(skip-unless tcode-use-isearch)
534+
(should-not (tctest-cmp "[MODE] C-s [MODE] 人 [MATCH]"
535+
:initial "...人.ma"
536+
:expect "[][TC]...[人<!>].ma"
537+
:vars '((tcode-isearch-start-state 1)))))
538+
539+
(ert-deftest tctest-isearch-start-1-on-mode ()
540+
"t-i-s-s 1、IM on で isearch 開始時、モード表示 [TC]"
541+
:tags '(:isearch-start)
542+
(skip-unless tcode-use-isearch)
543+
(should-not (tctest-cmp "[IMON] [MODE] C-s [MODE] 人 [MATCH]"
544+
:initial "...人.ma"
545+
:expect "[TC][TC]...[人<!>].ma"
546+
:vars '((tcode-isearch-start-state 1)))))
547+
375548
;;;
376549
;;; *wrapped search
377550
;;;

0 commit comments

Comments
 (0)