21 packageString = builtins.concatStringsSep " " (map (p: "--package " + p) packages);
23 runCommand "${pname}-${testName}"
27 # with idris2 compiled binaries assume zsh is available on darwin, but that
28 # is not the case with pure nix environments. Thus, we need to include zsh
29 # when we build for darwin in tests. While this is impure, this is also what
30 # we find in real darwin hosts.
31 nativeBuildInputs = lib.optionals stdenv.hostPlatform.isDarwin [ zsh ];
36 cat > packageTest.idr <<HERE
40 ${idris2}/bin/idris2 ${packageString} -o packageTest packageTest.idr
42 GOT=$(./build/exec/packageTest)
44 if [ "$GOT" = "${want}" ]; then
45 echo "${testName} SUCCESS: '$GOT' = '${want}'"
47 >&2 echo "Got '$GOT', want: '${want}'"
58 # function that takes result of `buildIdris` and transforms it (commonly
59 # by calling `.executable` or `.library {}` upon it):
60 transformBuildIdrisOutput,
64 idrisPkg = transformBuildIdrisOutput (idris2Packages.buildIdris buildIdrisArgs);
66 runCommand "${pname}-${testName}"
70 nativeBuildInputs = [ tree ];
73 GOT="$(tree ${idrisPkg} | tail -n +2)"
75 if [ "$GOT" = '${expectedTree}' ]; then
76 echo "${testName} SUCCESS"
89 # Simple hello world compiles, runs and outputs as expected
90 helloWorld = testCompileAndRun {
91 testName = "hello-world";
96 main = putStrLn "Hello World!"
98 want = "Hello World!";
101 # Data.Vect.Sort is available via --package contrib
102 useContrib = testCompileAndRun {
103 testName = "use-contrib";
104 packages = [ "contrib" ];
109 import Data.Vect.Sort -- from contrib
112 vect = 3 :: 1 :: 5 :: Nil
115 main = putStrLn $ show (sort vect)
120 buildLibrary = testBuildIdris {
121 testName = "library-package";
124 idrisLibraries = [ idris2Packages.idris2Api ];
125 src = runCommand "library-package-src" { } ''
128 cat > $out/Main.idr <<EOF
131 import Compiler.ANF -- from Idris2Api
137 cat > $out/pkg.ipkg <<EOF
144 transformBuildIdrisOutput = pkg: pkg.library { withSource = false; };
154 5 directories, 3 files'';
157 buildLibraryWithSource = testBuildIdris {
158 testName = "library-with-source-package";
161 idrisLibraries = [ idris2Packages.idris2Api ];
162 src = runCommand "library-package-src" { } ''
165 cat > $out/Main.idr <<EOF
168 import Compiler.ANF -- from Idris2Api
174 cat > $out/pkg.ipkg <<EOF
181 transformBuildIdrisOutput = pkg: pkg.library { withSource = true; };
192 5 directories, 4 files'';
195 buildLibraryWithSourceRetroactively = testBuildIdris {
196 testName = "library-with-source-retro-package";
199 idrisLibraries = [ idris2Packages.idris2Api ];
200 src = runCommand "library-package-src" { } ''
203 cat > $out/Main.idr <<EOF
206 import Compiler.ANF -- from Idris2Api
212 cat > $out/pkg.ipkg <<EOF
219 transformBuildIdrisOutput = pkg: pkg.library'.withSource;
230 5 directories, 4 files'';
233 buildExecutable = testBuildIdris {
234 testName = "executable-package";
237 idrisLibraries = [ ];
238 src = runCommand "executable-package-src" { } ''
241 cat > $out/Main.idr <<EOF
248 cat > $out/pkg.ipkg <<EOF
256 transformBuildIdrisOutput = pkg: pkg.executable;
261 2 directories, 1 file'';