anvil-editor: init at 0.4
[NixPkgs.git] / pkgs / development / ruby-modules / with-packages / test.rb
blob760402d070c9729555e36599351fee8483419739
1 #!/usr/bin/env ruby
3 # this is a quick and dirty test suite for easier analyzing of breakages in a
4 # manual testing.
5 # For automated testing use the test.nix
7 require 'fileutils'
9 class FakeGemfile
10   attr_reader :gems
12   def initialize
13     @gems = []
14   end
16   def source(_source, &block)
17     instance_exec(&block)
18   end
20   def gem(name)
21     @gems << name
22   end
23 end
25 gemfile = File.expand_path(File.join(__dir__, 'Gemfile'))
26 packages = FakeGemfile.new.instance_eval(File.read(gemfile), gemfile)
28 test_cases = packages.map { |pkg| [pkg, "require '#{pkg}'"] }.to_h
30 test_cases.merge!(
31   'digest-sha3' => "require 'digest/sha3'",
32   'gitlab-markup' => "require 'github/markup'",
33   'idn-ruby' => "require 'idn'",
34   'net-scp' => "require 'net/scp'",
35   'taglib-ruby' => "require 'taglib'",
36   'net-ssh' => "require 'net/ssh'",
37   'ruby-libvirt' => "require 'libvirt'",
38   'ruby-lxc' => "require 'lxc'",
39   'rubyzip' => "require 'zip'",
40   'sinatra' => "require 'sinatra/base'",
41   'libxml-ruby' => "require 'libxml'",
42   'ruby-terminfo' => "require 'terminfo'",
43   'ovirt-engine-sdk' => "require 'ovirtsdk4'",
44   'fog-dnsimple' => "require 'fog/dnsimple'"
47 test_cases['sequel_pg'] = <<~TEST
48   require 'pg'
49   require 'sequel'
50   require 'sequel/adapters/postgresql'
51   require 'sequel_pg'
52 TEST
54 tmpdir = File.expand_path(File.join(__dir__, 'tests'))
55 FileUtils.rm_rf(tmpdir)
56 FileUtils.mkdir_p(tmpdir)
58 failing = test_cases.reject do |name, test_case|
59   test_case = <<~SHELL
60     #!/usr/bin/env nix-shell
61     #!nix-shell -i ruby -E "(import ../../../.. {}).ruby.withPackages (r: [ r.#{name} ] )"
62     #{test_case}
63   SHELL
65   file = File.join(tmpdir, "#{name}_test.rb")
66   File.write(file, test_case)
67   FileUtils.chmod('u=wrx', file)
69   system(file) && FileUtils.rm(file)
70 end
72 exit if failing.empty?
74 puts "Following gems failed: #{failing.keys.join(' ')}"
75 puts "tests for failing gems remain in #{tmpdir}"
76 exit 1