blob: c862d4de41e00b832b21f526941b2e24d074e1ed [file] [log] [blame]
#!/usr/bin/env ruby
require 'fileutils'
FileUtils.mkdir_p('repo')
Dir.chdir('repo')
def check_command(cmd)
puts cmd
if !system(cmd)
puts "#{cmd} failed"
exit 1
end
end
class TestCase
attr_reader :name
def initialize(name, checkout, prepare, clean, target)
@name = name
@checkout = checkout
@prepare = prepare
@clean = clean
@target = target
end
def normalize_log(log, out)
log = log.gsub(/[ \t]+/, ' ').split("\n").sort.join("\n")
File.open(out, 'w') do |of|
of.print log
end
log
end
def run
@checkout.call(self)
Dir.chdir(@name) do
@prepare.call(self)
@clean.call(self)
puts "Running make for #{@name}..."
system("make #{@target} > make.log 2>&1")
@clean.call(self)
puts "Running kati for #{@name}..."
system("../../kati #{@target} > kati.log 2>&1")
make_log = File.read('make.log')
kati_log = File.read('kati.log')
kati_log.gsub!(/^\*kati\*.*\n/, '')
make_log = normalize_log(make_log, 'make-normalized.log')
kati_log = normalize_log(kati_log, 'kati-normalized.log')
if make_log == kati_log
puts "#{@name}: OK"
return true
else
puts "#{@name}: FAIL"
return false
end
end
end
end
class GitTestCase < TestCase
def initialize(name, repo, rev, prepare, clean, target)
checkout = Proc.new{|tc|
if !File.exist?(@name)
check_command("git clone #{repo}")
end
Dir.chdir(@name) {
check_command("git checkout #{rev}")
}
}
super(name, checkout, prepare, clean, target)
end
end
DO_NOTHING = Proc.new{|tc|}
MAKE_CLEAN = Proc.new{|tc|
check_command("make clean > /dev/null")
}
CONFIGURE = Proc.new{|tc|
check_command("./configure > /dev/null")
}
TESTS = [
GitTestCase.new('maloader',
'https://github.com/shinh/maloader.git',
'5d125933bc6c141bed05c309c2dc0e14ada6f5c7',
DO_NOTHING,
MAKE_CLEAN,
''),
GitTestCase.new('glog',
'https://github.com/google/glog',
'1b0b08c8dda1659027677966b03a3ff3c488e549',
CONFIGURE,
MAKE_CLEAN,
''),
]
fails = []
TESTS.each do |tc|
if !ARGV.empty?
if !ARGV.include?(tc.name)
next
end
end
if !tc.run
fails << tc.name
end
end
puts
if fails.empty?
puts "PASS!"
else
puts "=== Failures ==="
fails.each do |n|
puts n
end
puts
puts "FAIL!"
end