aboutsummaryrefslogtreecommitdiff
path: root/builtin/fstk/tabview.lua
diff options
context:
space:
mode:
Diffstat (limited to 'builtin/fstk/tabview.lua')
0 files changed, 0 insertions, 0 deletions
d='n42' href='#n42'>42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
--
-- exception handler test module
--
--
-- To avoid this from crashing the module will startup in inactive mode.
-- to make specific errors happen you need to cause them by following
-- chat command:
--
-- exceptiontest <location> <errortype>
--
-- location has to be one of:
--   * mapgen:          cause in next on_generate call
--   * entity_step:     spawn a entity and make it do error in on_step
--   * globalstep:      do error in next globalstep
--   * immediate:       cause right in chat handler
--
-- errortypes defined are:
--   * segv:            make sigsegv happen
--   * zerodivision:    cause a division by zero to happen
--   * exception:       throw an exception

if core.cause_error == nil or
	type(core.cause_error) ~= "function" then
	return
end
	

core.log("action", "WARNING: loading exception handler test module!")

local exceptiondata = {
	tocause = "none",
	mapgen = false,
	entity_step = false,
	globalstep = false,
}

local exception_entity =
{
	on_step = function(self, dtime)
		if exceptiondata.entity_step then
			core.cause_error(exceptiondata.tocause)
		end
	end,
}
local exception_entity_name = "errorhandler_test:error_entity"

local function exception_chat_handler(playername, param)
	local parameters = param:split(" ")
	
	if #parameters ~= 2 then
		core.chat_send_player(playername, "Invalid argument count for exceptiontest")
	end
	
	core.log("error", "Causing error at:" .. parameters[1])
	
	if parameters[1] == "mapgen" then
		exceptiondata.tocause = parameters[2]
		exceptiondata.mapgen = true
	elseif parameters[1] == "entity_step" then
		--spawn entity at player location
		local player = core.get_player_by_name(playername)
		
		if player:is_player() then
			local pos = player:getpos()
			
			core.add_entity(pos, exception_entity_name)
		end
		
		exceptiondata.tocause = parameters[2]
		exceptiondata.entity_step = true
		
	elseif parameters[1] == "globalstep" then
		exceptiondata.tocause = parameters[2]
		exceptiondata.globalstep = true
		
	elseif parameters[1] == "immediate" then
		core.cause_error(parameters[2])
		
	else
		core.chat_send_player(playername, "Invalid error location: " .. dump(parameters[1]))
	end
end

core.register_chatcommand("exceptiontest",
	{
		params      = "<location> <errortype>",
		description = "cause a given error to happen.\n" ..