aboutsummaryrefslogtreecommitdiffstats
path: root/test/simple.tl
diff options
context:
space:
mode:
Diffstat (limited to 'test/simple.tl')
-rw-r--r--test/simple.tl54
1 files changed, 54 insertions, 0 deletions
diff --git a/test/simple.tl b/test/simple.tl
index 6f9464d..0efad02 100644
--- a/test/simple.tl
+++ b/test/simple.tl
@@ -524,3 +524,57 @@
(contains "requires" x))
:good)))
:good)
+
+
+;;; 50
+;;; Test deftag
+(deftag :abc (foo (bar 2) . other-attrs) body
+ ^(:p :foo ,foo :bar ,bar ,*body " world!"))
+
+(test (with-html-output-to-string (out)
+ (:abc :foo 42 :bar "x" "Hello,"))
+ "<p foo='42' bar='x'>Hello, world!</p>")
+
+;;; 51
+;;; Test chained expansion, and attr keyword arg defaulting
+(deftag :xyz (. other-attrs) body
+ ^(:abc :foo 1 "xyz" ,*body))
+
+(test (with-html-output-to-string (out)
+ (:xyz "abc"))
+ "<p foo='1' bar='2'>xyzabc world!</p>")
+
+;;; 52
+;;; Test invalid return: not tag material.
+(deftag :bad (. rest) body
+ ^(notkeyword))
+
+(test (catch
+ (eval ^(with-html-output-to-string (out) (:bad)))
+ (error (x) (if (contains "non-tag" x)
+ :good)))
+ :good)
+
+;;; 53
+;;; Test deftag producing multiple consecutive tags
+(deftag :multi (. rest) body
+ ^(progn (:p) (:q) (:r)))
+
+(test (with-html-output-to-string (out)
+ (:multi))
+ "<p></p><q></q><r></r>")
+
+
+;;; 54
+;;; Complex deftag
+(deftag :easy-input (label (name (gensym))
+ (id name) (type "text") . other-attrs) default
+ ^(progn
+ (:label :for ,name ,label)
+ (:input :name ,name :id ,id :type ,type
+ ,*other-attrs :value (progn ,*default))))
+
+(test (with-html-output-to-string (out)
+ (:easy-input :name "foo" :id "foo-23" :style "style" :label "lab" "123"))
+ "<label for='foo'>lab</label> \
+ <input name='foo' id='foo-23' type='text' style='style' value='123' />")