Meikel  Brandmeyer avatar Meikel Brandmeyer committed a74e0cc

Added like? and refactored ok-driver

Fixed also a small bug to use pr-str instead of print-str.

Comments (0)

Files changed (2)

+#! /bin/sh
+#-
+# Copyright 2008 (c) Meikel Brandmeyer.
+# All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+in="$0.in"
+out="$0.out"
+exp="$0.exp"
+
+counter=1
+
+print_result() {
+	if [ $1 -ne 0 ]; then
+		printf "not "
+	fi
+	printf "ok %d - %s\n" $counter $2
+	counter=`expr $counter + 1`
+}
+
+try() {
+	cat >$in <<EOF
+(load-file "tap.clj")
+(clojure/refer 'tap)
+$1
+EOF
+
+	cat >$exp <<EOF
+$2
+EOF
+
+	java clojure.lang.Script $in >$out
+	cmp -s $exp $out
+	print_result $? $3
+}
+
+cleanup() {
+	rm -f $in $out $exp
+}
+
+trap cleanup 2 3 5 6 9 15
+
+echo 1..4
+
+try '(like? (.concat "foo" "bar") #"o+b")' "ok 1" "true w/o description"
+try '(like? (.concat "foo" "bar") #"xx")' 'not ok 1
+# Expected: (.concat "foo" "bar")
+# to match: xx' "false w/o description"
+try '(like? (.concat "foo" "bar") #"o+b" "success")' "ok 1 - success" "true w/ description"
+try '(like? (.concat "foo" "bar") #"xx" "failure")' 'not ok 1 - failure
+# Expected: (.concat "foo" "bar")
+# to match: xx' "false w/ description"
+
+cleanup
+
+# vim:ft=sh:
     (print (first desc)))
   (newline))
 
-(defmacro is? [actual exp & desc]
-  (let [tmp_e (gensym "is__")
-        tmp_a (gensym "is__")
-        tmp_r (gensym "is__")
-        tmp_es (gensym "is__")
-        tmp_as (gensym "is__")
-        tmp_rs (gensym "is__")]
+(defn- ok-driver [actual exp desc pred diagnose]
+  (let [tmp_e (gensym "tap__")
+        tmp_a (gensym "tap__")
+        tmp_r (gensym "tap__")
+        tmp_es (gensym "tap__")
+        tmp_as (gensym "tap__")
+        tmp_rs (gensym "tap__")]
     `(let [~tmp_e ~exp
            ~tmp_a ~actual
-           ~tmp_r (= ~tmp_e ~tmp_a)]
-       (if (nil? ~(first desc))
+           ~tmp_r (~pred ~tmp_e ~tmp_a)]
+       (if (nil? ~desc)
          (ok? ~tmp_r)
-         (ok? ~tmp_r ~(first desc)))
+         (ok? ~tmp_r ~desc))
        (when-not ~tmp_r
-         (let [~tmp_es (print-str ~tmp_e)
-               ~tmp_as (print-str (quote ~actual))
-               ~tmp_rs (print-str ~tmp_a)]
-           (diag (.concat "Expected: " ~tmp_as))
-           (diag (.concat "to be:    " ~tmp_es))
-           (diag (.concat "but was:  " ~tmp_rs)))))))
+         (let [~tmp_es (pr-str ~tmp_e)
+               ~tmp_as (pr-str (quote ~actual))
+               ~tmp_rs (pr-str ~tmp_a)]
+           (~diagnose ~tmp_es ~tmp_as ~tmp_rs))))))
+
+(defmacro is? [actual exp & desc]
+  (ok-driver actual exp (first desc)
+             #(= %1 %2)
+             (fn [e a r]
+               (diag (.concat "Expected: " a))
+               (diag (.concat "to be:    " e))
+               (diag (.concat "but was:  " r)))))
 
 (defmacro isnt? [actual exp & desc]
-  (let [tmp_e (gensym "is__")
-        tmp_a (gensym "is__")
-        tmp_r (gensym "is__")
-        tmp_es (gensym "is__")
-        tmp_as (gensym "is__")
-        tmp_rs (gensym "is__")]
-    `(let [~tmp_e ~exp
-           ~tmp_a ~actual
-           ~tmp_r (not= ~tmp_e ~tmp_a)]
-       (if (nil? ~(first desc))
-         (ok? ~tmp_r)
-         (ok? ~tmp_r ~(first desc)))
-       (when-not ~tmp_r
-         (let [~tmp_es (print-str ~tmp_e)
-               ~tmp_as (print-str (quote ~actual))
-               ~tmp_rs (print-str ~tmp_a)]
-           (diag (.concat "Expected:  " ~tmp_as))
-           (diag (.concat "not to be: " ~tmp_es)))))))
+  (ok-driver actual exp (first desc)
+             #(not= %1 %2)
+             (fn [e a r]
+               (diag (.concat "Expected:  " a))
+               (diag (.concat "not to be: " e)))))
+
+(defmacro like? [actual exp & desc]
+  (ok-driver actual exp (first desc)
+             (fn [e a] (not (nil? (re-find e a))))
+             (fn [e a r]
+                (diag (.concat "Expected: " a))
+                (diag (.concat "to match: " e)))))
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.