322 lines
7.4 KiB
Text
322 lines
7.4 KiB
Text
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",
|
|
],
|
|
)
|