git.fiddlerwoaroof.com
Raw Blame History
(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))))))