1# a generic test suite for all gems for all ruby versions. 2# use via nix-build. 3let 4 pkgs = import ../../../.. { }; 5 lib = pkgs.lib; 6 stdenv = pkgs.stdenv; 7 8 rubyVersions = with pkgs; [ 9 ruby_3_2 10 ]; 11 12 gemTests = (lib.mapAttrs (name: gem: [ name ]) pkgs.ruby.gems) // (import ./require_exceptions.nix); 13 14 testWrapper = 15 ruby: 16 stdenv.mkDerivation { 17 name = "test-wrappedRuby-${ruby.name}"; 18 buildInputs = [ ((ruby.withPackages (ps: [ ])).wrappedRuby) ]; 19 buildCommand = '' 20 cat <<'EOF' > test-ruby 21 #!/usr/bin/env ruby 22 puts RUBY_VERSION 23 EOF 24 25 chmod +x test-ruby 26 patchShebangs test-ruby 27 [[ $(./test-ruby) = $(${ruby}/bin/ruby test-ruby) ]] 28 touch $out 29 ''; 30 }; 31 32 tests = 33 ruby: 34 lib.mapAttrs ( 35 name: gem: 36 let 37 test = 38 if builtins.isList gemTests.${name} then 39 pkgs.writeText "${name}.rb" '' 40 puts "${name} GEM_HOME: #{ENV['GEM_HOME']}" 41 ${lib.concatStringsSep "\n" (map (n: "require '${n}'") gemTests.${name})} 42 '' 43 else 44 pkgs.writeText "${name}.rb" gemTests.${name}; 45 46 deps = ruby.withPackages (g: [ g.${name} ]); 47 in 48 stdenv.mkDerivation { 49 name = "test-gem-${ruby.name}-${name}"; 50 buildInputs = [ deps ]; 51 buildCommand = '' 52 INLINEDIR=$PWD ruby ${test} 53 touch $out 54 ''; 55 } 56 ) ruby.gems; 57in 58stdenv.mkDerivation { 59 name = "test-all-ruby-gems"; 60 buildInputs = builtins.foldl' ( 61 sum: ruby: sum ++ [ (testWrapper ruby) ] ++ (builtins.attrValues (tests ruby)) 62 ) [ ] rubyVersions; 63 buildCommand = '' 64 touch $out 65 ''; 66}