File: special.clj

package info (click to toggle)
clojure1.6 1.6.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 3,608 kB
  • ctags: 5,838
  • sloc: java: 27,336; xml: 498; sh: 69; makefile: 45
file content (65 lines) | stat: -rw-r--r-- 1,894 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
;   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.

; Author: Frantisek Sodomka

;;
;;  Test special forms, macros and metadata
;;

(ns clojure.test-clojure.special
  (:use clojure.test))

; http://clojure.org/special_forms

; let, letfn
; quote
; var
; fn

(deftest multiple-keys-in-destructuring
  (let [foo (fn [& {:keys [x]}] x)
        bar (fn [& options] (apply foo :x :b options))]
    (is (= (bar) :b))
    (is (= (bar :x :a) :a))))

(deftest empty-list-with-:as-destructuring
  (let [{:as x} '()]
    (is (= {} x))))

(deftest keywords-in-destructuring
  (let [{:keys [:a :b]} {:a 1 :b 2}]
    (is (= 1 a))
    (is (= 2 b))))

(deftest namespaced-keywords-in-destructuring
  (let [{:keys [:a/b :c/d]} {:a/b 1 :c/d 2}]
    (is (= 1 b))
    (is (= 2 d))))

(deftest namespaced-keys-in-destructuring
  (let [{:keys [a/b c/d]} {:a/b 1 :c/d 2}]
    (is (= 1 b))
    (is (= 2 d))))

(deftest namespaced-syms-in-destructuring
  (let [{:syms [a/b c/d]} {'a/b 1 'c/d 2}]
    (is (= 1 b))
    (is (= 2 d))))

(deftest keywords-not-allowed-in-let-bindings
  (is (thrown-with-msg? Exception #"Unsupported binding key: :a"
                        (eval '(let [:a 1] a))))
  (is (thrown-with-msg? Exception #"Unsupported binding key: :a/b"
                        (eval '(let [:a/b 1] b)))))

(require '[clojure.string :as s])
(deftest resolve-keyword-ns-alias-in-destructuring
  (let [{:keys [::s/x ::s/y]} {:clojure.string/x 1 :clojure.string/y 2}]
    (is (= x 1))
    (is (= y 2))))