mirror of
https://github.com/ThrowTheSwitch/CMock
synced 2025-02-08 10:48:42 -05:00
51 lines
2.1 KiB
Ruby
51 lines
2.1 KiB
Ruby
# =========================================================================
|
|
# CMock - Automatic Mock Generation for C
|
|
# ThrowTheSwitch.org
|
|
# Copyright (c) 2007-25 Mike Karlesky, Mark VanderVoord, & Greg Williams
|
|
# SPDX-License-Identifier: MIT
|
|
# =========================================================================
|
|
|
|
class CMockGeneratorPluginCexception
|
|
attr_reader :priority, :config, :utils
|
|
|
|
def initialize(config, utils)
|
|
@config = config
|
|
@utils = utils
|
|
@priority = 7
|
|
raise 'Error: cexception is not supported without setjmp support' if @config.exclude_setjmp_h
|
|
end
|
|
|
|
def include_files
|
|
"#include \"CException.h\"\n"
|
|
end
|
|
|
|
def instance_typedefs(_function)
|
|
" CEXCEPTION_T ExceptionToThrow;\n"
|
|
end
|
|
|
|
def mock_function_declarations(function)
|
|
if function[:args_string] == 'void'
|
|
"#define #{function[:name]}_ExpectAndThrow(cmock_to_throw) #{function[:name]}_CMockExpectAndThrow(__LINE__, cmock_to_throw)\n" \
|
|
"void #{function[:name]}_CMockExpectAndThrow(UNITY_LINE_TYPE cmock_line, CEXCEPTION_T cmock_to_throw);\n"
|
|
else
|
|
"#define #{function[:name]}_ExpectAndThrow(#{function[:args_call]}, cmock_to_throw) #{function[:name]}_CMockExpectAndThrow(__LINE__, #{function[:args_call]}, cmock_to_throw)\n" \
|
|
"void #{function[:name]}_CMockExpectAndThrow(UNITY_LINE_TYPE cmock_line, #{function[:args_string]}, CEXCEPTION_T cmock_to_throw);\n"
|
|
end
|
|
end
|
|
|
|
def mock_implementation(_function)
|
|
" if (cmock_call_instance->ExceptionToThrow != CEXCEPTION_NONE)\n {\n" \
|
|
" UNITY_CLR_DETAILS();\n" \
|
|
" Throw(cmock_call_instance->ExceptionToThrow);\n }\n"
|
|
end
|
|
|
|
def mock_interfaces(function)
|
|
arg_insert = function[:args_string] == 'void' ? '' : "#{function[:args_string]}, "
|
|
["void #{function[:name]}_CMockExpectAndThrow(UNITY_LINE_TYPE cmock_line, #{arg_insert}CEXCEPTION_T cmock_to_throw)\n{\n",
|
|
@utils.code_add_base_expectation(function[:name]),
|
|
@utils.code_call_argument_loader(function),
|
|
" cmock_call_instance->ExceptionToThrow = cmock_to_throw;\n",
|
|
"}\n\n"].join
|
|
end
|
|
end
|