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
from Deep-Freeze."
{:author "Peter Taoussanis"}
(:require [taoensso.nippy
(:require [clojure.tools.reader.edn :as edn]
[taoensso.nippy
(utils :as utils)
(compression :as compression :refer (snappy-compressor))
(encryption :as encryption :refer (aes128-encryptor))]
[clojure.tools.reader
(edn :as edn)])
(encryption :as encryption :refer (aes128-encryptor))])
(:import [java.io DataInputStream DataOutputStream ByteArrayOutputStream
ByteArrayInputStream]
[java.lang.reflect Method]
@ -110,7 +109,6 @@
(binding [*print-dup* print-dup?] ; Expensive
(freeze-to-stream data-output-stream x))))
(defmacro ^:private freezer
"Helper to extend Freezable protocol."
[type id & body]
@ -323,7 +321,7 @@
"Deserializes a frozen object from given byte array to its original Clojure
data type. Supports data frozen with current and all previous versions of
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}
compressor snappy-compressor
encryptor aes128-encryptor}
@ -483,4 +481,4 @@
[ba & {:keys [compressed?]
:or {compressed? true}}]
(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 xerial-ba 0 (alength xerial-ba))))))
;;; Records
(defrecord RecordType [data])
(expect RecordType (thaw (freeze (RecordType. "Joe"))))
(expect (RecordType. "Joe") (thaw (freeze (RecordType. "Joe"))))
;;; Records (reflecting)
(defrecord MyRec [data])
(expect (let [rec (->MyRec "val")] (= rec (thaw (freeze rec)))))
;;; Custom types
(defrecord MyType [data])
(nippy/extend-freeze MyType 1 [x s] (.writeUTF s (:data x)))
(expect Exception (thaw (freeze (->MyType "Joe"))))
(expect (MyType. "Joe") (do (nippy/extend-thaw 1 [s] (->MyType (.readUTF s)))
(thaw (freeze (->MyType "Joe")))))
(expect Exception (thaw (freeze (->MyType "val"))))
(expect (do (nippy/extend-thaw 1 [s] (->MyType (.readUTF s)))
(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