summaryrefslogtreecommitdiff
path: root/testsuite/tests/safeHaskell/safeLanguage
diff options
context:
space:
mode:
authorDavid Terei <davidterei@gmail.com>2011-11-08 20:28:12 -0800
committerDavid Terei <davidterei@gmail.com>2011-11-09 15:46:30 -0800
commit798f3ec2daeed52cb98725b02693953915905ae4 (patch)
tree8f2852fd3f0ae4e3dcd0f7e871bbd2b24b630d49 /testsuite/tests/safeHaskell/safeLanguage
parent3eaeb7afdc64acb0d920253291f3a14534a3b018 (diff)
downloadhaskell-798f3ec2daeed52cb98725b02693953915905ae4.tar.gz
Update Safe Haskell test to include recomp checks
Diffstat (limited to 'testsuite/tests/safeHaskell/safeLanguage')
-rw-r--r--testsuite/tests/safeHaskell/safeLanguage/Makefile79
-rw-r--r--testsuite/tests/safeHaskell/safeLanguage/SafeRecomp01.hs5
-rw-r--r--testsuite/tests/safeHaskell/safeLanguage/SafeRecomp01.stderr0
-rw-r--r--testsuite/tests/safeHaskell/safeLanguage/SafeRecomp01.stdout0
-rw-r--r--testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02.hs10
-rw-r--r--testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02.stderr0
-rw-r--r--testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02.stdout0
-rw-r--r--testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02_A.hs5
-rw-r--r--testsuite/tests/safeHaskell/safeLanguage/all.T6
9 files changed, 105 insertions, 0 deletions
diff --git a/testsuite/tests/safeHaskell/safeLanguage/Makefile b/testsuite/tests/safeHaskell/safeLanguage/Makefile
index 9101fbd40a..b4d92f21fa 100644
--- a/testsuite/tests/safeHaskell/safeLanguage/Makefile
+++ b/testsuite/tests/safeHaskell/safeLanguage/Makefile
@@ -1,3 +1,82 @@
TOP=../../..
include $(TOP)/mk/boilerplate.mk
include $(TOP)/mk/test.mk
+
+# Here we test that recompilation detection works correctly.
+# (e.g # if the safe haskell flags change, recompilation should take place)
+
+cleanSafeRecomp01:
+ rm -rf SafeRecomp01.o SafeRecomp01.hi
+
+# Just a single file
+safeRecomp01:
+ '$(MAKE)' cleanSafeRecomp01
+
+ '$(TEST_HC)' -c SafeRecomp01.hs
+ '$(TEST_HC)' --show-iface SafeRecomp01.hi | grep -E '^trusted:'
+
+ '$(TEST_HC)' -XSafe -c SafeRecomp01.hs
+ '$(TEST_HC)' --show-iface SafeRecomp01.hi | grep -E '^trusted:'
+
+ '$(TEST_HC)' -XTrustworthy -c SafeRecomp01.hs
+ '$(TEST_HC)' --show-iface SafeRecomp01.hi | grep -E '^trusted:'
+
+ '$(TEST_HC)' -XUnsafe -c SafeRecomp01.hs
+ '$(TEST_HC)' --show-iface SafeRecomp01.hi | grep -E '^trusted:'
+
+ '$(TEST_HC)' -XUnsafe -c SafeRecomp01.hs
+ '$(TEST_HC)' --show-iface SafeRecomp01.hi | grep -E '^trusted:'
+
+ # what should happen when no safe haskell flag specified?
+ # at moment we revert to 'no flags' so we recompile if previously
+ # flags were specified. An alternate design would be to assume the
+ # safe haskell flags from the old compile still apply but we
+ # go with the previous design as that's the least suprise to a user.
+ # See [SafeRecomp02] though.
+ '$(TEST_HC)' -c SafeRecomp01.hs
+ '$(TEST_HC)' --show-iface SafeRecomp01.hi | grep -E '^trusted:'
+
+cleanSafeRecomp02:
+ rm -rf SafeRecomp02 SafeRecomp02.o SafeRecomp02.hi SafeRecomp02_A.o SafeRecomp02_A.hi
+
+# mutli module program
+safeRecomp02:
+ '$(MAKE)' cleanSafeRecomp02
+
+ '$(TEST_HC)' -c SafeRecomp02_A.hs
+ '$(TEST_HC)' --make SafeRecomp02.hs
+ '$(TEST_HC)' --show-iface SafeRecomp02_A.hi | grep -E '^trusted:'
+ '$(TEST_HC)' --show-iface SafeRecomp02.hi | grep -E '^trusted:'
+
+ # Here we compile A with -XSafe but as we call --make with no flags,
+ # A is recompiled in 'no flag' mode. Seems a little wrong. Maybe
+ # we want that if a user is directly compiling a module we don't
+ # use any old safe haskell flags, but if we are deciding to recompile
+ # a module or not that was sucked up by --make, we consider no flags
+ # to be equivalent to old flags?
+ '$(TEST_HC)' -c -XSafe SafeRecomp02_A.hs
+ '$(TEST_HC)' --make SafeRecomp02.hs
+ '$(TEST_HC)' --show-iface SafeRecomp02_A.hi | grep -E '^trusted:'
+ '$(TEST_HC)' --show-iface SafeRecomp02.hi | grep -E '^trusted:'
+
+ # Assuming above design, we want A to be recompiled here I think as
+ # -XSafe was explicitly specified as part of --make.
+ '$(TEST_HC)' -c -XTrustworthy SafeRecomp02_A.hs
+ '$(TEST_HC)' --make -XSafe SafeRecomp02.hs
+ '$(TEST_HC)' --show-iface SafeRecomp02_A.hi | grep -E '^trusted:'
+ '$(TEST_HC)' --show-iface SafeRecomp02.hi | grep -E '^trusted:'
+
+ # Compiling manually so no recompilation checking
+ '$(TEST_HC)' -c -XTrustworthy SafeRecomp02_A.hs
+ '$(TEST_HC)' -c -XSafe SafeRecomp02.hs
+ '$(TEST_HC)' -o SafeRecomp02 SafeRecomp02.o SafeRecomp02_A.o
+ '$(TEST_HC)' --show-iface SafeRecomp02_A.hi | grep -E '^trusted:'
+ '$(TEST_HC)' --show-iface SafeRecomp02.hi | grep -E '^trusted:'
+
+ # manual compile followed by --make
+ '$(TEST_HC)' -c -XTrustworthy SafeRecomp02_A.hs
+ '$(TEST_HC)' -c -XSafe SafeRecomp02.hs
+ '$(TEST_HC)' --make -o SafeRecomp02 SafeRecomp02.o SafeRecomp02_A.o
+ '$(TEST_HC)' --show-iface SafeRecomp02_A.hi | grep -E '^trusted:'
+ '$(TEST_HC)' --show-iface SafeRecomp02.hi | grep -E '^trusted:'
+
diff --git a/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp01.hs b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp01.hs
new file mode 100644
index 0000000000..5dce14b6e6
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp01.hs
@@ -0,0 +1,5 @@
+module SafeRecomp01 where
+
+f :: Int
+f = 1
+
diff --git a/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp01.stderr b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp01.stderr
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp01.stderr
diff --git a/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp01.stdout b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp01.stdout
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp01.stdout
diff --git a/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02.hs b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02.hs
new file mode 100644
index 0000000000..e63fd2f606
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02.hs
@@ -0,0 +1,10 @@
+module Main where
+
+import SafeRecomp02_A
+
+f :: Int
+f = 1
+
+main :: IO ()
+main = putStrLn $ show $ f + g
+
diff --git a/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02.stderr b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02.stderr
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02.stderr
diff --git a/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02.stdout b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02.stdout
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02.stdout
diff --git a/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02_A.hs b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02_A.hs
new file mode 100644
index 0000000000..bb0f62a5cb
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02_A.hs
@@ -0,0 +1,5 @@
+module SafeRecomp02_A where
+
+g :: Int
+g = 1
+
diff --git a/testsuite/tests/safeHaskell/safeLanguage/all.T b/testsuite/tests/safeHaskell/safeLanguage/all.T
index 75ebad8e90..506b45d432 100644
--- a/testsuite/tests/safeHaskell/safeLanguage/all.T
+++ b/testsuite/tests/safeHaskell/safeLanguage/all.T
@@ -53,3 +53,9 @@ test('SafeLang15',
['SafeLang15', '-XSafe'])
test('SafeLang16', normal, compile, [''])
+# Test building a package, that trust values are set correctly
+# and can be changed correctly
+#test('SafeRecomp01',
+# clean_cmd('$MAKE -s --no-print-directory cleanSafeRecomp01'),
+# run_command, ['$MAKE -s --no-print-directory safeRecomp01'])
+