Skip to content

Commit

Permalink
Merge pull request #9665 from cabalism/test/project-cyclical-import
Browse files Browse the repository at this point in the history
Add further tests of cyclical project imports
  • Loading branch information
mergify[bot] committed Jan 29, 2024
2 parents 1bab371 + 3f92ac6 commit e268c0a
Show file tree
Hide file tree
Showing 18 changed files with 117 additions and 11 deletions.

This file was deleted.

33 changes: 30 additions & 3 deletions cabal-testsuite/PackageTests/ConditionalAndImport/cabal.out
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,38 @@ Preprocessing executable 'some-exe' for some-exe-0.0.1.0...
Building executable 'some-exe' for some-exe-0.0.1.0...
Installing executable some-exe in <PATH>
Warning: The directory <ROOT>/cabal.dist/home/.cabal/store/ghc-<GHCVER>/incoming/new-<RAND><ROOT>/cabal.dist/home/.cabal/store/ghc-<GHCVER>/<PACKAGE>-<HASH>/bin is not in the system search path.
# checking cyclical loopback of a project importing itself
# cabal v2-build
Error: [Cabal-7090]
Error parsing project file <ROOT>/cabal-cyclical.project:3:
cyclical import of cabal-cyclical.project
Error parsing project file <ROOT>/cyclical-0-self.project:3:
cyclical import of cyclical-0-self.project
# checking cyclical with hops; out and back
# cabal v2-build
Error: [Cabal-7090]
Error parsing project file <ROOT>/cabal-bad-conditional.project:
Error parsing project file <ROOT>/cyclical-1-out-back.project:3:
cyclical import of cyclical-1-out-back.config
# checking cyclical with hops; out to a config that imports itself
# cabal v2-build
Error: [Cabal-7090]
Error parsing project file <ROOT>/cyclical-1-out-self.project:1:
cyclical import of cyclical-1-out-self.config
# checking cyclical with hops; out, out, twice back
# cabal v2-build
Error: [Cabal-7090]
Error parsing project file <ROOT>/cyclical-2-out-out-backback.project:3:
cyclical import of cyclical-2-out-out-backback-a.config
# checking cyclical with hops; out, out, once back
# cabal v2-build
Error: [Cabal-7090]
Error parsing project file <ROOT>/cyclical-2-out-out-back.project:1:
cyclical import of cyclical-2-out-out-back-a.config
# checking cyclical with hops; out, out to a config that imports itself
# cabal v2-build
Error: [Cabal-7090]
Error parsing project file <ROOT>/cyclical-2-out-out-self.project:1:
cyclical import of cyclical-2-out-out-self-b.config
# checking bad conditional
# cabal v2-build
Error: [Cabal-7090]
Error parsing project file <ROOT>/bad-conditional.project:
Cannot set compiler in a conditional clause of a cabal project file
66 changes: 61 additions & 5 deletions cabal-testsuite/PackageTests/ConditionalAndImport/cabal.test.hs
Original file line number Diff line number Diff line change
@@ -1,6 +1,62 @@
import Test.Cabal.Prelude
main = cabalTest $
withRepo "repo" $ do
cabal "v2-run" [ "some-exe" ]
fails $ cabal "v2-build" [ "--project-file=cabal-cyclical.project" ]
fails $ cabal "v2-build" [ "--project-file=cabal-bad-conditional.project" ]

main = cabalTest . withRepo "repo" . recordMode RecordMarked $ do
let log = recordHeader . pure

cabal "v2-run" [ "some-exe" ]

-- +-- cyclical-0-self.project (imports cyclical-0-self.project)
-- +-- cyclical-0-self.project (already processed)
-- +-- etc
log "checking cyclical loopback of a project importing itself"
cyclical0 <- fails $ cabal' "v2-build" [ "--project-file=cyclical-0-self.project" ]
assertOutputContains "cyclical import of cyclical-0-self.project" cyclical0

-- +-- cyclical-1-out-back.project
-- +-- cyclical-1-out-back.config (imports cyclical-1-out-back.project)
-- +-- cyclical-1-out-back.project (already processed)
-- +-- etc
log "checking cyclical with hops; out and back"
cyclical1a <- fails $ cabal' "v2-build" [ "--project-file=cyclical-1-out-back.project" ]
assertOutputContains "cyclical import of cyclical-1-out-back.config" cyclical1a

-- +-- cyclical-1-out-self.project
-- +-- cyclical-1-out-self.config (imports cyclical-1-out-self.config)
-- +-- cyclical-1-out-self.config (already processed)
-- +-- etc
log "checking cyclical with hops; out to a config that imports itself"
cyclical1b <- fails $ cabal' "v2-build" [ "--project-file=cyclical-1-out-self.project" ]
assertOutputContains "cyclical import of cyclical-1-out-self.config" cyclical1b

-- +-- cyclical-2-out-out-backback.project
-- +-- cyclical-2-out-out-backback-a.config
-- +-- cyclical-2-out-out-backback-b.config (imports cyclical-2-out-out-backback.project)
-- +-- cyclical-2-out-out-backback.project (already processed)
-- +-- etc
log "checking cyclical with hops; out, out, twice back"
cyclical2a <- fails $ cabal' "v2-build" [ "--project-file=cyclical-2-out-out-backback.project" ]
assertOutputContains "cyclical import of cyclical-2-out-out-backback-a.config" cyclical2a

-- +-- cyclical-2-out-out-back.project
-- +-- cyclical-2-out-out-back-a.config
-- +-- cyclical-2-out-out-back-b.config (imports cyclical-2-out-out-back-a.config)
-- +-- cyclical-2-out-out-back-a.config (already processed)
-- +-- etc
log "checking cyclical with hops; out, out, once back"
cyclical2b <- fails $ cabal' "v2-build" [ "--project-file=cyclical-2-out-out-back.project" ]
assertOutputContains "cyclical import of cyclical-2-out-out-back-a.config" cyclical2b

-- +-- cyclical-2-out-out-self.project
-- +-- cyclical-2-out-out-self-a.config
-- +-- cyclical-2-out-out-self-b.config (imports cyclical-2-out-out-self-b.config)
-- +-- cyclical-2-out-out-self-b.config (already processed)
-- +-- etc
log "checking cyclical with hops; out, out to a config that imports itself"
cyclical2c <- fails $ cabal' "v2-build" [ "--project-file=cyclical-2-out-out-self.project" ]
assertOutputContains "cyclical import of cyclical-2-out-out-self-b.config" cyclical2c

log "checking bad conditional"
badIf <- fails $ cabal' "v2-build" [ "--project-file=bad-conditional.project" ]
assertOutputContains "Cannot set compiler in a conditional clause of a cabal project file" badIf

return ()
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
packages: .

import: cyclical-0-self.project
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import: cyclical-1-out-back.project
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
packages: .

import: cyclical-1-out-back.config
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import: cyclical-1-out-self.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
packages: .

import: cyclical-1-out-self.config
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import: cyclical-2-out-out-back-b.config
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import: cyclical-2-out-out-back-a.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
packages: .

import: cyclical-2-out-out-back-a.config
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import: cyclical-2-out-out-backback-b.config
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import: cyclical-2-out-out-backback.project
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
packages: .

import: cyclical-2-out-out-backback-a.config
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import: cyclical-2-out-out-self-b.config
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import: cyclical-2-out-out-self-b.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
packages: .

import: cyclical-2-out-out-self-a.config

0 comments on commit e268c0a

Please sign in to comment.