#!/usr/bin/newlisp ;; qa-utf16path - check WIN_32 file and directory routines on ;; UTF-16 encoded paths ;; run with N = 10000 to check for memory leaks ;; ./qa-utf16path 10000 ;; newlisp qa-utf16path 10000 (println) (println "Testing UTF-16 path names") (if (main-args 2) (setq N (int (main-args 2))) (setq N 10)) (when (= 0 (& (sys-info -1) 128)) (println ">>>>> qa-utf16path: This test is only used on UTF8 enabled versions.") (exit) ) (set 'Yuki "\230\162\182\230\181\166\231\148\177\232\168\152") (set 'InvalidUTF8 "\xC0\xC1") (set 'UnicodeStr Yuki) (set 'h 1) ; pre allocate mem so changes should be minimal (set 'sRand (join (map char (map (curry + 32) (rand (- 127 32) (+ 10 90);(rand 100)) ) ) ))) (set 'buff sRand) (define-macro (assert any) (local (result) (when (not (set 'result (eval any))) (println (string " >>>> Expression failed! " any)) (setq fail true) (if (> N 10) (exit)) ) result ) ) (println "Step 1:") (println (time (begin (assert (make-dir UnicodeStr)) (assert (remove-dir UnicodeStr)) ) N )) (println "Step 2:") (assert (make-dir UnicodeStr)) (println (time (assert (directory? UnicodeStr)) N)) (println (time (assert (file? UnicodeStr)) N)) (println (time (begin (assert (directory)) (assert (directory "." UnicodeStr)) (assert (= 1 (length (directory "." UnicodeStr)))) (assert (real-path UnicodeStr)) (assert (change-dir UnicodeStr)) (assert (real-path)) (assert (directory)) (assert (change-dir "..")) ) N)) (assert (remove-dir UnicodeStr)) (println "Step 3:") (println (time (begin (assert (write-file UnicodeStr sRand)) (assert (= (read-file UnicodeStr) sRand)) (assert (append-file UnicodeStr (reverse sRand))) (assert (delete-file UnicodeStr)) ) N )) (println "Step 4:") (assert (write-file UnicodeStr sRand)) (println (time (assert (not (directory? UnicodeStr))) N)) (println (time (assert (file? UnicodeStr)) N)) (println (time (assert (file-info UnicodeStr)) N)) (println "Step 5:") (println (time (begin (assert (set 'h (open UnicodeStr "w"))) (assert (write-buffer h sRand)) (assert (close h)) (assert (set 'h (open UnicodeStr "a"))) (assert (write-buffer h (reverse sRand))) (assert (close h)) (assert (set 'h (open UnicodeStr "r"))) (assert (read-buffer h buff 1024)) (assert (close h)) (assert (rename-file UnicodeStr "foo")) (assert (rename-file "foo" UnicodeStr)) (assert (rename-file UnicodeStr UnicodeStr)) (when (find ostype '("Windows" "Cygwin")) (assert (not (rename-file UnicodeStr InvalidUTF8))) (assert (not (rename-file InvalidUTF8 InvalidUTF8))) (assert (not (rename-file InvalidUTF8 UnicodeStr))) ) ) N)) (assert (delete-file UnicodeStr)) (println "Step 6:") (println (time (save UnicodeStr) N)) (assert (delete-file UnicodeStr)) (if-not fail (println ">>>>> UTF-16 path-file-names testing SUCCESSFUL") (println ">>>>> PROBLEM with UTF-16 path-file-names processing") ) (exit)