diff options
| author | Simon Hengel <sol@typeful.net> | 2012-10-14 01:51:32 +0200 | 
|---|---|---|
| committer | Simon Hengel <sol@typeful.net> | 2012-10-14 01:51:32 +0200 | 
| commit | 6fafde62449fa8a5cb8405d6270caa5e1ddac613 (patch) | |
| tree | 195cd40192b2f6db7213989d39165b355e2c4c85 /tests/unit-tests/Haddock | |
| parent | 3ba97f8470f401c968a2ea6f5fd1e7cae1c69028 (diff) | |
Organize unite tests hierarchically
Diffstat (limited to 'tests/unit-tests/Haddock')
| -rw-r--r-- | tests/unit-tests/Haddock/ParseSpec.hs | 79 | 
1 files changed, 79 insertions, 0 deletions
| diff --git a/tests/unit-tests/Haddock/ParseSpec.hs b/tests/unit-tests/Haddock/ParseSpec.hs new file mode 100644 index 00000000..0c959982 --- /dev/null +++ b/tests/unit-tests/Haddock/ParseSpec.hs @@ -0,0 +1,79 @@ +{-# LANGUAGE StandaloneDeriving, FlexibleInstances, UndecidableInstances, IncoherentInstances #-} +{-# OPTIONS_GHC -fno-warn-orphans #-} +module Haddock.ParseSpec (main, spec) where + +import           Test.Hspec +import           RdrName (RdrName) +import           DynFlags (DynFlags, defaultDynFlags) +import           Haddock.Lex (tokenise) +import           Haddock.Parse (parseParas) +import           Haddock.Types +import           Outputable +import           Data.Monoid + +dynFlags :: DynFlags +dynFlags = defaultDynFlags (error "dynFlags for Haddock tests: undefined") + +instance Outputable a => Show a where +  show = showSDoc dynFlags . ppr + +deriving instance Show a => Show (Doc a) +deriving instance Eq a =>Eq (Doc a) + +parse :: String -> Maybe (Doc RdrName) +parse s = parseParas $ tokenise dynFlags s (0,0) + +main :: IO () +main = hspec spec + +spec :: Spec +spec = do +  describe "parseParas" $ do + +    it "parses a paragraph" $ do +      parse "foobar" `shouldBe` (Just . DocParagraph . DocString) "foobar\n" + +    context "when parsing an example" $ do + +      it "requires an example to be separated from a previous paragrap by an empty line" $ do +        parse "foobar\n\n>>> fib 10\n55" `shouldBe` +          (Just $ DocAppend (DocParagraph $ DocString "foobar\n") (DocExamples $ [Example "fib 10" ["55"]])) + +        -- parse error +        parse "foobar\n>>> fib 10\n55" `shouldBe` Nothing + +      it "parses a result line that only contains <BLANKLINE> as an emptly line" $ do +        parse ">>> putFooBar\nfoo\n<BLANKLINE>\nbar" `shouldBe` +          (Just $ DocExamples $ [Example "putFooBar" ["foo","","bar"]]) + +    context "when parsing a code block" $ do +      it "requires a code blocks to be separated from a previous paragrap by an empty line" $ do +        parse "foobar\n\n> some code" `shouldBe` +          Just (DocAppend (DocParagraph (DocString "foobar\n")) (DocCodeBlock (DocString " some code\n"))) + +        -- parse error +        parse "foobar\n> some code" `shouldBe` Nothing + + +    context "when parsing a URL" $ do +      it "parses a URL" $ do +        parse "<http://example.com/>" `shouldBe` +          (Just . DocParagraph $ hyperlink "http://example.com/" Nothing `mappend` DocString "\n") + +      it "accepts an optional label" $ do +        parse "<http://example.com/ some link>" `shouldBe` +          (Just . DocParagraph $ hyperlink "http://example.com/" (Just "some link") `mappend` DocString "\n") + +    context "when parsing properties" $ do +      it "can parse a single property" $ do +        parse "prop> 23 == 23" `shouldBe` (Just $ DocProperty "23 == 23") + +      it "can parse a multiple subsequent properties" $ do +        let input = unlines [ +                "prop> 23 == 23" +              , "prop> 42 == 42" +              ] +        parse input `shouldBe` (Just $ DocProperty "23 == 23" `DocAppend` DocProperty "42 == 42") +  where +    hyperlink :: String -> Maybe String -> Doc RdrName +    hyperlink url = DocHyperlink . Hyperlink url | 
