From 73ee03cbc5a20c6c3d61946558e7aea4a48c5119 Mon Sep 17 00:00:00 2001 From: zimbatm Date: Sat, 22 Jul 2023 13:38:31 +0200 Subject: [PATCH] writers: split out the tests Make it easier to run and debug individual tests. --- pkgs/build-support/writers/test.nix | 166 +++++++++++++------------- pkgs/test/haskell/default.nix | 1 - pkgs/test/haskell/writers/default.nix | 26 ---- 3 files changed, 81 insertions(+), 112 deletions(-) delete mode 100644 pkgs/test/haskell/writers/default.nix diff --git a/pkgs/build-support/writers/test.nix b/pkgs/build-support/writers/test.nix index 561c3e4ab0021..9484f8bbe31b5 100644 --- a/pkgs/build-support/writers/test.nix +++ b/pkgs/build-support/writers/test.nix @@ -12,29 +12,49 @@ }: with writers; let + expectSuccess = test: + runCommand "run-${test.name}" {} '' + if test "$(${test})" != "success"; then + echo 'test ${test.name} failed' + exit 1 + fi - bin = { - bash = writeBashBin "test-writers-bash-bin" '' - if [[ "test" == "test" ]]; then echo "success"; fi + touch $out ''; - dash = writeDashBin "test-writers-dash-bin" '' - test '~' = '~' && echo 'success' + expectSuccessBin = test: + runCommand "run-${test.name}" {} '' + if test "$(${lib.getExe test})" != "success"; then + echo 'test ${test.name} failed' + exit 1 + fi + + touch $out ''; +in +lib.recurseIntoAttrs { + bin = lib.recurseIntoAttrs { + bash = expectSuccessBin (writeBashBin "test-writers-bash-bin" '' + if [[ "test" == "test" ]]; then echo "success"; fi + ''); - fish = writeFishBin "test-writers-fish-bin" '' + dash = expectSuccessBin (writeDashBin "test-writers-dash-bin" '' + test '~' = '~' && echo 'success' + ''); + + fish = expectSuccessBin (writeFishBin "test-writers-fish-bin" '' if test "test" = "test" echo "success" end - ''; + ''); - rust = writeRustBin "test-writers-rust-bin" {} '' + rust = expectSuccessBin (writeRustBin "test-writers-rust-bin" {} '' fn main(){ println!("success") } - ''; + ''); - haskell = writeHaskellBin "test-writers-haskell-bin" { libraries = [ haskellPackages.acme-default ]; } '' + haskell = expectSuccessBin (writeHaskellBin "test-writers-haskell-bin" { libraries = [ haskellPackages.acme-default ]; } '' import Data.Default int :: Int @@ -44,9 +64,9 @@ let main = case int of 18871 -> putStrLn $ id "success" _ -> print "fail" - ''; + ''); - js = writeJSBin "test-writers-js-bin" { libraries = [ nodePackages.semver ]; } '' + js = expectSuccessBin (writeJSBin "test-writers-js-bin" { libraries = [ nodePackages.semver ]; } '' var semver = require('semver'); if (semver.valid('1.2.3')) { @@ -54,59 +74,57 @@ let } else { console.log('fail') } - ''; + ''); - perl = writePerlBin "test-writers-perl-bin" { libraries = [ perlPackages.boolean ]; } '' + perl = expectSuccessBin (writePerlBin "test-writers-perl-bin" { libraries = [ perlPackages.boolean ]; } '' use boolean; print "success\n" if true; - ''; + ''); - pypy2 = writePyPy2Bin "test-writers-pypy2-bin" { libraries = [ pypy2Packages.enum ]; } '' + pypy2 = expectSuccessBin (writePyPy2Bin "test-writers-pypy2-bin" { libraries = [ pypy2Packages.enum ]; } '' from enum import Enum - class Test(Enum): a = "success" - print Test.a - ''; + ''); - python3 = writePython3Bin "test-writers-python3-bin" { libraries = [ python3Packages.pyyaml ]; } '' + python3 = expectSuccessBin (writePython3Bin "test-writers-python3-bin" { libraries = [ python3Packages.pyyaml ]; } '' import yaml - y = yaml.load(""" + y = yaml.safe_load(""" - test: success """) print(y[0]['test']) - ''; + ''); - pypy3 = writePyPy3Bin "test-writers-pypy3-bin" { libraries = [ pypy3Packages.pyyaml ]; } '' + pypy3 = expectSuccessBin (writePyPy3Bin "test-writers-pypy3-bin" { libraries = [ pypy3Packages.pyyaml ]; } '' import yaml - y = yaml.load(""" + y = yaml.safe_load(""" - test: success """) print(y[0]['test']) - ''; + ''); }; - simple = { - bash = writeBash "test-writers-bash" '' + simple = lib.recurseIntoAttrs { + bash = expectSuccess (writeBash "test-writers-bash" '' if [[ "test" == "test" ]]; then echo "success"; fi - ''; + ''); - dash = writeDash "test-writers-dash" '' + dash = expectSuccess (writeDash "test-writers-dash" '' test '~' = '~' && echo 'success' - ''; + ''); - fish = writeFish "test-writers-fish" '' + fish = expectSuccess (writeFish "test-writers-fish" '' if test "test" = "test" echo "success" end - ''; + ''); - haskell = writeHaskell "test-writers-haskell" { libraries = [ haskellPackages.acme-default ]; } '' + haskell = expectSuccess (writeHaskell "test-writers-haskell" { libraries = [ haskellPackages.acme-default ]; } '' import Data.Default int :: Int @@ -116,9 +134,9 @@ let main = case int of 18871 -> putStrLn $ id "success" _ -> print "fail" - ''; + ''); - js = writeJS "test-writers-js" { libraries = [ nodePackages.semver ]; } '' + js = expectSuccess (writeJS "test-writers-js" { libraries = [ nodePackages.semver ]; } '' var semver = require('semver'); if (semver.valid('1.2.3')) { @@ -126,43 +144,41 @@ let } else { console.log('fail') } - ''; + ''); - perl = writePerl "test-writers-perl" { libraries = [ perlPackages.boolean ]; } '' + perl = expectSuccess (writePerl "test-writers-perl" { libraries = [ perlPackages.boolean ]; } '' use boolean; print "success\n" if true; - ''; + ''); - pypy2 = writePyPy2 "test-writers-pypy2" { libraries = [ pypy2Packages.enum ]; } '' + pypy2 = expectSuccess (writePyPy2 "test-writers-pypy2" { libraries = [ pypy2Packages.enum ]; } '' from enum import Enum - class Test(Enum): a = "success" - print Test.a - ''; + ''); - python3 = writePython3 "test-writers-python3" { libraries = [ python3Packages.pyyaml ]; } '' + python3 = expectSuccess (writePython3 "test-writers-python3" { libraries = [ python3Packages.pyyaml ]; } '' import yaml - y = yaml.load(""" + y = yaml.safe_load(""" - test: success """) print(y[0]['test']) - ''; + ''); - pypy3 = writePyPy3 "test-writers-pypy3" { libraries = [ pypy3Packages.pyyaml ]; } '' + pypy3 = expectSuccess (writePyPy3 "test-writers-pypy3" { libraries = [ pypy3Packages.pyyaml ]; } '' import yaml - y = yaml.load(""" + y = yaml.safe_load(""" - test: success """) print(y[0]['test']) - ''; + ''); - fsharp = makeFSharpWriter { + fsharp = expectSuccess (makeFSharpWriter { libraries = { fetchNuGet }: [ (fetchNuGet { pname = "FSharp.SystemTextJson"; version = "0.17.4"; sha256 = "1bplzc9ybdqspii4q28l8gmfvzpkmgq5l1hlsiyg2h46w881lwg2"; }) ]; @@ -183,31 +199,31 @@ let then "success" else "failed" |> printfn "%s" - ''; + ''); - pypy2NoLibs = writePyPy2 "test-writers-pypy2-no-libs" {} '' + pypy2NoLibs = expectSuccess (writePyPy2 "test-writers-pypy2-no-libs" {} '' print("success") - ''; + ''); - python3NoLibs = writePython3 "test-writers-python3-no-libs" {} '' + python3NoLibs = expectSuccess (writePython3 "test-writers-python3-no-libs" {} '' print("success") - ''; + ''); - pypy3NoLibs = writePyPy3 "test-writers-pypy3-no-libs" {} '' + pypy3NoLibs = expectSuccess (writePyPy3 "test-writers-pypy3-no-libs" {} '' print("success") - ''; + ''); - fsharpNoNugetDeps = writeFSharp "test-writers-fsharp-no-nuget-deps" '' + fsharpNoNugetDeps = expectSuccess (writeFSharp "test-writers-fsharp-no-nuget-deps" '' printfn "success" - ''; + ''); }; - - path = { - bash = writeBash "test-writers-bash-path" (writeText "test" '' + path = lib.recurseIntoAttrs { + bash = expectSuccess (writeBash "test-writers-bash-path" (writeText "test" '' if [[ "test" == "test" ]]; then echo "success"; fi - ''); - haskell = writeHaskell "test-writers-haskell-path" { libraries = [ haskellPackages.acme-default ]; } (writeText "test" '' + '')); + + haskell = expectSuccess (writeHaskell "test-writers-haskell-path" { libraries = [ haskellPackages.acme-default ]; } (writeText "test" '' import Data.Default int :: Int @@ -217,26 +233,6 @@ let main = case int of 18871 -> putStrLn $ id "success" _ -> print "fail" - ''); + '')); }; - - writeTest = expectedValue: name: test: - writeDash "run-${name}" '' - if test "$(${test})" != "${expectedValue}"; then - echo 'test ${test} failed' - exit 1 - fi - ''; - -in runCommand "test-writers" { - passthru = { inherit writeTest bin simple path; }; - meta.platforms = lib.platforms.all; -} '' - ${lib.concatMapStringsSep "\n" (test: writeTest "success" test.name "${test}/bin/${test.name}") (lib.attrValues bin)} - ${lib.concatMapStringsSep "\n" (test: writeTest "success" test.name test) (lib.attrValues simple)} - ${lib.concatMapStringsSep "\n" (test: writeTest "success" test.name test) (lib.attrValues path)} - - echo 'nix-writers successfully tested' >&2 - touch $out -'' - +} diff --git a/pkgs/test/haskell/default.nix b/pkgs/test/haskell/default.nix index 86764380ecc30..2ecbd4caf81b7 100644 --- a/pkgs/test/haskell/default.nix +++ b/pkgs/test/haskell/default.nix @@ -5,6 +5,5 @@ lib.recurseIntoAttrs { cabalSdist = callPackage ./cabalSdist { }; documentationTarball = callPackage ./documentationTarball { }; setBuildTarget = callPackage ./setBuildTarget { }; - writers = callPackage ./writers { }; incremental = callPackage ./incremental { }; } diff --git a/pkgs/test/haskell/writers/default.nix b/pkgs/test/haskell/writers/default.nix deleted file mode 100644 index f05fda4bc7367..0000000000000 --- a/pkgs/test/haskell/writers/default.nix +++ /dev/null @@ -1,26 +0,0 @@ -# Wrap only the haskell-related tests from tests.writers -# in their own derivation for Hydra CI in the haskell-updates -# jobset. Can presumably removed as soon as tests.writers is -# always green on darwin as well: -# https://github.com/NixOS/nixpkgs/issues/126182 -{ runCommand, tests }: - -let - inherit (tests.writers) - writeTest - bin - simple - path - ; -in - -runCommand "test-haskell-writers" { - meta = { - inherit (tests.writers.meta) platforms; - }; -} '' - ${writeTest "success" "test-haskell-bin-writer" "${bin.haskell}/bin/${bin.haskell.name}"} - ${writeTest "success" "test-haskell-simple-writer" simple.haskell} - ${writeTest "success" "test-haskell-path-writer" path.haskell} - touch $out -''