diff --git a/project.clj b/project.clj index 8640836..49b1dda 100644 --- a/project.clj +++ b/project.clj @@ -4,9 +4,10 @@ :source-paths ["src"] :dependencies [ - [org.clojure/clojure "1.8.0"] + [org.clojure/clojure "1.9.0-alpha14"] [org.clojure/clojurescript "1.9.293"] - [org.clojure/test.check "0.9.0"]] + [org.clojure/test.check "0.9.0"] + [io.nervous/promesa-check "0.1.1"]] :plugins [ [lein-cljsbuild "1.1.5"]] diff --git a/src/testcheck.cljs b/src/testcheck.cljs index 721bbac..5c243be 100644 --- a/src/testcheck.cljs +++ b/src/testcheck.cljs @@ -4,7 +4,9 @@ '[clojure.test.check.generators :as gen] '[clojure.test.check.properties :as prop] '[clojure.set :refer [rename-keys]] - '[clojure.string :refer [split join]]) + '[clojure.string :refer [split join]] + '[promesa-check.core :as pc] + '[promesa.core :as p]) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Internal Helpers @@ -164,6 +166,27 @@ ;; Usage API ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(defexport checkAsync (fn + [property options] + (let [opt (or options (js-obj)) + num-tests (or (aget opt "numTests") (aget opt "times") 100) + max-size (or (aget opt "maxSize") 200) + seed (aget opt "seed") + result (pc/quick-check num-tests property :max-size max-size :seed seed)] + (p/map (fn + [res] + (let [ + resultRenamed (rename-keys res {:failing-size :failingSize :num-tests :numTests}) + resultRenamedDeep (if (contains? resultRenamed :shrunk) + (update + resultRenamed + :shrunk + rename-keys + {:total-nodes-visited :totalNodesVisited}) + resultRenamed) + ] + (clj->js resultRenamedDeep))) result)))) + (defexport check (fn [property options] (let [opt (or options (js-obj)) diff --git a/test/check.spec.js b/test/check.spec.js index 08b4477..e2cfb13 100644 --- a/test/check.spec.js +++ b/test/check.spec.js @@ -5,10 +5,16 @@ /*:: declare function expect(val: any): any; */ /*:: declare var jasmine: any; */ -const { check, property, gen } = require('../') +const { check, checkAsync, property, gen } = require('../') describe('check', () => { + it('async', (done) => { + const promise = checkAsync(property(gen.int, (i) => Promise.resolve(i))) + + promise.then((result) => console.log(result) || done()) + }) + it('checks true properties', () => { const seedVal = 1234567890