mirror of
https://gitlab.com/mbunkus/mkvtoolnix.git
synced 2024-12-23 11:27:50 +00:00
130 lines
3.2 KiB
Ruby
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
|