Skip to content

Commit

Permalink
CLJS-3411: cljs.core/test behavior does not match docstring (#226)
Browse files Browse the repository at this point in the history
* correct doc string
* support vars
* add test case
  • Loading branch information
swannodette authored Feb 28, 2024
1 parent fdff564 commit acbefb9
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 8 deletions.
13 changes: 10 additions & 3 deletions src/main/cljs/cljs/core.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -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)))
Expand Down
6 changes: 3 additions & 3 deletions src/test/cljs/cljs/core_test.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -2006,7 +2006,7 @@
IDeref
(-deref [_]
(:x @a))

ISwap
(-swap! [o f]
(:x (swap! a update :x f)))
Expand All @@ -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))))]
Expand All @@ -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)))
Expand Down
22 changes: 22 additions & 0 deletions src/test/cljs/cljs/var_test.cljs
Original file line number Diff line number Diff line change
@@ -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)))))
6 changes: 4 additions & 2 deletions src/test/cljs/test_runner.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -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)

0 comments on commit acbefb9

Please sign in to comment.