[Git][cmucl/cmucl][issue-158-darwin-pathnames-utf8] Add tests for darwin filename normalization

Raymond Toy (@rtoy) gitlab at common-lisp.net
Mon Feb 20 21:07:41 UTC 2023



Raymond Toy pushed to branch issue-158-darwin-pathnames-utf8 at cmucl / cmucl


Commits:
125977aa by Raymond Toy at 2023-02-20T12:59:11-08:00
Add tests for darwin filename normalization

Test issue.158 tests that `make-pathname` normalizes the components
according to Darwin rules.

Test issue.158.dir tests that `directory` returns the expected file
names.

Add the file "tests/resources/darwin/안녕하십니까.txt" to be used for
`issue.158.dir`.

- - - - -


2 changed files:

- tests/issues.lisp
- + tests/resources/darwin/안녕하십니까.txt


Changes:

=====================================
tests/issues.lisp
=====================================
@@ -826,3 +826,49 @@
 	(*compile-print* nil))
     (assert-true (stream::find-external-format :euckr))
     (assert-true (stream::find-external-format :cp949))))
+
+(define-test issue.158
+    (:tag :issues)
+  (let* ((name (string #\Hangul_Syllable_Gyek))
+	 (path (make-pathname :directory (list :relative name)
+			      :name name
+			      :type name)))
+    #+darwin
+    (let ((expected '(4352 4456 4543)))
+      ;; Tests that on Darwin the Hangul pathname has been normalized
+      ;; correctly.  We fill in the directory, name, and type components
+      ;; with the same thing since it shouldn't really matter.
+      ;;
+      ;; The expected value is the conjoining jamo for the character
+      ;; #\Hangul_Syllable_Gyek.
+      (assert-equal (map 'list #'char-code (second (pathname-directory path)))
+		    expected)
+      (assert-equal (map 'list #'char-code (pathname-name path))
+		    expected)
+      (assert-equal (map 'list #'char-code (pathname-type path))
+		    expected))
+    #-darwin
+    (let ((expected (list (char-code #\Hangul_Syllable_Gyek))))
+      ;; For other OSes, just assume that the pathname is unchanged.
+      (assert-equal (map 'list #'char-code (second (pathname-directory path)))
+		    expected)
+      (assert-equal (map 'list #'char-code (pathname-name path))
+		    expected)
+      (assert-equal (map 'list #'char-code (pathname-type path))
+		    expected))))
+
+(define-test issue.158.dir
+    (:tag :issues)
+  (flet ((get-file ()
+	   ;; This assumes that there is only one file in resources/darwin
+	   (let ((files (directory "resources/darwin/*.txt")))
+	     (assert-equal (length files) 1)
+	     (first files))))
+    (let ((f (get-file))
+	  (expected-name "안녕하십니까"))
+      #+darwin
+      (assert-equal (pathname-name f)
+		    (unicode::decompose-hangul expected-name))
+      #-darwin
+      (assert-equal (pathname-name f) expected-name))))
+    


=====================================
tests/resources/darwin/안녕하십니까.txt
=====================================
@@ -0,0 +1,3 @@
+The file name of this file is "안녕하십니까.txt" ("Hello" in Korean.)
+
+



View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/commit/125977aaf357c0bff4726a09728415eeeaad87f9

-- 
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/commit/125977aaf357c0bff4726a09728415eeeaad87f9
You're receiving this email because of your account on gitlab.common-lisp.net.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/cmucl-cvs/attachments/20230220/bb54b019/attachment-0001.html>


More information about the cmucl-cvs mailing list