;-*- Mode:     Lisp -*-
;;;; Author:   Paul Dietz
;;;; Created:  Sun Oct 17 20:28:24 2004
;;;; Contains: Tests of the ~( format directives





(def-format-test format.paren.1
  "~(XXyy~AuuVV~)" ("ABc dEF ghI") "xxyyabc def ghiuuvv")

;;; Conversion of simple characters to downcase
(deftest format.paren.2
  (loop for i from 0 below (min char-code-limit (ash 1 16))
        for c = (code-char i)
        when (and c
                  (eql (char-code c) (char-int c))
                  (upper-case-p c)
                  (let ((s1 (format nil "~(~c~)" c))
                        (s2 (string (char-downcase c))))
                    (if
                        (or (not (eql (length s1) 1))
                            (not (eql (length s2) 1))
                            (not (eql (elt s1 0)
                                      (elt s2 0))))
                        (list i c s1 s2)
                      nil)))
        collect it)
  nil)

(deftest formatter.paren.2
  (let ((fn (formatter "~(~c~)")))
    (loop for i from 0 below (min char-code-limit (ash 1 16))
          for c = (code-char i)
          when (and c
                    (eql (char-code c) (char-int c))
                    (upper-case-p c)
                    (let ((s1 (formatter-call-to-string fn c))
                          (s2 (string (char-downcase c))))
                      (if
                          (or (not (eql (length s1) 1))
                              (not (eql (length s2) 1))
                              (not (eql (elt s1 0)
                                        (elt s2 0))))
                          (list i c s1 s2)
                        nil)))
          collect it))
  nil)


(def-format-test format.paren.3
  "~@(this is a TEST.~)" nil "This is a test.")

(def-format-test format.paren.4
  "~@(!@#$%^&*this is a TEST.~)" nil "!@#$%^&*This is a test.")

(def-format-test format.paren.5
  "~:(this is a TEST.~)" nil "This Is A Test.")

(def-format-test format.paren.6
  "~:(this is7a TEST.~)" nil "This Is7a Test.")

(def-format-test format.paren.7
  "~:@(this is AlSo A teSt~)" nil "THIS IS ALSO A TEST")

(deftest format.paren.8
  (loop for i from 0 below (min char-code-limit (ash 1 16))
        for c = (code-char i)
        when (and c
                  (eql (char-code c) (char-int c))
                  (lower-case-p c)
                  (let ((s1 (format nil "~@:(~c~)" c))
                        (s2 (string (char-upcase c))))
                    (if
                        (or (not (eql (length s1) 1))
                            (not (eql (length s2) 1))
                            (not (eql (elt s1 0)
                                      (elt s2 0))))
                        (list i c s1 s2)
                      nil)))
        collect it)
  nil)

(deftest formatter.paren.8
  (let ((fn (formatter "~@:(~c~)")))
    (loop for i from 0 below (min char-code-limit (ash 1 16))
          for c = (code-char i)
          when (and c
                    (eql (char-code c) (char-int c))
                    (lower-case-p c)
                    (let ((s1 (formatter-call-to-string fn c))
                          (s2 (string (char-upcase c))))
                      (if
                          (or (not (eql (length s1) 1))
                              (not (eql (length s2) 1))
                              (not (eql (elt s1 0)
                                        (elt s2 0))))
                          (list i c s1 s2)
                        nil)))
          collect it))
  nil)

;;; Nested conversion

(def-format-test format.paren.9
  "~(aBc ~:(def~) GHi~)" nil "abc def ghi")

(def-format-test format.paren.10
  "~(aBc ~(def~) GHi~)" nil "abc def ghi")

(def-format-test format.paren.11
  "~@(aBc ~:(def~) GHi~)" nil "Abc def ghi")

(def-format-test format.paren.12
  "~(aBc ~@(def~) GHi~)" nil "abc def ghi")

(def-format-test format.paren.13
  "~(aBc ~:(def~) GHi~)" nil "abc def ghi")

(def-format-test format.paren.14
  "~:(aBc ~(def~) GHi~)" nil "Abc Def Ghi")

(def-format-test format.paren.15
  "~:(aBc ~:(def~) GHi~)" nil "Abc Def Ghi")

(def-format-test format.paren.16
  "~:(aBc ~@(def~) GHi~)" nil "Abc Def Ghi")

(def-format-test format.paren.17
  "~:(aBc ~@:(def~) GHi~)" nil "Abc Def Ghi")

(def-format-test format.paren.18
  "~@(aBc ~(def~) GHi~)" nil "Abc def ghi")

(def-format-test format.paren.19
  "~@(aBc ~:(def~) GHi~)" nil "Abc def ghi")

(def-format-test format.paren.20
  "~@(aBc ~@(def~) GHi~)" nil "Abc def ghi")

(def-format-test format.paren.21
  "~@(aBc ~@:(def~) GHi~)" nil "Abc def ghi")

(def-format-test format.paren.22
  "~:@(aBc ~(def~) GHi~)" nil "ABC DEF GHI")

(def-format-test format.paren.23
  "~@:(aBc ~:(def~) GHi~)" nil "ABC DEF GHI")

(def-format-test format.paren.24
  "~:@(aBc ~@(def~) GHi~)" nil "ABC DEF GHI")

(def-format-test format.paren.25
  "~@:(aBc ~@:(def~) GHi~)" nil "ABC DEF GHI")
