forked from ruby-gnome/ruby-gnome
-
Notifications
You must be signed in to change notification settings - Fork 0
/
run-test.rb
executable file
·82 lines (69 loc) · 1.86 KB
/
run-test.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/env ruby
# quick & dirty script for running all available tests for each module
# Author: Joachim Glauche
require "rbconfig"
require "pathname"
require "time"
ruby = RbConfig.ruby
# for creating a separating line
def separator
"-" * 80
end
targets = []
includes = []
base_dir = Pathname(__dir__)
if ARGV.empty?
candidates = Pathname.glob((base_dir + "*").to_s)
else
candidates = ARGV.collect do |package|
base_dir + package
end
end
candidates.each do |dir|
next unless dir.directory?
source_dir = dir.expand_path
package_name = dir.basename
build_dir = Pathname(package_name).expand_path
lib_dir = source_dir + "lib"
ext_dir = build_dir + "ext" + package_name
if ext_dir.exist?
next unless (ext_dir + "Makefile").exist?
includes.concat(["-I", lib_dir.to_s, "-I", ext_dir.to_s])
else
includes.concat(["-I", lib_dir.to_s])
end
next unless (source_dir + "test").directory?
targets << dir
end
ignored_modules = [
]
failed_target_names = []
targets.each do |target|
next if target.basename.to_s.end_with?("-no-gi")
next if ignored_modules.include?(target.basename.to_s)
puts "::group::Test #{target}"
puts "#{Time.now.iso8601}: Running test for #{target}"
puts separator
dependency_check = target + "dependency-check/Rakefile"
if dependency_check.exist?
unless system(ruby, *includes, "-S",
"rake", "--rakefile", dependency_check.to_s)
puts "Failed to resolve dependency: #{target.basename}"
puts separator
next
end
end
run_test = target + "test/run-test.rb"
unless system(ruby, *includes, run_test.to_s)
puts "Failed to run test: #{target.basename}"
failed_target_names << target.basename.to_s
end
puts separator
puts "::endgroup::"
end
if failed_target_names.empty?
exit(true)
else
puts "Failed targets: #{failed_target_names.join(', ')}"
exit(false)
end