bootsnap/test/compile_cache_handler_error...

78 lines
2.8 KiB
Ruby

# frozen_string_literal: true
require "test_helper"
class CompileCacheHandlerErrorsTest < Minitest::Test
include CompileCacheISeqHelper
include TmpdirHelper
# now test three failure modes of each handler method:
# 1. unexpected type
# 2. invalid instance of expected type
# 3. exception
def test_input_to_storage_unexpected_type
path = Help.set_file("a.rb", "a = 3", 100)
Bootsnap::CompileCache::ISeq.expects(:input_to_storage).returns(nil)
# this could be made slightly more obvious though.
assert_raises(TypeError) { load(path) }
end
def test_input_to_storage_invalid_instance_of_expected_type
path = Help.set_file("a.rb", "a = 3", 100)
Bootsnap::CompileCache::ISeq.expects(:input_to_storage).returns("broken")
Bootsnap::CompileCache::ISeq.expects(:input_to_output).with("a = 3", nil).returns("whatever")
_, err = capture_subprocess_io do
load(path)
end
assert_match(/broken binary/, err)
end
def test_input_to_storage_raises
path = Help.set_file("a.rb", "a = 3", 100)
klass = Class.new(StandardError)
Bootsnap::CompileCache::ISeq.expects(:input_to_storage).raises(klass, "oops")
assert_raises(klass) { load(path) }
end
def test_storage_to_output_unexpected_type
path = Help.set_file("a.rb", "a = a = 3", 100)
Bootsnap::CompileCache::ISeq.expects(:storage_to_output).returns(Object.new)
# It seems like ruby doesn't really care.
load(path)
end
# not really a thing. Really, we just return whatever. It's a problem with
# the handler if that's invalid.
# def test_storage_to_output_invalid_instance_of_expected_type
def test_storage_to_output_raises
path = Help.set_file("a.rb", "a = a = 3", 100)
klass = Class.new(StandardError)
Bootsnap::CompileCache::ISeq.expects(:storage_to_output).times(2).raises(klass, "oops")
assert_raises(klass) { load(path) }
# called from two paths; this tests the second.
assert_raises(klass) { load(path) }
end
def test_input_to_output_unexpected_type
path = Help.set_file("a.rb", "a = a = 3", 100)
Bootsnap::CompileCache::ISeq.expects(:input_to_storage).returns(Bootsnap::CompileCache::UNCOMPILABLE)
Bootsnap::CompileCache::ISeq.expects(:input_to_output).returns(Object.new)
# It seems like ruby doesn't really care.
load(path)
end
# not really a thing. Really, we just return whatever. It's a problem with
# the handler if that's invalid.
# def test_input_to_output_invalid_instance_of_expected_type
def test_input_to_output_raises
path = Help.set_file("a.rb", "a = 3", 100)
klass = Class.new(StandardError)
Bootsnap::CompileCache::ISeq.expects(:input_to_storage).returns(Bootsnap::CompileCache::UNCOMPILABLE)
Bootsnap::CompileCache::ISeq.expects(:input_to_output).raises(klass, "oops")
assert_raises(klass) { load(path) }
end
end