packages feed

pangraph-0.2.0: test/Gml.hs

{-# LANGUAGE OverloadedStrings #-}

module Gml where

import Test.HUnit

import Data.Maybe(fromJust)

import Pangraph
import Pangraph.Gml.Ast
import Pangraph.Gml.Parser
import Pangraph.Gml.Writer

gmlTests :: [Test]
gmlTests = [testGmlParse, pangraphConversion, testComments, testGmlWrite,
    testPangraphWrite, testHtmlEntitiesDecoding, testHtmlEntitiesEncoding]

testGmlParse :: Test
testGmlParse = let
    file = "graph [node [id 1 label \"Hello\"] node [id 2] edge [source 1 target 2]]"
    graph = Just (Object [("graph", Object [
                ("node", Object [("id", Integer 1), ("label", String "Hello")]), 
                ("node", Object [("id", Integer 2)]),
                ("edge", Object [("source", Integer 1),
                    ("target", Integer 2)])])])
    in TestCase $ assertEqual "GML parseTest1" graph (parseGml file)

pangraphConversion :: Test
pangraphConversion = let
    file = "graph [node [id 1] node [id 2] edge [source 1 target 2]]"
    vertices = [makeVertex "1" [("id", "1")], makeVertex "2" [("id", "2")]]
    [v1,v2] = map vertexID vertices
    edges = [makeEdge (v1, v2) [("source", "1"), ("target", "2")] ]
    pangraph = makePangraph vertices edges
    in TestCase $ assertEqual "GML pangraphConversion" pangraph (parse file)
    
testComments :: Test
testComments = let
    file = "#test"
    graph = Just (Object [])
    in TestCase $ assertEqual "GML testComments" graph (parseGml file)

testGmlWrite :: Test
testGmlWrite = let
    graph = (Object [("graph", Object [("node", Object [("id", Integer 1)]), 
                ("node", Object [("id", Integer 2)]),
                ("edge", Object [("source", Integer 1),
                    ("target", Integer 2)])])])
    file = Just "graph [ node [ id 1] node [ id 2] edge [ source 1 target 2]]"
    in TestCase $ assertEqual "GML testWriteGML" file (writeGml graph)

testPangraphWrite :: Test
testPangraphWrite = let
    file = "graph [ node [ id 1] node [ id 2] edge [ source 1 target 2]]"
    in TestCase $ assertEqual "GML parseTest2" file (write gmlPangraphWrite)

testHtmlEntitiesDecoding :: Test
testHtmlEntitiesDecoding = let
    file = "graph [node [id 1 label \""Hello"\" ] node [id 2] edge [source 1 target 2]]"
    in TestCase $ assertEqual "GML testHtmlEntitiesDecoding" (Just gmlPangraph) (parse file)

testHtmlEntitiesEncoding :: Test
testHtmlEntitiesEncoding = let
    file = "graph [ node [ id 1 label \""Hello"\"] node [ id 2] edge [ source 1 target 2]]"
    in TestCase $ assertEqual "GML testHtmlEntitiesEncoding" file (write gmlPangraph) 

gmlPangraph :: Pangraph
gmlPangraph = let
    vertices = [makeVertex "1" [("id", "1"), ("label", "\"Hello\"")], makeVertex "2" [("id", "2")]]
    [v1,v2] = map vertexID vertices
    edges = [makeEdge (v1, v2) [("source", "1"), ("target", "2")]]
    in fromJust $ makePangraph vertices edges

gmlPangraphWrite :: Pangraph
gmlPangraphWrite = let
    vertices = [makeVertex "1" [("id", "1")], makeVertex "2" [("id", "2")]]
    [v1,v2] = map vertexID vertices
    edges = [makeEdge (v1, v2) [("source", "1"), ("target", "2")]]
    
    in fromJust $ makePangraph vertices edges