project-m36-0.3: test/Relation/Import/CSV.hs
import Test.HUnit
import ProjectM36.Base
import ProjectM36.Relation.Parse.CSV
import ProjectM36.Relation
import qualified ProjectM36.Attribute as A
import ProjectM36.DataTypes.Basic
import System.Exit
import qualified Data.Text.Lazy as T
import Data.Text.Lazy.Encoding
main :: IO ()
main = do
tcounts <- runTestTT $ TestList [testCSVSuccess]
if errors tcounts + failures tcounts > 0 then exitFailure else exitSuccess
testCSVSuccess :: Test
testCSVSuccess = TestCase $ do
let sampleCSV = (encodeUtf8 . T.pack) "S#,CITY,STATUS,SNAME\n\"S8\",\"Boston\",150,\"Mike\"\nS9,Londonderry,170,Perry"
expectedAttrs = A.attributesFromList [Attribute "S#" TextAtomType,
Attribute "SNAME" TextAtomType,
Attribute "STATUS" IntAtomType,
Attribute "CITY" TextAtomType]
expectedRel = mkRelationFromList expectedAttrs [
[TextAtom "S9", TextAtom "Perry", IntAtom 170, TextAtom "Londonderry"],
[TextAtom "S8", TextAtom "Mike", IntAtom 150, TextAtom "Boston"]]
case csvAsRelation expectedAttrs basicTypeConstructorMapping sampleCSV of
Left err -> assertFailure $ show err
Right csvRel -> assertEqual "csv->relation" expectedRel (Right csvRel)