Skip to content

Commit

Permalink
use proxy to create a mock filesystem instead of mockito
Browse files Browse the repository at this point in the history
  • Loading branch information
jkk committed May 18, 2010
1 parent 0fb0060 commit 3e9d215
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 29 deletions.
3 changes: 1 addition & 2 deletions project.clj
Expand Up @@ -2,5 +2,4 @@
:description "Quickly locate files with glob patterns"
:dependencies [[org.clojure/clojure "1.2.0-master-SNAPSHOT"]
[org.clojure/clojure-contrib "1.2.0-SNAPSHOT"]]
:dev-dependencies [[org.mockito/mockito-all "1.8.4"]
[leiningen/lein-swank "1.2.0-SNAPSHOT"]])
:dev-dependencies [[leiningen/lein-swank "1.2.0-SNAPSHOT"]])
46 changes: 19 additions & 27 deletions test/org/satta/glob_test.clj
@@ -1,6 +1,7 @@
(ns org.satta.glob-test
(:use [org.satta.glob] :reload-all)
(:use [clojure.test]))
(:use [clojure.test])
(:import [java.io File]))

;; glob->regex ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Expand Down Expand Up @@ -59,33 +60,24 @@

;; glob ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defmacro mock
"Creates a mock object given class name and pairs of method stubs."
[class & stubs]
(let [mocked (gensym)]
`(let [~mocked (org.mockito.Mockito/mock ~class)]
~@(map (fn [[method returns]]
(list '.thenReturn
(list 'org.mockito.Mockito/when
(list (symbol (str \. method)) mocked)) returns))
(partition 2 stubs))
~mocked)))
(defn mock-fs
"Takes a tree of vectors and returns a minimal, fake file/dir hierarchy.
Only getName and listFiles will return reliable (fake) results."
[node]
(if (vector? node)
(proxy [File] [(first node)]
(listFiles [] (into-array File (map mock-fs (rest node)))))
(File. node)))

(defn- mock-fs
"Takes a tree of vectors and returns a mock file/dir hierarchy"
[file]
(if (vector? file)
(let [[dir & files] file
children (into-array java.io.File (map mock-fs files))]
(mock java.io.File
getName dir
isDirectory true
isFile false
listFiles children))
(mock java.io.File
getName file
isDirectory false
isFile true)))
(deftest test-mock-fs
(let [fs (mock-fs ["/" ["foo" "subfoo1" "subfoo2"] "bar" "baz"])]
(is (= fs (File. "/")))
(is (= (seq (.listFiles fs))
[(File. "foo") (File. "bar") (File. "baz")]))
(is (= (seq (.listFiles (first (.listFiles fs))))
[(File. "subfoo1") (File. "subfoo2")]))
(is (= (map #(.getName %) (.listFiles fs))
["foo" "bar" "baz"]))))

(def shallow-fs
(mock-fs
Expand Down

0 comments on commit 3e9d215

Please sign in to comment.