test/test_helper.rb in macroape-3.3.7 vs test/test_helper.rb in macroape-3.3.8

- old
+ new

@@ -10,11 +10,11 @@ require_relative '../lib/macroape/cli/eval_similarity' require_relative '../lib/macroape/cli/eval_alignment' require_relative '../lib/macroape/cli/preprocess_collection' require_relative '../lib/macroape/cli/scan_collection' require_relative '../lib/macroape/cli/align_motifs' - + module Helpers # from minitest def self.capture_io(&block) orig_stdout, orig_stderr = $stdout, $stderr captured_stdout, captured_stderr = StringIO.new, StringIO.new @@ -23,54 +23,138 @@ return {stdout: captured_stdout.string, stderr: captured_stderr.string} ensure $stdout = orig_stdout $stderr = orig_stderr end - + + def self.suppress_output(&block) + orig_stdout, orig_stderr = $stdout, $stderr + captured_stdout, captured_stderr = StringIO.new, StringIO.new + $stdout, $stderr = captured_stdout, captured_stderr + yield + ensure + $stdout = orig_stdout + $stderr = orig_stderr + end + # Method stubs $stdin not STDIN ! def self.provide_stdin(input, &block) orig_stdin = $stdin $stdin = StringIO.new(input) yield - ensure + ensure $stdin = orig_stdin end - + def self.capture_output(&block) capture_io(&block)[:stdout] end def self.capture_stderr(&block) capture_io(&block)[:stderr] end - + + # aaa\tbbb\nccc\tddd ==> [['aaa','bbb'],['ccc','ddd']] + def self.split_on_lines(str) + str.lines.map{|line| line.strip.split("\t")} + end + def self.obtain_pvalue_by_threshold(args) - find_pvalue_output(args).strip.split.last + find_pvalue_output(args).last.last end def self.exec_cmd(executable, param_list) "ruby -I #{$lib_folder} #{$lib_folder}/../bin/#{executable} #{param_list}" end def self.find_threshold_output(param_list) capture_output{ Macroape::CLI::FindThreshold.main(param_list.shellsplit) } end def self.align_motifs_output(param_list) - capture_output{ Macroape::CLI::AlignMotifs.main(param_list.shellsplit) } + split_on_lines( capture_output{ Macroape::CLI::AlignMotifs.main(param_list.shellsplit)} ) end def self.find_pvalue_output(param_list) - capture_output{ Macroape::CLI::FindPValue.main(param_list.shellsplit) } + capture_output{ Macroape::CLI::FindPValue.main(param_list.shellsplit)} .lines.to_a.map(&:strip).reject{|line| line.start_with? '#' }.reject(&:empty?).map{|line|line.split("\t")} end def self.eval_similarity_output(param_list) - capture_output{ Macroape::CLI::EvalSimilarity.main(param_list.shellsplit) } + capture_output{ Macroape::CLI::EvalSimilarity.main(param_list.shellsplit)} end def self.eval_alignment_output(param_list) - capture_output{ Macroape::CLI::EvalAlignment.main(param_list.shellsplit) } + capture_output{ Macroape::CLI::EvalAlignment.main(param_list.shellsplit)} end def self.scan_collection_output(param_list) - capture_output{ Macroape::CLI::ScanCollection.main(param_list.shellsplit) } + capture_output{ Macroape::CLI::ScanCollection.main(param_list.shellsplit) }.lines.to_a.map(&:strip).reject{|line| line.start_with? '#' }.reject(&:empty?).join("\n") end def self.scan_collection_stderr(param_list) capture_stderr{ Macroape::CLI::ScanCollection.main(param_list.shellsplit) } end def self.run_preprocess_collection(param_list) - Macroape::CLI::PreprocessCollection.main(param_list.shellsplit) + suppress_output{ Macroape::CLI::PreprocessCollection.main(param_list.shellsplit) } + end + + def parse_similarity_infos_string(info_string) + infos = {} + info_string.lines.map(&:strip).reject{|line| line.start_with?('#')}.reject(&:empty?).each do |line| + key, value = line.split + case key + when 'S' then infos[:similarity] = value + when 'D' then infos[:distance] = value + when 'L' then infos[:length] = value + when 'SH' then infos[:shift] = value + when 'OR' then infos[:orientation] = value + when 'W' then infos[:words_recognized_by_both] = value + + when 'W1' then infos[:words_recognized_by_first] = value + when 'P1' then infos[:pvalue_recognized_by_first] = value + when 'T1' then infos[:threshold_first] = value + + when 'W2' then infos[:words_recognized_by_second] = value + when 'P2' then infos[:pvalue_recognized_by_second] = value + when 'T2' then infos[:threshold_second] = value + + when 'A1' then infos[:matrix_first_alignment] = value + when 'A2' then infos[:matrix_second_alignment] = value + + when 'V' then infos[:discretization] = value + end + end + infos + end + + def assert_similarity_info_output(expected_info, info_string) + infos = parse_similarity_infos_string(info_string) + expected_info.each do |key, value| + assert_equal value.to_s, infos[key] + end + end + + def parse_threshold_infos_string(infos_string) + infos = [] + infos_string.lines.map(&:strip).reject{|line| line.start_with?('#')}.reject(&:empty?).each do |line| + info_data = line.split + if info_data.size == 4 + requested_pvalue, real_pvalue, number_of_recognized_words, threshold = info_data + info = {requested_pvalue: requested_pvalue, + real_pvalue: real_pvalue, + number_of_recognized_words: number_of_recognized_words, + threshold: threshold } + elsif info_data.size == 3 + requested_pvalue, real_pvalue, threshold = info_data + info = {requested_pvalue: requested_pvalue, + real_pvalue: real_pvalue, + threshold: threshold } + else + raise 'can\'t parse threshold infos table' + end + infos << info + end + infos + end + + def assert_threshold_info_output(*expected_infos, info_string) + infos = parse_threshold_infos_string(info_string) + expected_infos.zip(infos).each do |expected_info, info| + assert_not_nil info + expected_info.each do |key, value| + assert_equal value.to_s, info[key] + end + end end end