vger/src/Unit.hs

89 lines
2.5 KiB
Haskell

import Test.HUnit
import Gemini
regex_1 = TestCase (assertEqual
"single file request"
[["gemini://perso.pw/index.gmi\r\n", "gemini://", "perso.pw", "index.gmi", "", "", "\r\n"]]
(parse_url "gemini://perso.pw/index.gmi\r\n"))
regex_2 = TestCase (assertEqual
"full request with file and query"
[["gemini://perso.pw/index.gmi?query=value\r\n", "gemini://", "perso.pw", "index.gmi", "?", "query=value", "\r\n"]]
(parse_url "gemini://perso.pw/index.gmi?query=value\r\n"))
regex_3 = TestCase (assertEqual
"missing newline return"
[]
(parse_url "gemini://perso.pw/"))
regex_4 = TestCase (assertEqual
"query without a file"
[["gemini://perso.pw/?query=value\r\n", "gemini://", "perso.pw", "", "?", "query=value", "\r\n"]]
(parse_url "gemini://perso.pw/?query=value\r\n"))
regex_5 = TestCase (assertEqual
"domain only"
[["gemini://perso.pw\r\n", "gemini://", "perso.pw", "", "", "", "\r\n"]]
(parse_url "gemini://perso.pw\r\n"))
regex_6 = TestCase (assertEqual
"directory requested"
[["gemini://perso.pw/directory/\r\n", "gemini://", "perso.pw", "directory/", "", "", "\r\n"]]
(parse_url "gemini://perso.pw/directory/\r\n"))
regex_7 = TestCase (assertEqual
"path traversal attempt"
[["gemini://perso.pw/directory/\r\n", "gemini://", "perso.pw", "directory/", "", "", "\r\n"]]
(parse_url "gemini://perso.pw/../../directory/\r\n"))
regex_8 = TestCase (assertEqual
"directory requested with a query"
[["gemini://perso.pw/directory/?query=value\r\n", "gemini://", "perso.pw", "directory/", "?", "query=value", "\r\n"]]
(parse_url "gemini://perso.pw/directory/?query=value\r\n"))
regex_9 = TestCase (assertEqual
"directory requested with a query without a trailing slash"
[["gemini://perso.pw/directory?query=value\r\n", "gemini://", "perso.pw", "directory", "?", "query=value", "\r\n"]]
(parse_url "gemini://perso.pw/directory?query=value\r\n"))
regex_10 = TestCase (assertEqual
"ensure sanitization works"
"gemini://perso.pw/main.gmi/passwd"
(sanitize_uri "gemini://perso.pw/../../../main.gmi/../../passwd"))
mime_1 = TestCase (assertEqual
"gmi files should be text/gemini"
"text/gemini"
(get_mime "main.gmi"))
mime_2 = TestCase (assertEqual
"markdown file"
"text/plain"
(get_mime "file.txt"))
mime_3 = TestCase (assertEqual
"markdown file"
"image/jpeg"
(get_mime "picture.jpg"))
tests = TestList
[ regex_1
, regex_2
, regex_3
, regex_4
, regex_5
, regex_6
, regex_7
, regex_8
, regex_9
, regex_10
, mime_1
, mime_2
, mime_3
]
main :: IO Counts
main = do
runTestTT tests