Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions tests/integration/tests/6905-invalid-cycle/Main.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
-- | The test's project has project packages A, B, C and D.
--
-- In terms of main libraries, the dependencies are (->- is 'depends on'):
--
-- A ->- B and C ->- D, D ->- C (a cycle)
--
-- In terms of executables (a test suite):
--
-- B ->- A, B ->- C
--
-- As, overall, A ->- B and B ->- A, packages A and B cannot be built
-- 'all-in-one'. However, if the test suite of B is not being built, A and B can
-- be built.

-- The test suite of B cannot be built, because C ->- D and D ->- C.
--
-- See: https://github.com/commercialhaskell/stack/issues/6905

import Control.Monad ( unless )
import Data.List ( isInfixOf )
import StackTest

main :: IO ()
main = do
stack ["build", "myPackageA", "myPackageB"]
stackErrStderr ["test", "myPackageB"] (expectMessage dependencyCycleDetected)

dependencyCycleDetected :: String
dependencyCycleDetected =
"myPackageC dependency cycle detected: myPackageC, myPackageD, myPackageC"

expectMessage :: String -> String -> IO ()
expectMessage msg stderr =
unless (words msg `isInfixOf` words stderr)
(error $ "Expected a warning: \n" ++ show msg)
4 changes: 4 additions & 0 deletions tests/integration/tests/6905-invalid-cycle/files/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
myPackageA.cabal
myPackageB.cabal
myPackageC.cabal
myPackageD.cabal
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
spec-version: 0.36.0

name: myPackageA

dependencies:
- base

library:
source-dirs: src
dependencies:
- myPackageB
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module LibA
( funcB
) where

import LibB ( funcB )
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
spec-version: 0.36.0

name: myPackageB

dependencies:
- base

library:
source-dirs: src

tests:
test:
source-dirs: test
main: Main.hs
dependencies:
- myPackageA
- myPackageC
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module LibB
( funcB
) where

funcB :: IO ()
funcB = pure ()
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import LibA ( funcB )
import LibC ( funcC )

main :: IO ()
main = do
funcB
funcC
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
spec-version: 0.36.0

name: myPackageC

dependencies:
- base

library:
source-dirs: src
dependencies:
- myPackageD
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module LibC
( funcC
) where

import LibD ( funcD )

funcC :: IO ()
funcC = funcD
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
spec-version: 0.36.0

name: myPackageD

dependencies:
- base

library:
source-dirs: src
dependencies:
- myPackageC
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module LibD
( funcD
) where

import LibC ( funcC )

funcD :: IO ()
funcD = funcC
7 changes: 7 additions & 0 deletions tests/integration/tests/6905-invalid-cycle/files/stack.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
snapshot: ghc-9.10.3

packages:
- myPackageA
- myPackageB
- myPackageC
- myPackageD
Loading