File: tests.lisp

package info (click to toggle)
cl-trivial-utf-8 20111001-1
  • links: PTS
  • area: main
  • in suites: buster, stretch
  • size: 72 kB
  • sloc: lisp: 226; makefile: 11
file content (31 lines) | stat: -rw-r--r-- 1,401 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
(defpackage :trivial-utf-8-tests
  (:use :common-lisp :trivial-utf-8))

(in-package :trivial-utf-8-tests)

;; TODO this could be a lot nicer and more exhaustive.

(defparameter *my-path* (asdf:component-pathname (asdf:find-component nil :trivial-utf-8)))
(defparameter *test-file* (merge-pathnames #P"test.txt" *my-path*))
(defparameter *output-file* (merge-pathnames #P"test-out.txt" *my-path*))

;; Read the content of a file.
(let ((content (with-open-file (input *test-file* :direction :input
				      :element-type '(unsigned-byte 8))
		 (read-utf-8-string input :stop-at-eof t))))
  ;; Is the amount of characters correct?
  (assert (= (length content) 616))
  ;; See if encoding and decoding the string leaves it intact.
  (assert (string= (utf-8-bytes-to-string (string-to-utf-8-bytes content)) content))
  (with-open-file (output *output-file* :direction :output :element-type '(unsigned-byte 8)
			  :if-exists :supersede)
    ;; Write it to another file.
    (write-utf-8-bytes content output)))

;; Check whether the files are really the same.
(with-open-file (original *test-file* :direction :input :element-type '(unsigned-byte 8))
  (with-open-file (new *output-file* :direction :input :element-type '(unsigned-byte 8))
    (loop :for byte1 = (read-byte original nil :eof)
	  :for byte2 = (read-byte new nil :eof)
	  :do (assert (equal byte1 byte2))
	  :while (not (eq byte1 :eof)))))