Initial revision
[chise/xemacs-chise.git.1] / tests / automated / mule-tests.el
diff --git a/tests/automated/mule-tests.el b/tests/automated/mule-tests.el
new file mode 100644 (file)
index 0000000..729d134
--- /dev/null
@@ -0,0 +1,75 @@
+;; Copyright (C) 1999 Free Software Foundation, Inc.
+
+;; Author: Hrvoje Niksic <hniksic@xemacs.org>
+;; Maintainer: Hrvoje Niksic <hniksic@xemacs.org>
+;; Created: 1999
+;; Keywords: tests
+
+;; This file is part of XEmacs.
+
+;; XEmacs is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; XEmacs is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with XEmacs; see the file COPYING.  If not, write to the Free
+;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+;; 02111-1307, USA.
+
+;;; Synched up with: Not in FSF.
+
+;;; Commentary:
+
+;; Test some Mule functionality (most of these remain to be written) .
+;; See test-harness.el for instructions on how to run these tests.
+
+;;-----------------------------------------------------------------
+;; Test whether all legal chars may be safely inserted to a buffer.
+;;-----------------------------------------------------------------
+
+(defun test-chars (&optional for-test-harness)
+  "Insert all characters in a buffer, to see if XEmacs will crash.
+This is done by creating a string with all the legal characters
+in [0, 2^19) range, inserting it into the buffer, and checking
+that the buffer's contents are equivalent to the string.
+
+If FOR-TEST-HARNESS is specified, a temporary buffer is used, and
+the Assert macro checks for correctness."
+  (let ((max (expt 2 (if (featurep 'mule) 19 8)))
+       (list nil)
+       (i 0))
+    (while (< i max)
+      (and (not for-test-harness)
+          (zerop (% i 1000))
+          (message "%d" i))
+      (and (int-char i)
+          ;; Don't aset to a string directly because random string
+          ;; access is O(n) under Mule.
+          (setq list (cons (int-char i) list)))
+      (setq i (1+ i)))
+    (let ((string (apply #'string (nreverse list))))
+      (if for-test-harness
+         ;; For use with test-harness, use Assert and a temporary
+         ;; buffer.
+         (with-temp-buffer
+           (insert string)
+           (Assert (equal (buffer-string) string)))
+       ;; For use without test harness: use a normal buffer, so that
+       ;; you can also test whether redisplay works.
+       (switch-to-buffer (get-buffer-create "test"))
+       (erase-buffer)
+       (buffer-disable-undo)
+       (insert string)
+       (assert (equal (buffer-string) string))))))
+
+;; It would be really *really* nice if test-harness allowed a way to
+;; run a test in byte-compiled mode only.  It's tedious to have
+;; time-consuming tests like this one run twice, once interpreted and
+;; once compiled, for no good reason.
+(test-chars t)