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", ], )