{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Concurrent (forkIO)
import Control.Monad (join)
import DBPedia -- to ensure the DBPedia.hs file compiles
import Database.HSparql.ConnectionTest
import Database.HSparql.QueryGeneratorTest
import Network.HTTP.Types (status200)
import Network.Wai
import Network.Wai.Handler.Warp (run)
import Test.Framework
import Wikidata -- to ensure the Wikidata.hs file compiles
main :: IO ()
main =
do
_ <- forkIO $ startServer
ropts <- interpretArgsOrExit []
defaultMainWithOpts tests ropts
where
tests =
Database.HSparql.ConnectionTest.testSuite
++ Database.HSparql.QueryGeneratorTest.testSuite
app :: Application
app req respond = respond $ response req
where
response req_ = case (join $ lookup "query" $ queryString req_) of
Just "PREFIX dbprop: PREFIX dbpedia: PREFIX foaf: SELECT ?x1 WHERE { ?x0 dbpedia:genre dbprop:Web_browser . ?x0 foaf:name ?x1 . }" ->
selectResponse
Just "PREFIX foaf: PREFIX dct: SELECT ?x1 ?x2 WHERE { ?x0 foaf:name \"Bob\" . << ?x0 foaf:age ?x1 >> dct:source ?x2 . }" ->
selectReifiedTripleResponse
Just "PREFIX dbpedia: PREFIX dbprop: ASK { ?x0 dbprop:genre dbpedia:Web_browser . }" ->
askResponse
Just "PREFIX dbpedia: PREFIX dbprop: PREFIX foaf: PREFIX example: CONSTRUCT { ?x0 example:hasName ?x1 . } WHERE { ?x0 dbprop:genre dbpedia:Web_browser . ?x0 foaf:name ?x1 . }" ->
constructResponse
Just "PREFIX dbpedia: DESCRIBE dbpedia:Edinburgh WHERE { }" ->
describeResponse
raw_req ->
error $ "Unexpected URI: \n\n" ++ show raw_req
selectResponse = responseFile status200 [("Content-Type", "application/sparql-results+xml")] "tests/fixtures/sparql_select_response.xml" Nothing
selectReifiedTripleResponse = responseFile status200 [("Content-Type", "application/sparql-results+xml")] "tests/fixtures/sparql_select_reified_triple_response.xml" Nothing
askResponse = responseFile status200 [("Content-Type", "text/plain")] "tests/fixtures/sparql_ask_response.text" Nothing
constructResponse = responseFile status200 [("Content-Type", "text/turtle")] "tests/fixtures/sparql_construct_response.ttl" Nothing
describeResponse = responseFile status200 [("Content-Type", "text/turtle")] "tests/fixtures/sparql_describe_response.ttl" Nothing
startServer :: IO ()
startServer = run 3000 app