content: module Language.Fortran.Analysis.ModGraphSpec (spec) where
  
  import Test.Hspec
  import TestUtil
  
  import Language.Fortran.Analysis.ModGraph
  import Language.Fortran.Util.Files (expandDirs)
  import Language.Fortran.Version
  import System.FilePath ((</>))
  
  spec :: Spec
  spec =
    describe "Modgraph" $
      it "Dependency graph and topological sort on small package" $
        testDependencyList
  
  -- A simple test on a simple module structure to check that
  -- we are understanding this correctly (via the dependency graph
  -- and then its topological sort).
  testDependencyList = do
      paths' <- expandDirs ["test-data" </> "module"]
      mg <- genModGraph (Just Fortran90) ["."] Nothing paths'
      let list = modGraphToList mg
      -- we should have two possible orderings
      let files1 = ["leaf.f90", "mid1.f90", "mid2.f90", "top.f90"]
      let filesWithPaths1 = map (("test-data" </> "module") </>) files1
      -- or in a different order
      let files2 = ["leaf.f90", "mid2.f90", "mid1.f90", "top.f90"]
      let filesWithPaths2 = map (("test-data" </> "module") </>) files2
      shouldSatisfy list (\x -> x == filesWithPaths1 || x == filesWithPaths2)
  