| #!/usr/bin/env ruby |
| # |
| # A simple function to create useful asserts |
| # |
| # |
| # |
| # |
| # |
| |
| |
| # |
| # Exception raised when some swig binding test fails |
| # |
| class SwigRubyError < RuntimeError |
| end |
| |
| |
| # |
| # Asserts whether a and b are equal. |
| # |
| # scope - optional Binding where to run the code |
| # msg - optional additional message to print |
| # |
| def swig_assert_equal( a, b, scope = nil, msg = nil ) |
| begin |
| check = "#{a} == #{b}" |
| if scope.kind_of? Binding |
| ok = eval(check.to_s, scope) |
| else |
| ok = eval(check.to_s) |
| if !msg |
| msg = scope |
| scope = nil |
| end |
| end |
| rescue => e |
| raise |
| end |
| |
| unless ok |
| valA = eval(a, scope) |
| valB = eval(b, scope) |
| raise SwigRubyError.new("FAILED EQUALITY: #{check} was #{valA} not #{valB}") |
| end |
| |
| if $VERBOSE |
| $stdout.puts "\tPASSED EQUALITY #{check} #{msg}" |
| end |
| |
| return ok |
| rescue => e |
| trace = e.backtrace[1..-1] |
| $stderr.puts "#{trace[0,1]}: #{e}" |
| if trace.size > 1 |
| $stderr.puts "\tfrom #{trace[1..-1].join("\n\t ")}" |
| end |
| exit(1) |
| end |
| |
| |
| # |
| # Asserts whether an expression runs properly and is true |
| # |
| # scope - optional Binding where to run the code |
| # msg - optional additional message to print |
| # |
| def swig_assert( expr, scope = nil, msg = nil ) |
| begin |
| if scope.kind_of? Binding |
| ok = eval(expr.to_s, scope) |
| else |
| ok = eval(expr.to_s) |
| msg = scope if !msg |
| end |
| rescue |
| raise |
| end |
| |
| raise SwigRubyError.new("FAILED: #{expr.to_s} - #{msg}") unless ok |
| |
| if $VERBOSE |
| $stdout.puts "\tPASSED #{expr} #{msg}" |
| end |
| rescue => e |
| trace = e.backtrace[1..-1] |
| $stderr.puts "#{trace[0,1]}: #{e}" |
| if trace.size > 1 |
| $stderr.puts "\tfrom #{trace[1..-1].join("\n\t ")}" |
| end |
| exit(1) |
| end |
| |
| # |
| # Asserts whether an expression runs properly |
| # |
| # scope - optional Binding where to run the code |
| # msg - optional additional message to print |
| # |
| def swig_eval( expr, scope = nil, msg = nil ) |
| begin |
| if scope.kind_of? Binding |
| eval(expr.to_s, scope) |
| else |
| eval(expr.to_s) |
| msg = scope if !msg |
| end |
| rescue => e |
| raise SwigRubyError.new("Wrong assert: #{expr.to_s} - #{e}") |
| end |
| if $VERBOSE |
| $stdout.puts "\tPASSED #{expr} #{msg}" |
| end |
| rescue => e |
| trace = e.backtrace[1..-1] |
| $stderr.puts "#{trace[0,1]}: #{e}" |
| if trace.size > 1 |
| $stderr.puts "\tfrom #{trace[1..-1].join("\n\t ")}" |
| end |
| exit(1) |
| end |
| |
| |
| # |
| # Given a set of lines as text, runs each of them, asserting them. |
| # Lines that are of the form: |
| # a == b are run with swig_assert_equal |
| # others are run with swig_eval. |
| # |
| # scope - optional Binding where to run the code |
| # msg - optional additional message to print |
| # |
| def swig_assert_each_line( lines, scope = nil, msg = nil ) |
| lines.split("\n").each do |line| |
| next if line.empty? or line =~ /^\s*#.*/ |
| if line =~ /^\s*([^\s]*)\s*==\s*(.*)\s*$/ |
| swig_assert_equal($1, $2, scope, msg) |
| else |
| swig_eval(line, scope, msg) |
| end |
| end |
| end |