From 13c6bfbc2a318656d2aafb79a7730a73674a0261 Mon Sep 17 00:00:00 2001 From: Azim Khan Date: Thu, 15 Jun 2017 14:45:56 +0100 Subject: [PATCH] Gaurd test suite headers with suite dependency Test suite header code was not gaurded with test suite dependency. But some test suites have additional code in the headers section. Variables in that section become unused if suite functions are gaurded. Hence gaurded the headers section. But this changed cuased missing types in get_expression() function that was originally accessing types defined through suite headers. Hence had to gaurd expressions code as well. Gaurding expressions does not allow parsing the parameters when some types or hash defs are gaurded. Hence added function check_test() to check if test is allowed or not before parsing the parameters. --- tests/scripts/generate_code.py | 30 +++++++++++++++++++++------- tests/suites/desktop_test.function | 12 +++++++---- tests/suites/embedded_test.function | 2 ++ tests/suites/main_test.function | 31 +++++++++++++++++++++++++++-- 4 files changed, 62 insertions(+), 13 deletions(-) diff --git a/tests/scripts/generate_code.py b/tests/scripts/generate_code.py index f59eb7683..c6fc03f53 100644 --- a/tests/scripts/generate_code.py +++ b/tests/scripts/generate_code.py @@ -328,8 +328,8 @@ def parse_functions(funcs_f): function_idx += 1 ifdef, endif = gen_deps(suite_deps) - func_code = ifdef + suite_functions + endif - return dispatch_code, suite_headers, func_code, func_info + func_code = ifdef + suite_headers + suite_functions + endif + return suite_deps, dispatch_code, func_code, func_info def escaped_split(str, ch): @@ -443,13 +443,14 @@ else return exp_code -def gen_from_test_data(data_f, out_data_f, func_info): +def gen_from_test_data(data_f, out_data_f, func_info, suite_deps): """ Generates dependency checks, expression code and intermediate data file from test data file. :param data_f: :param out_data_f: :param func_info: + :param suite_deps: :return: """ unique_deps = [] @@ -500,7 +501,23 @@ def gen_from_test_data(data_f, out_data_f, func_info): if len(expression_code) == 0: expression_code = '(void) exp_id;\n' expression_code += '(void) out_value;\n' - + ifdef = gen_deps_one_line(suite_deps) + if len(suite_deps): + dep_check_code = ''' +{ifdef} +{code} +#else +(void) dep_id; +#endif +'''.format(ifdef=ifdef, code=dep_check_code) + expression_code = ''' +{ifdef} +{code} +#else +(void) exp_id; +(void) out_value; +#endif +'''.format(ifdef=ifdef, code=expression_code) return dep_check_code, expression_code @@ -539,11 +556,10 @@ def generate_code(funcs_file, data_file, template_file, platform_file, help_file # Function code with open(funcs_file, 'r') as funcs_f, open(data_file, 'r') as data_f, open(out_data_file, 'w') as out_data_f: - dispatch_code, func_headers, func_code, func_info = parse_functions(funcs_f) - snippets['function_headers'] = func_headers + suite_deps, dispatch_code, func_code, func_info = parse_functions(funcs_f) snippets['functions_code'] = func_code snippets['dispatch_code'] = dispatch_code - dep_check_code, expression_code = gen_from_test_data(data_f, out_data_f, func_info) + dep_check_code, expression_code = gen_from_test_data(data_f, out_data_f, func_info, suite_deps) snippets['dep_check_code'] = dep_check_code snippets['expression_code'] = expression_code diff --git a/tests/suites/desktop_test.function b/tests/suites/desktop_test.function index 9c9a0b2d4..4c790a85e 100644 --- a/tests/suites/desktop_test.function +++ b/tests/suites/desktop_test.function @@ -389,6 +389,7 @@ int execute_tests( int argc , const char ** argv ) const char **test_files = NULL; int testfile_count = 0; int option_verbose = 0; + int function_id = 0; /* Other Local variables */ int arg_index = 1; @@ -562,11 +563,14 @@ int execute_tests( int argc , const char ** argv ) } #endif /* __unix__ || __APPLE__ __MACH__ */ - ret = convert_params( cnt - 1, params + 1, int_params ); - if ( DISPATCH_TEST_SUCCESS == ret ) + function_id = strtol( params[0], NULL, 10 ); + if ( (ret = check_test( function_id )) == DISPATCH_TEST_SUCCESS ) { - int function_id = strtol( params[0], NULL, 10 ); - ret = dispatch_test( function_id, (void **)( params + 1 ) ); + ret = convert_params( cnt - 1, params + 1, int_params ); + if ( DISPATCH_TEST_SUCCESS == ret ) + { + ret = dispatch_test( function_id, (void **)( params + 1 ) ); + } } #if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) diff --git a/tests/suites/embedded_test.function b/tests/suites/embedded_test.function index 4436ccbdd..312cf9125 100644 --- a/tests/suites/embedded_test.function +++ b/tests/suites/embedded_test.function @@ -371,6 +371,8 @@ int execute_tests( int args, const char ** argv ) /* Read function id */ function_id = *p; INCR_ASSERT( p, data, data_len, sizeof( uint8_t ) ); + if ( ( ret = check_test( function_id ) ) != DISPATCH_TEST_SUCCESS ) + break; /* Read number of parameters */ count = *p; diff --git a/tests/suites/main_test.function b/tests/suites/main_test.function index 0dcab7d69..e294e3621 100644 --- a/tests/suites/main_test.function +++ b/tests/suites/main_test.function @@ -40,8 +40,6 @@ #define TEST_SUITE_ACTIVE -{function_headers} - {functions_code} #line {line_no} "suites/main_test.function" @@ -151,6 +149,35 @@ int dispatch_test( int func_idx, void ** params ) }} +/** + * \brief Checks if test function is supported + * + * \param exp_id Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( int func_idx ) +{{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + {{ + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = ( DISPATCH_UNSUPPORTED_SUITE ); + }} + else + {{ + ret = ( DISPATCH_TEST_FN_NOT_FOUND ); + }} + + return( ret ); +}} + + {platform_code} #line {line_no} "suites/main_test.function"