packages feed

rdf4h-5.0.1: testsuite/tests/Test.hs

{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}

module Main where

import Data.Maybe (fromJust)
import Data.RDF
import Data.RDF.BlankNodeTests
import Data.RDF.GraphImplTests
import Data.RDF.IRITests
import Data.RDF.PropertyTests
import qualified Data.Text as T
import System.Directory (getCurrentDirectory)
import System.FilePath ((</>))
import Test.Tasty (defaultMain, testGroup)
import qualified Text.RDF.RDF4H.TurtleParser_ConformanceTest as TurtleUnitTest
import qualified Text.RDF.RDF4H.TurtleSerializerTest as TurtleSerializerTest
import qualified Text.RDF.RDF4H.XmlParser_Test as XmlUnitTest
import W3C.Manifest
import qualified W3C.NTripleTest as W3CNTripleTest
import qualified W3C.RdfXmlTest as W3CRdfXmlTest
import qualified W3C.TurtleTest as W3CTurtleTest

suiteFilesDirTurtle, suiteFilesDirXml, suiteFilesDirNTriples :: T.Text
suiteFilesDirTurtle = "rdf-tests/turtle/"
suiteFilesDirXml = "rdf-tests/rdf-xml/"
suiteFilesDirNTriples = "rdf-tests/ntriples/"

mfPathTurtle, mfPathXml, mfPathNTriples :: T.Text
mfPathTurtle = mconcat [suiteFilesDirTurtle, "manifest.ttl"]
mfPathXml = mconcat [suiteFilesDirXml, "manifest.ttl"]
mfPathNTriples = mconcat [suiteFilesDirNTriples, "manifest.ttl"]

mfBaseURITurtle, mfBaseURIXml, mfBaseURINTriples :: BaseUrl
mfBaseURITurtle = W3CTurtleTest.mfBaseURITurtle
mfBaseURIXml = W3CRdfXmlTest.mfBaseURIXml
mfBaseURINTriples = BaseUrl "http://www.w3.org/2013/N-TriplesTests/"

main :: IO ()
main = do
  -- obtain manifest files for W3C tests before running tests
  -- justification for separation: http://stackoverflow.com/a/33046723
  dir <- getCurrentDirectory
  let fileSchemeUri suitesDir =
        fromJust . filePathToUri $ (dir </> T.unpack suitesDir)
  turtleManifest <- loadManifest mfPathTurtle (unBaseUrl mfBaseURITurtle)
  xmlManifest <- loadManifest mfPathXml (unBaseUrl mfBaseURIXml)
  nTriplesManifest <-
    loadManifest mfPathNTriples (fileSchemeUri suiteFilesDirNTriples)
  -- run tests
  defaultMain
    ( testGroup
        "rdf4h tests"
        -- RDF graph API tests
        [ testGroup
            "property-tests"
            [ ( graphTests
                  "TList"
                  (empty :: RDF TList)
                  (mkRdf :: Triples -> Maybe BaseUrl -> PrefixMappings -> RDF TList)
              ),
              ( graphTests
                  "AdjHashMap"
                  (empty :: RDF AdjHashMap)
                  (mkRdf :: Triples -> Maybe BaseUrl -> PrefixMappings -> RDF AdjHashMap)
              ),
              ( graphTests
                  "AlgebraicGraph"
                  (empty :: RDF AlgebraicGraph)
                  (mkRdf :: Triples -> Maybe BaseUrl -> PrefixMappings -> RDF AlgebraicGraph)
              )
            ],
          testGroup
            "graph-impl-unit-tests"
            [graphImplTests],
          testGroup
            "iri"
            [iriTests],
          testGroup
            "bnode"
            [blankNodeTests],
          -- RDF parser unit tests
          testGroup
            "parser-unit-tests-turtle"
            TurtleUnitTest.tests,
          testGroup
            "parser-unit-tests-xml"
            XmlUnitTest.tests,
          -- RDF serializer unit tests
          testGroup "serializer-unit-tests-turtle" [TurtleSerializerTest.tests],
          -- RDF parser W3C tests
          testGroup
            "parser-w3c-tests-ntriples"
            [ testGroup
                "parser-w3c-tests-ntriples-parsec"
                [W3CNTripleTest.testsParsec nTriplesManifest],
              testGroup
                "parser-w3c-tests-ntriples-attoparsec"
                [W3CNTripleTest.testsAttoparsec nTriplesManifest]
            ],
          testGroup
            "parser-w3c-tests-turtle"
            [ testGroup
                "parser-w3c-tests-turtle-parsec"
                [W3CTurtleTest.testsParsec (dir </> T.unpack suiteFilesDirTurtle) turtleManifest],
              testGroup
                "parser-w3c-tests-turtle-attoparsec"
                [W3CTurtleTest.testsAttoparsec (dir </> T.unpack suiteFilesDirTurtle) turtleManifest]
            ],
          testGroup
            "parser-w3c-tests-xml"
            [ W3CRdfXmlTest.tests (dir </> T.unpack suiteFilesDirXml) xmlManifest
            ]
        ]
    )