nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at devShellTools-shell 611 lines 14 kB view raw
1{ 2 haskellPackages, 3 lib, 4 guile-lib, 5 akkuPackages, 6 nodePackages, 7 perlPackages, 8 python3Packages, 9 runCommand, 10 testers, 11 writers, 12 writeText, 13}: 14 15# If you are reading this, you can test these writers by running: nix-build . -A tests.writers 16 17let 18 inherit (lib) getExe recurseIntoAttrs; 19 20 inherit (writers) 21 makeFSharpWriter 22 writeBash 23 writeBashBin 24 writeBabashka 25 writeBabashkaBin 26 writeDash 27 writeDashBin 28 writeFish 29 writeFishBin 30 writeFSharp 31 writeGuile 32 writeGuileBin 33 writeHaskell 34 writeHaskellBin 35 writeJS 36 writeJSBin 37 writeJSON 38 writeLua 39 writeNim 40 writeNimBin 41 writeNu 42 writePerl 43 writePerlBin 44 writePyPy3 45 writePython3 46 writePython3Bin 47 writeRuby 48 writeRust 49 writeRustBin 50 writeText 51 writeTOML 52 writeYAML 53 ; 54 55 expectSuccess = 56 test: 57 runCommand "run-${test.name}" { } '' 58 if [[ "$(${test})" != success ]]; then 59 echo 'test ${test.name} failed' 60 exit 1 61 fi 62 63 touch $out 64 ''; 65 66 expectSuccessBin = 67 test: 68 runCommand "run-${test.name}" { } '' 69 if [[ "$(${getExe test})" != success ]]; then 70 echo 'test ${test.name} failed' 71 exit 1 72 fi 73 74 touch $out 75 ''; 76 77 expectDataEqual = 78 { file, expected }: 79 let 80 expectedFile = writeText "${file.name}-expected" expected; 81 in 82 testers.testEqualContents { 83 expected = expectedFile; 84 actual = file; 85 assertion = "${file.name} matches"; 86 }; 87in 88recurseIntoAttrs { 89 bin = recurseIntoAttrs { 90 bash = expectSuccessBin ( 91 writeBashBin "test-writers-bash-bin" '' 92 if [[ "test" == "test" ]]; then echo "success"; fi 93 '' 94 ); 95 96 dash = expectSuccessBin ( 97 writeDashBin "test-writers-dash-bin" '' 98 test '~' = '~' && echo 'success' 99 '' 100 ); 101 102 fish = expectSuccessBin ( 103 writeFishBin "test-writers-fish-bin" '' 104 if test "test" = "test" 105 echo "success" 106 end 107 '' 108 ); 109 110 babashka = expectSuccessBin ( 111 writeBabashkaBin "test-writers-babashka-bin" { } '' 112 (println "success") 113 '' 114 ); 115 116 guile = expectSuccessBin ( 117 writeGuileBin "test-writers-guile-bin" { } '' 118 (display "success\n") 119 '' 120 ); 121 122 rust = expectSuccessBin ( 123 writeRustBin "test-writers-rust-bin" { } '' 124 fn main(){ 125 println!("success") 126 } 127 '' 128 ); 129 130 haskell = expectSuccessBin ( 131 writeHaskellBin "test-writers-haskell-bin" { libraries = [ haskellPackages.acme-default ]; } '' 132 import Data.Default 133 134 int :: Int 135 int = def 136 137 main :: IO () 138 main = case int of 139 18871 -> putStrLn $ id "success" 140 _ -> print "fail" 141 '' 142 ); 143 144 nim = expectSuccessBin ( 145 writeNimBin "test-writers-nim-bin" { } '' 146 echo "success" 147 '' 148 ); 149 150 js = expectSuccessBin ( 151 writeJSBin "test-writers-js-bin" { libraries = [ nodePackages.semver ]; } '' 152 var semver = require('semver'); 153 154 if (semver.valid('1.2.3')) { 155 console.log('success') 156 } else { 157 console.log('fail') 158 } 159 '' 160 ); 161 162 perl = expectSuccessBin ( 163 writePerlBin "test-writers-perl-bin" { libraries = [ perlPackages.boolean ]; } '' 164 use boolean; 165 print "success\n" if true; 166 '' 167 ); 168 169 python3 = expectSuccessBin ( 170 writePython3Bin "test-writers-python3-bin" { libraries = [ python3Packages.pyyaml ]; } '' 171 import yaml 172 173 y = yaml.safe_load(""" 174 - test: success 175 """) 176 print(y[0]['test']) 177 '' 178 ); 179 180 # Commented out because of this issue: https://github.com/NixOS/nixpkgs/issues/39356 181 182 #pypy2 = expectSuccessBin (writePyPy2Bin "test-writers-pypy2-bin" { libraries = [ pypy2Packages.enum ]; } '' 183 # from enum import Enum 184 # 185 # class Test(Enum): 186 # a = "success" 187 # 188 # print Test.a 189 #''); 190 191 #pypy3 = expectSuccessBin (writePyPy3Bin "test-writers-pypy3-bin" { libraries = [ pypy3Packages.pyyaml ]; } '' 192 # import yaml 193 # 194 # y = yaml.safe_load(""" 195 # - test: success 196 # """) 197 # print(y[0]['test']) 198 #''); 199 200 # Could not test this because of external package issues :( 201 #lua = writeLuaBin "test-writers-lua-bin" { libraries = [ pkgs.luaPackages.say ]; } '' 202 # s = require("say") 203 # s:set_namespace("en") 204 205 # s:set('money', 'I have %s dollars') 206 # s:set('wow', 'So much money!') 207 208 # print(s('money', {1000})) -- I have 1000 dollars 209 210 # s:set_namespace("fr") -- switch to french! 211 # s:set('wow', "Tant d'argent!") 212 213 # print(s('wow')) -- Tant d'argent! 214 # s:set_namespace("en") -- switch back to english! 215 # print(s('wow')) -- So much money! 216 #''; 217 218 #ruby = expectSuccessBin (writeRubyBin "test-writers-ruby-bin" { libraries = [ rubyPackages.rubocop ]; } '' 219 #puts "This should work!" 220 #''); 221 }; 222 223 simple = recurseIntoAttrs { 224 bash = expectSuccess ( 225 writeBash "test-writers-bash" '' 226 if [[ "test" == "test" ]]; then echo "success"; fi 227 '' 228 ); 229 230 dash = expectSuccess ( 231 writeDash "test-writers-dash" '' 232 test '~' = '~' && echo 'success' 233 '' 234 ); 235 236 fish = expectSuccess ( 237 writeFish "test-writers-fish" '' 238 if test "test" = "test" 239 echo "success" 240 end 241 '' 242 ); 243 244 nim = expectSuccess ( 245 writeNim "test-writers-nim" { } '' 246 echo "success" 247 '' 248 ); 249 250 nu = expectSuccess ( 251 writeNu "test-writers-nushell" '' 252 echo "success" 253 '' 254 ); 255 256 babashka = expectSuccess ( 257 writeBabashka "test-writers-babashka" { } '' 258 (println "success") 259 '' 260 ); 261 262 guile = expectSuccess ( 263 writeGuile "test-writers-guile" 264 { 265 libraries = [ guile-lib ]; 266 srfi = [ 1 ]; 267 } 268 '' 269 (use-modules (unit-test)) 270 (assert-true (= (second '(1 2 3)) 271 2)) 272 (display "success\n") 273 '' 274 ); 275 276 guileR6RS = expectSuccess ( 277 writeGuile "test-writers-guile-r6rs" 278 { 279 r6rs = true; 280 libraries = with akkuPackages; [ r6rs-slice ]; 281 } 282 '' 283 (import (rnrs base (6)) 284 (rnrs io simple (6)) 285 (slice)) 286 (assert (equal? (slice '(1 2 3) 0 2) 287 '(1 2))) 288 (display "success\n") 289 '' 290 ); 291 292 guileR7RS = expectSuccess ( 293 writeGuile "test-writers-guile-r7rs" 294 { 295 r7rs = true; 296 } 297 '' 298 (import (scheme write) 299 (srfi 1)) 300 (unless (= (second '(1 2 3)) 301 2) 302 (error "The value should be 2.")) 303 (display "success\n") 304 '' 305 ); 306 307 haskell = expectSuccess ( 308 writeHaskell "test-writers-haskell" { libraries = [ haskellPackages.acme-default ]; } '' 309 import Data.Default 310 311 int :: Int 312 int = def 313 314 main :: IO () 315 main = case int of 316 18871 -> putStrLn $ id "success" 317 _ -> print "fail" 318 '' 319 ); 320 321 js = expectSuccess ( 322 writeJS "test-writers-js" { libraries = [ nodePackages.semver ]; } '' 323 var semver = require('semver'); 324 325 if (semver.valid('1.2.3')) { 326 console.log('success') 327 } else { 328 console.log('fail') 329 } 330 '' 331 ); 332 333 perl = expectSuccess ( 334 writePerl "test-writers-perl" { libraries = [ perlPackages.boolean ]; } '' 335 use boolean; 336 print "success\n" if true; 337 '' 338 ); 339 340 python3 = expectSuccess ( 341 writePython3 "test-writers-python3" { libraries = [ python3Packages.pyyaml ]; } '' 342 import yaml 343 344 y = yaml.safe_load(""" 345 - test: success 346 """) 347 print(y[0]['test']) 348 '' 349 ); 350 351 # Commented out because of this issue: https://github.com/NixOS/nixpkgs/issues/39356 352 353 #pypy2 = expectSuccessBin (writePyPy2Bin "test-writers-pypy2-bin" { libraries = [ pypy2Packages.enum ]; } '' 354 # from enum import Enum 355 # 356 # class Test(Enum): 357 # a = "success" 358 # 359 # print Test.a 360 #''); 361 362 #pypy3 = expectSuccessBin (writePyPy3Bin "test-writers-pypy3-bin" { libraries = [ pypy3Packages.pyyaml ]; } '' 363 # import yaml 364 # 365 # y = yaml.safe_load(""" 366 # - test: success 367 # """) 368 # print(y[0]['test']) 369 #''); 370 371 # Commented out because fails with 'error FS0039: The value or constructor 'JsonFSharpConverter' is not defined.' 372 373 # fsharp = expectSuccess (makeFSharpWriter { 374 # libraries = { fetchNuGet }: [ 375 # (fetchNuGet { pname = "FSharp.SystemTextJson"; version = "0.17.4"; sha256 = "1bplzc9ybdqspii4q28l8gmfvzpkmgq5l1hlsiyg2h46w881lwg2"; }) 376 # (fetchNuGet { pname = "System.Text.Json"; version = "4.6.0"; sha256 = "0ism236hwi0k6axssfq58s1d8lihplwiz058pdvl8al71hagri39"; }) 377 # ]; 378 # } "test-writers-fsharp" '' 379 # 380 # #r "nuget: FSharp.SystemTextJson, 0.17.4" 381 # 382 # module Json = 383 # open System.Text.Json 384 # open System.Text.Json.Serialization 385 # let options = JsonSerializerOptions() 386 # options.Converters.Add(JsonFSharpConverter()) 387 # let serialize<'a> (o: 'a) = JsonSerializer.Serialize<'a>(o, options) 388 # let deserialize<'a> (str: string) = JsonSerializer.Deserialize<'a>(str, options) 389 # 390 # type Letter = A | B 391 # let a = {| Hello = Some "World"; Letter = A |} 392 # if a |> Json.serialize |> Json.deserialize |> (=) a 393 # then "success" 394 # else "failed" 395 # |> printfn "%s" 396 # ''); 397 398 #pypy2NoLibs = expectSuccess (writePyPy2 "test-writers-pypy2-no-libs" {} '' 399 # print("success") 400 #''); 401 402 python3NoLibs = expectSuccess ( 403 writePython3 "test-writers-python3-no-libs" { } '' 404 print("success") 405 '' 406 ); 407 408 pypy3NoLibs = expectSuccess ( 409 writePyPy3 "test-writers-pypy3-no-libs" { } '' 410 print("success") 411 '' 412 ); 413 414 fsharpNoNugetDeps = expectSuccess ( 415 writeFSharp "test-writers-fsharp-no-nuget-deps" '' 416 printfn "success" 417 '' 418 ); 419 420 luaNoLibs = expectSuccess ( 421 writeLua "test-writers-lua-no-libs" { } '' 422 print("success") 423 '' 424 ); 425 426 rubyNoLibs = expectSuccess ( 427 writeRuby "test-writers-ruby-no-libs" { } '' 428 puts "success" 429 '' 430 ); 431 }; 432 433 path = recurseIntoAttrs { 434 bash = expectSuccess ( 435 writeBash "test-writers-bash-path" ( 436 writeText "test" '' 437 if [[ "test" == "test" ]]; then echo "success"; fi 438 '' 439 ) 440 ); 441 442 haskell = expectSuccess ( 443 writeHaskell "test-writers-haskell-path" { libraries = [ haskellPackages.acme-default ]; } ( 444 writeText "test" '' 445 import Data.Default 446 447 int :: Int 448 int = def 449 450 main :: IO () 451 main = case int of 452 18871 -> putStrLn $ id "success" 453 _ -> print "fail" 454 '' 455 ) 456 ); 457 }; 458 459 data = recurseIntoAttrs { 460 json = expectDataEqual { 461 file = writeJSON "data.json" { hello = "world"; }; 462 expected = '' 463 { 464 "hello": "world" 465 } 466 ''; 467 }; 468 469 toml = expectDataEqual { 470 file = writeTOML "data.toml" { hello = "world"; }; 471 expected = '' 472 hello = "world" 473 ''; 474 }; 475 476 yaml = expectDataEqual { 477 file = writeYAML "data.yaml" { hello = "world"; }; 478 expected = "hello: world\n"; 479 }; 480 }; 481 482 wrapping = recurseIntoAttrs { 483 bash-bin = expectSuccessBin ( 484 writeBashBin "test-writers-wrapping-bash-bin" 485 { 486 makeWrapperArgs = [ 487 "--set" 488 "ThaigerSprint" 489 "Thailand" 490 ]; 491 } 492 '' 493 if [[ "$ThaigerSprint" == "Thailand" ]]; then 494 echo "success" 495 fi 496 '' 497 ); 498 499 bash = expectSuccess ( 500 writeBash "test-writers-wrapping-bash" 501 { 502 makeWrapperArgs = [ 503 "--set" 504 "ThaigerSprint" 505 "Thailand" 506 ]; 507 } 508 '' 509 if [[ "$ThaigerSprint" == "Thailand" ]]; then 510 echo "success" 511 fi 512 '' 513 ); 514 515 babashka-bin = expectSuccessBin ( 516 writeBabashkaBin "test-writers-wrapping-babashka-bin" 517 { 518 makeWrapperArgs = [ 519 "--set" 520 "ThaigerSprint" 521 "Thailand" 522 ]; 523 } 524 '' 525 (when (= (System/getenv "ThaigerSprint") "Thailand") 526 (println "success")) 527 '' 528 ); 529 530 babashka = expectSuccess ( 531 writeBabashka "test-writers-wrapping-babashka" 532 { 533 makeWrapperArgs = [ 534 "--set" 535 "ThaigerSprint" 536 "Thailand" 537 ]; 538 } 539 '' 540 (when (= (System/getenv "ThaigerSprint") "Thailand") 541 (println "success")) 542 '' 543 ); 544 545 nim = expectSuccess ( 546 writeNim "test-writers-wrapping-nim" 547 { 548 makeWrapperArgs = [ 549 "--set" 550 "ThaigerSprint" 551 "Thailand" 552 ]; 553 } 554 '' 555 import os 556 557 if getEnv("ThaigerSprint") == "Thailand": 558 echo "success" 559 '' 560 ); 561 562 python = expectSuccess ( 563 writePython3 "test-writers-wrapping-python" 564 { 565 makeWrapperArgs = [ 566 "--set" 567 "ThaigerSprint" 568 "Thailand" 569 ]; 570 } 571 '' 572 import os 573 574 if os.environ.get("ThaigerSprint") == "Thailand": 575 print("success") 576 '' 577 ); 578 579 rust = expectSuccess ( 580 writeRust "test-writers-wrapping-rust" 581 { 582 makeWrapperArgs = [ 583 "--set" 584 "ThaigerSprint" 585 "Thailand" 586 ]; 587 } 588 '' 589 fn main(){ 590 if std::env::var("ThaigerSprint").unwrap() == "Thailand" { 591 println!("success") 592 } 593 } 594 '' 595 ); 596 597 no-empty-wrapper = 598 let 599 bin = writeBashBin "bin" { makeWrapperArgs = [ ]; } ''true''; 600 in 601 runCommand "run-test-writers-wrapping-no-empty-wrapper" { } '' 602 ls -A ${bin}/bin 603 if [ $(ls -A ${bin}/bin | wc -l) -eq 1 ]; then 604 touch $out 605 else 606 echo "Error: Empty wrapper was created" >&2 607 exit 1 608 fi 609 ''; 610 }; 611}