{-# LANGUAGE OverloadedStrings #-} module Data.RDF.IRITests ( iriTests, ) where import Data.Either import Data.RDF.IRI import Data.Text () import Test.Tasty import Test.Tasty.HUnit iriTests :: TestTree iriTests = testGroup "iri-unit-tests" [ testCase "No scheme 01" $ assertEqual "" (Right (IRIRef Nothing authority02 mempty Nothing Nothing)) (parseRelIRI "//duckduckgo.com"), testCase "No scheme 02" $ assertBool "" (isRight (parseRelIRI "duckduckgo.com")), testCase "No path" $ assertEqual "" (Right (IRIRef https authority01 mempty Nothing Nothing)) (parseIRI "https://en.wikipedia.org"), testCase "Scheme case" $ assertEqual "" (Right (IRIRef https authority01 mempty Nothing Nothing)) (parseIRI "htTpS://en.wikipedia.org"), testCase "Empty query" $ assertEqual "" (Right (IRIRef https authority02 mempty (Just mempty) Nothing)) (parseIRI "https://duckduckgo.com?"), testCase "Empty fragment" $ assertEqual "" (Right (IRIRef https authority02 mempty Nothing (Just mempty))) (parseIRI "https://duckduckgo.com#"), testCase "Empty query & fragment" $ assertEqual "" (Right (IRIRef https authority02 mempty (Just mempty) (Just mempty))) (parseIRI "https://duckduckgo.com?#"), testCase "Simple query without path" $ assertEqual "" (Right (IRIRef https authority02 mempty query01 Nothing)) (parseIRI "https://duckduckgo.com?q=Uniform+Resource+Identifier"), testCase "Simple query with path" $ assertEqual "" (Right (IRIRef https authority02 (Path "/") query01 Nothing)) (parseIRI "https://duckduckgo.com/?q=Uniform+Resource+Identifier"), testCase "Japanese characters 01" $ assertEqual "" (Right (IRIRef https authority03 mempty Nothing Nothing)) (parseIRI "https://www.ほんとうにながいわけのわからないどめいんめいのらべるまだながくしないとたりない.w3.mag.keio.ac.jp"), testCase "Empty Filepath" $ assertEqual "" (Right (IRIRef file emptyAuthority mempty Nothing Nothing)) (parseIRI "file://"), testCase "Simple Filepath 01" $ assertEqual "" (Right (IRIRef file emptyAuthority (Path "/") Nothing Nothing)) (parseIRI "file:///"), testCase "Simple Filepath 02" $ assertEqual "" (Right (IRIRef file emptyAuthority (Path "/temp") Nothing Nothing)) (parseIRI "file:///temp"), testCase "Simple Filepath 03" $ assertEqual "" (Right (IRIRef file emptyAuthority (Path "/temp/test.txt") Nothing Nothing)) (parseIRI "file:///temp/test.txt"), testCase "Example for IRI resolution 1" $ assertEqual "" (Right (IRIRef http authority04 (Path "/bb/ccc/d;p") (Just $ IRIQuery "q") Nothing)) (parseIRI "http://a/bb/ccc/d;p?q"), testCase "Example for IRI resolution 2" $ assertEqual "" (Right (IRIRef (Just $ Scheme "g") Nothing (Path "h") Nothing Nothing)) (parseIRI "g:h"), testCase "Example for IRI resolution 3a" $ assertBool "" (isLeft (parseIRI "g")), testCase "Example for IRI resolution 3b" $ assertEqual "" (Right (IRIRef Nothing Nothing (Path "g") Nothing Nothing)) (parseRelIRI "g"), testCase "Example for IRI resolution 4" $ assertEqual "" (Right (IRIRef Nothing Nothing (Path "..") Nothing Nothing)) (parseRelIRI ".."), testCase "IRI resolution 0" $ assertEqual "" (Right "http://a/bb/ccc/d;p?q") (resolveIRI "http://a/bb/ccc/d;p?q" ""), testCase "IRI resolution 1" $ assertEqual "" (Right "g:h") (resolveIRI "http://a/bb/ccc/d;p?q" "g:h"), testCase "IRI resolution 2" $ assertEqual "" (Right "http://a/bb/ccc/g") (resolveIRI "http://a/bb/ccc/d;p?q" "g"), testCase "IRI resolution 3" $ assertEqual "" (Right "http://a/bb/ccc/g") (resolveIRI "http://a/bb/ccc/d;p?q" "./g"), testCase "IRI resolution 4" $ assertEqual "" (Right "http://a/bb/ccc/g/") (resolveIRI "http://a/bb/ccc/d;p?q" "g/"), testCase "IRI resolution 5" $ assertEqual "" (Right "http://a/g") (resolveIRI "http://a/bb/ccc/d;p?q" "/g"), testCase "IRI resolution 6" $ assertEqual "" (Right "http://a/bb/ccc/g/") (resolveIRI "http://a/bb/ccc/d;p?q" "./g/."), testCase "IRI resolution 7" $ assertEqual "" (Right "http://a/bb/") (resolveIRI "http://a/bb/ccc/d;p?q" ".."), testCase "IRI resolution 8" $ assertEqual "" (Right "http://a/g") (resolveIRI "http://a/bb/ccc/d;p?q" "../../../g"), testCase "IRI resolution 9" $ assertEqual "" (Right "http://a.com/bb/ccc/test.ttl#") (resolveIRI "http://a.com/bb/ccc/test.ttl" "#"), testCase "IRI resolution 10" $ assertEqual "" (Right "http://a/bb/ccc/d;p?q#") (resolveIRI "http://a/bb/ccc/d;p?q" "#") ] http :: Maybe Scheme http = Just $ Scheme "http" https :: Maybe Scheme https = Just $ Scheme "https" file :: Maybe Scheme file = Just $ Scheme "file" emptyAuthority :: Maybe Authority emptyAuthority = Just $ Authority Nothing (Host mempty) Nothing authority01 :: Maybe Authority authority01 = Just $ Authority Nothing host01 Nothing authority02 :: Maybe Authority authority02 = Just $ Authority Nothing host02 Nothing authority03 :: Maybe Authority authority03 = Just $ Authority Nothing host03 Nothing authority04 :: Maybe Authority authority04 = Just $ Authority Nothing (Host "a") Nothing host01 :: Host host01 = Host "en.wikipedia.org" host02 :: Host host02 = Host "duckduckgo.com" host03 :: Host host03 = Host "www.ほんとうにながいわけのわからないどめいんめいのらべるまだながくしないとたりない.w3.mag.keio.ac.jp" query01 :: Maybe IRIQuery query01 = Just $ IRIQuery "q=Uniform+Resource+Identifier" {- fragment01 :: Maybe Fragment fragment01 = Just $ Fragment "top" -}