{- | Module : Data.GraphViz.Types.GraphSpec Description : Testing graph-based graph representation Copyright : Matthew Sackman, Ivan Lazar Miljenovic License : BSD3 Maintainer : Ivan.Miljenovic@gmail.com -} module Data.GraphViz.Types.GraphSpec (spec) where import Data.GraphViz.Testing.Instances () import Data.GraphViz.Testing.Properties (prop_findAllEdges, prop_findAllNodes, prop_findAllNodesE, prop_noGraphInfo, prop_printParseID) import Data.GraphViz.Testing.Proxy (DGProxy(..)) import Data.GraphViz.Types (edgeInformation) import Data.GraphViz.Types.Graph (Context(..), DotEdge(..), DotGraph, DotNode(..), addEdge, emptyGraph, mkGraph, (&)) import Test.Hspec (Spec, describe, it) import Test.Hspec.QuickCheck (prop) import Data.Graph.Inductive.PatriciaTree (Gr) -------------------------------------------------------------------------------- spec :: Spec spec = do prop "Printing and parsing Dot graph" (prop_printParseID :: DotGraph Int -> Bool) prop "Find all nodes in a Dot graph" (prop_findAllNodes dproxy :: Gr () () -> Bool) prop "Find all nodes in an node-less Dot graph" (prop_findAllNodesE dproxy :: Gr () () -> Bool) prop "Find all edges in a Dot graph" (prop_findAllEdges dproxy :: Gr () () -> Bool) prop "Plain Dot graphs should have no structural information" (prop_noGraphInfo dproxy :: Gr () () -> Bool) describe "issue#28" $ do it "mkGraph retains proper edge order" $ hasEdge (mkGraph [DotNode 0 [], DotNode 1 []] [DotEdge 0 1 []]) (0,1) it "& retains proper edge order" $ hasEdge (Cntxt { node = 1, inCluster = Nothing, attributes = [], predecessors = [(0,[])], successors = []} & Cntxt { node = 0, inCluster = Nothing, attributes = [], predecessors = [], successors = []} & emptyGraph) (0,1) it "addEdge retains proper edge order" $ hasEdge (addEdge 0 1 [] (mkGraph [DotNode 0 [], DotNode 1 []] [])) (0,1) dproxy :: DGProxy DotGraph dproxy = DGProxy hasEdge :: DotGraph Int -> (Int,Int) -> Bool hasEdge dg (f,t) = edgeInformation False dg == [DotEdge f t []]