class Test
Public Class Methods
new()
click to toggle source
# File lib/pre/generate-spec.rb, line 11 def initialize time_out = 1 results = do_test(time_out) @spec_file = "spec/regression_spec.rb" puts_spec(@spec_file, results) end
Public Instance Methods
append_to_csv(results = @results)
click to toggle source
# File lib/tst-reg-test.rb, line 28 def append_to_csv(results = @results) results2 = [] results.each do | key, values | values.each do | value | value[:reason] = key results2.push value end end results2.sort!{|x, y| x[:index] <=> y[:index]} if FileTest.exist?(@csv_file) old_data = CSV.read(@csv_file, "rb:UTF-8") CSV.open(@csv_file, "wb:UTF-8") do |csv| csv << (old_data.shift) + [Time.now.to_s] results2.each do | result | old_row = old_data.shift break if !old_row || old_row.size == 0 regex = result[:test] || result[:reg] if old_row[0].to_i != result[:index] raise "regex not matched. csv: #{old_row}, new: #{result}" end csv << old_row + [result[:reason]] end end else CSV.open(@csv_file, "wb:UTF-8") do |csv| csv << ["ID", "REGEXP", Time.now.to_s] results2.each do | result | regex = result[:test] || result[:reg] csv << [result[:index], regex, result[:reason]] end end end end
check_normal_test(reg, results, timeout_seconds)
click to toggle source
# File lib/pre/generate-spec.rb, line 78 def check_normal_test(reg, results, timeout_seconds) result = nil a_test = eval("/#{reg}/") timeout(timeout_seconds) do 10.times do | i | md = a_test.match_data(seed: i) if(md) # print "OK md:#{md}," result = { explain: "can parse (#{reg}) and generate match-data", expect: "/#{reg}/.match_data", to_be: "MatchData" } else warn "Failed. reg='#{a_test}', reason=#{obj.reason}" result = { explain: "cannot parse / generate (#{reg})", expect: "/#{reg}/.match_data", to_be: "Nil" } break end end end results.push result rescue => ex warn "GOO: #{ex} #{ex.class}" results.push({ explain: "raises #{ex}, when parse / generate (#{reg})", expect: "/#{reg}/.match_data", raises: "#{ex.class}" }) end
do_test(timeout_seconds)
click to toggle source
# File lib/pre/generate-spec.rb, line 19 def do_test(timeout_seconds) results = [] get_lines(timeout_seconds).each_with_index do | line, i | begin warn line eval(line) rescue SyntaxError => ex warn "EVAL ERROR: #{ex}, #{line}" #results.push({ # explain: "raises #{ex}, when eval (#{line})", # expect: "eval('#{line}')", # raises: "#{ex.class}" #}) end end results end
get_lines(timeout_seconds)
click to toggle source
# File lib/pre/generate-spec.rb, line 58 def get_lines(timeout_seconds) lines = [] # py_source = IO.read("./contrib/Onigmo/testpy.py") File::open("./contrib/Onigmo/testpy.py") do |f| f.each.with_index do |line, line_num| # break if line_num > 800 line.force_encoding("utf-8") if !line.match(/ONIG_SYNTAX_PERL/) if(md = line.match(/^\s*(?:x|x2|n)\s*\(.+?$/u) rescue nil) line.sub!(/,\s*\".+?$/, ", results, timeout_seconds)") rescue nil lines.push line if line end else warn "Perl syntax. \nline:#{line}" end end end lines end
n(reg, *params)
click to toggle source
# File lib/pre/generate-spec.rb, line 120 def n(reg, *params) check_normal_test(reg, *params) end
print_results(results = @results)
click to toggle source
# File lib/tst-reg-test.rb, line 62 def print_results(results = @results) puts "" (results[:failed] + results[:bug]).each do | failed_hash | regex = failed_hash[:reg] || failed_hash[:result][:reg] puts "=======" puts " type: #{failed_hash[:type] || failed_hash[:result][:result]}" puts " test: #{regex}" puts " info: #{failed_hash[:info] || failed_hash[:result][:reason]}" puts " indx: #{failed_hash[:index]}" pp failed_hash end puts "======" puts "success: #{results[:success].size}" puts "bug: #{results[:bug].size}" puts "failed: #{results[:failed].size}" puts "impossible: #{results[:impossible].size}" puts "others: #{results[:others].size}" puts "timeout: #{results[:timeout].size}" puts "regexp error: #{results[:not_scope].size}" puts "perl_syntax: #{results[:perl_syntax].size}" end
puts_spec(spec_file, results)
click to toggle source
# File lib/pre/generate-spec.rb, line 37 def puts_spec(spec_file, results) File.open(spec_file, "w") do |fp| fp.puts "require 'spec_helper'" fp.puts "describe Regextest do" results.each do | result | explain = result[:explain].gsub("'", "\\\\'") expect = result[:expect] # .gsub("'", "\\\\'") fp.puts " it '#{explain}' do" if result[:to_be] fp.puts " expect(#{expect}).to be_a(#{result[:to_be]})" elsif result[:raises] fp.puts " expect {#{expect}}.to raise_error(#{result[:raises]})" else raise "Invalid result: #{result}" end fp.puts " end" end fp.puts "end" end end
x(reg, *params)
click to toggle source
# File lib/pre/generate-spec.rb, line 112 def x(reg, *params) check_normal_test(reg, *params) end
x2(reg, *params)
click to toggle source
# File lib/pre/generate-spec.rb, line 116 def x2(reg, *params) check_normal_test(reg, *params) end