mkvtoolnix/tests/test.d/test.rb
2021-07-06 20:27:41 +02:00

130 lines
3.2 KiB
Ruby

class SubtestError < RuntimeError
end
class Test
attr_reader :commands
attr_reader :debug_commands
def initialize
@tmp_num = 0
@tmp_num_mutex = Mutex.new
@commands = Array.new
@debug_commands = Array.new
end
def description
return "dummy test class"
end
def run
return error("Trying to run the base class")
end
def unlink_tmp_files
return if (ENV["KEEP_TMPFILES"] == "1")
re = /^#{self.tmp_name_prefix}/
Dir.entries($temp_dir).each do |entry|
file = "#{$temp_dir}/#{entry}"
File.unlink(file) if re.match(file) and File.exists?(file)
end
end
def run_test
result = nil
begin
result = run
rescue RuntimeError => ex
show_message ex.to_s
end
unlink_tmp_files
result
end
def error(reason)
show_message " Failed. Reason: #{reason}"
raise "test failed"
end
def sys(command, *arg)
options = arg.extract_options!
@commands << { :command => command, :no_result => options[:no_result] } unless options[:dont_record_command]
@debug_commands << command unless options[:dont_record_command]
command << " >/dev/null 2>/dev/null " unless (/>/.match(command))
puts "COMMAND #{command}" if ENV['DEBUG']
result = run_bash command
error "system command failed: #{command} (" + ($? >> 8).to_s + ")" if !result && ((arg.size == 0) || ((arg[0] << 8) != $?))
end
def tmp_name_prefix
[ "#{$temp_dir}/mkvtoolnix-auto-test", $$.to_s, Thread.current[:number] ].join("-") + "-"
end
def tmp_name
@tmp_num_mutex.lock
@tmp_num ||= 0
@tmp_num += 1
result = self.tmp_name_prefix + @tmp_num.to_s
@tmp_num_mutex.unlock
result
end
def tmp
@tmp ||= tmp_name
end
def hash_file(name)
md5 name
end
def hash_tmp(erase = true)
output = hash_file @tmp
if erase
File.unlink(@tmp) if File.exists?(@tmp) && (ENV["KEEP_TMPFILES"] != "1")
@debug_commands << "rm #{@tmp}"
@tmp = nil
end
output
end
def merge(*args)
retcode = args.detect { |a| !a.is_a? String } || 0
args.reject! { |a| !a.is_a? String }
raise "Wrong use of the 'merge' function." if args.empty? || (2 < args.size)
command = "../src/mkvmerge --engage no_variable_data -o " + (args.size == 1 ? tmp : args.shift) + " " + args.shift
sys command, retcode
end
def propedit *args
retcode = args.detect { |a| !a.is_a? String } || 0
args.reject! { |a| !a.is_a? String }
file_name = args.size == 1 ? tmp : args.shift
command = "../src/mkvpropedit --engage no_variable_data #{file_name} #{args.shift}"
*result = sys command, retcode
sys "../src/tools/ebml_validator -M #{file_name}", :dont_record_command => true if FileTest.exists?("../src/tools/ebml_validator")
return *result
end
def xtr_tracks_s(*args)
command = "../src/mkvextract tracks data/mkv/complex.mkv --engage no_variable_data " + args.join(" ") + ":#{tmp}"
sys command, 0
hash_tmp
end
def xtr_tracks(*args)
command = "../src/mkvextract tracks #{args.shift} --engage no_variable_data " + args.join(" ")
sys command, 0
end
end