From a76734a25a3d8dc4a9293d6d608a3f14bc18553f Mon Sep 17 00:00:00 2001 From: Peter Taoussanis Date: Wed, 7 Aug 2013 16:16:35 +0700 Subject: [PATCH] Housekeeping, add test for records with custom extension --- src/taoensso/nippy.clj | 12 +++++------- test/taoensso/nippy/tests/main.clj | 18 +++++++++++------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/taoensso/nippy.clj b/src/taoensso/nippy.clj index 0d5773d..e8bcd92 100644 --- a/src/taoensso/nippy.clj +++ b/src/taoensso/nippy.clj @@ -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})) \ No newline at end of file + :password nil})) diff --git a/test/taoensso/nippy/tests/main.clj b/test/taoensso/nippy/tests/main.clj index 8ec9c7a..a9d0344 100644 --- a/test/taoensso/nippy/tests/main.clj +++ b/test/taoensso/nippy/tests/main.clj @@ -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 \ No newline at end of file