purl-0.1.0.0: test/Spec.hs
{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Monad
import Data.Bifunctor (Bifunctor (bimap))
import Data.Map.Strict qualified as M
import Data.Purl
import Data.Text (Text)
import Test.Tasty
import Test.Tasty.HUnit
main :: IO ()
main = defaultMain $
testCase "Data.Purl" $ do
forM_ examples $ \(purlString, expectedPurl) -> do
case parsePurl purlString of
Left e -> assertFailure (show e)
Right purl -> do
purl @?= expectedPurl
purlText purl @?= purlString
examples :: [(Text, Purl)]
examples =
[
( "pkg:bitbucket/birkenfeld/pygments-main@244fd47e07d1014f0aed9c"
, (newPurlOther "bitbucket" (PurlName "pygments-main"))
{ purlNamespace = Just $ PurlNamespace ["birkenfeld"]
, purlVersion = Just $ PurlVersion "244fd47e07d1014f0aed9c"
}
)
,
( "pkg:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie"
, (newPurlOther "deb" (PurlName "curl"))
{ purlNamespace = Just $ PurlNamespace ["debian"]
, purlVersion = Just $ PurlVersion "7.50.3-1"
, purlQualifiers = mkQualifiers [("arch", "i386"), ("distro", "jessie")]
}
)
,
( "pkg:docker/cassandra@sha256:244fd47e07d1004f0aed9c"
, (newPurlOther "docker" (PurlName "cassandra"))
{ purlVersion = Just $ PurlVersion "sha256:244fd47e07d1004f0aed9c"
}
)
,
( "pkg:docker/customer/dockerimage@sha256:244fd47e07d1004f0aed9c?repository_url=gcr.io"
, (newPurlOther "docker" (PurlName "dockerimage"))
{ purlNamespace = Just $ PurlNamespace ["customer"]
, purlVersion = Just $ PurlVersion "sha256:244fd47e07d1004f0aed9c"
, purlQualifiers = mkQualifiers [("repository_url", "gcr.io")]
}
)
,
( "pkg:gem/jruby-launcher@1.1.2?platform=java"
, (newPurlOther "gem" (PurlName "jruby-launcher"))
{ purlVersion = Just $ PurlVersion "1.1.2"
, purlQualifiers = mkQualifiers [("platform", "java")]
}
)
,
( "pkg:gem/ruby-advisory-db-check@0.12.4"
, (newPurlOther "gem" (PurlName "ruby-advisory-db-check"))
{ purlVersion = Just $ PurlVersion "0.12.4"
}
)
,
( "pkg:github/package-url/purl-spec@244fd47e07d1004f0aed9c"
, (newPurlOther "github" (PurlName "purl-spec"))
{ purlNamespace = Just $ PurlNamespace ["package-url"]
, purlVersion = Just $ PurlVersion "244fd47e07d1004f0aed9c"
}
)
,
( "pkg:golang/google.golang.org/genproto#googleapis/api/annotations"
, (newPurlOther "golang" (PurlName "genproto"))
{ purlNamespace = Just $ PurlNamespace ["google.golang.org"]
, purlSubPath = Just $ PurlSubPath ["googleapis", "api", "annotations"]
}
)
,
( "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?packaging=sources"
, (newPurlOther "maven" (PurlName "batik-anim"))
{ purlNamespace = Just $ PurlNamespace ["org.apache.xmlgraphics"]
, purlVersion = Just $ PurlVersion "1.9.1"
, purlQualifiers = mkQualifiers [("packaging", "sources")]
}
)
,
( "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?repository_url=repo.spring.io/release"
, (newPurlOther "maven" (PurlName "batik-anim"))
{ purlNamespace = Just $ PurlNamespace ["org.apache.xmlgraphics"]
, purlVersion = Just $ PurlVersion "1.9.1"
, purlQualifiers = mkQualifiers [("repository_url", "repo.spring.io/release")]
}
)
,
( "pkg:golang/google.golang.org/genproto#googleapis/api/annotations"
, (newPurlOther "golang" (PurlName "genproto"))
{ purlNamespace = Just $ PurlNamespace ["google.golang.org"]
, purlSubPath = Just $ PurlSubPath ["googleapis", "api", "annotations"]
}
)
,
( "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?packaging=sources"
, (newPurlOther "maven" (PurlName "batik-anim"))
{ purlNamespace = Just $ PurlNamespace ["org.apache.xmlgraphics"]
, purlVersion = Just $ PurlVersion "1.9.1"
, purlQualifiers = mkQualifiers [("packaging", "sources")]
}
)
,
( "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?repository_url=repo.spring.io/release"
, (newPurlOther "maven" (PurlName "batik-anim"))
{ purlNamespace = Just $ PurlNamespace ["org.apache.xmlgraphics"]
, purlVersion = Just $ PurlVersion "1.9.1"
, purlQualifiers = mkQualifiers [("repository_url", "repo.spring.io/release")]
}
)
,
( "pkg:npm/%40angular/animation@12.3.1"
, (newPurlOther "npm" (PurlName "animation"))
{ purlNamespace = Just $ PurlNamespace ["%40angular"]
, purlVersion = Just $ PurlVersion "12.3.1"
}
)
,
( "pkg:npm/foobar@12.3.1"
, (newPurlOther "npm" (PurlName "foobar"))
{ purlVersion = Just $ PurlVersion "12.3.1"
}
)
,
( "pkg:nuget/EnterpriseLibrary.Common@6.0.1304"
, (newPurlOther "nuget" (PurlName "EnterpriseLibrary.Common"))
{ purlVersion = Just $ PurlVersion "6.0.1304"
}
)
,
( "pkg:pypi/django@1.11.1"
, (newPurlOther "pypi" (PurlName "django"))
{ purlVersion = Just $ PurlVersion "1.11.1"
}
)
,
( "pkg:rpm/fedora/curl@7.50.3-1.fc25?arch=i386&distro=fedora-25"
, (newPurlOther "rpm" (PurlName "curl"))
{ purlNamespace = Just $ PurlNamespace ["fedora"]
, purlVersion = Just $ PurlVersion "7.50.3-1.fc25"
, purlQualifiers = mkQualifiers [("arch", "i386"), ("distro", "fedora-25")]
}
)
,
( "pkg:rpm/opensuse/curl@7.56.1-1.1.?arch=i386&distro=opensuse-tumbleweed"
, (newPurlOther "rpm" (PurlName "curl"))
{ purlNamespace = Just $ PurlNamespace ["opensuse"]
, purlVersion = Just $ PurlVersion "7.56.1-1.1."
, purlQualifiers = mkQualifiers [("arch", "i386"), ("distro", "opensuse-tumbleweed")]
}
)
]
where
mkQualifiers = M.fromList . map (bimap PurlQualifierKey PurlQualifierValue)