packages feed

hackport-0.6.6: tests/Portage/CabalSpec.hs

module Portage.CabalSpec (spec) where

import Test.Hspec

import qualified Distribution.SPDX as SPDX

import Portage.Cabal

spec :: Spec
spec = do
  describe "convertLicense" $ do
    it "converts AGPL_3_0_or_later into AGPL-3+" $ do
      convertLicense (SPDX.License $ SPDX.simpleLicenseExpression SPDX.AGPL_3_0_or_later)
        `shouldBe`
        Right "AGPL-3+"
    it "converts AGPL_3_0_only into AGPL-3" $ do
      convertLicense (SPDX.License $ SPDX.simpleLicenseExpression SPDX.AGPL_3_0_only)
        `shouldBe`
        Right "AGPL-3"
    it "converts GPL_2_0_or_later into GPL-2+" $ do
      convertLicense (SPDX.License $ SPDX.simpleLicenseExpression SPDX.GPL_2_0_or_later)
        `shouldBe`
        Right "GPL-2+"
    it "converts GPL_2_0_only into GPL-2" $ do
      convertLicense (SPDX.License $ SPDX.simpleLicenseExpression SPDX.GPL_2_0_only)
        `shouldBe`
        Right "GPL-2"
    it "converts GPL_3_0_or_later into GPL-3+" $ do
      convertLicense (SPDX.License $ SPDX.simpleLicenseExpression SPDX.GPL_3_0_or_later)
        `shouldBe`
        Right "GPL-3+"
    it "converts GPL_3_0_only into GPL-3" $ do
      convertLicense (SPDX.License $ SPDX.simpleLicenseExpression SPDX.GPL_3_0_only)
        `shouldBe`
        Right "GPL-3"
    -- Unfortunately, Cabal treats LGPL_2_0_only and LGPL_2_0_or_later as identical,
    -- just as it does with LGPL_2_1_only and LGPL_2_1_or_later. This means
    -- we cannot handle LGPL-2.0+ or LGPL-2,1+ without directly dealing with
    -- the SPDX licence, before it is converted into a Cabal-style licence.
    it "converts LGPL_2_0_or_later into LGPL-2, without a trailing plus (+)" $ do
      convertLicense (SPDX.License $ SPDX.simpleLicenseExpression SPDX.LGPL_2_0_or_later)
        `shouldBe`
        Right "LGPL-2"
    it "converts LGPL_2_0_only into LGPL-2" $ do
      convertLicense (SPDX.License $ SPDX.simpleLicenseExpression SPDX.LGPL_2_0_only)
        `shouldBe`
        Right "LGPL-2"
    it "converts LGPL_2_1_or_later into LGPL-2.1, without a trailing plus (+)" $ do
      convertLicense (SPDX.License $ SPDX.simpleLicenseExpression SPDX.LGPL_2_1_or_later)
        `shouldBe`
        Right "LGPL-2.1"
    it "converts LGPL_2_1_only into LGPL-2.1" $ do
      convertLicense (SPDX.License $ SPDX.simpleLicenseExpression SPDX.LGPL_2_1_only)
        `shouldBe`
        Right "LGPL-2.1"
      -- But these next two cases are correctly handled:
    it "converts LGPL_3_0_or_later into LGPL-3+" $ do
      convertLicense (SPDX.License $ SPDX.simpleLicenseExpression SPDX.LGPL_3_0_or_later)
        `shouldBe`
        Right "LGPL-3+"
    it "converts LGPL_3_0_only into LGPL-3" $ do
      convertLicense (SPDX.License $ SPDX.simpleLicenseExpression SPDX.LGPL_3_0_only)
        `shouldBe`
        Right "LGPL-3"
    context "when a licence string is invalid" $ do
      it "converts the unknown licence into an error string" $ do
        convertLicense (SPDX.License $ SPDX.simpleLicenseExpression SPDX.EUPL_1_1)
          `shouldBe`
          Left "license unknown to cabal. Please pick it manually."