load(":inline_tests.bzl", "sh_inline_test")
load("@bazel_tools//tools/build_rules:test_rules.bzl", "rule_test")
load("//tests:rule_test_exe.bzl", "rule_test_exe")
load(
"@io_tweag_rules_haskell//haskell:c2hs.bzl",
"c2hs_toolchain",
)
load(
"@io_tweag_rules_haskell//haskell:haskell.bzl",
"haskell_binary",
"haskell_doctest_toolchain",
"haskell_proto_toolchain",
"haskell_test",
"haskell_toolchain",
)
load(
"//:constants.bzl",
"test_ghc_version",
)
package(default_testonly = 1)
haskell_doctest_toolchain(
name = "doctest-toolchain",
doctest = "@hackage-doctest//:bin",
tags = ["requires_doctest"],
)
# This toolchain is morally testonly. However, that would break our
# tests of haskell_library_rules: aspects of non-testonly
# proto_library rules (from com_google_protobuf) can't themselves be
# testonly.
haskell_proto_toolchain(
name = "protobuf-toolchain",
testonly = 0,
plugin = "@hackage-proto-lens-protoc//:bin/proto-lens-protoc",
protoc = "@com_google_protobuf//:protoc",
tags = ["requires_hackage"],
deps = [
"//tests/hackage:base",
"//tests/hackage:bytestring",
"//tests/hackage:containers",
"//tests/hackage:deepseq",
"//tests/hackage:mtl",
"//tests/hackage:text",
"@hackage//:data-default-class",
"@hackage//:lens-family",
"@hackage//:lens-family-core",
"@hackage//:lens-labels",
"@hackage//:proto-lens",
],
)
c2hs_toolchain(
name = "c2hs-toolchain",
c2hs = "@hackage-c2hs//:bin",
tags = ["requires_c2hs"],
)
rule_test_exe(
name = "test-binary-simple",
size = "small",
generates = ["binary-simple"],
rule = "//tests/binary-simple",
)
rule_test_exe(
name = "test-binary-custom-main",
size = "small",
generates = ["binary-custom-main"],
rule = "//tests/binary-custom-main",
)
rule_test(
name = "test-binary-with-lib",
size = "small",
generates = ["binary-with-lib"],
rule = "//tests/binary-with-lib",
)
rule_test(
name = "test-binary-with-prebuilt",
size = "small",
generates = ["binary-with-prebuilt"],
rule = "//tests/binary-with-prebuilt",
tags = ["requires_hackage"],
)
rule_test(
name = "test-binary-with-main",
size = "small",
generates = ["binary-with-main"],
rule = "//tests/binary-with-main",
)
rule_test(
name = "test-binary-with-sysdeps",
size = "small",
generates = ["binary-with-sysdeps"],
rule = "//tests/binary-with-sysdeps",
tags = ["requires_zlib"],
)
sh_test(
name = "test-binary-with-data",
size = "small",
srcs = ["//tests/binary-with-data"],
args = ["$(location //tests/binary-with-data:bin1)"],
data = ["//tests/binary-with-data:bin1"],
tags = ["requires_hackage"],
)
rule_test(
name = "test-library-deps",
size = "small",
generates = select({
"@bazel_tools//src/conditions:darwin": [
"libHStestsZSlibrary-depsZSlibrary-deps-ghc{}.dylib".format(test_ghc_version),
"libHStestsZSlibrary-depsZSlibrary-deps.a",
],
"@bazel_tools//src/conditions:windows": [
"libHStestsZSlibrary-depsZSlibrary-deps-ghc{}.dll".format(test_ghc_version),
"libHStestsZSlibrary-depsZSlibrary-deps.a",
],
"//conditions:default": [
"libHStestsZSlibrary-depsZSlibrary-deps-ghc{}.so".format(test_ghc_version),
"libHStestsZSlibrary-depsZSlibrary-deps.a",
],
}),
rule = "//tests/library-deps",
)
rule_test(
name = "test-hsc",
size = "small",
generates = ["hsc"],
rule = "//tests/hsc",
)
rule_test(
name = "test-haddock",
size = "small",
generates = [
"haddock/index",
"haddock/testsZShaddockZShaddock-lib-a",
"haddock/testsZShaddockZShaddock-lib-b",
"haddock/testsZShaddockZShaddock-lib-deep",
],
rule = "//tests/haddock",
tags = ["requires_hackage"],
)
rule_test(
name = "test-haskell_lint-library",
size = "small",
generates = [
"lint-log-lib-b",
],
rule = "//tests/haskell_lint:lint-lib-b",
)
rule_test(
name = "test-haskell_lint-binary",
size = "small",
generates = [
"lint-log-bin",
],
rule = "//tests/haskell_lint:lint-bin",
)
rule_test(
name = "test-haskell_doctest",
size = "small",
generates = [
"doctest-log-doctest-lib-lib-b",
],
rule = "//tests/haskell_doctest:doctest-lib",
tags = ["requires_doctest"],
)
rule_test(
name = "test-haskell_test",
size = "small",
generates = ["haskell_test"],
rule = "//tests/haskell_test:haskell_test",
)
rule_test(
name = "test-java_classpath",
size = "small",
generates = ["java_classpath"],
rule = "//tests/java_classpath",
)
rule_test(
name = "test-cc_haskell_import-cc-link",
size = "small",
generates = ["cc-bin"],
rule = "//tests/cc_haskell_import:cc-bin",
tags = ["requires_threaded_rts"],
)
sh_test(
name = "test-cc_haskell_import_python",
size = "small",
srcs = ["scripts/exec.sh"],
args = ["tests/cc_haskell_import/python_add_one"],
data = [
"//tests/cc_haskell_import:python_add_one",
"@bazel_tools//tools/bash/runfiles",
],
tags = ["requires_threaded_rts"],
)
sh_inline_test(
name = "test-haskell_binary-with-link-flags",
size = "small",
args = ["$(location //tests/binary-with-link-flags:binary-with-link-flags)"],
data = ["//tests/binary-with-link-flags"],
script = """\
set -e
# Fails if executable was linked without -threaded flag.
$1 +RTS -N
""",
)
rule_test(
name = "test-lhs",
size = "small",
generates = ["lhs-bin"],
rule = "//tests/lhs:lhs-bin",
)
rule_test(
name = "test-hs-boot",
size = "small",
generates = ["hs-boot"],
rule = "//tests/hs-boot:hs-boot",
)
rule_test(
name = "test-textual-hdrs",
size = "small",
generates = ["textual-hdrs"],
rule = "//tests/textual-hdrs:textual-hdrs",
)
rule_test(
name = "test-two-libs",
size = "small",
generates = ["two-libs"],
rule = "//tests/two-libs:two-libs",
)
genrule(
name = "run-bin-with-lib",
outs = ["dummy"],
cmd = """sh -c '
set -e
$(location //tests/binary-with-lib:binary-with-lib)
touch $(location dummy)
'""",
tools = ["//tests/binary-with-lib"],
)
rule_test(
name = "test-run-bin-with-lib",
size = "small",
generates = ["dummy"],
rule = "//tests:run-bin-with-lib",
)
genrule(
name = "run-bin-with-lib-dynamic",
outs = ["dyn-dummy"],
cmd = """sh -c '
set -e
$(location //tests/binary-with-lib-dynamic:binary-with-lib-dynamic)
touch $(location dyn-dummy)
'""",
tools = ["//tests/binary-with-lib-dynamic"],
)
rule_test(
name = "test-run-bin-with-lib-dynamic",
size = "small",
generates = ["dyn-dummy"],
rule = "//tests:run-bin-with-lib-dynamic",
)
genrule(
name = "run-bin-with-c-lib",
outs = ["c-dummy"],
cmd = """sh -c '
set -e
$(location //tests/c-compiles)
touch $(location c-dummy)
'""",
tools = ["//tests/c-compiles"],
)
rule_test(
name = "test-run-bin-with-c-lib",
size = "small",
generates = ["c-dummy"],
rule = "//tests:run-bin-with-c-lib",
)
# This is the test runner
haskell_binary(
name = "run-tests",
srcs = ["RunTests.hs"],
tags = ["requires_hackage"],
deps = [
"//tests/hackage:base",
"//tests/hackage:process",
"@hackage//:hspec",
"@hackage//:hspec-core",
],
)