{-# LANGUAGE QuasiQuotes #-} module Hpack.LicenseSpec (spec) where import Helper import Data.Maybe import Data.String.Interpolate import Distribution.Pretty (prettyShow) import Distribution.Parsec.Class (simpleParsec) import qualified Distribution.License as Cabal import Hpack.License cabal :: String -> Cabal.License cabal = fromJust . simpleParsec cabalLicenses :: [(String, License String)] cabalLicenses = [ ("GPL", CanSPDX (cabal "GPL") "LicenseRef-GPL") , ("GPL-2", CanSPDX (cabal "GPL-2") "GPL-2.0-only") , ("GPL-3", CanSPDX (cabal "GPL-3") "GPL-3.0-only") , ("LGPL", CanSPDX (cabal "LGPL") "LicenseRef-LGPL") , ("LGPL-2.1", CanSPDX (cabal "LGPL-2.1") "LGPL-2.1-only") , ("LGPL-3", CanSPDX (cabal "LGPL-3") "LGPL-3.0-only") , ("AGPL", CanSPDX (cabal "AGPL") "LicenseRef-AGPL") , ("AGPL-3", CanSPDX (cabal "AGPL-3") "AGPL-3.0-only") , ("BSD2", CanSPDX (cabal "BSD2") "BSD-2-Clause") , ("BSD3", CanSPDX (cabal "BSD3") "BSD-3-Clause") , ("BSD4", CanSPDX (cabal "BSD4") "BSD-4-Clause") , ("MIT", CanSPDX (cabal "MIT") "MIT") , ("ISC", CanSPDX (cabal "ISC") "ISC") , ("MPL-2.0", CanSPDX (cabal "MPL-2.0") "MPL-2.0") , ("Apache", CanSPDX (cabal "Apache") "LicenseRef-Apache") , ("Apache-2.0", CanSPDX (cabal "Apache-2.0") "Apache-2.0") , ("PublicDomain", CanSPDX (cabal "PublicDomain") "LicenseRef-PublicDomain") , ("OtherLicense", CanSPDX (cabal "OtherLicense") "LicenseRef-OtherLicense") , ("AllRightsReserved", CanSPDX (cabal "AllRightsReserved") "NONE") ] spdxLicenses :: [(String, License String)] spdxLicenses = [ ("GPL-2.0-or-later", MustSPDX "GPL-2.0-or-later") ] unknownLicenses :: [(String, License String)] unknownLicenses = [ ("some-license", DontTouch "some-license") ] spec :: Spec spec = do describe "parseLicense" $ do forM_ (cabalLicenses ++ spdxLicenses ++ unknownLicenses) $ \ (license, expected) -> do it [i|parses #{license}|] $ do prettyShow <$> parseLicense license `shouldBe` expected