Tidy up and a bit of renaming; gets rid of those end-of-file exceptions.

This commit is contained in:
simon 2014-04-07 20:55:59 +01:00
parent 3361d55d81
commit 6d3b5d76a3
2 changed files with 200 additions and 96 deletions

View file

@ -5,11 +5,12 @@
(defn maybe-quote [val]
"Convert val into a form in which, after being passed through the pretty
printer, it will be reconstituted in a form useful to the test"
(cond
(cond
(symbol? val) (list 'symbol (str val))
true (list 'quote val)))
(defn write-test [fnname arg]
(defn generate-assertion [fnname arg]
"Generate an appropiate assertion for this argument passed to this function"
(try
(let [val (eval (list fnname arg))]
(list 'is (list '= (list fnname arg) (maybe-quote val))))
@ -39,12 +40,12 @@
true %)
(constants sexpr)))))
(defn testgen [fndef extra-vars]
(defn generate-test [fndef extra-vars]
(cond (or (= (first fndef) 'def)(= (first fndef) 'defn))
(let [name (first (rest fndef))]
(list 'deftest (symbol (str "test-" name))
(concat (list 'testing (str name))
(map #(write-test name %)
(map #(generate-assertion name %)
(find-interesting-args fndef extra-vars)))))))
;; generating a test file
@ -72,20 +73,33 @@
(let [fn (clean-filename filename)]
(symbol (.replace fn "/" "."))))
(defn find-vars-in-reader [eddie]
"Return a list of names of variables declared in the stream this reader reads"
(try
(let [sexpr (read eddie)]
(cond
(nil? sexpr) nil
(= (first sexpr) 'def) (cons (first (rest sexpr)) (find-vars-in-reader eddie))
true (find-vars-in-reader eddie)))
(catch RuntimeException eof)))
;; This should be a better mechanism for reading expressions from a file but I haven't
;; really made it work yet.
(defn expr-seq
"Returns forms from src (assumed to be Clojure source) as a lazy sequence of expressions"
[^java.io.PushbackReader src]
(when-let [expr (read src false nil)]
(cons expr (lazy-seq (expr-seq src)))))
(defn find-vars-in-reader [eddi]
"Return a list of names of vars declared in the stream this reader reads"
(let [sexpr (read eddi false nil)]
(cond
(nil? sexpr) nil
(= (first sexpr) 'def) (cons (first (rest sexpr)) (find-vars-in-reader eddi))
true (find-vars-in-reader eddi))))
(defn find-vars-in-file [filename]
"Return a list of names of variables declared in the file at this path name"
(with-open [eddie (java.io.PushbackReader. (reader filename))]
(find-vars-in-reader eddie)))
"Return a list of names of vars declared in the file at this path name"
(with-open [eddi (java.io.PushbackReader. (reader filename))]
(find-vars-in-reader eddi)))
(defn write-header [writer package]
(.write writer (str "(ns " package "_test\n"))
(.write writer (str "\t(:require [clojure.test :refer :all]\n\t["
package " :refer :all]))\n\n"))
(.write writer
";; auto-generated by testgen - see https://github.com/simon-brooke/testgen\n\n"))
(defn generate-tests [filename]
"Generate a suite of characterisation tests for the file indicated by this filename.
@ -99,24 +113,18 @@
;; load the file so that any functions in it are usable
(load fn)
(refer pn)
(with-open [eddie (java.io.PushbackReader. (reader filename))
(with-open [eddi (java.io.PushbackReader. (reader filename))
dickens (writer (test-filename filename))]
(.write dickens (str "(ns " pn "_test\n"))
(.write dickens (str "\t(:require [clojure.test :refer :all]\n\t["
pn " :refer :all]))\n\n"))
(.write dickens
";; auto-generated by testgen - see https://github.com/simon-brooke/testgen\n\n")
(while (.ready eddie)
(try
(println "reading...")
(let [form (read eddie)]
(cond (= (first form) 'defn)
(do
(println (first (rest form)) "...")
(pprint (testgen form extra-vars) dickens)
(.write dickens "\n\n;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n\n")
)))
(catch Exception eof)))
(write-header dickens pn)
(while (.ready eddi)
(println "reading...")
(let [form (read eddi false nil)]
(cond (= (first form) 'defn)
(do
(println (first (rest form)) "...")
(pprint (generate-test form extra-vars) dickens)
(.write dickens "\n\n;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n\n")
))))
(.write dickens "\n\n;; end of file ;;\n\n")
(.flush dickens))))

View file

@ -44,24 +44,38 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(deftest
test-write-test
test-generate-assertion
(testing
"write-test"
(is (thrown? clojure.lang.ArityException (write-test nil)))
(is (thrown? clojure.lang.ArityException (write-test ())))
(is (thrown? clojure.lang.ArityException (write-test '(a :b "c"))))
(is (thrown? clojure.lang.ArityException (write-test true)))
(is (thrown? clojure.lang.ArityException (write-test "test")))
(is (thrown? clojure.lang.ArityException (write-test :test)))
(is (thrown? clojure.lang.ArityException (write-test 0)))
"generate-assertion"
(is (thrown? clojure.lang.ArityException (generate-assertion nil)))
(is (thrown? clojure.lang.ArityException (generate-assertion ())))
(is
(thrown?
clojure.lang.ArityException
(write-test Integer/MAX_VALUE)))
(is (thrown? clojure.lang.ArityException (write-test 22/7)))
(is (thrown? clojure.lang.ArityException (write-test 1.0E-4)))
(is (thrown? clojure.lang.ArityException (write-test -1.0E-4)))
(is (thrown? clojure.lang.ArityException (write-test generic-args)))))
(generate-assertion '(a :b "c"))))
(is (thrown? clojure.lang.ArityException (generate-assertion true)))
(is
(thrown? clojure.lang.ArityException (generate-assertion "test")))
(is (thrown? clojure.lang.ArityException (generate-assertion :test)))
(is (thrown? clojure.lang.ArityException (generate-assertion 0)))
(is
(thrown?
clojure.lang.ArityException
(generate-assertion Integer/MAX_VALUE)))
(is (thrown? clojure.lang.ArityException (generate-assertion 22/7)))
(is
(thrown? clojure.lang.ArityException (generate-assertion 1.0E-4)))
(is
(thrown? clojure.lang.ArityException (generate-assertion -1.0E-4)))
(is
(thrown?
clojure.lang.ArityException
(generate-assertion generic-args)))
(is
(thrown?
clojure.lang.ArityException
(generate-assertion
"Generate an appropiate assertion for this argument passed to this function")))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -184,23 +198,27 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(deftest
test-testgen
test-generate-test
(testing
"testgen"
(is (thrown? clojure.lang.ArityException (testgen nil)))
(is (thrown? clojure.lang.ArityException (testgen ())))
(is (thrown? clojure.lang.ArityException (testgen '(a :b "c"))))
(is (thrown? clojure.lang.ArityException (testgen true)))
(is (thrown? clojure.lang.ArityException (testgen "test")))
(is (thrown? clojure.lang.ArityException (testgen :test)))
(is (thrown? clojure.lang.ArityException (testgen 0)))
"generate-test"
(is (thrown? clojure.lang.ArityException (generate-test nil)))
(is (thrown? clojure.lang.ArityException (generate-test ())))
(is
(thrown? clojure.lang.ArityException (testgen Integer/MAX_VALUE)))
(is (thrown? clojure.lang.ArityException (testgen 22/7)))
(is (thrown? clojure.lang.ArityException (testgen 1.0E-4)))
(is (thrown? clojure.lang.ArityException (testgen -1.0E-4)))
(is (thrown? clojure.lang.ArityException (testgen generic-args)))
(is (thrown? clojure.lang.ArityException (testgen "test-")))))
(thrown? clojure.lang.ArityException (generate-test '(a :b "c"))))
(is (thrown? clojure.lang.ArityException (generate-test true)))
(is (thrown? clojure.lang.ArityException (generate-test "test")))
(is (thrown? clojure.lang.ArityException (generate-test :test)))
(is (thrown? clojure.lang.ArityException (generate-test 0)))
(is
(thrown?
clojure.lang.ArityException
(generate-test Integer/MAX_VALUE)))
(is (thrown? clojure.lang.ArityException (generate-test 22/7)))
(is (thrown? clojure.lang.ArityException (generate-test 1.0E-4)))
(is (thrown? clojure.lang.ArityException (generate-test -1.0E-4)))
(is
(thrown? clojure.lang.ArityException (generate-test generic-args)))
(is (thrown? clojure.lang.ArityException (generate-test "test-")))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -378,31 +396,83 @@
(is (= (packagename-from-filename ".") (symbol ".")))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(deftest
test-expr-seq
(testing
"expr-seq"
(is (thrown? java.lang.NullPointerException (expr-seq nil)))
(is (thrown? java.lang.ClassCastException (expr-seq ())))
(is (thrown? java.lang.ClassCastException (expr-seq '(a :b "c"))))
(is (thrown? java.lang.ClassCastException (expr-seq true)))
(is (thrown? java.lang.ClassCastException (expr-seq "test")))
(is (thrown? java.lang.ClassCastException (expr-seq :test)))
(is (thrown? java.lang.ClassCastException (expr-seq 0)))
(is
(thrown? java.lang.ClassCastException (expr-seq Integer/MAX_VALUE)))
(is (thrown? java.lang.ClassCastException (expr-seq 22/7)))
(is (thrown? java.lang.ClassCastException (expr-seq 1.0E-4)))
(is (thrown? java.lang.ClassCastException (expr-seq -1.0E-4)))
(is (thrown? java.lang.ClassCastException (expr-seq generic-args)))
(is
(thrown?
java.lang.ClassCastException
(expr-seq
"Returns forms from src (assumed to be Clojure source) as a lazy sequence of expressions")))
(is (thrown? java.lang.ClassCastException (expr-seq false)))
(is (thrown? java.lang.NullPointerException (expr-seq nil)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(deftest
test-find-vars-in-reader
(testing
"find-vars-in-reader"
(is (= (find-vars-in-reader nil) 'nil))
(is (= (find-vars-in-reader ()) 'nil))
(is (= (find-vars-in-reader '(a :b "c")) 'nil))
(is (= (find-vars-in-reader true) 'nil))
(is (= (find-vars-in-reader "test") 'nil))
(is (= (find-vars-in-reader :test) 'nil))
(is (= (find-vars-in-reader 0) 'nil))
(is (= (find-vars-in-reader Integer/MAX_VALUE) 'nil))
(is (= (find-vars-in-reader 22/7) 'nil))
(is (= (find-vars-in-reader 1.0E-4) 'nil))
(is (= (find-vars-in-reader -1.0E-4) 'nil))
(is (= (find-vars-in-reader generic-args) 'nil))
(is
(=
(thrown? java.lang.NullPointerException (find-vars-in-reader nil)))
(is (thrown? java.lang.ClassCastException (find-vars-in-reader ())))
(is
(thrown?
java.lang.ClassCastException
(find-vars-in-reader '(a :b "c"))))
(is
(thrown? java.lang.ClassCastException (find-vars-in-reader true)))
(is
(thrown? java.lang.ClassCastException (find-vars-in-reader "test")))
(is
(thrown? java.lang.ClassCastException (find-vars-in-reader :test)))
(is (thrown? java.lang.ClassCastException (find-vars-in-reader 0)))
(is
(thrown?
java.lang.ClassCastException
(find-vars-in-reader Integer/MAX_VALUE)))
(is
(thrown? java.lang.ClassCastException (find-vars-in-reader 22/7)))
(is
(thrown? java.lang.ClassCastException (find-vars-in-reader 1.0E-4)))
(is
(thrown?
java.lang.ClassCastException
(find-vars-in-reader -1.0E-4)))
(is
(thrown?
java.lang.ClassCastException
(find-vars-in-reader generic-args)))
(is
(thrown?
java.lang.ClassCastException
(find-vars-in-reader
"Return a list of names of variables declared in the stream this reader reads")
'nil))
(is (= (find-vars-in-reader nil) 'nil))
(is (= (find-vars-in-reader true) 'nil))))
"Return a list of names of vars declared in the stream this reader reads")))
(is
(thrown? java.lang.ClassCastException (find-vars-in-reader false)))
(is
(thrown? java.lang.NullPointerException (find-vars-in-reader nil)))
(is
(thrown? java.lang.NullPointerException (find-vars-in-reader nil)))
(is
(thrown? java.lang.ClassCastException (find-vars-in-reader true)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -457,7 +527,46 @@
(thrown?
java.io.FileNotFoundException
(find-vars-in-file
"Return a list of names of variables declared in the file at this path name")))))
"Return a list of names of vars declared in the file at this path name")))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(deftest
test-write-header
(testing
"write-header"
(is (thrown? clojure.lang.ArityException (write-header nil)))
(is (thrown? clojure.lang.ArityException (write-header ())))
(is (thrown? clojure.lang.ArityException (write-header '(a :b "c"))))
(is (thrown? clojure.lang.ArityException (write-header true)))
(is (thrown? clojure.lang.ArityException (write-header "test")))
(is (thrown? clojure.lang.ArityException (write-header :test)))
(is (thrown? clojure.lang.ArityException (write-header 0)))
(is
(thrown?
clojure.lang.ArityException
(write-header Integer/MAX_VALUE)))
(is (thrown? clojure.lang.ArityException (write-header 22/7)))
(is (thrown? clojure.lang.ArityException (write-header 1.0E-4)))
(is (thrown? clojure.lang.ArityException (write-header -1.0E-4)))
(is
(thrown? clojure.lang.ArityException (write-header generic-args)))
(is (thrown? clojure.lang.ArityException (write-header "(ns ")))
(is (thrown? clojure.lang.ArityException (write-header "_test\n")))
(is
(thrown?
clojure.lang.ArityException
(write-header "\t(:require [clojure.test :refer :all]\n\t[")))
(is
(thrown?
clojure.lang.ArityException
(write-header " :refer :all]))\n\n")))
(is
(thrown?
clojure.lang.ArityException
(write-header
";; auto-generated by testgen - see https://github.com/simon-brooke/testgen\n\n")))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -509,26 +618,13 @@
(thrown?
java.io.FileNotFoundException
(generate-tests "Writing to: ")))
(is (thrown? java.io.FileNotFoundException (generate-tests "(ns ")))
(is
(thrown? java.io.FileNotFoundException (generate-tests "_test\n")))
(is
(thrown?
java.io.FileNotFoundException
(generate-tests "\t(:require [clojure.test :refer :all]\n\t[")))
(is
(thrown?
java.io.FileNotFoundException
(generate-tests " :refer :all]))\n\n")))
(is
(thrown?
java.io.FileNotFoundException
(generate-tests
";; auto-generated by testgen - see https://github.com/simon-brooke/testgen\n\n")))
(is
(thrown?
java.io.FileNotFoundException
(generate-tests "reading...")))
(is
(thrown? java.lang.IllegalArgumentException (generate-tests false)))
(is (thrown? java.lang.NullPointerException (generate-tests nil)))
(is (thrown? java.io.FileNotFoundException (generate-tests "...")))
(is
(thrown?