Tidy up and a bit of renaming; gets rid of those end-of-file exceptions.
This commit is contained in:
parent
3361d55d81
commit
6d3b5d76a3
|
@ -9,7 +9,8 @@
|
||||||
(symbol? val) (list 'symbol (str val))
|
(symbol? val) (list 'symbol (str val))
|
||||||
true (list 'quote 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
|
(try
|
||||||
(let [val (eval (list fnname arg))]
|
(let [val (eval (list fnname arg))]
|
||||||
(list 'is (list '= (list fnname arg) (maybe-quote val))))
|
(list 'is (list '= (list fnname arg) (maybe-quote val))))
|
||||||
|
@ -39,12 +40,12 @@
|
||||||
true %)
|
true %)
|
||||||
(constants sexpr)))))
|
(constants sexpr)))))
|
||||||
|
|
||||||
(defn testgen [fndef extra-vars]
|
(defn generate-test [fndef extra-vars]
|
||||||
(cond (or (= (first fndef) 'def)(= (first fndef) 'defn))
|
(cond (or (= (first fndef) 'def)(= (first fndef) 'defn))
|
||||||
(let [name (first (rest fndef))]
|
(let [name (first (rest fndef))]
|
||||||
(list 'deftest (symbol (str "test-" name))
|
(list 'deftest (symbol (str "test-" name))
|
||||||
(concat (list 'testing (str name))
|
(concat (list 'testing (str name))
|
||||||
(map #(write-test name %)
|
(map #(generate-assertion name %)
|
||||||
(find-interesting-args fndef extra-vars)))))))
|
(find-interesting-args fndef extra-vars)))))))
|
||||||
|
|
||||||
;; generating a test file
|
;; generating a test file
|
||||||
|
@ -72,20 +73,33 @@
|
||||||
(let [fn (clean-filename filename)]
|
(let [fn (clean-filename filename)]
|
||||||
(symbol (.replace fn "/" "."))))
|
(symbol (.replace fn "/" "."))))
|
||||||
|
|
||||||
(defn find-vars-in-reader [eddie]
|
;; This should be a better mechanism for reading expressions from a file but I haven't
|
||||||
"Return a list of names of variables declared in the stream this reader reads"
|
;; really made it work yet.
|
||||||
(try
|
(defn expr-seq
|
||||||
(let [sexpr (read eddie)]
|
"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
|
(cond
|
||||||
(nil? sexpr) nil
|
(nil? sexpr) nil
|
||||||
(= (first sexpr) 'def) (cons (first (rest sexpr)) (find-vars-in-reader eddie))
|
(= (first sexpr) 'def) (cons (first (rest sexpr)) (find-vars-in-reader eddi))
|
||||||
true (find-vars-in-reader eddie)))
|
true (find-vars-in-reader eddi))))
|
||||||
(catch RuntimeException eof)))
|
|
||||||
|
|
||||||
(defn find-vars-in-file [filename]
|
(defn find-vars-in-file [filename]
|
||||||
"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"
|
||||||
(with-open [eddie (java.io.PushbackReader. (reader filename))]
|
(with-open [eddi (java.io.PushbackReader. (reader filename))]
|
||||||
(find-vars-in-reader eddie)))
|
(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]
|
(defn generate-tests [filename]
|
||||||
"Generate a suite of characterisation tests for the file indicated by this 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 the file so that any functions in it are usable
|
||||||
(load fn)
|
(load fn)
|
||||||
(refer pn)
|
(refer pn)
|
||||||
(with-open [eddie (java.io.PushbackReader. (reader filename))
|
(with-open [eddi (java.io.PushbackReader. (reader filename))
|
||||||
dickens (writer (test-filename filename))]
|
dickens (writer (test-filename filename))]
|
||||||
(.write dickens (str "(ns " pn "_test\n"))
|
(write-header dickens pn)
|
||||||
(.write dickens (str "\t(:require [clojure.test :refer :all]\n\t["
|
(while (.ready eddi)
|
||||||
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...")
|
(println "reading...")
|
||||||
(let [form (read eddie)]
|
(let [form (read eddi false nil)]
|
||||||
(cond (= (first form) 'defn)
|
(cond (= (first form) 'defn)
|
||||||
(do
|
(do
|
||||||
(println (first (rest form)) "...")
|
(println (first (rest form)) "...")
|
||||||
(pprint (testgen form extra-vars) dickens)
|
(pprint (generate-test form extra-vars) dickens)
|
||||||
(.write dickens "\n\n;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n\n")
|
(.write dickens "\n\n;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n\n")
|
||||||
)))
|
))))
|
||||||
(catch Exception eof)))
|
|
||||||
(.write dickens "\n\n;; end of file ;;\n\n")
|
(.write dickens "\n\n;; end of file ;;\n\n")
|
||||||
(.flush dickens))))
|
(.flush dickens))))
|
||||||
|
|
||||||
|
|
|
@ -44,24 +44,38 @@
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(deftest
|
(deftest
|
||||||
test-write-test
|
test-generate-assertion
|
||||||
(testing
|
(testing
|
||||||
"write-test"
|
"generate-assertion"
|
||||||
(is (thrown? clojure.lang.ArityException (write-test nil)))
|
(is (thrown? clojure.lang.ArityException (generate-assertion nil)))
|
||||||
(is (thrown? clojure.lang.ArityException (write-test ())))
|
(is (thrown? clojure.lang.ArityException (generate-assertion ())))
|
||||||
(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)))
|
|
||||||
(is
|
(is
|
||||||
(thrown?
|
(thrown?
|
||||||
clojure.lang.ArityException
|
clojure.lang.ArityException
|
||||||
(write-test Integer/MAX_VALUE)))
|
(generate-assertion '(a :b "c"))))
|
||||||
(is (thrown? clojure.lang.ArityException (write-test 22/7)))
|
(is (thrown? clojure.lang.ArityException (generate-assertion true)))
|
||||||
(is (thrown? clojure.lang.ArityException (write-test 1.0E-4)))
|
(is
|
||||||
(is (thrown? clojure.lang.ArityException (write-test -1.0E-4)))
|
(thrown? clojure.lang.ArityException (generate-assertion "test")))
|
||||||
(is (thrown? clojure.lang.ArityException (write-test generic-args)))))
|
(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
|
(deftest
|
||||||
test-testgen
|
test-generate-test
|
||||||
(testing
|
(testing
|
||||||
"testgen"
|
"generate-test"
|
||||||
(is (thrown? clojure.lang.ArityException (testgen nil)))
|
(is (thrown? clojure.lang.ArityException (generate-test nil)))
|
||||||
(is (thrown? clojure.lang.ArityException (testgen ())))
|
(is (thrown? clojure.lang.ArityException (generate-test ())))
|
||||||
(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)))
|
|
||||||
(is
|
(is
|
||||||
(thrown? clojure.lang.ArityException (testgen Integer/MAX_VALUE)))
|
(thrown? clojure.lang.ArityException (generate-test '(a :b "c"))))
|
||||||
(is (thrown? clojure.lang.ArityException (testgen 22/7)))
|
(is (thrown? clojure.lang.ArityException (generate-test true)))
|
||||||
(is (thrown? clojure.lang.ArityException (testgen 1.0E-4)))
|
(is (thrown? clojure.lang.ArityException (generate-test "test")))
|
||||||
(is (thrown? clojure.lang.ArityException (testgen -1.0E-4)))
|
(is (thrown? clojure.lang.ArityException (generate-test :test)))
|
||||||
(is (thrown? clojure.lang.ArityException (testgen generic-args)))
|
(is (thrown? clojure.lang.ArityException (generate-test 0)))
|
||||||
(is (thrown? clojure.lang.ArityException (testgen "test-")))))
|
(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 ".")))))
|
(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
|
(deftest
|
||||||
test-find-vars-in-reader
|
test-find-vars-in-reader
|
||||||
(testing
|
(testing
|
||||||
"find-vars-in-reader"
|
"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
|
(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
|
(find-vars-in-reader
|
||||||
"Return a list of names of variables declared in the stream this reader reads")
|
"Return a list of names of vars declared in the stream this reader reads")))
|
||||||
'nil))
|
(is
|
||||||
(is (= (find-vars-in-reader nil) 'nil))
|
(thrown? java.lang.ClassCastException (find-vars-in-reader false)))
|
||||||
(is (= (find-vars-in-reader true) 'nil))))
|
(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?
|
(thrown?
|
||||||
java.io.FileNotFoundException
|
java.io.FileNotFoundException
|
||||||
(find-vars-in-file
|
(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?
|
(thrown?
|
||||||
java.io.FileNotFoundException
|
java.io.FileNotFoundException
|
||||||
(generate-tests "Writing to: ")))
|
(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
|
(is
|
||||||
(thrown?
|
(thrown?
|
||||||
java.io.FileNotFoundException
|
java.io.FileNotFoundException
|
||||||
(generate-tests "reading...")))
|
(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? java.io.FileNotFoundException (generate-tests "...")))
|
||||||
(is
|
(is
|
||||||
(thrown?
|
(thrown?
|
||||||
|
|
Loading…
Reference in a new issue