Simple clojure coverage tool. Currently requires clojure 1.4.
Add to :plugins in your .lein/profiles.clj
This library currently only supports clojure.test. You can get midje to work
by wrapping facts in deftest
declarations.
Run lein cloverage
in your project. See cloverage/coverage.clj for more
options.
To specify the version of cloverage manually, set the CLOVERAGE_VERSION
to desired value, for example CLOVERAGE_VERSION=1.0.4-SNAPSHOT lein cloverage
By default, the plugin will use the latest release version of cloverage.
There is no maven plugin right now. A workaround is to import this library in the
project being tested, then run:
mvn exec:java -Dexec.classpathScope=test -Dexec.mainClass='clojure.main' -Dexec.args='--main cloverage.coverage *args-to-coverage*'
Where args-to-coverage will usually be something like "-n 'ns.regex.' -t 'test.ns.regex.'"
IllegalArgumentException No matching field found: foo for class user.Bar clojure.lang.Reflector.getInstanceField (Reflector.java:271)
This is usually caused by protocols with methods starting with -. Before clojure 1.6:
user=> (defprotocol Foo (-foo [x] x))
Foo
user=> (deftype Bar [] Foo (-foo [_] "foo"))
user.Bar
user=> (-foo (Bar.))
"foo"
user=> ((do -foo) (Bar.))
IllegalArgumentException No matching field found: foo for class user.Bar clojure.lang.Reflector.getInstanceField (Reflector.java:271)
Since cloverage will wrap the -foo symbol to track whether it's accessed, you will get this error. Upgrade to clojure 1.6.
master (unreleased):
- Bugfixes:
- Fix a bug where the form reader fails to read files containing multibyte chars.
1.0.8 (forked):
- Bugfixes:
- Fix a bug where the plugin adds a wrong core library artifact as a dependency.
1.0.7 (forked):
- Features:
- Use clojure.tools.reader for more accurate reports
- Support for Codecov
- Support for reader conditionals (maybe not perfect yet)
- Update dependencies
1.0.6:
- Features:
- Option to exclude namespaces (#57/#73)
- Improved records fixes for Compojure (#66/#69)
- Option to specify a path to src/test namespaces (#70)
- Automatic push out of snapshot releases (#65)
- Handle records correctly (#59)
- Text summary of results (#50)
- Bugfixes:
- Correct test namespaces regex usage (#67)
- Cope with zero-namespace situations correctly (#62)
1.0.5:
- Bugfixes:
- Work around AOT-ed inline functions not being wrappable (http://dev.clojure.org/jira/browse/CLJ-1330)
1.0.4:
- Features:
- Minimal EMMA XML output format support.
- Coveralls output format.
- Cloverage now exits with non-zero exit code when your tests fail
- Total % coverage summary in index.html
- Bugfixes:
- Better instrumentation logic is no longer confused by macro/symbol shadowing
- Support for (:require [(namespace.prefix (suffix :as rename))]) ns forms
- Cloverage jars no longer include all dependencies
1.0.3:
- fix empty list crash
- add letfn support
- print html report URL after testing
Distributed under the Eclipse Public License, the same as Clojure.
- 2015 LShift, Tom Parker
- 2012 LShift, Jacek Lach, Alexander Schmolck, Frank Shearar
- 2010 Michael Delaurentis
Some code was taken from
- Java IO interop (clojure-contrib/duck-streams) by Stuart Sierra (see cloverage/source.clj)
- Topological sort (https://gist.github.com/1263783) by Alan Dipert (see cloverage/kahn.clj)