From 0a228dc902853a3a1b8bb0d7b0afa66f271700e0 Mon Sep 17 00:00:00 2001 From: amesgen Date: Sun, 2 Apr 2023 20:29:18 +0200 Subject: [PATCH 1/2] Only install handlers when `HAVE_SIGNAL_H` --- core/Test/Tasty/Runners/Utils.hs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/core/Test/Tasty/Runners/Utils.hs b/core/Test/Tasty/Runners/Utils.hs index fcea91f0..b188f12c 100644 --- a/core/Test/Tasty/Runners/Utils.hs +++ b/core/Test/Tasty/Runners/Utils.hs @@ -18,12 +18,16 @@ import GHC.Clock (getMonotonicTime) import Data.Time.Clock.POSIX (getPOSIXTime) #endif --- Install handlers only on UNIX #ifdef VERSION_unix +#include "HsUnixConfig.h" +#ifdef HAVE_SIGNAL_H #define INSTALL_HANDLERS 1 #else #define INSTALL_HANDLERS 0 #endif +#else +#define INSTALL_HANDLERS 0 +#endif #if INSTALL_HANDLERS import System.Posix.Signals @@ -69,8 +73,7 @@ forceElements = foldr seq () -- functions. You only need to call it explicitly if you call -- 'Test.Tasty.Runners.tryIngredients' yourself. -- --- This function does nothing on non-UNIX systems or when compiled with GHC --- older than 7.6. +-- This function does nothing when POSIX signals are not supported. -- -- @since 1.2.1 installSignalHandlers :: IO () From 72b9d41232d83c63ffb6cf4335a23bd3d5b5a6e8 Mon Sep 17 00:00:00 2001 From: amesgen Date: Mon, 3 Apr 2023 13:57:08 +0200 Subject: [PATCH 2/2] Add wasm32-wasi CI job --- .github/workflows/ci.yaml | 43 +++++++++++++++++++++++++++++++++++++ cabal.project | 9 ++++++++ core-tests/core-tests.cabal | 27 ++++++++++++----------- 3 files changed, 67 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index e83c41aa..7e1c6906 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -79,3 +79,46 @@ jobs: - name: Haddock if: matrix.ghc != '8.0' run: cabal haddock all + + build-wasi: + runs-on: ubuntu-latest + env: + GHC_WASM_META_REV: 5ad5e045f52609eab12c7e09ed9b110980807957 + FLAVOUR: '9.6' + steps: + - name: setup-ghc-wasm32-wasi + run: | + cd $(mktemp -d) + curl -L https://gitlab.haskell.org/ghc/ghc-wasm-meta/-/archive/$GHC_WASM_META_REV/ghc-wasm-meta-master.tar.gz | tar xz --strip-components=1 + ./setup.sh + ~/.ghc-wasm/add_to_github_path.sh + - uses: actions/checkout@v3 + + - uses: actions/cache@v3 + with: + path: | + ~/.ghc-wasm/.cabal/store + dist-newstyle + key: build-wasi-${{ runner.os }}-wasm-meta-${{ env.GHC_WASM_META_REV }}-flavour-${{ env.FLAVOUR }}-${{ github.sha }} + restore-keys: | + build-wasi-${{ runner.os }}-wasm-meta-${{ env.GHC_WASM_META_REV }}-flavour-${{ env.FLAVOUR }}- + + - name: Build + run: | + wasm32-wasi-cabal build all + + TEST_WRAPPERS=$(mktemp -d) + echo $TEST_WRAPPERS >> $GITHUB_PATH + wasm32-wasi-cabal install ./core-tests + for test in tasty-core-tests exit-status-test resource-release-test failing-pattern-test; do + echo '#!/usr/bin/env bash' > $TEST_WRAPPERS/$test + echo "wasmtime --mapdir /::/ --env PWD=\"\$PWD\" ~/.ghc-wasm/.cabal/bin/$test.wasm -- \"\$@\"" \ + >> $TEST_WRAPPERS/$test + chmod +x $TEST_WRAPPERS/$test + done + + - name: Test + run: | + (cd core-tests && tasty-core-tests) + core-tests/exit-status-tests.sh + core-tests/failing-pattern-test.sh diff --git a/cabal.project b/cabal.project index 0b9976bd..1cb717a9 100644 --- a/cabal.project +++ b/cabal.project @@ -5,3 +5,12 @@ packages: quickcheck smallcheck +if os(wasi) + -- https://github.com/haskellari/splitmix/pull/73 + source-repository-package + type: git + location: https://github.com/amesgen/splitmix + tag: 9c307e1bb4a84ef838b90e739990a616411e2d81 + package splitmix + tests: False + benchmarks: False diff --git a/core-tests/core-tests.cabal b/core-tests/core-tests.cabal index 1fa6dd73..8742a72e 100644 --- a/core-tests/core-tests.cabal +++ b/core-tests/core-tests.cabal @@ -1,6 +1,4 @@ --- Initial core-tests.cabal generated by cabal init. For further --- documentation, see http://haskell.org/cabal/users-guide/ - +cabal-version: 2.2 name: core-tests version: 0.1 synopsis: Tests for tasty @@ -13,37 +11,42 @@ maintainer: roma@ro-che.info category: Testing build-type: Simple -- extra-source-files: -cabal-version: >=1.10 + +common commons + default-language: Haskell2010 + if !os(wasi) + -- WASM backend does not yet support the threaded runtime + ghc-options: -threaded -with-rtsopts=-N executable tasty-core-tests + import: commons main-is: test.hs other-modules: Resources, Timeouts, Utils, AWK, Dependencies -- other-extensions: build-depends: base >= 4.9 && <= 5, tasty, tasty-hunit, tasty-golden, tasty-quickcheck, containers, stm, mtl, filepath, bytestring, optparse-applicative -- hs-source-dirs: - default-language: Haskell2010 default-extensions: CPP, NumDecimals - ghc-options: -Wall -fno-warn-type-defaults -threaded -fno-warn-name-shadowing -fno-warn-incomplete-uni-patterns + ghc-options: -Wall -fno-warn-type-defaults -fno-warn-name-shadowing -fno-warn-incomplete-uni-patterns executable exit-status-test + import: commons main-is: exit-status-test.hs build-depends: base <= 5, tasty, tasty-hunit, random, random-shuffle - default-language: Haskell2010 default-extensions: CPP - ghc-options: -Wall -fno-warn-type-defaults -threaded -with-rtsopts=-N + ghc-options: -Wall -fno-warn-type-defaults executable resource-release-test + import: commons main-is: resource-release-test.hs build-depends: base <= 5, tasty, tasty-hunit - default-language: Haskell2010 default-extensions: CPP - ghc-options: -Wall -fno-warn-type-defaults -threaded -with-rtsopts=-N + ghc-options: -Wall -fno-warn-type-defaults executable failing-pattern-test + import: commons main-is: failing-pattern-test.hs build-depends: base <= 5, tasty, tasty-hunit, random >= 1.2, mtl - default-language: Haskell2010 default-extensions: ScopedTypeVariables - ghc-options: -Wall -fno-warn-type-defaults -threaded -with-rtsopts=-N + ghc-options: -Wall -fno-warn-type-defaults