1#!/usr/bin/env ruby
2
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
6
7require 'fileutils'
8
9class FakeGemfile
10 attr_reader :gems
11
12 def initialize
13 @gems = []
14 end
15
16 def source(_source, &block)
17 instance_exec(&block)
18 end
19
20 def gem(name)
21 @gems << name
22 end
23end
24
25gemfile = File.expand_path(File.join(__dir__, 'Gemfile'))
26packages = FakeGemfile.new.instance_eval(File.read(gemfile), gemfile)
27
28test_cases = packages.map { |pkg| [pkg, "require '#{pkg}'"] }.to_h
29
30test_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'"
45)
46
47test_cases['sequel_pg'] = <<~TEST
48 require 'pg'
49 require 'sequel'
50 require 'sequel/adapters/postgresql'
51 require 'sequel_pg'
52TEST
53
54tmpdir = File.expand_path(File.join(__dir__, 'tests'))
55FileUtils.rm_rf(tmpdir)
56FileUtils.mkdir_p(tmpdir)
57
58failing = 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
64
65 file = File.join(tmpdir, "#{name}_test.rb")
66 File.write(file, test_case)
67 FileUtils.chmod('u=wrx', file)
68
69 system(file) && FileUtils.rm(file)
70end
71
72exit if failing.empty?
73
74puts "Following gems failed: #{failing.keys.join(' ')}"
75puts "tests for failing gems remain in #{tmpdir}"
76exit 1
77