Housekeeping, add test for records with custom extension

This commit is contained in:
Peter Taoussanis 2013-08-07 16:16:35 +07:00
parent f3b524421b
commit a76734a25a
2 changed files with 16 additions and 14 deletions

View file

@ -2,12 +2,11 @@
"Simple, high-performance Clojure serialization library. Originally adapted "Simple, high-performance Clojure serialization library. Originally adapted
from Deep-Freeze." from Deep-Freeze."
{:author "Peter Taoussanis"} {:author "Peter Taoussanis"}
(:require [taoensso.nippy (:require [clojure.tools.reader.edn :as edn]
[taoensso.nippy
(utils :as utils) (utils :as utils)
(compression :as compression :refer (snappy-compressor)) (compression :as compression :refer (snappy-compressor))
(encryption :as encryption :refer (aes128-encryptor))] (encryption :as encryption :refer (aes128-encryptor))])
[clojure.tools.reader
(edn :as edn)])
(:import [java.io DataInputStream DataOutputStream ByteArrayOutputStream (:import [java.io DataInputStream DataOutputStream ByteArrayOutputStream
ByteArrayInputStream] ByteArrayInputStream]
[java.lang.reflect Method] [java.lang.reflect Method]
@ -110,7 +109,6 @@
(binding [*print-dup* print-dup?] ; Expensive (binding [*print-dup* print-dup?] ; Expensive
(freeze-to-stream data-output-stream x)))) (freeze-to-stream data-output-stream x))))
(defmacro ^:private freezer (defmacro ^:private freezer
"Helper to extend Freezable protocol." "Helper to extend Freezable protocol."
[type id & body] [type id & body]
@ -323,7 +321,7 @@
"Deserializes a frozen object from given byte array to its original Clojure "Deserializes a frozen object from given byte array to its original Clojure
data type. Supports data frozen with current and all previous versions of data type. Supports data frozen with current and all previous versions of
Nippy. For custom types extend the Clojure reader or see `extend-thaw`." Nippy. For custom types extend the Clojure reader or see `extend-thaw`."
[^bytes ba & [{:keys [password compressor encryptor legacy-opts readers] [^bytes ba & [{:keys [password compressor encryptor legacy-opts]
:or {legacy-opts {:compressed? true} :or {legacy-opts {:compressed? true}
compressor snappy-compressor compressor snappy-compressor
encryptor aes128-encryptor} encryptor aes128-encryptor}
@ -483,4 +481,4 @@
[ba & {:keys [compressed?] [ba & {:keys [compressed?]
:or {compressed? true}}] :or {compressed? true}}]
(thaw ba {:legacy-opts {:compressed? compressed?} (thaw ba {:legacy-opts {:compressed? compressed?}
:password nil})) :password nil}))

View file

@ -30,16 +30,20 @@
(thaw (org.iq80.snappy.Snappy/uncompress iq80-ba 0 (alength iq80-ba))) (thaw (org.iq80.snappy.Snappy/uncompress iq80-ba 0 (alength iq80-ba)))
(thaw (org.iq80.snappy.Snappy/uncompress xerial-ba 0 (alength xerial-ba)))))) (thaw (org.iq80.snappy.Snappy/uncompress xerial-ba 0 (alength xerial-ba))))))
;;; Records ;;; Records (reflecting)
(defrecord RecordType [data]) (defrecord MyRec [data])
(expect RecordType (thaw (freeze (RecordType. "Joe")))) (expect (let [rec (->MyRec "val")] (= rec (thaw (freeze rec)))))
(expect (RecordType. "Joe") (thaw (freeze (RecordType. "Joe"))))
;;; Custom types ;;; Custom types
(defrecord MyType [data]) (defrecord MyType [data])
(nippy/extend-freeze MyType 1 [x s] (.writeUTF s (:data x))) (nippy/extend-freeze MyType 1 [x s] (.writeUTF s (:data x)))
(expect Exception (thaw (freeze (->MyType "Joe")))) (expect Exception (thaw (freeze (->MyType "val"))))
(expect (MyType. "Joe") (do (nippy/extend-thaw 1 [s] (->MyType (.readUTF s))) (expect (do (nippy/extend-thaw 1 [s] (->MyType (.readUTF s)))
(thaw (freeze (->MyType "Joe"))))) (let [type (->MyType "val")] (= type (thaw (freeze type))))))
;;; Records (extend)
(expect (do (nippy/extend-freeze MyRec 2 [x s] (.writeUTF s (str "fast-" (:data x))))
(nippy/extend-thaw 2 [s] (->MyRec (.readUTF s)))
(= (->MyRec "fast-val") (thaw (freeze (->MyRec "val"))))))
(expect (benchmarks/bench {:reader? false})) ; Also tests :cached passwords (expect (benchmarks/bench {:reader? false})) ; Also tests :cached passwords