packages feed

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
  ]