From a51b46219672ab77cc8b531f50172989108786ef Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 9 May 2024 12:57:52 +1200 Subject: [PATCH 1/4] Add test for embedFile from the file-embed package --- test/default.nix | 1 + test/embed-file/CHANGELOG.md | 5 +++++ test/embed-file/LICENSE | 20 ++++++++++++++++++++ test/embed-file/app/Main.hs | 12 ++++++++++++ test/embed-file/app/test.txt | 1 + test/embed-file/default.nix | 26 ++++++++++++++++++++++++++ test/embed-file/embed-file.cabal | 26 ++++++++++++++++++++++++++ 7 files changed, 91 insertions(+) create mode 100644 test/embed-file/CHANGELOG.md create mode 100644 test/embed-file/LICENSE create mode 100644 test/embed-file/app/Main.hs create mode 100644 test/embed-file/app/test.txt create mode 100644 test/embed-file/default.nix create mode 100644 test/embed-file/embed-file.cabal diff --git a/test/default.nix b/test/default.nix index abccf8f7b3..6e25e911c4 100644 --- a/test/default.nix +++ b/test/default.nix @@ -221,6 +221,7 @@ let cabal-project-nix-path = callTest ./cabal-project-nix-path {}; plugin = callTest ./plugin {}; supported-languages = callTest ./supported-langauges {}; + embed-file = callTest ./embed-file {}; unit = unitTests; }; diff --git a/test/embed-file/CHANGELOG.md b/test/embed-file/CHANGELOG.md new file mode 100644 index 0000000000..c35d9764dc --- /dev/null +++ b/test/embed-file/CHANGELOG.md @@ -0,0 +1,5 @@ +# Revision history for embed-file + +## 0.1.0.0 -- YYYY-mm-dd + +* First version. Released on an unsuspecting world. diff --git a/test/embed-file/LICENSE b/test/embed-file/LICENSE new file mode 100644 index 0000000000..c0baef6039 --- /dev/null +++ b/test/embed-file/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2024 Hamish Mackenzie + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/test/embed-file/app/Main.hs b/test/embed-file/app/Main.hs new file mode 100644 index 0000000000..fc7d65861f --- /dev/null +++ b/test/embed-file/app/Main.hs @@ -0,0 +1,12 @@ +{-# LANGUAGE TemplateHaskell #-} +module Main where + +import Control.Monad (unless) +import qualified Data.Text as T (pack) +import Data.Text.Encoding (encodeUtf8) +import System.Exit (exitFailure) +import Data.FileEmbed (embedFile, makeRelativeToProject) + +main :: IO () +main = + unless ($(makeRelativeToProject "app/test.txt" >>= embedFile) == encodeUtf8 (T.pack "Hello World")) exitFailure diff --git a/test/embed-file/app/test.txt b/test/embed-file/app/test.txt new file mode 100644 index 0000000000..557db03de9 --- /dev/null +++ b/test/embed-file/app/test.txt @@ -0,0 +1 @@ +Hello World diff --git a/test/embed-file/default.nix b/test/embed-file/default.nix new file mode 100644 index 0000000000..ef7aeb8eb8 --- /dev/null +++ b/test/embed-file/default.nix @@ -0,0 +1,26 @@ +# Test that embedFile function for the file-embed package works +{ stdenv, lib, project', haskellLib, recurseIntoAttrs, testSrc, compiler-nix-name, evalPackages, buildPackages }: + +with lib; + +let + project = project' { + inherit compiler-nix-name evalPackages; + src = testSrc "embed-file"; + # cabalProjectLocal = builtins.readFile ../cabal.project.local; + }; + + packages = project.hsPkgs; + +in recurseIntoAttrs rec { + meta.disabled = stdenv.hostPlatform.isGhcjs; + + ifdInputs = { + inherit (project) plan-nix; + }; + + build = packages.embed-file.components.exes.embed-file; + check = haskellLib.check build; + # build-profiled = packages.embed-file.components.exes.embed-file.profiled; + # check-profiled = haskellLib.check build-profiled; +} diff --git a/test/embed-file/embed-file.cabal b/test/embed-file/embed-file.cabal new file mode 100644 index 0000000000..90c2305d95 --- /dev/null +++ b/test/embed-file/embed-file.cabal @@ -0,0 +1,26 @@ +cabal-version: 3.4 +name: embed-file +version: 0.1.0.0 +-- synopsis: +-- description: +license: MIT +license-file: LICENSE +author: Hamish Mackenzie +maintainer: Hamish.K.Mackenzie@gmail.com +-- copyright: +category: Testing +build-type: Simple +extra-doc-files: CHANGELOG.md +-- extra-source-files: + +common warnings + ghc-options: -Wall + +executable embed-file + import: warnings + main-is: Main.hs + -- other-modules: + -- other-extensions: + build-depends: base, file-embed, text + hs-source-dirs: app + default-language: Haskell2010 From 095752e7dff9dcc693f07ddee117eb4dfcc954c8 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 9 May 2024 13:31:48 +1200 Subject: [PATCH 2/4] Fix expected output --- test/embed-file/app/Main.hs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/test/embed-file/app/Main.hs b/test/embed-file/app/Main.hs index fc7d65861f..b69e38f27e 100644 --- a/test/embed-file/app/Main.hs +++ b/test/embed-file/app/Main.hs @@ -8,5 +8,8 @@ import System.Exit (exitFailure) import Data.FileEmbed (embedFile, makeRelativeToProject) main :: IO () -main = - unless ($(makeRelativeToProject "app/test.txt" >>= embedFile) == encodeUtf8 (T.pack "Hello World")) exitFailure +main = do + let test = $(makeRelativeToProject "app/test.txt" >>= embedFile) + unless (test == encodeUtf8 (T.pack "Hello World\n")) $ do + putStrLn $ "Embedded content was : " <> show test + exitFailure From f4ae605dad831d80b46e1021f01c06c5aa02c84c Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 9 May 2024 17:34:46 +1200 Subject: [PATCH 3/4] Possible fix --- test/embed-file/default.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/embed-file/default.nix b/test/embed-file/default.nix index ef7aeb8eb8..cb0b267881 100644 --- a/test/embed-file/default.nix +++ b/test/embed-file/default.nix @@ -7,7 +7,10 @@ let project = project' { inherit compiler-nix-name evalPackages; src = testSrc "embed-file"; - # cabalProjectLocal = builtins.readFile ../cabal.project.local; + cabalProjectLocal = builtins.readFile ../cabal.project.local + + lib.optionalString (haskellLib.isCrossHost && stdenv.hostPlatform.isAarch64) '' + constraints: text -simdutf + ''; }; packages = project.hsPkgs; From 7449816dd15b3d93c6ec4d126d5a42cb6db0d053 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 6 Jun 2024 16:08:58 +1200 Subject: [PATCH 4/4] Disable test for aarch64 with old GHC --- test/embed-file/default.nix | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/test/embed-file/default.nix b/test/embed-file/default.nix index cb0b267881..fb7b931db0 100644 --- a/test/embed-file/default.nix +++ b/test/embed-file/default.nix @@ -16,7 +16,14 @@ let packages = project.hsPkgs; in recurseIntoAttrs rec { - meta.disabled = stdenv.hostPlatform.isGhcjs; + meta.disabled = stdenv.hostPlatform.isGhcjs + # Could not load 'filezmembedzm0zi0zi16zi0zmL8bqDH6rAX64X4nLQOoPcy_DataziFileEmbed_makeRelativeToProject_closure', dependency unresolved. See top entry above. + || (builtins.elem compiler-nix-name ["ghc928"] && !haskellLib.isCrossHost && stdenv.hostPlatform.isAarch64 && stdenv.hostPlatform.isMusl) + # /build/source-test-embed-file-root-test-embed-file-exe-embed-file-root/test/embed-file/app: getDirectoryContents:openDirStream: invalid argument (Invalid argument) + || (builtins.elem compiler-nix-name ["ghc928"] && haskellLib.isCrossHost && stdenv.hostPlatform.isAarch64 && stdenv.hostPlatform.isMusl) + # Failed to lookup symbol: __aarch64_swp8_acq_rel + || (builtins.elem compiler-nix-name ["ghc947" "ghc948"] && haskellLib.isCrossHost && stdenv.hostPlatform.isAarch64) + ; ifdInputs = { inherit (project) plan-nix;