1{-# LANGUAGE FlexibleContexts #-}
2{-# LANGUAGE NoImplicitPrelude #-}
3{-# LANGUAGE OverloadedStrings #-}
4module Pantry.GlobalHintsSpec (spec) where
5
6import Distribution.Types.PackageName (mkPackageName)
7import Distribution.Version (mkVersion)
8import RIO
9import Pantry (loadGlobalHints, WantedCompiler (..), runPantryAppClean)
10import Pantry.Internal
11import Test.Hspec
12import qualified RIO.Map as Map
13import Path (toFilePath)
14
15spec :: Spec
16spec = do
17    let it' name inner = it name $ example $ runPantryAppClean $ do
18          file <- getGlobalHintsFile
19          writeFileBinary (toFilePath file) "this should be ignored"
20          inner
21    it' "unknown compiler" $ do
22      mmap <- loadGlobalHints $ WCGhc (mkVersion [0, 0, 0, 0, 0, 0, 0])
23      liftIO $ mmap `shouldBe` Nothing
24    it' "known compiler" $ do
25      mmap <- loadGlobalHints $ WCGhc (mkVersion [8, 4, 3])
26      case mmap of
27        Nothing -> error "not found"
28        Just m -> liftIO $ do
29          Map.lookup (mkPackageName "ghc") m `shouldBe` Just (mkVersion [8, 4, 3])
30          Map.lookup (mkPackageName "base") m `shouldBe` Just (mkVersion [4, 11, 1, 0])
31          Map.lookup (mkPackageName "bytestring") m `shouldBe` Just (mkVersion [0, 10, 8, 2])
32          Map.lookup (mkPackageName "acme-missiles") m `shouldBe` Nothing
33    it' "older known compiler" $ do
34      mmap <- loadGlobalHints $ WCGhc (mkVersion [7, 8, 4])
35      case mmap of
36        Nothing -> error "not found"
37        Just m -> liftIO $ do
38          Map.lookup (mkPackageName "ghc") m `shouldBe` Just (mkVersion [7, 8, 4])
39          Map.lookup (mkPackageName "base") m `shouldBe` Just (mkVersion [4, 7, 0, 2])
40          Map.lookup (mkPackageName "Cabal") m `shouldBe` Just (mkVersion [1, 18, 1, 5])
41          Map.lookup (mkPackageName "acme-missiles") m `shouldBe` Nothing
42