1module TestPrimDocs where
2
3import Prelude
4
5import Data.List (sort)
6import Control.Exception (evaluate)
7import Control.DeepSeq (force)
8import qualified Data.Map as Map
9import qualified Data.Text as Text
10import qualified Language.PureScript as P
11import qualified Language.PureScript.Docs as D
12
13import Test.Hspec
14
15spec :: Spec
16spec = do
17  it "there are no bottoms hiding in primModules" $ do
18    _ <- evaluate (force D.primModules)
19    return ()
20
21  it "all Prim modules are fully documented" $ do
22    let actualPrimNames =
23          -- note that prim type classes are listed in P.primTypes
24          filter (not . Text.any (== '$')) . map (P.runProperName . P.disqualify . fst) $ Map.toList
25            ( P.primTypes <>
26              P.primBooleanTypes <>
27              P.primCoerceTypes <>
28              P.primOrderingTypes <>
29              P.primRowTypes <>
30              P.primRowListTypes <>
31              P.primTypeErrorTypes <>
32              P.primSymbolTypes )
33    let documentedPrimNames =
34          map D.declTitle (concatMap D.modDeclarations D.primModules)
35
36    sort documentedPrimNames `shouldBe` sort actualPrimNames
37