From f586b904349d030bd96c09bb34181d5e8fcea08e Mon Sep 17 00:00:00 2001 From: Igor Ranieri Date: Sun, 21 Sep 2025 10:01:12 +0200 Subject: [PATCH] Added minimal tests for bare lexer --- test/Spec.hs | 57 ++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 44 insertions(+), 13 deletions(-) diff --git a/test/Spec.hs b/test/Spec.hs index 2721680..0574666 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -20,19 +20,6 @@ type Doc id = DocMarkup () id instance IsString (Doc String) where fromString = DocString -main :: IO () -main = hspec $ do - describe "Lexer" do - it "bare string" do - "some string" `shouldLexTo` [(1, 1, Token "some"), (1, 5, Space), (1, 6, Token "string")] - it "emphasis" do - "has /emphatic/ content" `shouldLexTo` replicate 7 (0, 0, Space) - describe "Parser" do - it "Bold" do - "__bold__" `shouldParseTo` (DocBold (DocString "bold")) - it "Emphasis" do - "/emphasis/" `shouldParseTo` (DocEmphasis (DocString "emphasis")) - shouldLexTo :: String -> [(Int, Int, Token)] -> Expectation shouldLexTo input expected = case lexer input of @@ -40,3 +27,47 @@ shouldLexTo input expected = let actual = map (\(pos, tok) -> (sourceLine pos, sourceColumn pos, tok)) tokens actual `shouldBe` expected Left err -> expectationFailure $ "Parse error: " <> show err + +main :: IO () +main = hspec $ do + describe "Lexer" do + describe "minimal" do + it "bare string" someString + it "emphasis" emphatic + it "monospace" monospace + it "ignores nesting" ignoreNesting + describe "Parser" do + it "Bold" do + "__bold__" `shouldParseTo` (DocBold (DocString "bold")) + it "Emphasis" do + "/emphasis/" `shouldParseTo` (DocEmphasis (DocString "emphasis")) + +monospace :: Expectation +monospace = + "@mono@" + `shouldLexTo` [ (1, 7, MonospaceOpen) + , (1, 7, Token "mono") + , (1, 7, MonospaceClose) + ] + +ignoreNesting :: Expectation +ignoreNesting = + ">/foo/" + `shouldLexTo` [ (1, 1, Token ">/foo/") + ] + +emphatic :: Expectation +emphatic = + "/emphatic/" + `shouldLexTo` [ (1, 11, EmphasisOpen) + , (1, 11, Token "emphatic") + , (1, 11, EmphasisClose) + ] + +someString :: Expectation +someString = + "some string" + `shouldLexTo` [ (1, 1, Token "some") + , (1, 5, Space) + , (1, 6, Token "string") + ]