Skip to content

Commit 32d969a

Browse files
committed
Fix build for ScriptSpec on Windows (#2457)
1 parent 0bc1927 commit 32d969a

File tree

4 files changed

+39
-6
lines changed

4 files changed

+39
-6
lines changed

src/Path/Extra.hs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,14 @@ module Path.Extra
99
,parseCollapsedAbsFile
1010
,rejectMissingFile
1111
,rejectMissingDir
12+
,pathToByteString
13+
,pathToLazyByteString
1214
) where
1315

16+
import qualified Data.ByteString.Lazy.Char8 as BSL
17+
import qualified Data.ByteString.Char8 as BS
18+
import qualified Data.Text as T
19+
import qualified Data.Text.Encoding as T
1420
import Control.Monad (liftM)
1521
import Control.Monad.Catch
1622
import Control.Monad.IO.Class
@@ -94,3 +100,11 @@ rejectMissingDir :: MonadIO m
94100
-> m (Maybe (Path Abs Dir))
95101
rejectMissingDir Nothing = return Nothing
96102
rejectMissingDir (Just p) = bool Nothing (Just p) `liftM` doesDirExist p
103+
104+
-- | Convert to a lazy ByteString using toFilePath and UTF8.
105+
pathToLazyByteString :: Path b t -> BSL.ByteString
106+
pathToLazyByteString = BSL.fromStrict . pathToByteString
107+
108+
-- | Convert to a ByteString using toFilePath and UTF8.
109+
pathToByteString :: Path b t -> BS.ByteString
110+
pathToByteString = T.encodeUtf8 . T.pack . toFilePath
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{-# LANGUAGE OverloadedStrings #-}
2+
{-# LANGUAGE CPP #-}
3+
4+
-- | Helpers for writing fake paths for test suite for the GhciScript DSL
5+
module Stack.Ghci.PortableFakePaths where
6+
7+
defaultDrive :: FilePath
8+
#ifdef WINDOWS
9+
defaultDrive = "C:\\"
10+
#else
11+
defaultDrive = "/"
12+
#endif

src/test/Stack/Ghci/ScriptSpec.hs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ import Data.Monoid
99
import qualified Data.Set as S
1010
import Distribution.ModuleName
1111
import Test.Hspec
12+
import qualified System.FilePath as FP
13+
import Stack.Ghci.PortableFakePaths
1214
import Path
15+
import Path.Extra (pathToLazyByteString)
1316

1417
import Stack.Ghci.Script
1518

@@ -20,10 +23,11 @@ spec = do
2023

2124
describe "script" $ do
2225
it "should seperate commands with a newline" $ do
23-
let script = cmdCdGhc $(mkAbsDir "/src/package-a")
26+
let dir = $(mkAbsDir $ defaultDrive FP.</> "src" FP.</> "package-a")
27+
script = cmdCdGhc dir
2428
<> cmdAdd [fromString "Lib.A"]
2529
scriptToLazyByteString script `shouldBe`
26-
":cd-ghc /src/package-a/\n:add Lib.A\n"
30+
":cd-ghc " <> pathToLazyByteString dir <> "\n:add Lib.A\n"
2731

2832
describe ":add" $ do
2933
it "should not render empty add commands" $ do
@@ -36,15 +40,17 @@ spec = do
3640

3741
describe ":add (by file)" $ do
3842
it "should render a full file path" $ do
39-
let script = cmdAddFile $(mkAbsFile "/Users/someone/src/project/package-a/src/Main.hs")
43+
let file = $(mkAbsFile $ defaultDrive FP.</> "Users" FP.</> "someone" FP.</> "src" FP.</> "project" FP.</> "package-a" FP.</> "src" FP.</> "Main.hs")
44+
script = cmdAddFile file
4045
scriptToLazyByteString script `shouldBe`
41-
":add /Users/someone/src/project/package-a/src/Main.hs\n"
46+
":add " <> pathToLazyByteString file <> "\n"
4247

4348
describe ":cd-ghc" $ do
4449
it "should render a full absolute path" $ do
45-
let script = cmdCdGhc $(mkAbsDir "/Users/someone/src/project/package-a")
50+
let dir = $(mkAbsDir $ defaultDrive FP.</> "Users" FP.</> "someone" FP.</> "src" FP.</> "project" FP.</> "package-a")
51+
script = cmdCdGhc dir
4652
scriptToLazyByteString script `shouldBe`
47-
":cd-ghc /Users/someone/src/project/package-a/\n"
53+
":cd-ghc " <> pathToLazyByteString dir <> "\n"
4854

4955
describe ":module" $ do
5056
it "should render empty module as ':module +'" $ do

stack.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,7 @@ test-suite stack-test
300300
, Stack.DotSpec
301301
, Stack.GhciSpec
302302
, Stack.Ghci.ScriptSpec
303+
, Stack.Ghci.PortableFakePaths
303304
, Stack.PackageDumpSpec
304305
, Stack.ArgsSpec
305306
, Stack.NixSpec

0 commit comments

Comments
 (0)