Giter Site home page Giter Site logo

humane-test-output's Introduction

Humane test output for clojure.test

https://clojars.org/pjstadig/humane-test-output/latest-version.svg

This library does two things:

  1. Test output is pretty printed.
  2. Equality assertions are also diffed.

Version 0.8.0 and later of humane-test-output requires Clojure 1.8.0 or later.

IDEs

This test output formatting works great with Emacs and cider 0.10 or lower, and when running Leiningen in a console. However, some IDEs are also bashing in their own versions of test formatting.

I do not recommend using this with cider 0.11.0 or greater or with Cursive, or LightTable, or any other IDE.

Clojure

To activate it you will need to call pjstadig.humane-test-output/activate!. The preferred way to do this with Leiningen is to use an injection in the :user profile in your ~/.lein/profiles.clj:

{:user {:dependencies [[pjstadig/humane-test-output "0.11.0"]]
        :injections [(require 'pjstadig.humane-test-output)
                     (pjstadig.humane-test-output/activate!)]}}

If you are on a mixed team and some members need to disable humane test output, they can define the INHUMANE_TEST_OUTPUT environment variable, though again it’s better for each user to enable it in their own ~/.lein/profiles.clj.

Once humane-test-output is activated, instead of this:

FAIL in (a-test) (humane_test_output_test.clj:7)
FIXME, I fail.
 expected: (= {:foo :bar, :baz :quux, :something "a long string?", :another-key "and another value"} {:fo :bar, :baz :quux, :something "a long string?", :another-key "and another value"})
  actual: (not (= {:another-key "and another value", :foo :bar, :something "a long string?", :baz :quux} {:another-key "and another value", :something "a long string?", :fo :bar, :baz :quux}))

FAIL in (a-test) (humane_test_output_test.clj:11)
FIXME, I fail.
expected: (= {:foo :bar, :baz :quux} {:foo :bar, :baz :quux} {:fo :bar, :baz :quux})
  actual: (not (= {:foo :bar, :baz :quux} {:foo :bar, :baz :quux} {:fo :bar, :baz :quux}))
  FAIL in (a-test) (humane_test_output_test.clj:14)

FIXME, I fail.
expected: (list? foo)
  actual: (not (list? {:another-key "and another value", :foo :bar, :something "a long string?", :baz :quux}))

You get this:

FAIL in (a-test) (humane_test_output_test.clj:7)
FIXME, I fail.
expected: {:another-key "and another value",
           :foo :bar,
           :something "a long string?",
           :baz :quux}
  actual: {:fo :bar}
    diff: - {:baz :quux,
             :something "a long string?",
             :foo :bar,
             :another-key "and another value"}
          + {:fo :bar}

FAIL in (a-test) (humane_test_output_test.clj:10)
FIXME, I fail.
expected: {:foo :bar, :baz :quux}
  actual: {:fo :bar, :baz :quux}
    diff: - {:foo :bar}
          + {:fo :bar}

FAIL in (a-test) (humane_test_output_test.clj:13)
FIXME, I fail.
expected: (list? foo)
  actual: (not
           (list?
            {:another-key "and another value",
             :foo :bar,
             :something "a long string?",
             :baz :quux}))

BONUS FEATURE

A test containing (is (= oops-i-only-gave-one-argument)) will throw an exception.

ClojureScript

It is not necessary to activate humane-test-output with ClojureScript, but the behavior should be much the same as with Clojure.

License

Copyright © Paul Stadig and Outpace Systems, Inc.  All rights reserved.

Some small bits of code were taken from clojure.test and modified, and are
Copyright © Rich Hickey.  All rights reserved.

Distributed under the Eclipse Public License, the same as Clojure.

Acknowledgements

I am grateful for design and implementation assistance from Bryce Covert.

Thanks to Miloslav Nenadál for the ClojureScript implementation.

humane-test-output's People

Contributors

arichiardi avatar divergentdave avatar frenchy64 avatar kamn avatar mynomoto avatar nenadalm avatar pjstadig avatar ryfow avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

humane-test-output's Issues

ClojureScript tests fail with newer phantomjs?

There seems to be a problem with the phantomjs tests.

This is what I receive when I call them:

$ lein cljsbuild test
ReferenceError: Can't find variable: pjstadig
TypeError: Attempting to change the setter of an unconfigurable property.
TypeError: Attempting to change the setter of an unconfigurable property.

It seems that the generated humanize-test-output-test.js does not setup things correctly.

The PhantomJS version is:

$ phantomjs --version
2.1.1

No effect (by default, as README suggests) in ClojureScript

I have 0.8.0 enabled with the activate! call. Works fine in Clojure. When running ClojureScript tests, it doesn't have any effect:

FAIL in (icon-test) (:)
expected: (= {:a 1, :b 2} {:a 1, :c 3})
  actual: (not (= {:a 1, :b 2} {:a 1, :c 3}))

That makes sense, because it doesn't appear doo understands middleware yet.

How do I run ClojureScript tests so that I do get humane error messages back out?

Warnings for using private vars (ClojureScript)

Using [org.clojure/clojurescript "1.10.439"] will produce lot of warning about private vars:

WARNING: var: cljs.pprint/level-exceeded is not public at line 12 target/out/pjstadig/util.cljc
WARNING: var: cljs.pprint/*current-level* is not public at line 12 target/out/pjstadig/util.cljc
WARNING: var: cljs.pprint/*current-length* is not public at line 12 target/out/pjstadig/util.cljc
WARNING: var: cljs.pprint/*current-level* is not public at line 12 target/out/pjstadig/util.cljc
WARNING: var: cljs.pprint/*current-length* is not public at line 12 target/out/pjstadig/util.cljc
WARNING: var: cljs.pprint/*current-level* is not public at line 12 target/out/pjstadig/util.cljc
WARNING: var: cljs.pprint/start-block is not public at line 12 target/out/pjstadig/util.cljc
WARNING: var: cljs.pprint/end-block is not public at line 12 target/out/pjstadig/util.cljc
WARNING: var: cljs.pprint/level-exceeded is not public at line 24 target/out/pjstadig/util.cljc
WARNING: var: cljs.pprint/*current-level* is not public at line 24 target/out/pjstadig/util.cljc
WARNING: var: cljs.pprint/*current-length* is not public at line 24 target/out/pjstadig/util.cljc
WARNING: var: cljs.pprint/*current-level* is not public at line 24 target/out/pjstadig/util.cljc
WARNING: var: cljs.pprint/*current-length* is not public at line 24 target/out/pjstadig/util.cljc
WARNING: var: cljs.pprint/*current-level* is not public at line 24 target/out/pjstadig/util.cljc
WARNING: var: cljs.pprint/start-block is not public at line 24 target/out/pjstadig/util.cljc
WARNING: var: cljs.pprint/end-block is not public at line 24 target/out/pjstadig/util.cljc

Conflict with io.aviso.pretty

If I try to use both humane-test-output (via injections per the README) and Aviso Pretty as a plugin, I get this exception:

Exception in thread "main" java.lang.ClassNotFoundException: io.aviso.repl, compiling:(/private/var/folders/1v/s1nw3l8x10jfwc3t1lsb1z6h7g46qh/T/form-init5155738145915893385.clj:1:125)
    at clojure.lang.Compiler.load(Compiler.java:7391)
    at clojure.lang.Compiler.loadFile(Compiler.java:7317)
    at clojure.main$load_script.invokeStatic(main.clj:275)
    at clojure.main$init_opt.invokeStatic(main.clj:277)
    at clojure.main$init_opt.invoke(main.clj:277)
    at clojure.main$initialize.invokeStatic(main.clj:308)
    at clojure.main$null_opt.invokeStatic(main.clj:342)
    at clojure.main$null_opt.invoke(main.clj:339)
    at clojure.main$main.invokeStatic(main.clj:421)
    at clojure.main$main.doInvoke(main.clj:384)
    at clojure.lang.RestFn.invoke(RestFn.java:421)
    at clojure.lang.Var.invoke(Var.java:383)
    at clojure.lang.AFn.applyToHelper(AFn.java:156)
    at clojure.lang.Var.applyTo(Var.java:700)
    at clojure.main.main(main.java:37)
Caused by: java.lang.ClassNotFoundException: io.aviso.repl
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at clojure.lang.DynamicClassLoader.findClass(DynamicClassLoader.java:69)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at clojure.lang.DynamicClassLoader.loadClass(DynamicClassLoader.java:77)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at clojure.lang.RT.classForName(RT.java:2168)
    at clojure.lang.RT.classForName(RT.java:2177)
    at clojure.lang.Compiler$HostExpr.maybeClass(Compiler.java:1030)
    at clojure.lang.Compiler.macroexpand1(Compiler.java:6807)
    at clojure.lang.Compiler.macroexpand(Compiler.java:6837)
    at clojure.lang.Compiler.eval(Compiler.java:6911)
    at clojure.lang.Compiler.eval(Compiler.java:6916)
    at clojure.lang.Compiler.load(Compiler.java:7379)
    ... 14 more

Any suggestions?

Intended behavior for records?

I tried out human-test-output and found that it displays records as plain maps. Is this intended? I would rather have the output show the record explicitly.

incompatibility with cider-nrepl

I found that running a simple test from emacs with humane-test-output would break cider-nrepl.

The test in question is

(t/deftest test-foo
  (t/is (= 10M 11M)))

where t is the clojure.test namespace. This would result in a exception

user=> Exception in thread "nREPL-worker-23" java.lang.IllegalArgumentException: Cannot write value of type class java.math.BigDecimal
at clojure.tools.nrepl.bencode$eval26319$fn__26320.invoke(bencode.clj:326)
at clojure.lang.MultiFn.invoke(MultiFn.java:233)
at clojure.tools.nrepl.bencode$eval26354$fn__26355.invoke(bencode.clj:398)
at clojure.lang.MultiFn.invoke(MultiFn.java:233)
at clojure.tools.nrepl.bencode$eval26344$fn__26345.invoke(bencode.clj:382)
at clojure.lang.MultiFn.invoke(MultiFn.java:233)
at clojure.tools.nrepl.bencode$eval26344$fn__26345.invoke(bencode.clj:382)
at clojure.lang.MultiFn.invoke(MultiFn.java:233)
at clojure.tools.nrepl.bencode$eval26344$fn__26345.invoke(bencode.clj:382)
at clojure.lang.MultiFn.invoke(MultiFn.java:233)
at clojure.tools.nrepl.bencode$eval26354$fn__26355.invoke(bencode.clj:398)
at clojure.lang.MultiFn.invoke(MultiFn.java:233)
at clojure.tools.nrepl.bencode$eval26344$fn__26345.invoke(bencode.clj:382)
at clojure.lang.MultiFn.invoke(MultiFn.java:233)
at clojure.tools.nrepl.bencode$eval26354$fn__26355.invoke(bencode.clj:398)
at clojure.lang.MultiFn.invoke(MultiFn.java:233)
at clojure.tools.nrepl.bencode$eval26354$fn__26355.invoke(bencode.clj:398)
at clojure.lang.MultiFn.invoke(MultiFn.java:233)
at clojure.tools.nrepl.bencode$eval26354$fn__26355.invoke(bencode.clj:398)
at clojure.lang.MultiFn.invoke(MultiFn.java:233)
at clojure.tools.nrepl.transport$bencode$fn__26494.invoke(transport.clj:103)
at clojure.tools.nrepl.transport.FnTransport.send(transport.clj:28)
at cider.nrepl.middleware.test$handle_test$fn__42367$fn__42368.invoke(test.clj:220)
at clojure.lang.AFn.applyToHelper(AFn.java:152)
at clojure.lang.AFn.applyTo(AFn.java:144)
at clojure.core$apply.invoke(core.clj:630)
at clojure.core$with_bindings_STAR_.doInvoke(core.clj:1868)
at clojure.lang.RestFn.invoke(RestFn.java:425)
at cider.nrepl.middleware.test$handle_test$fn__42367.invoke(test.clj:215)
at clojure.tools.nrepl.middleware.interruptible_eval$run_next$fn__26925.invoke(interruptible_eval.clj:190)
at clojure.lang.AFn.run(AFn.java:22)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

This issue was also reported as clojure-emacs/cider-nrepl#330 but since it worked when i disabled humane-test-output from my profile.clj it worked again i'd figure to report it here.

Possible breakage with ClojureScript 1.10.439

Hello!

I have noticed some possible breakage with the new ClojureScript 1.10.439. The way humane pretty prints the diff will likely break. I have not tried but I am copying that piece of code somewhere around here as well and it broke 😄

The repro looks like this:

[Rebel readline] Type :repl/help for online help info
cljs.user=> (require '[cljs.pprint :as pprint])
cljs.user=> (require '[goog.string :as gstring])
cljs.user=> (import '[goog.string StringBuffer])
nil
cljs.user=> (defn with-pretty-writer* [f]
       #_=>   (binding [*sb* (StringBuffer.)
       #_=>             *out* (pprint/get-pretty-writer (StringBufferWriter. *sb*))]
       #_=>     (f)))

#'cljs.user/write*
cljs.user=> (defn- write* [s]
       #_=>   (cljs.core/-write cljs.core/*out* s))

cljs.user=> (with-pretty-writer* #(write* "test"))
TypeError: Cannot read property "append" from undefined
	 cljs$core$IWriter$_write$arity$2 (.cljs_nashorn_repl/cljs/core.cljs:874:17)
	 cljs$core$_write (.cljs_nashorn_repl/cljs/core.cljs:750:1)
	 <anonymous> (.cljs_nashorn_repl/cljs/pprint.cljs:212:14)
	 cljs.core/-write (.cljs_nashorn_repl/cljs/core.cljs:750:1)
	 <anonymous> (.cljs_nashorn_repl/cljs/pprint.cljs:525:18)
	 cljs$core$_write (.cljs_nashorn_repl/cljs/core.cljs:750:1)
	 (<NO_SOURCE_FILE> <eval>:3:0)
	 (<NO_SOURCE_FILE> <eval>:2:0)
	 (<NO_SOURCE_FILE> <eval>:11:0)
	 (<NO_SOURCE_FILE> <eval>:1:0)
	 (<NO_SOURCE_FILE> <eval>:1:0)
	 (<NO_SOURCE_FILE> <eval>:1:0)

I will try to put together a fix but can't promise and of course we are on our own for using the binding that way 😄

Expected and actual swapped?

I have the following test:

(is (= (count (:results r)) 4))

Without humane-test-output it fails with

expected: (= (count (:results r)) 4)
  actual: (not (= 3 4))

With humane-test-output it fails with

expected: 3
  actual: 4
    diff: - 3
          + 4

I am using version 0.6.0 of humane-test-output, version 1.5.1 of clojure.

Lumo compatibility

Hi all!

It would be really really awesome to have this working in lumo as well. At the moment it triggers some weird error. I was actually having a look at the code and especially the namespace .macros. Except that there are no macros inside...I wanted to ask then if these functions are used at the macro stage (called by cljs.test for instance) so that I could try a port...

It looks like it has been a pain to port to Cljs already and wanted to know a bit more 😄

Thanks for this btw, I use it literally everywhere.

doesn't run when deftest is wrapped

I just added a macro that wrapped deftest to my tests, and my tests went back to regular clojure.test output. help!

my macro is nothing too fancy - it looks something like this:

(defmacro mytest
  [test-name expected thingy]
  `(deftest ~test-name
     (is (= ~expected
            (myns/somefn ~thingy)))))

Bad interaction with eastwood

When humane-test-output has been injected, the overwritten = method on assert-expr triggers nuisance warnings from the eastwood static analysis tool. The warnings look like this.

test/honeysql/format_test.clj:89:3: constant-test: Test expression is always logical true or always logical false: (clojure.core/seq (clojure.core/list ["SELECT foo FROM bar1 UNION SELECT foo FROM bar2"])) in form (if temp__4655__auto__ (clojure.core/let [more__35__auto__ temp__4655__auto__] (clojure.core/let [result__36__auto__ (clojure.core/apply clojure.core/= a__34__auto__ more__35__auto__)] (if result__36__auto__ (clojure.test/do-report {:type :pass, :expected a__34__auto__, :actual more__35__auto__, :message nil}) (clojure.test/do-report {:type :fail, :diffs (clojure.core/map clojure.core/vector more__35__auto__ (clojure.core/map (fn* [p1__33__37__auto__] (clojure.core/take 2 (clojure.data/diff a__34__auto__ p1__33__37__auto__))) more__35__auto__)), :expected a__34__auto__, :actual more__35__auto__, :message nil})) result__36__auto__)) (throw (java.lang.Exception. "= expects more than one argument")))

I think this is happening because the new = method is checking the number of arguments at run time, and conditionally throwing based on that. Eastwood is (correctly) detecting that this check is looking at a constant vector. If this check were moved outside of the syntax quote, and the check and exception were done at macro expansion time, then these nuisance warnings would go away, and h-t-o would detect these typos earlier in the process.

CC @MichaelBlume

Release with the new ClojureScript part?

Hi @pjstadig!

I was wondering if we could release the latest master with the new ClojureScript commits, maybe 0.9.0 cause theoretically breaking that extra functionality in ClojureScript?

I am using it now with deps.edn but it would be great to use it from lein as well.

Don't display the diff when `actual` is `nil`

Feature Request. Feel free to close if you don't like the idea.

I get output like this a lot when developing:

expected: {:some
           {:medium-sized-clojure :data-structure
            :that-takes :a}
           :few :lines}
actual: nil
diff: - (... that same data structure repeated ....)

I don't think it adds any value to display the diff when one of the arguments is nil.

Make report- public

Sometimes you need to compose humane-test-output with some other library (expound?) and I was wondering what would be the best approach for that.

It seems to me that the report- function could be exposed so that it can be used in custom defmethod test/report.

What do you think? Any other suggestion?

Support for Clojurescript

Clojurescript now has cljs.test. It'd be great if we can get the same awesome test output there :)

Failing tests

$ git clone https://github.com/pjstadig/humane-test-output
$ cd humane-test-output/
$ lein test
Retrieving org/clojure/clojure/1.3.0/clojure-1.3.0.jar from central

lein test pjstadig.humane-test-output.formatting-test

lein test :only pjstadig.humane-test-output.formatting-test/t-formatting

FAIL in (t-formatting) (formatting_test.clj:6)
FIXME, I fail.
expected: {:another-key "and another value",
           :foo :bar,
           :something "a long string?",
           :baz :quux}
  actual: {:fo :bar}
    diff: - {:baz :quux,
             :something "a long string?",
             :foo :bar,
             :another-key "and another value"}
          + {:fo :bar}

lein test :only pjstadig.humane-test-output.formatting-test/t-formatting

FAIL in (t-formatting) (formatting_test.clj:9)
FIXME, I fail.
expected: {:another-key "and another value",
           :foo :bar,
           :something "a long string?",
           :baz :quux}
  actual: {:foo :bar}
    diff: - {:baz :quux,
             :something "a long string?",
             :another-key "and another value"}

lein test :only pjstadig.humane-test-output.formatting-test/t-formatting

FAIL in (t-formatting) (formatting_test.clj:12)
FIXME, I fail.
expected: {:foo :bar}
  actual: {:another-key "and another value",
           :foo :bar,
           :something "a long string?",
           :baz :quux}
    diff: + {:baz :quux,
             :something "a long string?",
             :another-key "and another value"}

lein test :only pjstadig.humane-test-output.formatting-test/t-formatting

FAIL in (t-formatting) (formatting_test.clj:15)
FIXME, I fail.
expected: {:foo :bar, :baz :quux}
  actual: {:foo :bar, :baz :quux}
    diff: + expected: {:foo :bar, :baz :quux}
  actual: {:fo :bar, :baz :quux}
    diff: - {:foo :bar}
          + {:fo :bar}
expected: {:foo :bar, :baz :quux}
  actual: {:fo :bar, :baz :quux}
    diff: - {:foo :bar}
          + {:fo :bar}

lein test :only pjstadig.humane-test-output.formatting-test/t-formatting

FAIL in (t-formatting) (formatting_test.clj:19)
FIXME, I fail.
expected: (list? foo)
  actual: (not
           (list?
            {:another-key "and another value",
             :foo :bar,
             :something "a long string?",
             :baz :quux}))

lein test :only pjstadig.humane-test-output.formatting-test/t-macro-wrapping

FAIL in (t-macro-wrapping) (formatting_test.clj:26)
expected: 1
  actual: 2
    diff: - 1
          + 2

lein test pjstadig.humane-test-output.records-test

lein test :only pjstadig.humane-test-output.records-test/t-records

FAIL in (t-records) (records_test.clj:9)
these should not print as plain maps
expected: #pjstadig.humane_test_output.records_test.ARecord{:foo :foo}
  actual: #pjstadig.humane_test_output.records_test.ARecord{:foo :bar}
    diff: - {:foo :foo}
          + {:foo :bar}

lein test :only pjstadig.humane-test-output.records-test/t-records

FAIL in (t-records) (records_test.clj:11)
there should be a diff here
expected: #pjstadig.humane_test_output.records_test.ARecord{:foo :foo}
  actual: {:foo :foo}

lein test :only pjstadig.humane-test-output.records-test/t-records

FAIL in (t-records) (records_test.clj:13)
and here
expected: #pjstadig.humane_test_output.records_test.ARecord{:foo :foo}
  actual: #pjstadig.humane_test_output.records_test.BRecord{:foo :foo}

Ran 3 tests containing 9 assertions.
9 failures, 0 errors.
Tests failed.
$ lein -v
Leiningen 2.5.3 on Java 1.8.0_71 OpenJDK 64-Bit Server VM

Use custom reporter instead of cljs.test one

I have noticed reading the doc of cljs.test that you can basically use a custom keyword for reporting:

You can plug in your own test-reporting framework by specifying a :reporter key in the test environment. It is normally set to :cljs.test/default. Set this to the desired key and supply custom implementations of the "report" multimethod.

It is probably a nice idea to have something more pluggable and/or modular.

I am playing around with this as we speak 😄

Doesn't work with cider 0.11.0

After running failing test in messages appears

error in process filter: nrepl-dict-get: Not a nREPL dict object: dict
error in process filter: Not a nREPL dict object: dict

And no results in test report:

Test Summary
com.me.app-test

Ran 37 tests, in 3 test functions
11 failures


Results


Some details here clojure-emacs/cider#1546

Invalid files contained in released .jar

All of the public/ and test/ directories should probably not be included as it makes the .jar unnecessary large and may cause conflicts with other libraries.

   117 Tue Mar 22 06:35:34 CET 2016 META-INF/MANIFEST.MF
  2056 Tue Mar 22 06:35:34 CET 2016 META-INF/maven/pjstadig/humane-test-output/pom.xml
  1708 Tue Mar 22 06:35:34 CET 2016 META-INF/leiningen/pjstadig/humane-test-output/project.clj
  1708 Tue Mar 22 06:35:34 CET 2016 project.clj
  3892 Tue Mar 22 06:35:34 CET 2016 META-INF/leiningen/pjstadig/humane-test-output/README.org
     0 Tue Mar 22 06:35:34 CET 2016 META-INF/
     0 Tue Mar 22 06:35:34 CET 2016 META-INF/maven/
     0 Tue Mar 22 06:35:34 CET 2016 META-INF/maven/pjstadig/
     0 Tue Mar 22 06:35:34 CET 2016 META-INF/maven/pjstadig/humane-test-output/
   154 Tue Mar 22 06:35:34 CET 2016 META-INF/maven/pjstadig/humane-test-output/pom.properties
     0 Tue Mar 22 06:29:10 CET 2016 public/
     0 Tue Mar 22 06:29:10 CET 2016 public/js/
     0 Tue Mar 22 06:29:14 CET 2016 public/js/compiled/
   452 Tue Mar 22 06:29:10 CET 2016 public/js/compiled/humanize-test-output-test.js
     0 Tue Mar 22 06:29:10 CET 2016 public/js/compiled/test/
     0 Tue Mar 22 06:29:14 CET 2016 public/js/compiled/test/out/
     0 Tue Mar 22 06:29:14 CET 2016 public/js/compiled/test/out/goog/
     0 Tue Mar 22 06:29:14 CET 2016 public/js/compiled/test/out/goog/asserts/
 13557 Fri Dec 04 07:03:22 CET 2015 public/js/compiled/test/out/goog/asserts/asserts.js
     0 Tue Mar 22 06:29:14 CET 2016 public/js/compiled/test/out/goog/object/
 19725 Fri Dec 04 07:03:22 CET 2015 public/js/compiled/test/out/goog/object/object.js
     0 Tue Mar 22 06:29:14 CET 2016 public/js/compiled/test/out/goog/array/
 58974 Fri Dec 04 07:03:22 CET 2015 public/js/compiled/test/out/goog/array/array.js
     0 Tue Mar 22 06:29:14 CET 2016 public/js/compiled/test/out/goog/string/
  2692 Fri Dec 04 07:03:22 CET 2015 public/js/compiled/test/out/goog/string/stringbuffer.js
 51677 Fri Dec 04 07:03:22 CET 2015 public/js/compiled/test/out/goog/string/string.js
 83694 Fri Dec 04 07:03:22 CET 2015 public/js/compiled/test/out/goog/base.js
454842 Tue Mar 22 06:29:14 CET 2016 public/js/compiled/test/out/goog/deps.js
     0 Tue Mar 22 06:29:14 CET 2016 public/js/compiled/test/out/goog/debug/
  1797 Fri Dec 04 07:03:22 CET 2015 public/js/compiled/test/out/goog/debug/error.js
     0 Tue Mar 22 06:29:14 CET 2016 public/js/compiled/test/out/goog/dom/
  1449 Fri Dec 04 07:03:22 CET 2015 public/js/compiled/test/out/goog/dom/nodetype.js
     0 Tue Mar 22 06:29:12 CET 2016 public/js/compiled/test/out/clojure/
  8797 Tue Mar 22 06:26:24 CET 2016 public/js/compiled/test/out/clojure/data.cljs.cache.edn
 10242 Tue Mar 22 06:26:24 CET 2016 public/js/compiled/test/out/clojure/set.cljs.cache.edn
  6750 Tue Mar 22 06:29:12 CET 2016 public/js/compiled/test/out/clojure/data.js.map
 13788 Tue Mar 22 06:26:24 CET 2016 public/js/compiled/test/out/clojure/set.js
  8269 Tue Mar 22 06:29:10 CET 2016 public/js/compiled/test/out/clojure/string.js.map
  8127 Tue Mar 22 06:29:12 CET 2016 public/js/compiled/test/out/clojure/set.js.map
 11369 Tue Mar 22 06:26:24 CET 2016 public/js/compiled/test/out/clojure/data.js
 19859 Tue Mar 22 06:26:24 CET 2016 public/js/compiled/test/out/clojure/string.cljs.cache.edn
  4990 Tue Mar 22 06:26:24 CET 2016 public/js/compiled/test/out/clojure/set.cljs
 14205 Tue Mar 22 06:26:24 CET 2016 public/js/compiled/test/out/clojure/string.js
  7106 Tue Mar 22 06:26:24 CET 2016 public/js/compiled/test/out/clojure/string.cljs
  4173 Tue Mar 22 06:26:24 CET 2016 public/js/compiled/test/out/clojure/data.cljs
     0 Tue Mar 22 06:29:12 CET 2016 public/js/compiled/test/out/cljs/
1117829 Tue Mar 22 06:26:24 CET 2016 public/js/compiled/test/out/cljs/core.js
 36546 Tue Mar 22 06:26:24 CET 2016 public/js/compiled/test/out/cljs/test.js
293956 Tue Mar 22 06:26:24 CET 2016 public/js/compiled/test/out/cljs/core.cljs
182412 Tue Mar 22 06:29:12 CET 2016 public/js/compiled/test/out/cljs/pprint.js.map
 20642 Tue Mar 22 06:26:24 CET 2016 public/js/compiled/test/out/cljs/test.cljs
499140 Tue Mar 22 06:26:24 CET 2016 public/js/compiled/test/out/cljs/pprint.js
607020 Tue Mar 22 06:29:10 CET 2016 public/js/compiled/test/out/cljs/core.js.map
184600 Tue Mar 22 06:26:24 CET 2016 public/js/compiled/test/out/cljs/pprint.cljs.cache.edn
127422 Tue Mar 22 06:26:24 CET 2016 public/js/compiled/test/out/cljs/pprint.cljs
 14360 Tue Mar 22 06:29:12 CET 2016 public/js/compiled/test/out/cljs/test.js.map
 32524 Tue Mar 22 06:26:24 CET 2016 public/js/compiled/test/out/cljs/test.cljs.cache.edn
     0 Tue Mar 22 06:29:14 CET 2016 public/js/compiled/test/out/pjstadig/
  1698 Tue Mar 22 06:21:30 CET 2016 public/js/compiled/test/out/pjstadig/macro.cljc.cache.edn
   460 Tue Mar 22 06:21:30 CET 2016 public/js/compiled/test/out/pjstadig/humane_test_output.cljs
  8958 Tue Mar 22 06:21:30 CET 2016 public/js/compiled/test/out/pjstadig/assert_expr.js
   616 Tue Mar 22 06:29:12 CET 2016 public/js/compiled/test/out/pjstadig/humane_test_output.js.map
   799 Tue Mar 22 06:21:30 CET 2016 public/js/compiled/test/out/pjstadig/humane_test_output.js
  2134 Tue Mar 22 06:21:30 CET 2016 public/js/compiled/test/out/pjstadig/run_all.cljs.cache.edn
   973 Tue Mar 22 06:21:30 CET 2016 public/js/compiled/test/out/pjstadig/assert_expr.cljc
 12424 Tue Mar 22 06:21:30 CET 2016 public/js/compiled/test/out/pjstadig/run_all.js
  2931 Tue Mar 22 06:29:12 CET 2016 public/js/compiled/test/out/pjstadig/run_all.js.map
   223 Tue Mar 22 06:21:30 CET 2016 public/js/compiled/test/out/pjstadig/macro.cljc
  3367 Tue Mar 22 06:29:12 CET 2016 public/js/compiled/test/out/pjstadig/assert_expr.js.map
     0 Tue Mar 22 06:29:14 CET 2016 public/js/compiled/test/out/pjstadig/humane_test_output/
 10585 Tue Mar 22 06:29:10 CET 2016 public/js/compiled/test/out/pjstadig/humane_test_output/records_test.js.map
  6310 Tue Mar 22 06:29:12 CET 2016 public/js/compiled/test/out/pjstadig/humane_test_output/formatting_test.js.map
 30636 Tue Mar 22 06:21:30 CET 2016 public/js/compiled/test/out/pjstadig/humane_test_output/records_test.js
  1139 Tue Mar 22 06:21:30 CET 2016 public/js/compiled/test/out/pjstadig/humane_test_output/formatting_test.cljc
  5781 Tue Mar 22 06:21:30 CET 2016 public/js/compiled/test/out/pjstadig/humane_test_output/records_test.cljc.cache.edn
 27756 Tue Mar 22 06:21:30 CET 2016 public/js/compiled/test/out/pjstadig/humane_test_output/formatting_test.js
  3232 Tue Mar 22 06:21:30 CET 2016 public/js/compiled/test/out/pjstadig/humane_test_output/formatting_test.cljc.cache.edn
   558 Tue Mar 22 06:21:30 CET 2016 public/js/compiled/test/out/pjstadig/humane_test_output/records_test.cljc
  2217 Tue Mar 22 06:21:30 CET 2016 public/js/compiled/test/out/pjstadig/macro.js
 10341 Tue Mar 22 06:21:30 CET 2016 public/js/compiled/test/out/pjstadig/util.js
  2817 Tue Mar 22 06:21:30 CET 2016 public/js/compiled/test/out/pjstadig/util.cljc.cache.edn
   872 Tue Mar 22 06:21:30 CET 2016 public/js/compiled/test/out/pjstadig/humane_test_output.cljs.cache.edn
  5354 Tue Mar 22 06:29:12 CET 2016 public/js/compiled/test/out/pjstadig/util.js.map
  1407 Tue Mar 22 06:29:12 CET 2016 public/js/compiled/test/out/pjstadig/macro.js.map
  1319 Tue Mar 22 06:21:30 CET 2016 public/js/compiled/test/out/pjstadig/assert_expr.cljc.cache.edn
   329 Tue Mar 22 06:21:30 CET 2016 public/js/compiled/test/out/pjstadig/run_all.cljs
  3908 Tue Mar 22 06:21:30 CET 2016 public/js/compiled/test/out/pjstadig/util.cljc
  1680 Tue Mar 22 06:29:14 CET 2016 public/js/compiled/test/out/cljs_deps.js
     0 Tue Mar 22 06:21:30 CET 2016 test/
   137 Tue Mar 22 06:21:30 CET 2016 test/test.html
     0 Tue Mar 22 06:21:30 CET 2016 test/phantom/
   736 Tue Mar 22 06:21:30 CET 2016 test/phantom/run.js
     0 Tue Mar 22 06:21:30 CET 2016 pjstadig/
   460 Tue Mar 22 06:21:30 CET 2016 pjstadig/humane_test_output.cljs
   973 Tue Mar 22 06:21:30 CET 2016 pjstadig/assert_expr.cljc
   223 Tue Mar 22 06:21:30 CET 2016 pjstadig/macro.cljc
  3908 Tue Mar 22 06:21:30 CET 2016 pjstadig/util.cljc
  1396 Tue Mar 22 06:21:30 CET 2016 pjstadig/humane_test_output.clj

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.