(fwoar.sp-user:define-package :stream-provider.tests
(:use :cl :stream-provider :should-test))
(in-package :stream-provider.tests)
(defparameter *test-string-provider* (make-instance 'string-provider))
(defparameter *test-file-provider* (make-instance 'file-provider :root #p"/nowhere/"))
(defmethod stream-key ((provider (eql *test-string-provider*)) (item string))
item)
(defmethod stream-key ((provider (eql *test-file-provider*)) (item string))
item)
(deftest stream-key-returns-specified-pathname ()
(let* ((stored-item "foo")
(expected-pathname (pathname "foo")))
(should be equal
(stream-key *test-string-provider* stored-item)
expected-pathname)))
(deftest stream-key-for-file-provider-is-relative-to-root ()
(let* ((stored-item "/nowhere/foo")
(expected-pathname (pathname "foo")))
(should be equal
expected-pathname
(stream-key *test-file-provider* stored-item))))
(defclass object-to-store ()
((%name :reader name :initarg :name :initform (error "need a name"))
(%value :reader value :initarg :value :initform (error "need a value"))))
(defclass test-provider (string-provider)
())
(defmethod stream-key ((provider test-provider) (item object-to-store))
(name item))
(defun store (provider item)
(with-storage-stream (s item provider)
(write-sequence (value item) s)))
(deftest with-storage-stream-writes-to-right-place ()
(let* ((name "foo")
(value "bar bar")
(object (make-instance 'object-to-store
:name name
:value value))
(provider (make-instance 'test-provider)))
(should be equal
(store provider object)
value
(babel:octets-to-string
(gethash (stream-key provider object)
(streams provider))))))
|