                  :encoding encoding}]
     (try
       (let [tests (filter-tests proc encoding opts)
-            results (reduce (fn [r {:keys [path test desc]}]
+            results (reduce (fn [r {:keys [path test desc input]}]
                               (println (format "running \"%s\" test for %s encoding..."
                                                desc
                                                (name encoding)))
-                              (assoc-in r path (test)))
+                              (assoc-in r path (test input)))
                             results
                             tests)]
         (stop-process proc)

      (str \u001b (style styles) s \u001b (:reset styles))
      s)))

(defn timeout-result? [results]
  (when-let [e (:exception results)]
    (= (:status (ex-data e)) :timeout)))

(defn exception-result? [results]
  (:exception results))

(defn not-implemented? [results]
  (every? #(= (:data-actual %) ::read-error) (apply concat (vals (:tests results)))))

;; TODO: when there is an exception, print out the form that was being
;; transmitted
;; TODO: would be nice if we could do the same thing we do with
;; timeouts and show the previous thing as well
(defn report [{:keys [project command encoding tests time] :as results} opts]
  (println (with-style :bright "Project: " project))
  (println "Command: " command)

  (println (format "testing %s's %s encoding"
                   project
                   (name encoding)))
  (if (= encoding :msgpack)
    (println "msgpack tests are disabled until we have a working implementation.")
    (let [command (str "../" project "/bin/roundtrip")]
      (report (-> (verify-impl-encoding command encoding opts)
                  (assoc :project project))
              opts))))

  (defn verify-impl
  "Given a project name like 'transit-java', 'transit-clj' or
  'transit-ruby', and user provided options, run tests for each
  encoding specified in the options. Encoding can be either `:json` or
