Files
meow/test/test_helper.rb
T

70 lines
1.8 KiB
Ruby
Raw Normal View History

2026-09-17 23:43:47 +02:00
module Kernel
def _(text)
text
end unless method_defined?(:_)
end
2026-09-17 13:33:45 +02:00
module MeowTest
Failure = Class.new(StandardError)
@tests = []
class << self
attr_reader :tests, :last_result
def test(name, &block)
@tests << [name, block]
end
def assert(value, message = "Expected value to be truthy")
raise Failure, message unless value
end
def refute(value, message = "Expected value to be falsey")
raise Failure, message if value
end
def assert_equal(expected, actual, message = nil)
return if expected == actual
detail = "Expected #{expected.inspect}, got #{actual.inspect}"
raise Failure, [message, detail].compact.join(": ")
end
def assert_empty(value, message = nil)
assert(value.empty?, message || "Expected #{value.inspect} to be empty")
end
2026-09-17 16:18:16 +02:00
def assert_raises(error_class)
yield
rescue error_class => error
return error
rescue StandardError => error
raise Failure, "Expected #{error_class}, got #{error.class}: #{error.message}"
else
raise Failure, "Expected #{error_class} to be raised"
end
2026-09-17 13:33:45 +02:00
def run!
failures = []
@tests.each do |name, test|
test.call
puts "PASS #{name}"
rescue StandardError => error
failures << [name, error]
puts "FAIL #{name}: #{error.class}: #{error.message}"
end
@last_result = {
:tests => @tests.length,
:passed => @tests.length - failures.length,
:failures => failures.length,
:failure_details => failures.map { |name, error| "#{name}: #{error.class}: #{error.message}" }
}
puts "#{@last_result[:passed]}/#{@last_result[:tests]} tests passed"
raise Failure, @last_result[:failure_details].join("\n") unless failures.empty?
@last_result
end
end
end