nixpkgs/pkgs/build-support/writers/test.nix
Adrian Gierakowski 76437a88bb writers.writePython2 and writePython3: use "bare" python if no deps are needed
`python.withPackages` has a runtime dependecy on bash since it's wrapped with
`makeWrapper`. This fix avoids bash as runtime dependency when it's not
needed.

as discussed here: https://github.com/NixOS/nixpkgs/issues/93609#issuecomment-662880047
2020-07-24 11:39:01 +01:00

203 lines
4.8 KiB
Nix

{
glib,
haskellPackages,
lib,
nodePackages,
perlPackages,
python2Packages,
python3Packages,
runCommand,
stdenv,
writers,
writeText
}:
with writers;
let
bin = {
bash = writeBashBin "test_writers" ''
if [[ "test" == "test" ]]; then echo "success"; fi
'';
c = writeCBin "test_writers" { libraries = [ ]; } ''
#include <stdio.h>
int main() {
printf("success\n");
return 0;
}
'';
dash = writeDashBin "test_writers" ''
test '~' = '~' && echo 'success'
'';
haskell = writeHaskellBin "test_writers" { libraries = [ haskellPackages.acme-default ]; } ''
import Data.Default
int :: Int
int = def
main :: IO ()
main = case int of
18871 -> putStrLn $ id "success"
_ -> print "fail"
'';
js = writeJSBin "test_writers" { libraries = [ nodePackages.semver ]; } ''
var semver = require('semver');
if (semver.valid('1.2.3')) {
console.log('success')
} else {
console.log('fail')
}
'';
perl = writePerlBin "test_writers" { libraries = [ perlPackages.boolean ]; } ''
use boolean;
print "success\n" if true;
'';
python2 = writePython2Bin "test_writers" { libraries = [ python2Packages.enum ]; } ''
from enum import Enum
class Test(Enum):
a = "success"
print Test.a
'';
python3 = writePython3Bin "test_writers" { libraries = [ python3Packages.pyyaml ]; } ''
import yaml
y = yaml.load("""
- test: success
""")
print(y[0]['test'])
'';
};
simple = {
bash = writeBash "test_bash" ''
if [[ "test" == "test" ]]; then echo "success"; fi
'';
c = writeC "test_c" { libraries = [ glib.dev ]; } ''
#include <gio/gio.h>
#include <stdio.h>
int main() {
GApplication *application = g_application_new ("hello.world", G_APPLICATION_FLAGS_NONE);
g_application_register (application, NULL, NULL);
GNotification *notification = g_notification_new ("Hello world!");
g_notification_set_body (notification, "This is an example notification.");
GIcon *icon = g_themed_icon_new ("dialog-information");
g_notification_set_icon (notification, icon);
g_object_unref (icon);
g_object_unref (notification);
g_object_unref (application);
printf("success\n");
return 0;
}
'';
dash = writeDash "test_dash" ''
test '~' = '~' && echo 'success'
'';
haskell = writeHaskell "test_haskell" { libraries = [ haskellPackages.acme-default ]; } ''
import Data.Default
int :: Int
int = def
main :: IO ()
main = case int of
18871 -> putStrLn $ id "success"
_ -> print "fail"
'';
js = writeJS "test_js" { libraries = [ nodePackages.semver ]; } ''
var semver = require('semver');
if (semver.valid('1.2.3')) {
console.log('success')
} else {
console.log('fail')
}
'';
perl = writePerl "test_perl" { libraries = [ perlPackages.boolean ]; } ''
use boolean;
print "success\n" if true;
'';
python2 = writePython2 "test_python2" { libraries = [ python2Packages.enum ]; } ''
from enum import Enum
class Test(Enum):
a = "success"
print Test.a
'';
python3 = writePython3 "test_python3" { libraries = [ python3Packages.pyyaml ]; } ''
import yaml
y = yaml.load("""
- test: success
""")
print(y[0]['test'])
'';
python2NoLibs = writePython2 "test_python2_no_libs" {} ''
print("success")
'';
python3NoLibs = writePython3 "test_python3_no_libs" {} ''
print("success")
'';
};
path = {
bash = writeBash "test_bash" (writeText "test" ''
if [[ "test" == "test" ]]; then echo "success"; fi
'');
haskell = writeHaskell "test_haskell" { libraries = [ haskellPackages.acme-default ]; } (writeText "test" ''
import Data.Default
int :: Int
int = def
main :: IO ()
main = case int of
18871 -> putStrLn $ id "success"
_ -> print "fail"
'');
};
writeTest = expectedValue: test:
writeDash "test-writers" ''
if test "$(${test})" != "${expectedValue}"; then
echo 'test ${test} failed'
exit 1
fi
'';
in runCommand "test-writers" {
passthru = { inherit writeTest bin simple; };
meta.platforms = stdenv.lib.platforms.all;
} ''
${lib.concatMapStringsSep "\n" (test: writeTest "success" "${test}/bin/test_writers") (lib.attrValues bin)}
${lib.concatMapStringsSep "\n" (test: writeTest "success" test) (lib.attrValues simple)}
${lib.concatMapStringsSep "\n" (test: writeTest "success" test) (lib.attrValues path)}
echo 'nix-writers successfully tested' >&2
touch $out
''