 (deftest feature-tour
 
 	; Each tag has a function named for it
-	(is=str
+	(should-equal-str
 		(p "Content")
 		"<p>Content</p>")
-	(is=str
+	(should-equal-str
 		(ol (li "Monday") (li "Tuesday") (li "Wednesday"))
 		"<ol><li>Monday</li><li>Tuesday</li><li>Wednesday</li></ol>")
 
 	; Tag attributes can be specified with hash-maps
-	(is=str
+	(should-equal-str
 		(p {:attr :value} "Content")
 		"<p attr=\"value\">Content</p>")
 
 	; Tags can be composed like normal functions
-	(is=str
+	(should-equal-str
 		(ul (map li ["A" "B" "C"]))
 		"<ul><li>A</li><li>B</li><li>C</li></ul>")
 
 	; String content gets escaped, unless it's a literal
-	(is=str
+	(should-equal-str
 		(p "<Content>")
 		"<p>&lt;Content&gt;</p>")
-	(is=str
+	(should-equal-str
 		(p (literal "<Content>"))
 		"<p><Content></p>")
 
 	; Empty tags have trailing '/' for XHTML compliance
-	(is=str
+	(should-equal-str
 		(p (tag "Content"))
 		"<p><Content /></p>")
 
 	; CSS can be applied with a CSS object
-	(is=str
+	(should-equal-str
 		(div (css :color :red) (br))
 		"<div style=\"; color: red;\"><br /></div>")
 
 	; Empty strings and nil get ignored
-	(is=str
+	(should-equal-str
 		(p)
 		(p "")
 		(p nil)
 		(p "" nil))
-	(is=str
+	(should-equal-str
 		(div "A" "" nil "B" "")
 		(div nil nil "A" "B" ""))
 	
 	; Tag can just be a constant if it doesn't need arguments
-	(is=str
+	(should-equal-str
 		(br)
 		br
 		"<br />")
 
 	; CSS properties can be constants if they don't need arguments
 	; And can be used as functions
-	(is=str
+	(should-equal-str
 		(table (hide) (tr (td "A") (td "B")))
 		(table hide (tr (td "A") (td "B")))
 		(hide (table (tr (td "A") (td "B"))))
 		"<table style=\"; display: none;\"><tr><td>A</td><td>B</td></tr></table>")
-	(is=str
+	(should-equal-str
 		(map-table {:first-name "Rusty" :last-name "Shackelford"})
 		"<table><tr><td>First Name</td><td>Rusty</td></tr><tr><td>Last Name</td><td>Shackelford</td></tr></table>")
 
 	; Some decorators are variadic and take a Tag as the optional last argument
-	(is=str
+	(should-equal-str
 		(transform (rotate 45) (skew 10 15) div)
 		(div (transform (rotate 45) (skew 10 15))))
 

		((((div)))))

	; Applying tag as function should be same as extend-tag
	(is=str
		(extend-tag (div (center)) (color :red))
		(div (center) (color :red)))
	(is=str
		((div (center)) (color :red))
		(div (center) (color :red)))

	; This allows for easy specialization of tags
	(def special-div (div {:class "special"} (center)))
	(is=str
		(special-div "Hi")
		(div (center) {:class "special"} "Hi"))

	; Test tag application with many arguments - up to 20
	(is=str
		(p "a" "b" "c" "d" "e" "f" "g" "h" "i" "j")
		(apply p ["a" "b" "c" "d" "e" "f" "g" "h" "i" "j"])
		(p ["a" "b" "c" "d" "e" "f" "g" "h" "i" "j"])
		"<p>abcdefghij</p>")

	; Test tag application with many arguments - over 20
	(is=str
		(p "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z")
		(apply p ["a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"])
		(p ["a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"])

(use 'hyjinks)
(use 'clojure.test)

(defn should-equal-str
	"Asserts that all values in `xs` have equivalent `str` values"
	[& xs] (is (apply = (map str xs))))

