diff --git a/t/main.lisp b/t/main.lisp deleted file mode 100644 index 144e216..0000000 --- a/t/main.lisp +++ /dev/null @@ -1,97 +0,0 @@ -(defpackage :rsss-testing - (:use :cl) - (:export - - :do-all)) - -(in-package :rsss-testing) - - -(defun do-all () - "Execute all tests." - - (rt:do-tests)) - - - -;; ---------------------------------------- -;; DATA PREP -;; ---------------------------------------- - -(defvar *rss* "") -(with-open-file (file-stream "t/res/rss.xml") - (do ((line (read-line file-stream nil) - (read-line file-stream nil))) - ((null line)) - - (setq *rss* - (concatenate 'string *rss* (format nil "~A~%" line))))) - -(setq *rss* (xmls:parse-to-list *rss*)) - -(defvar *getf-strings-list* - '(("apple" 1) ("pear" 2) ("plum" yuck) ("plum" yum) ("madoka" weeb 2))) - - - -;; ---------------------------------------- -;; MISC -;; ---------------------------------------- - -(rt:deftest getf-strings - (rsss:getf-strings *getf-strings-list* "apple") - (("apple" 1))) - -(rt:deftest getf-strings-1 - (rsss:getf-strings *getf-strings-list* "plum") - (("plum" yuck) ("plum" yum))) - -(rt:deftest getf-strings-2 - (rsss:getf-strings *getf-strings-list* "madoka") - - (("madoka" weeb 2))) - - -(rt:deftest getf-string - (rsss:getf-string *getf-strings-list* "plum") - - ("plum" yuck)) - - - -;; ---------------------------------------- -;; FEED PARSING -;; ---------------------------------------- - -(rt:deftest feed-values - (rsss:feed-values *rss* "item") - (("item" NIL ("title" NIL "Local Resident Takes a Nap") ("description" NIL "John was reported to be \"tired\" and \"irritable\" before his nap. Not so any more.") ("link" NIL "gopher://www.news.com.co.uk.cn/nap.cgi") ("guid" (("isPermaLink" "false")) "1102345") ("pubDate" NIL "Mon, 28 Aug 2018 09:00:00 -0400")) ("item" NIL ("title" NIL "London Bridge Has Burned Down") ("description" NIL "Oh no, not again! :(") ("link" NIL "https://londonbridge.co.uk.cn/bridge.php") ("guid" (("isPermaLink" "false")) "1102345") ("pubDate" NIL "Tue, 29 Aug 2018 09:00:00 -0400")))) - -(rt:deftest feed-items - (rsss:feed-items *rss*) - (("item" NIL ("title" NIL "Local Resident Takes a Nap") ("description" NIL "John was reported to be \"tired\" and \"irritable\" before his nap. Not so any more.") ("link" NIL "gopher://www.news.com.co.uk.cn/nap.cgi") ("guid" (("isPermaLink" "false")) "1102345") ("pubDate" NIL "Mon, 28 Aug 2018 09:00:00 -0400")) ("item" NIL ("title" NIL "London Bridge Has Burned Down") ("description" NIL "Oh no, not again! :(") ("link" NIL "https://londonbridge.co.uk.cn/bridge.php") ("guid" (("isPermaLink" "false")) "1102345") ("pubDate" NIL "Tue, 29 Aug 2018 09:00:00 -0400")))) - -(rt:deftest feed-value - (rsss:feed-value *rss* "title") - ("title" NIL "RSS Sage Emergency Broadcast")) - -(rt:deftest feed-value-listless - (rsss:feed-value-listless *rss* "title") - "RSS Sage Emergency Broadcast") - -(rt:deftest title - (rsss:title *rss*) - "RSS Sage Emergency Broadcast") - -(rt:deftest description - (rsss:description *rss*) - "Your daily dose of RSS Sage tests!") - -(rt:deftest link - (rsss:link *rss*) - "https://rsss.eunichx.us") - -(rt:deftest pubdate - (rsss:pubdate *rss*) - "Tue, 29 Aug 2018 09:00:00 -0400") - diff --git a/t/rsss.lisp b/t/rsss.lisp new file mode 100644 index 0000000..b85ff00 --- /dev/null +++ b/t/rsss.lisp @@ -0,0 +1,179 @@ +(defpackage :rsss-testing + (:use :cl) + (:export :do-all)) + +(in-package :rsss-testing) + +;; NIL → VARYING +(defun do-all () + "Execute all tests." + (rt:do-tests)) + +;; ----------------- + +;; To run these tests, just load up :rsss-testing and run #'do-all. +;; Senproblem'! + +;; ----------------- + +(defvar *atom-xml* (alexandria:read-file-into-string #p"t/atom.xml")) +(defvar *atom-node* (xmls:parse *atom-xml*)) +(defvar *atom-entry* (eighth (xmls:node-children *atom-node*))) +(defvar *rss1-xml* (alexandria:read-file-into-string #p"t/rss1.xml")) +(defvar *rss1-node* (xmls:parse *rss1-xml*)) +(defvar *rss1-entry* (second (xmls:node-children *rss1-node*))) +(defvar *rss2-xml* (alexandria:read-file-into-string #p"t/rss2.xml")) +(defvar *rss2-node* (xmls:parse *rss2-xml*)) +(defvar *rss2-entry* (sixth (xmls:node-children + (car (xmls:node-children *rss2-node*))))) + +;; ————————————————————————————————————— +;; MISC +;; ————————————————————————————————————— +(rt:deftest append-or-replace-i + (let ((test-list nil)) + (rsss::append-or-replace test-list 1)) + (1)) +(rt:deftest append-or-replace-ii + (let ((test-list '("never again!" 2312 "well, maybe…"))) + (rsss::append-or-replace test-list "again. MAYBE.")) + ("never again!" 2312 "well, maybe…" "again. MAYBE.")) + +(rt:deftest equ-assoc-i + (let ((test-assoc '(("mami" 2) ("madoka" 3) ("homura" 4)))) + (rsss::equ-assoc "madoka" test-assoc)) + ("madoka" 3)) +(rt:deftest equ-assoc-ii + (let ((test-assoc '(("homura" "madoka")))) + (rsss::equ-assoc "homura" test-assoc)) + ("homura" "madoka")) + +(rt:deftest nilp-i + (rsss::nilp nil) + T) +(rt:deftest nilp-ii + (rsss::nilp 1) + nil) + +(rt:deftest ie-car-i + (multiple-value-bind (result error) + (rsss::ie-car 1) + (list result (not (rsss::nilp error)))) + (nil T)) +(rt:deftest ie-car-ii + (multiple-value-bind (result error) + (rsss::ie-car '((1 2) 2 3)) + (list result (not (rsss::nilp error)))) + ((1 2) nil)) + + +;; ————————————————————————————————————— +;; PARSING +;; ————————————————————————————————————— +;; ATOM PARSING +;; ————————————————— +(rt:deftest parse-atom-i + (rsss:name (rsss::parse-atom *atom-node*)) + "Planet GNU") +(rt:deftest parse-atom-ii + (rsss:date (rsss::parse-atom *atom-node*)) + "2019-07-09T17:55:32+00:00") +(rt:deftest parse-atom-iii + (rsss:uri (rsss::parse-atom *atom-node*)) + "https://planet.gnu.org/") +(rt:deftest parse-atom-iv + (length (rsss:entries (rsss::parse-atom *atom-node*))) + 60) +(rt:deftest parse-atom-v + (rsss:name (third (rsss:entries (rsss::parse-atom *atom-node*)))) + "DW5821e firmware update integration in ModemManager and fwupd") + +(rt:deftest parse-atom-entry-i + (length (rsss:text (rsss::parse-atom-entry *atom-entry*))) + 7923) +(rt:deftest parse-atom-entry-ii + (rsss:author (rsss::parse-atom-entry *atom-entry*)) + "Christopher Lemmer Webber") +(rt:deftest parse-atom-entry-iii + (rsss:date (rsss::parse-atom-entry *atom-entry*)) + "2019-07-09T14:27:00+00:00") +(rt:deftest parse-atom-entry-iv + (rsss:uri (rsss::parse-atom-entry *atom-entry*)) + "http://dustycloud.org/blog/racket-is-an-acceptable-python/") + +;; ————————————————— +;; RSS1 PARSING +;; ————————————————— +(rt:deftest parse-rss1-i + (rsss:name (rsss::parse-rss *rss1-node*)) + "Planet GNU") +(rt:deftest parse-rss1-ii + (rsss:date (rsss::parse-rss *rss1-node*)) + nil) +(rt:deftest parse-rss1-iii + (rsss:uri (rsss::parse-rss *rss1-node*)) + "https://planet.gnu.org/") +(rt:deftest parse-rss1-iv + (length (rsss:entries (rsss::parse-rss *rss1-node*))) + 60) +(rt:deftest parse-rss1-v + (rsss:name (third (rsss:entries (rsss::parse-rss *rss1-node*)))) + "FSF Blogs: Thank you for advancing free software: Read FSF spring news in the latest Bulletin") + +(rt:deftest parse-rss1-entry-i + (length (rsss:text (rsss::parse-rss-item *rss1-entry*))) + 14616) +(rt:deftest parse-rss1-entry-ii + (rsss:author (rsss::parse-rss-item *rss1-entry*)) + "FSF Blogs") +(rt:deftest parse-rss1-entry-iii + (rsss:date (rsss::parse-rss-item *rss1-entry*)) + "2019-07-09T15:39:21+00:00") +(rt:deftest parse-rss1-entry-iv + (rsss:uri (rsss::parse-rss-item *rss1-entry*)) + "http://www.fsf.org/blogs/rms/photo-blog-2019-june-brno") + +;; ————————————————— +;; RSS2 PARSING +;; ————————————————— +(rt:deftest parse-rss2-i + (rsss:name (rsss::parse-rss *rss2-node*)) + "Esperanto-USA member blogs") +(rt:deftest parse-rss2-ii + (rsss:date (rsss::parse-rss *rss2-node*)) + "2019-07-09T00:00:39-07:00") +(rt:deftest parse-rss2-iii + (rsss:uri (rsss::parse-rss *rss2-node*)) + "http://esperanto-usa.org/eusa/blogs/member-blogs.rss") +(rt:deftest parse-rss2-iv + (length (rsss:entries (rsss::parse-rss *rss2-node*))) + 21) +(rt:deftest parse-rss2-v + (rsss:name (third (rsss:entries (rsss::parse-rss *rss2-node*)))) + "Maja bulteno") + +(rt:deftest parse-rss2-entry-i + (length (rsss:text (rsss::parse-rss-item *rss2-entry*))) + 0) +(rt:deftest parse-rss2-entry-ii + (rsss:author (rsss::parse-rss-item *rss2-entry*)) + nil) +(rt:deftest parse-rss2-entry-iii + (rsss:date (rsss::parse-rss-item *rss2-entry*)) + "2019-06-29T00:47:00+00:00") +(rt:deftest parse-rss2-entry-iv + (rsss:uri (rsss::parse-rss-item *rss2-entry*)) + "http://eo1a.blogspot.com/2019/06/cirkau-la-mondon-post-okdek-tagoj-26.html") + +;; ————————————————— +;; GENERAL PARSING +;; ————————————————— +(rt:deftest parse-i + (type-of (rsss:parse *atom-xml*)) + rsss::feed) +(rt:deftest parse-ii + (type-of (rsss:parse *rss1-xml*)) + rsss::feed) +(rt:deftest parse-iii + (type-of (rsss:parse *rss2-xml*)) + rsss::feed)