cl-deck-builder2/tests/toolkit.lisp
2024-03-05 22:11:33 -05:00

108 lines
3.2 KiB
Common Lisp

;;;; tests/toolkit.lisp
;; Toolkit Tests
;;
;; TODO I thought after not looking at this file that it was a toolkit
;; *for* tests. Maybe I should rename the tests?
(in-package #:cl-deck-builder2-test)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(is (grouped (loop for _ upto 10 collect _) 10)
'((0 1 2 3 4 5 6 7 8 9) (10)))
(is (grouped (loop for _ upto 10 collect _) 3)
'((0 1 2) (3 4 5) (6 7 8) (9 10)))
(is (grouped (loop for _ upto 10 collect _) 1)
'((0) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(is (normalize-newlines (format nil "as~%df"))
(format nil "as~%df"))
(is (normalize-newlines (format nil "as~C~%df" #\Return))
(format nil "as~%df"))
(is (normalize-newlines (format nil "as~Cdf~C~C" #\Return #\Return #\Newline))
(format nil "as~%df~%"))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Test removal of UTF8 BOMs
;;
;; TODO Surely there has got to be a better way to handle this.
(defparameter *utf8-bom*
(flexi-streams:octets-to-string #(239 187 191)
:external-format :utf-8))
(is (strip-bom (format nil "~aTest!" *utf8-bom*))
"Test!")
(is (normalize-newlines
(strip-bom
(format nil "~aTest!~C~%" *utf8-bom* #\Return)))
(format nil "Test!~%"))
(is (strip-bom
(normalize-newlines
(format nil "~aTest!~C~%" *utf8-bom* #\Return)))
(format nil "Test!~%"))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(is (query-param nil nil) nil)
(is (query-param nil nil) nil)
(is (query-param "name" '(("name" . "user")))
"user")
;; QUERY-PARAM always returns a string
(is (query-param "name" '(("name" . "15")))
"15")
;; Empty string is the same as not passing a value / unset
;;
;; TODO Surely there has got to be a better way to handle this.
(is (query-param "name" '(("name" . "")))
nil)
(is (query-param "name" '(("name" . "")))
nil)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; No results, no offset, LIMIT 1
(is (generate-pages 0 0 1)
'((:id 0 :offset 0)))
;; No results, OFFSET 10, LIMIT 10
(is (generate-pages 0 10 10)
'((:id 0 :offset 0)))
;; One result, OFFSET 10, LIMIT 10
;;
;; TODO I generate one extra page. Maybe don't?
(is (generate-pages 1 10 10)
'((:id 0 :offset 0)
(:id 1 :offset 10)))
;; Ten results, OFFSET 10, LIMIT 10
;;
(is (generate-pages 10 10 10)
'((:id 0 :offset 0)
(:id 1 :offset 10)))
;; One hundred reults, OFFSET 100, LIMIT 10
;;
;; So we show a lot of extra pages here. If there are 100 results and
;; OFFSET 100 items into our 10 per page list, we should start at page
;; 5 and go up to page 10. But this returns out to page 13.
(is (generate-pages 100 100 10)
'((:id 5 :offset 50) (:id 6 :offset 60) (:id 7 :offset 70)
(:id 8 :offset 80) (:id 9 :offset 90) (:id 10 :offset 100)
(:id 11 :offset 110) (:id 12 :offset 120) (:id 13 :offset 130)))
(is (get-opposite-direction "asc") "desc")
(is (get-opposite-direction "desc") "asc")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;