diff options
Diffstat (limited to 'Examples/test-suite/ruby/swig_assert.rb')
| -rwxr-xr-x | Examples/test-suite/ruby/swig_assert.rb | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/Examples/test-suite/ruby/swig_assert.rb b/Examples/test-suite/ruby/swig_assert.rb new file mode 100755 index 0000000..200b083 --- /dev/null +++ b/Examples/test-suite/ruby/swig_assert.rb @@ -0,0 +1,141 @@ +#!/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 |
