Sto testando alcuni comportamenti audio e ho bisogno che l'utente giudichi se le cose passano o falliscono. Vorrei chiedere all'utente una risposta entro un test di leiningen. Ma, c'è qualcosa che accade a read-line che impedisce questo.read-line clojure fallito nel test di leiningen
Questo è un esempio di codice di prova dopo aver creato un nuovo progetto clojure con "Lein nuova foo" e modificare il foo/test/foo/file di core_test.clj:
(ns foo.core-test
(:use clojure.test
foo.core))
(deftest a-test
(testing "FIXME, what a fail."
(let [_ (println "enter something")
yn (read-line)]
(println yn)
(is (= yn "y")))))
e questo è ciò che accade in un "test lein"
lein test foo.core-test
enter something
hi
there
what
is
going on?
^C
solo controllo-C arresta la chiamata (lettura riga).
sto usando Clojure 1.4.0 e 2.0.0 Leiningen-preview7 su Java 1.6.0_35 di Java HotSpot (TM) a 64 bit di server VM
Tutte le idee su come ottenere lettura-line a lavorare all'interno un test?
Vorrei anche sottolineare che (lettura-line) non funzionare bene dentro "Lein repl" per me ...
> lein repl
nREPL server started on port 54398
REPL-y 0.1.0-beta8
Clojure 1.4.0
Exit: Control+D or (exit) or (quit)
Commands: (user/help)
Docs: (doc function-name-here)
(find-doc "part-of-name-here")
Source: (source function-name-here)
(user/sourcery function-name-here)
Javadoc: (javadoc java-object-or-class-here)
Examples from clojuredocs.org: [clojuredocs or cdoc]
(user/clojuredocs name-here)
(user/clojuredocs "ns-here" "name-here")
user=> (println (read-line))
hi
hi
nil
user=> (read-line)
ho
"ho"
UPDATE:
ho intenzione di dare @DaoWen la vittoria su questo. Leggendo i collegamenti & googling in giro, stdin è solo b0rken su leiningen. Con un numero sufficiente di trilli, forse potrei capirlo, ma il suggerimento di una finestra di dialogo sembra il miglior percorso da seguire. Lasciare qui qualche codice di test solo per completezza nel caso in cui questo aiuti gli altri.
(ns foo.core-test
(:use clojure.test
foo.core))
(import 'javax.swing.JOptionPane)
(defn ask-yn
"return 0 on pass, 1 on fail"
[prompt]
(JOptionPane/showConfirmDialog nil prompt "User Input" JOptionPane/YES_NO_OPTION))
(deftest a-test
(testing "a-test"
(let [yn (ask-yn "did a-test pass?")]
(is (= yn 0)))))
(deftest b-test
(testing "b-test"
(let [yn (ask-yn "did b-test pass?")]
(is (= yn 0)))))
Duplicato? http://stackoverflow.com/questions/7707558/clojure-read-line-doesnt-wait-for-input – noahlz
Forse eseguirlo come 'lein trampoline repl'? – Bill
i risultati del test del trampolino lein in "I test non sono terminati in modo pulito". e nessuna richiesta di input. (nota, lein repl funziona già per me) –