89 lines
2.5 KiB
Haskell
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
|