diff --git a/src/main/cljs/cljs/core.cljs b/src/main/cljs/cljs/core.cljs index e384f1560..27a2f9e37 100644 --- a/src/main/cljs/cljs/core.cljs +++ b/src/main/cljs/cljs/core.cljs @@ -11886,10 +11886,17 @@ reduces them without incurring seq initialization" x)) (defn test - "test [v] finds fn at key :test in var metadata and calls it, - presuming failure will throw exception" + "test [v] - if var, finds fn at key :test in var metadata, if function, finds + special test property. Calls it, presuming failure will throw exception. + + Examples: + + (test my-fn) ;; :ok + (test #'my-fn) ;; :ok" [v] - (let [f (.-cljs$lang$test v)] + (let [f (if (instance? Var v) + (-> v meta :test) + (some-> v .-cljs$lang$test))] (if f (do (f) :ok) :no-test))) diff --git a/src/test/cljs/cljs/core_test.cljs b/src/test/cljs/cljs/core_test.cljs index 625c14c3f..08581d603 100644 --- a/src/test/cljs/cljs/core_test.cljs +++ b/src/test/cljs/cljs/core_test.cljs @@ -2006,7 +2006,7 @@ IDeref (-deref [_] (:x @a)) - + ISwap (-swap! [o f] (:x (swap! a update :x f))) @@ -2016,7 +2016,7 @@ (:x (swap! a update :x f x y))) (-swap! [o f x y zs] (:x (swap! a #(apply update % :x f x y zs)))) - + IReset (-reset! [o new-value] (:x (swap! a assoc :x new-value))))] @@ -2031,7 +2031,7 @@ (is (= 11 @c)) (is (= 0 (reset! c 0))) (is (= 0 @c)) - + (is (= [0 1] (swap-vals! c inc))) (is (= 1 @c)) (is (= [1 2] (swap-vals! c + 1))) diff --git a/src/test/cljs/cljs/var_test.cljs b/src/test/cljs/cljs/var_test.cljs new file mode 100644 index 000000000..886326a76 --- /dev/null +++ b/src/test/cljs/cljs/var_test.cljs @@ -0,0 +1,22 @@ +;; Copyright (c) Rich Hickey. All rights reserved. +;; The use and distribution terms for this software are covered by the +;; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) +;; which can be found in the file epl-v10.html at the root of this distribution. +;; By using this software in any fashion, you are agreeing to be bound by +;; the terms of this license. +;; You must not remove this notice, or any other, from this software. + +(ns cljs.var-test + (:require [cljs.test :refer-macros [deftest is testing]])) + +(defn cljs-3411-function + "this function adds two numbers" + {:test #(do + (assert (= (cljs-3411-function 2 3) 5)) + (assert (= (cljs-3411-function 4 4) 8)))} + ([x y] (+ x y))) + +(deftest cljs-3411 + (testing "cljs.core/test respects docstring" + (is (= :ok (test cljs-3411-function))) + (is (= :ok (test #'cljs-3411-function))))) diff --git a/src/test/cljs/test_runner.cljs b/src/test/cljs/test_runner.cljs index 29218923f..a0e411309 100644 --- a/src/test/cljs/test_runner.cljs +++ b/src/test/cljs/test_runner.cljs @@ -57,7 +57,8 @@ [cljs.inference-test] [cljs.walk-test] [cljs.repl-test] - [cljs.extend-to-native-test])) + [cljs.extend-to-native-test] + [cljs.var-test])) (set! *print-newline* false) @@ -116,4 +117,5 @@ 'cljs.inference-test 'cljs.walk-test 'cljs.repl-test - 'cljs.extend-to-native-test) + 'cljs.extend-to-native-test + 'cljs.var-test)