Hi, This is a problem I was working on this morning (with the help of
chouser, thank you!), and ended up with a 'with-private-fns' macro that
works like this:
(with-private-fns [org.foo.bar [fn1 fn2]]
(deftest test-fn1..)
(deftest test-fn2..))
I'm a Clojure greenhorn, but I like this approach because my private fn
tests are consolidated. I think in the end thought it boils down to a
matter of personal style :)
The macro itself looks like this:
(defmacro with-private-fns [[ns fns] & tests]
"Refers private fns from ns and runs tests in context."
`(let ~(reduce #(conj %1 %2 `(ns-resolve '~ns '~%2)) [] fns)
~...@tests))
A test file making use of it can be found here:
http://github.com/alandipert/clj-utils/blob/master/test/org/dipert/utils/test/math.clj
Cheers,
Alan
Excerpts from Meikel Brandmeyer's message of 2010-02-22 07:08:59 -0500:
> Hi,
>
> On Feb 22, 11:55 am, Johnny Kwan <[email protected]> wrote:
>
> > You're absolutely right. I use 'ns and 'sym because that's what all of the
> > ns- functions use. I realize now that this is a macro, not a fn... :) I
> > would like to make the fact that this is a macro transparent, so that it
> > only accepts symbol arguments. The caller shouldn't have to know that this
> > is a macro.
>
> Here we go:
>
> (defmacro #^{:private true} use-private
> [ns sym]
> `(def ~(with-meta (second sym) {:private true}) @(ns-resolve ~ns
> ~sym)))
>
> Not tested, though, but should come close.
>
> > > Use @#'foo.bar/private-fn. Or...
> >
> > Thanks!
>
> This feels a little hacky, however.
>
> > That's what I figured, since the few library implementations I've read seem
> > to do that. I assume there's a way to remove these namespaces from
> > generated docs, so there's at least some obfuscation?
>
> I'd say, that depends on what you use (and how you use it) to generate
> the documentation.
>
> Sincerely
> Meikel
>
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en