(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))))