mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-18 21:29:19 +02:00
129 lines
5.3 KiB
Scheme
129 lines
5.3 KiB
Scheme
|
|
(define-library (chibi text-test)
|
|
(import (scheme base) (scheme write) (chibi test) (chibi text))
|
|
(export run-tests)
|
|
(begin
|
|
(define (run-tests)
|
|
(test-begin "(chibi text)")
|
|
(test-assert (text? (string->text "")))
|
|
(test 0 (text-char-length (string->text "")))
|
|
(test 3 (text-char-length (string->text "日本語")))
|
|
(test 0 (text-utf8-length (string->text "")))
|
|
(test 9 (text-utf8-length (string->text "日本語")))
|
|
(test "" (text->string (string->text "")))
|
|
(test "日本語" (text->string (string->text "日本語")))
|
|
(let ((tx (string->text "日本語")))
|
|
(text-insert! tx "!" 0)
|
|
(test "!日本語" (text->string tx))
|
|
(text-insert! tx "!" 2)
|
|
(test "!日!本語" (text->string tx))
|
|
(text-insert! tx "!" 4)
|
|
(test "!日!本!語" (text->string tx))
|
|
(text-insert! tx "!" 6)
|
|
(test "!日!本!語!" (text->string tx)))
|
|
(let ((tx (string->text "abc")))
|
|
(text-insert! tx "あ" 0)
|
|
(test "あabc" (text->string tx))
|
|
(text-insert! tx "い" 2)
|
|
(test "あaいbc" (text->string tx))
|
|
(text-insert! tx "う" 4)
|
|
(test "あaいbうc" (text->string tx))
|
|
(text-insert! tx "え" 6)
|
|
(test "あaいbうcえ" (text->string tx)))
|
|
(let* ((tx (string->text "0123456789"))
|
|
(mk (text-mark! tx 5)))
|
|
(test #\5 (text-ref mk))
|
|
(text-insert! tx "abc" 1)
|
|
(text-insert! tx "xyz" mk)
|
|
(test #\5 (text-ref mk))
|
|
(test "0abc1234xyz56789" (text->string tx)))
|
|
(let* ((tx (string->text "零一二三四五六七八九"))
|
|
(mk (text-mark! tx 5)))
|
|
(text-insert! tx "あいう" 1)
|
|
(text-insert! tx "xyz" mk)
|
|
(text-insert! tx "かきく" mk)
|
|
(test "零あいう一二三四xyzかきく五六七八九" (text->string tx)))
|
|
(let* ((tx (string->text "0123456789"))
|
|
(mk (text-mark! tx 5)))
|
|
(text-insert! tx "abc" mk)
|
|
(text-insert! tx "xyz" mk)
|
|
(test "01234abcxyz56789" (text->string tx)))
|
|
(let* ((tx (string->text "0123456789"))
|
|
(mk1 (text-mark! tx 5))
|
|
(mk2 (text-mark! tx 8))
|
|
(mk3 (text-mark! tx 6)))
|
|
(text-delete! tx mk1 mk2)
|
|
(test "0123489" (text->string tx))
|
|
;; The current order of mk2/mk3 is unspecified so we insert the same
|
|
;; value here/
|
|
(text-insert! tx "def" mk2)
|
|
(text-insert! tx "abc" mk1)
|
|
(text-insert! tx "def" mk3)
|
|
(test "01234abcdefdef89" (text->string tx)))
|
|
(let* ((tx (string->text "0123456789"))
|
|
(mk (text-mark! tx 5)))
|
|
(text-insert! tx (make-string 512 #\x) mk)
|
|
(test (string-append "01234" (make-string 512 #\x) "56789")
|
|
(text->string tx))
|
|
(let ((mk2 (text-mark! tx 512)))
|
|
(text-delete! tx 5 517)
|
|
(test "0123456789" (text->string tx))))
|
|
(let* ((tx (string->text "a一二三bc"))
|
|
(mk (text-mark! tx 0)))
|
|
(test #\a (text-forward-char! mk))
|
|
(test #\一 (text-forward-char! mk))
|
|
(test #\二 (text-forward-char! mk))
|
|
(test #\三 (text-forward-char! mk))
|
|
(test #\b (text-forward-char! mk))
|
|
(test #\c (text-forward-char! mk))
|
|
(test #f (text-forward-char! mk))
|
|
(test #\c (text-backward-char! mk))
|
|
(test #\b (text-backward-char! mk))
|
|
(test #\三 (text-backward-char! mk))
|
|
(test #\二 (text-backward-char! mk))
|
|
(test #\一 (text-backward-char! mk))
|
|
(test #\a (text-backward-char! mk))
|
|
(test #f (text-backward-char! mk)))
|
|
(let* ((tx (string->text "abc, (一二三): def"))
|
|
(mk (text-mark! tx 0)))
|
|
(test 3 (mark-offset (text-forward-word! mk)))
|
|
(test 15 (mark-offset (text-forward-word! mk)))
|
|
(test 21 (mark-offset (text-forward-word! mk)))
|
|
(test #f (text-forward-word! mk))
|
|
(test 21 (mark-offset mk))
|
|
(test 18 (mark-offset (text-backward-word! mk)))
|
|
(test 6 (mark-offset (text-backward-word! mk)))
|
|
(test 0 (mark-offset (text-backward-word! mk)))
|
|
(test #f (text-backward-word! mk))
|
|
)
|
|
(let* ((tx (string->text "0123456789\nabcdef\n零一二三四五六七八九"))
|
|
(mk (text-mark! tx 0)))
|
|
(test #t (text-beginning-of-line? mk))
|
|
(test #f (text-end-of-line? mk))
|
|
(test 10 (mark-offset (text-end-of-line! mk)))
|
|
(test #\newline (text-ref mk))
|
|
(test #f (text-beginning-of-line? mk))
|
|
(test #t (text-end-of-line? mk))
|
|
(text-forward-char! mk)
|
|
(text-forward-char! mk)
|
|
(text-forward-char! mk)
|
|
(text-forward-line! mk)
|
|
(test #\二 (text-ref mk))
|
|
(text-forward-char! mk)
|
|
(text-forward-char! mk)
|
|
(text-forward-char! mk)
|
|
(text-forward-char! mk)
|
|
(test #\六 (text-ref mk))
|
|
(text-backward-line! mk)
|
|
(test #\newline (text-ref mk))
|
|
(text-backward-line! mk)
|
|
(test #\6 (text-ref mk))
|
|
)
|
|
(let* ((tx (string->text "0123456789\nabcdef\n零一二三四五六七八九"))
|
|
(mk (text-mark! tx 0)))
|
|
(text-search! mk "一二三")
|
|
(test 30 (mark-offset mk))
|
|
(text-insert! tx "..." mk)
|
|
(test "0123456789\nabcdef\n零一二三...四五六七八九"
|
|
(text->string (mark-text mk))))
|
|
(test-end))))
|