fb-util-0.1.0.1: tests/FilePathTest.hs
{-
Copyright (c) Meta Platforms, Inc. and affiliates.
All rights reserved.
This source code is licensed under the BSD-style license found in the
LICENSE file in the root directory of this source tree.
-}
module FilePathTest (main) where
import Data.Text (Text)
import Test.HUnit
import TestRunner
import Util.FilePath
dirEnv :: DirEnv
dirEnv = DirEnv{ homeDir = "/home/sweethome/", currentDir = "/herp" }
homeDirTest :: Test
homeDirTest = TestLabel "~/ handled" . TestCase $ do
assertEqual "raw ~"
"/home/sweethome/"
(absolutiseWith dirEnv "~")
assertEqual "~/derp"
"/home/sweethome/derp"
(absolutiseWith dirEnv "~/derp")
assertEqual "relative path with ~"
"/home/sweethome/../derp"
(absolutiseWith dirEnv "~/../derp")
relPathTest :: Test
relPathTest = TestLabel "relative path handled" . TestCase $ do
assertEqual "Relative path"
"/herp/derp"
(absolutiseWith dirEnv "derp")
assertEqual "Relative path"
"/herp/derp"
(absolutiseWith dirEnv ".//derp")
assertEqual "Relative path"
"/herp/../derp"
(absolutiseWith dirEnv "../derp")
testPathToMName :: Test
testPathToMName = TestList
[ mkPathToModuleTestCase
"Basic"
"Foo/Bar/Baz/Quux.hs"
"Foo.Bar.Baz.Quux"
, mkPathToModuleTestCase
"Rooted"
"sigma/repo/Foo/Bar/Baz.hs"
"Foo.Bar.Baz"
, mkPathToModuleTestCase
"Deeply rooted test"
"sigma/repo/Foo.hs"
"Foo"
, mkPathToModuleTestCase
"Absolute Filename"
"/data/users/gnickstanley/si_sigma/Contexts/TestContext.hs"
"Contexts.TestContext"
, mkPathToModuleTestCase
"Subproject Filename"
"duckling/Duckling/Ranking/Types.hs"
"Duckling.Ranking.Types"
, mkPathToModuleTestCase
"Rooted Subproject"
"si_sigma/duckling/Duckling/Ranking/Types.hs"
"Duckling.Ranking.Types"
, mkPathToModuleTestCase
"Absolute Subproject"
"/data/users/gnickstanley/si_sigma/duckling/Duckling/Ranking/Types.hs"
"Duckling.Ranking.Types"
, mkPathToModuleTestCase
"Other Capitalized Directories"
"/data/users/ILOVECAPITALIZEDUSERNAMES/si_sigma/Contexts/TestContext.hs"
"Contexts.TestContext"
]
mkPathToModuleTestCase :: String -> FilePath -> Text -> Test
mkPathToModuleTestCase name path expected =
TestLabel name . TestCase $ expected @=? pathToMName path
testMNameToPath :: Test
testMNameToPath = TestList
[ mkMNameToPathTestCase
"Basic"
"Foo.Bar.Baz.Quux"
"Foo/Bar/Baz/Quux.hs"
]
mkMNameToPathTestCase :: String -> Text -> FilePath -> Test
mkMNameToPathTestCase name mname expected =
TestLabel name . TestCase $ expected @=? mnameToPath mname
main :: IO ()
main = testRunner $ TestList
[ homeDirTest
, relPathTest
, testPathToMName
, testMNameToPath
]