Files
mruby-mruby/test/assert.rb
T
Yuichiro MASUI 280bad605e Run mrbgems test run on isolate mrb_state each rb file.
Can access to current gem's name through GEMNAME from test.

Can change assert library each mrbgems. used spec.test_preload on mrbgem.rake.

assert library should set $ok_test, $ko_test, $kill_test, $asserts.
2013-01-07 02:58:36 +09:00

87 lines
1.7 KiB
Ruby

$ok_test = 0
$ko_test = 0
$kill_test = 0
$asserts = []
$test_start = Time.now if Object.const_defined?(:Time)
##
# Create the assertion in a readable way
def assertion_string(err, str, iso=nil, e=nil)
msg = "#{err}#{str}"
msg += " [#{iso}]" if iso && iso != ''
msg += " => #{e.message}" if e
msg += " (mrbgems: #{GEMNAME})" if Object.const_defined?(:GEMNAME)
msg
end
##
# Verify a code block.
#
# str : A remark which will be printed in case
# this assertion fails
# iso : The ISO reference code of the feature
# which will be tested by this
# assertion
def assert(str = 'Assertion failed', iso = '')
begin
if(!yield)
$asserts.push(assertion_string('Fail: ', str, iso))
$ko_test += 1
print('F')
else
$ok_test += 1
print('.')
end
rescue Exception => e
$asserts.push(assertion_string('Error: ', str, iso, e))
$kill_test += 1
print('X')
end
end
##
# Report the test result and print all assertions
# which were reported broken.
def report()
print "\n"
$asserts.each do |msg|
puts msg
end
$total_test = $ok_test.+($ko_test)
print('Total: ')
print($total_test)
print("\n")
print(' OK: ')
print($ok_test)
print("\n")
print(' KO: ')
print($ko_test)
print("\n")
print('Crash: ')
print($kill_test)
print("\n")
if Object.const_defined?(:Time)
print(' Time: ')
print(Time.now - $test_start)
print(" seconds\n")
end
end
##
# Performs fuzzy check for equality on methods returning floats
# on the basis of the Math::TOLERANCE constant.
def check_float(a, b)
tolerance = Math::TOLERANCE
a = a.to_f
b = b.to_f
if a.finite? and b.finite?
(a-b).abs < tolerance
else
true
end
end