summaryrefslogtreecommitdiff
path: root/testsuite/tests
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests')
-rw-r--r--testsuite/tests/cabal/Makefile15
-rw-r--r--testsuite/tests/cabal/all.T6
-rw-r--r--testsuite/tests/cabal/cabal05/Makefile69
-rw-r--r--testsuite/tests/cabal/cabal05/Setup.hs2
-rw-r--r--testsuite/tests/cabal/cabal05/all.T9
-rw-r--r--testsuite/tests/cabal/cabal05/p/LICENSE0
-rw-r--r--testsuite/tests/cabal/cabal05/p/P.hs3
-rw-r--r--testsuite/tests/cabal/cabal05/p/P2.hs1
-rw-r--r--testsuite/tests/cabal/cabal05/p/Setup.hs2
-rw-r--r--testsuite/tests/cabal/cabal05/p/p.cabal11
-rw-r--r--testsuite/tests/cabal/cabal05/q/LICENSE0
-rw-r--r--testsuite/tests/cabal/cabal05/q/Q.hs4
-rw-r--r--testsuite/tests/cabal/cabal05/q/Setup.hs2
-rw-r--r--testsuite/tests/cabal/cabal05/q/q.cabal29
-rw-r--r--testsuite/tests/cabal/cabal05/r/LICENSE0
-rw-r--r--testsuite/tests/cabal/cabal05/r/R.hs11
-rw-r--r--testsuite/tests/cabal/cabal05/r/Setup.hs2
-rw-r--r--testsuite/tests/cabal/cabal05/r/r.cabal32
-rw-r--r--testsuite/tests/cabal/cabal05/s/LICENSE0
-rw-r--r--testsuite/tests/cabal/cabal05/s/S.hs18
-rw-r--r--testsuite/tests/cabal/cabal05/s/Setup.hs2
-rw-r--r--testsuite/tests/cabal/cabal05/s/s.cabal11
-rw-r--r--testsuite/tests/cabal/ghcpkg07.stdout11
-rw-r--r--testsuite/tests/cabal/recache_reexport_db/a.conf17
-rw-r--r--testsuite/tests/cabal/test7a.pkg17
-rw-r--r--testsuite/tests/cabal/test7b.pkg17
26 files changed, 291 insertions, 0 deletions
diff --git a/testsuite/tests/cabal/Makefile b/testsuite/tests/cabal/Makefile
index e8ed2bd817..062850f76f 100644
--- a/testsuite/tests/cabal/Makefile
+++ b/testsuite/tests/cabal/Makefile
@@ -236,3 +236,18 @@ ghcpkg02:
echo Updating $$i; \
$(GHC_PKG) describe --global $$i | $(GHC_PKG_ghcpkg02) update --global --force -; \
done
+
+PKGCONF07=local07.package.conf
+LOCAL_GHC_PKG07 = '$(GHC_PKG)' --no-user-package-db -f $(PKGCONF07)
+ghcpkg07:
+ @rm -rf $(PKGCONF07)
+ $(LOCAL_GHC_PKG07) init $(PKGCONF07)
+ $(LOCAL_GHC_PKG07) register --force test.pkg 2>/dev/null
+ $(LOCAL_GHC_PKG07) register --force test7a.pkg 2>/dev/null
+ $(LOCAL_GHC_PKG07) field testpkg7a reexported-modules
+ $(LOCAL_GHC_PKG07) register --force test7b.pkg 2>/dev/null
+ $(LOCAL_GHC_PKG07) field testpkg7b reexported-modules
+
+recache_reexport:
+ @rm -rf recache_reexport_db/package.cache
+ '$(GHC_PKG)' --no-user-package-db --global-package-db=recache_reexport_db recache
diff --git a/testsuite/tests/cabal/all.T b/testsuite/tests/cabal/all.T
index aa97f48209..60f8d6df9b 100644
--- a/testsuite/tests/cabal/all.T
+++ b/testsuite/tests/cabal/all.T
@@ -47,6 +47,12 @@ test('ghcpkg06',
run_command,
['$MAKE -s --no-print-directory ghcpkg06'])
+test('ghcpkg07',
+ extra_clean(['local07.package.conf',
+ 'local07.package.conf.old']),
+ run_command,
+ ['$MAKE -s --no-print-directory ghcpkg07'])
+
# Test that we *can* compile a module that also belongs to a package
# (this was disallowed in GHC 6.4 and earlier)
test('pkg01', normal, compile, [''])
diff --git a/testsuite/tests/cabal/cabal05/Makefile b/testsuite/tests/cabal/cabal05/Makefile
new file mode 100644
index 0000000000..d4bc1c733a
--- /dev/null
+++ b/testsuite/tests/cabal/cabal05/Makefile
@@ -0,0 +1,69 @@
+TOP=../../..
+include $(TOP)/mk/boilerplate.mk
+include $(TOP)/mk/test.mk
+
+SETUP = ../Setup -v0
+
+# This test is for package reexports
+# 1. install p
+# 2. install q (reexporting p modules)
+# 3. install r (reexporting p and q modules)
+# 4. configure and build s, using modules from q and r
+#
+# Here are the permutations we test for:
+# - Package qualifier? (YES/NO)
+# - Where is module? (defined in SELF /
+# (ORIGinally defined/REEXported) in DEPendency)
+# For deps, could be BOTH, if there is NO package qualifier
+# - Renamed? (YES/NO)
+# - Multiple modules with same name? (YES/NO)
+#
+# It's illegal for the module to be defined in SELF without renaming, or
+# for a package to cause a conflict with itself. A reexport which does
+# not rename definitionally "conflicts" with the original package's definition.
+#
+# Probably the trickiest bits are when we automatically pick out which package
+# when the package qualifier is missing, and handling whether or not modules
+# should be exposed or hidden.
+
+cabal05: clean
+ $(MAKE) clean
+ '$(GHC_PKG)' init tmp.d
+ '$(TEST_HC)' -v0 --make Setup
+ # build p
+ cd p && $(SETUP) clean
+ cd p && $(SETUP) configure $(CABAL_MINIMAL_BUILD) --with-ghc='$(TEST_HC)' --ghc-options='$(TEST_HC_OPTS)' --package-db=../tmp.d --prefix='$(PWD)/$$pkgid'
+ cd p && $(SETUP) build
+ cd p && $(SETUP) copy
+ cd p && $(SETUP) register
+ # build q
+ cd q && $(SETUP) clean
+ cd q && $(SETUP) configure $(CABAL_MINIMAL_BUILD) --with-ghc='$(TEST_HC)' --ghc-options='$(TEST_HC_OPTS)' --package-db=../tmp.d --prefix='$(PWD)/$$pkgid'
+ cd q && $(SETUP) build
+ cd q && $(SETUP) copy
+ cd q && $(SETUP) register
+ # build r
+ cd r && $(SETUP) clean
+ cd r && $(SETUP) configure $(CABAL_MINIMAL_BUILD) --with-ghc='$(TEST_HC)' --ghc-options='$(TEST_HC_OPTS)' --package-db=../tmp.d --prefix='$(PWD)/$$pkgid'
+ cd r && $(SETUP) build
+ cd r && $(SETUP) copy
+ cd r && $(SETUP) register
+ # build s
+ cd s && $(SETUP) clean
+ cd s && $(SETUP) configure $(CABAL_MINIMAL_BUILD) --with-ghc='$(TEST_HC)' --ghc-options='$(TEST_HC_OPTS)' --package-db=../tmp.d
+ cd s && $(SETUP) build
+ # now test that package recaching works
+ rm tmp.d/package.cache
+ '$(GHC_PKG)' --no-user-package-db --global-package-db=tmp.d recache
+ cd s && $(SETUP) clean
+ cd s && $(SETUP) configure $(CABAL_MINIMAL_BUILD) --with-ghc='$(TEST_HC)' --ghc-options='$(TEST_HC_OPTS)' --package-db=../tmp.d
+ cd s && $(SETUP) build
+ifneq "$(CLEANUP)" ""
+ $(MAKE) clean
+endif
+
+clean :
+ '$(GHC_PKG)' unregister --force p >/dev/null 2>&1 || true
+ '$(GHC_PKG)' unregister --force q >/dev/null 2>&1 || true
+ '$(GHC_PKG)' unregister --force r >/dev/null 2>&1 || true
+ $(RM) -r p-* q-* r-* tmp.d *.o *.hi */*.o */*.hi */Setup$(exeext) */dist Setup$(exeext)
diff --git a/testsuite/tests/cabal/cabal05/Setup.hs b/testsuite/tests/cabal/cabal05/Setup.hs
new file mode 100644
index 0000000000..9a994af677
--- /dev/null
+++ b/testsuite/tests/cabal/cabal05/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/testsuite/tests/cabal/cabal05/all.T b/testsuite/tests/cabal/cabal05/all.T
new file mode 100644
index 0000000000..36dcbdf9de
--- /dev/null
+++ b/testsuite/tests/cabal/cabal05/all.T
@@ -0,0 +1,9 @@
+if default_testopts.cleanup != '':
+ cleanup = 'CLEANUP=1'
+else:
+ cleanup = ''
+
+test('cabal05',
+ ignore_output,
+ run_command,
+ ['$MAKE -s --no-print-directory cabal05 ' + cleanup])
diff --git a/testsuite/tests/cabal/cabal05/p/LICENSE b/testsuite/tests/cabal/cabal05/p/LICENSE
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testsuite/tests/cabal/cabal05/p/LICENSE
diff --git a/testsuite/tests/cabal/cabal05/p/P.hs b/testsuite/tests/cabal/cabal05/p/P.hs
new file mode 100644
index 0000000000..f8b82de2ca
--- /dev/null
+++ b/testsuite/tests/cabal/cabal05/p/P.hs
@@ -0,0 +1,3 @@
+module P where
+data P = P
+p = True
diff --git a/testsuite/tests/cabal/cabal05/p/P2.hs b/testsuite/tests/cabal/cabal05/p/P2.hs
new file mode 100644
index 0000000000..769760dff8
--- /dev/null
+++ b/testsuite/tests/cabal/cabal05/p/P2.hs
@@ -0,0 +1 @@
+module P2 where
diff --git a/testsuite/tests/cabal/cabal05/p/Setup.hs b/testsuite/tests/cabal/cabal05/p/Setup.hs
new file mode 100644
index 0000000000..9a994af677
--- /dev/null
+++ b/testsuite/tests/cabal/cabal05/p/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/testsuite/tests/cabal/cabal05/p/p.cabal b/testsuite/tests/cabal/cabal05/p/p.cabal
new file mode 100644
index 0000000000..989156c5be
--- /dev/null
+++ b/testsuite/tests/cabal/cabal05/p/p.cabal
@@ -0,0 +1,11 @@
+name: p
+version: 0.1.0.0
+license-file: LICENSE
+author: Edward Z. Yang
+maintainer: ezyang@cs.stanford.edu
+build-type: Simple
+cabal-version: >=1.21
+
+library
+ exposed-modules: P, P2
+ build-depends: base
diff --git a/testsuite/tests/cabal/cabal05/q/LICENSE b/testsuite/tests/cabal/cabal05/q/LICENSE
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testsuite/tests/cabal/cabal05/q/LICENSE
diff --git a/testsuite/tests/cabal/cabal05/q/Q.hs b/testsuite/tests/cabal/cabal05/q/Q.hs
new file mode 100644
index 0000000000..721b231aa1
--- /dev/null
+++ b/testsuite/tests/cabal/cabal05/q/Q.hs
@@ -0,0 +1,4 @@
+module Q where
+import P
+data Q = Q
+q = not p
diff --git a/testsuite/tests/cabal/cabal05/q/Setup.hs b/testsuite/tests/cabal/cabal05/q/Setup.hs
new file mode 100644
index 0000000000..9a994af677
--- /dev/null
+++ b/testsuite/tests/cabal/cabal05/q/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/testsuite/tests/cabal/cabal05/q/q.cabal b/testsuite/tests/cabal/cabal05/q/q.cabal
new file mode 100644
index 0000000000..2ea54f2e8d
--- /dev/null
+++ b/testsuite/tests/cabal/cabal05/q/q.cabal
@@ -0,0 +1,29 @@
+name: q
+version: 0.1.0.0
+license-file: LICENSE
+author: Edward Z. Yang
+maintainer: ezyang@cs.stanford.edu
+build-type: Simple
+cabal-version: >=1.21
+
+library
+ exposed-modules: Q
+ reexported-modules:
+ -- qualified=NO, where=DEP(ORIG), renaming=NO, conflict=NO
+ -- impossible
+ -- qualified=NO, where=DEP(ORIG), renaming=NO, conflict=YES (p,s)
+ P,
+ -- qualified=NO, where=DEP(ORIG), renaming=YES, conflict=NO
+ P as QP,
+ -- qualified=NO, where=DEP(ORIG), renaming=YES, conflict=YES (r)
+ P as PMerge,
+ P2 as PMerge2,
+ -- qualified=NO, where=SELF, renaming=NO, conflict=NO
+ -- impossible
+ -- qualified=NO, where=SELF, renaming=NO, conflict=YES
+ -- should error
+ -- qualified=NO, where=SELF, renaming=YES, conflict=NO
+ Q as QQ,
+ -- qualified=NO, where=SELF, renaming=YES, conflict=YES (r)
+ Q as QMerge
+ build-depends: base, p
diff --git a/testsuite/tests/cabal/cabal05/r/LICENSE b/testsuite/tests/cabal/cabal05/r/LICENSE
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testsuite/tests/cabal/cabal05/r/LICENSE
diff --git a/testsuite/tests/cabal/cabal05/r/R.hs b/testsuite/tests/cabal/cabal05/r/R.hs
new file mode 100644
index 0000000000..6f086340cf
--- /dev/null
+++ b/testsuite/tests/cabal/cabal05/r/R.hs
@@ -0,0 +1,11 @@
+module R where
+import P -- p (exposed), q (reexport p:P)
+import P2 -- q (reexport p:P)
+import Q -- q (exposed)
+import qualified QP -- q (reexport p:P)
+import qualified QQ -- q (reexport q:Q)
+import qualified PMerge -- q (reexport p:P)
+import qualified PMerge2 -- q (reexport p:P2)
+import qualified QMerge -- q (reexport q:Q)
+data R = R
+r = p && q
diff --git a/testsuite/tests/cabal/cabal05/r/Setup.hs b/testsuite/tests/cabal/cabal05/r/Setup.hs
new file mode 100644
index 0000000000..9a994af677
--- /dev/null
+++ b/testsuite/tests/cabal/cabal05/r/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/testsuite/tests/cabal/cabal05/r/r.cabal b/testsuite/tests/cabal/cabal05/r/r.cabal
new file mode 100644
index 0000000000..d550340c0e
--- /dev/null
+++ b/testsuite/tests/cabal/cabal05/r/r.cabal
@@ -0,0 +1,32 @@
+name: r
+version: 0.1.0.0
+license-file: LICENSE
+author: Edward Z. Yang
+maintainer: ezyang@cs.stanford.edu
+build-type: Simple
+cabal-version: >=1.21
+
+library
+ exposed-modules: R
+ reexported-modules:
+ -- qualified=NO, where=DEP(BOTH), renaming=NO, conflict=YES (p,q)
+ P,
+ -- qualified=NO, where=DEP(BOTH), renaming=YES, conflict=NO
+ P as RP2,
+ -- qualified=NO, where=DEP(BOTH), renaming=YES, conflict=YES
+ P2 as PMerge,
+ -- qualified=YES, where=DEP(ORIG), renaming=YES, conflict=NO
+ p:P as RP,
+ -- qualified=YES, where=DEP(REEX), renaming=YES, conflict=NO
+ q:QP as RQP,
+ -- qualified=YES, where=DEP(REEX), renaming=YES, conflict=NO
+ q:P as RQP2,
+ -- qualified=YES, where=DEP(REEX), renaming=YES, conflict=YES
+ q:QQ as QMerge,
+ -- qualified=YES, where=SELF, renaming=YES, conflict=NO
+ r:R as RR,
+ -- qualified=YES, where=DEP, renaming=NO, conflict=YES (q)
+ q:Q,
+ -- qualified=YES, where=DEP(ORIG), renaming=YES, conflict=YES (q)
+ p:P2 as PMerge2
+ build-depends: base, p, q
diff --git a/testsuite/tests/cabal/cabal05/s/LICENSE b/testsuite/tests/cabal/cabal05/s/LICENSE
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testsuite/tests/cabal/cabal05/s/LICENSE
diff --git a/testsuite/tests/cabal/cabal05/s/S.hs b/testsuite/tests/cabal/cabal05/s/S.hs
new file mode 100644
index 0000000000..ed3c378072
--- /dev/null
+++ b/testsuite/tests/cabal/cabal05/s/S.hs
@@ -0,0 +1,18 @@
+module S where
+-- NB: package p is hidden!
+import qualified QP -- q (reexport p:P)
+import qualified RP -- r (reexport p:P)
+import qualified Q -- q (exposed), r (reexport q:Q)
+import qualified R -- r (exposed)
+import qualified RR -- r (reexport r:R)
+import qualified RP -- r (reexport p:P)
+import qualified RQP -- r (reexport p:P)
+import qualified RQP2 -- r (reexport p:P)
+import qualified PMerge -- q (reexport p:P), r (reexport p:P)
+import qualified PMerge2 -- q (reexport p:P2), r (reexport p:P2)
+import qualified QMerge -- q (reexport q:Q), r (reexport q:Q)
+
+x :: QP.P
+x = RP.P
+
+s = QP.p || Q.q || R.r
diff --git a/testsuite/tests/cabal/cabal05/s/Setup.hs b/testsuite/tests/cabal/cabal05/s/Setup.hs
new file mode 100644
index 0000000000..9a994af677
--- /dev/null
+++ b/testsuite/tests/cabal/cabal05/s/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/testsuite/tests/cabal/cabal05/s/s.cabal b/testsuite/tests/cabal/cabal05/s/s.cabal
new file mode 100644
index 0000000000..a0b09939a1
--- /dev/null
+++ b/testsuite/tests/cabal/cabal05/s/s.cabal
@@ -0,0 +1,11 @@
+name: s
+version: 0.1.0.0
+license-file: LICENSE
+author: Edward Z. Yang
+maintainer: ezyang@cs.stanford.edu
+build-type: Simple
+cabal-version: >=1.21
+
+library
+ exposed-modules: S
+ build-depends: base, q, r
diff --git a/testsuite/tests/cabal/ghcpkg07.stdout b/testsuite/tests/cabal/ghcpkg07.stdout
new file mode 100644
index 0000000000..f890b5bfe1
--- /dev/null
+++ b/testsuite/tests/cabal/ghcpkg07.stdout
@@ -0,0 +1,11 @@
+Reading package info from "test.pkg" ... done.
+Reading package info from "test7a.pkg" ... done.
+reexported-modules: testpkg:A (A@testpkg-1.2.3.4-XXX)
+ testpkg:A as A1 (A@testpkg-1.2.3.4-XXX)
+ E as E2 (E@testpkg7a-1.0-XXX)
+Reading package info from "test7b.pkg" ... done.
+reexported-modules: testpkg:A as F1 (A@testpkg-1.2.3.4-XXX)
+ testpkg7a:A as F2 (A@testpkg-1.2.3.4-XXX)
+ testpkg7a:A1 as F3 (A@testpkg-1.2.3.4-XXX)
+ testpkg7a:E as F4 (E@testpkg7a-1.0-XXX) E (E@testpkg7a-1.0-XXX)
+ E2 as E3 (E@testpkg7a-1.0-XXX)
diff --git a/testsuite/tests/cabal/recache_reexport_db/a.conf b/testsuite/tests/cabal/recache_reexport_db/a.conf
new file mode 100644
index 0000000000..c0698d70b9
--- /dev/null
+++ b/testsuite/tests/cabal/recache_reexport_db/a.conf
@@ -0,0 +1,17 @@
+name: testpkg7a
+version: 1.0
+id: testpkg7a-1.0-XXX
+license: BSD3
+copyright: (c) The Univsersity of Glasgow 2004
+maintainer: glasgow-haskell-users@haskell.org
+stability: stable
+homepage: http://www.haskell.org/ghc
+package-url: http://www.haskell.org/ghc
+description: A Test Package
+category: none
+author: simonmar@microsoft.com
+exposed: True
+exposed-modules: E
+reexported-modules: testpkg:A, testpkg:A as A1, E as E2
+hs-libraries: testpkg7a-1.0
+depends: testpkg-1.2.3.4-XXX
diff --git a/testsuite/tests/cabal/test7a.pkg b/testsuite/tests/cabal/test7a.pkg
new file mode 100644
index 0000000000..c0698d70b9
--- /dev/null
+++ b/testsuite/tests/cabal/test7a.pkg
@@ -0,0 +1,17 @@
+name: testpkg7a
+version: 1.0
+id: testpkg7a-1.0-XXX
+license: BSD3
+copyright: (c) The Univsersity of Glasgow 2004
+maintainer: glasgow-haskell-users@haskell.org
+stability: stable
+homepage: http://www.haskell.org/ghc
+package-url: http://www.haskell.org/ghc
+description: A Test Package
+category: none
+author: simonmar@microsoft.com
+exposed: True
+exposed-modules: E
+reexported-modules: testpkg:A, testpkg:A as A1, E as E2
+hs-libraries: testpkg7a-1.0
+depends: testpkg-1.2.3.4-XXX
diff --git a/testsuite/tests/cabal/test7b.pkg b/testsuite/tests/cabal/test7b.pkg
new file mode 100644
index 0000000000..d8bf47ec36
--- /dev/null
+++ b/testsuite/tests/cabal/test7b.pkg
@@ -0,0 +1,17 @@
+name: testpkg7b
+version: 1.0
+id: testpkg7b-1.0-XXX
+license: BSD3
+copyright: (c) The Univsersity of Glasgow 2004
+maintainer: glasgow-haskell-users@haskell.org
+stability: stable
+homepage: http://www.haskell.org/ghc
+package-url: http://www.haskell.org/ghc
+description: A Test Package
+category: none
+author: simonmar@microsoft.com
+exposed: True
+reexported-modules: testpkg:A as F1, testpkg7a:A as F2,
+ testpkg7a:A1 as F3, testpkg7a:E as F4, E, E2 as E3
+hs-libraries: testpkg7b-1.0
+depends: testpkg-1.2.3.4-XXX, testpkg7a-1.0-XXX