diff options
Diffstat (limited to 'third_party/bazel/rules_haskell/tests/repl-flags')
3 files changed, 72 insertions, 0 deletions
diff --git a/third_party/bazel/rules_haskell/tests/repl-flags/BUILD.bazel b/third_party/bazel/rules_haskell/tests/repl-flags/BUILD.bazel new file mode 100644 index 000000000000..8fd099dc4d12 --- /dev/null +++ b/third_party/bazel/rules_haskell/tests/repl-flags/BUILD.bazel @@ -0,0 +1,45 @@ +load("@io_tweag_rules_haskell//haskell:haskell.bzl", "haskell_test") + +package(default_testonly = 1) + +# This test the `compiler` flags in many ways: +# - the test needs to be built with `-DTESTS_TOOLCHAIN_COMPILER_FLAGS`, provided by the toolchain attribute `compiler_flags` +# - the test needs `-XOverloadedStrings`, provided by this rule `compiler_flags` +# - toolchain and rule `compiler_flags` are additive, else one of the previous test will fail +# - the ordering is as such as rule flags are more important that toolchain flags + +# This rule must build correctly (using `bazel build`), but also as a repl (using `bazel run //tests/repl-flags:compiler_flags@repl`) +haskell_test( + name = "compiler_flags", + srcs = ["CompilerFlags.hs"], + + # This also ensure that local `compiler_flags` does not override the `global ones` + compiler_flags = ["-XOverloadedStrings"], + visibility = ["//visibility:public"], + deps = [ + "//tests/hackage:base", + "//tests/hackage:bytestring", + ], +) + +# This test the `repl_ghci_args` flags in a similar way +# - the test needs to be built with `-DTESTS_TOOLCHAIN_REPL_FLAGS`, provided by the toolchain attribute `compiler_flags` +# - the test needs `-XOverloadedStrings`, provided by toolchain `repl_ghci_args` +# - toolchain and rule `compiler_flags` are additive, else one of the previous test will fail +# - the ordering is as such as rule flags are more important that +# toolchain flags and that repl flags are more important that +# copmiler flags + +# This rule must build correctly (using `bazel build`), but also as a repl (using `bazel run //tests/repl-flags:compiler_flags@repl`). The final result between the repl and the binary must be different +haskell_test( + name = "repl_flags", + srcs = ["ReplFlags.hs"], + + # This also ensure that local `repl_flags` does not override the `global ones` + repl_ghci_args = ["-DTESTS_TOOLCHAIN_REPL_FLAGS"], + visibility = ["//visibility:public"], + deps = [ + "//tests/hackage:base", + "//tests/hackage:bytestring", + ], +) diff --git a/third_party/bazel/rules_haskell/tests/repl-flags/CompilerFlags.hs b/third_party/bazel/rules_haskell/tests/repl-flags/CompilerFlags.hs new file mode 100644 index 000000000000..5470fe11b57c --- /dev/null +++ b/third_party/bazel/rules_haskell/tests/repl-flags/CompilerFlags.hs @@ -0,0 +1,10 @@ +{-# LANGUAGE CPP #-} + +module Main where + +import Data.ByteString + +#ifdef TESTS_TOOLCHAIN_COMPILER_FLAGS +main = print ("hello" :: ByteString) +#endif + diff --git a/third_party/bazel/rules_haskell/tests/repl-flags/ReplFlags.hs b/third_party/bazel/rules_haskell/tests/repl-flags/ReplFlags.hs new file mode 100644 index 000000000000..137ec93a72f4 --- /dev/null +++ b/third_party/bazel/rules_haskell/tests/repl-flags/ReplFlags.hs @@ -0,0 +1,17 @@ +{-# LANGUAGE CPP #-} +module Main where + +import Data.ByteString + +-- Ensure that `compiler-flags` are correctly set +#ifdef TESTS_TOOLCHAIN_COMPILER_FLAGS +main = print "hello" +#endif + +-- Ensure that `repl_ghci_args` are correctly set +-- OverloadedString is passed by toolchain +-- The CPP constant is unset by toolchain and set by rule, so ordering must be ensured +#ifdef TESTS_TOOLCHAIN_REPL_FLAGS +foo = ("world" :: ByteString) +#endif + |