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