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}