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_2_7
10 ];
11
12 gemTests =
13 (lib.mapAttrs
14 (name: gem: [ name ])
15 pkgs.ruby.gems) //
16 (import ./require_exceptions.nix);
17
18 testWrapper = ruby: stdenv.mkDerivation {
19 name = "test-wrappedRuby-${ruby.name}";
20 buildInputs = [ ((ruby.withPackages (ps: [ ])).wrappedRuby) ];
21 buildCommand = ''
22 cat <<'EOF' > test-ruby
23 #!/usr/bin/env ruby
24 puts RUBY_VERSION
25 EOF
26
27 chmod +x test-ruby
28 patchShebangs test-ruby
29 [[ $(./test-ruby) = $(${ruby}/bin/ruby test-ruby) ]]
30 touch $out
31 '';
32 };
33
34 tests = ruby:
35 lib.mapAttrs (name: gem:
36 let
37 test =
38 if builtins.isList gemTests.${name}
39 then 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 pkgs.writeText "${name}.rb" gemTests.${name};
44
45 deps = ruby.withPackages (g: [ g.${name} ]);
46 in stdenv.mkDerivation {
47 name = "test-gem-${ruby.name}-${name}";
48 buildInputs = [ deps ];
49 buildCommand = ''
50 INLINEDIR=$PWD ruby ${test}
51 touch $out
52 '';
53 }
54 ) ruby.gems;
55in
56 stdenv.mkDerivation {
57 name = "test-all-ruby-gems";
58 buildInputs = builtins.foldl' (sum: ruby: sum ++ [ (testWrapper ruby) ] ++ ( builtins.attrValues (tests ruby) )) [] rubyVersions;
59 buildCommand = ''
60 touch $out
61 '';
62 }