Converted .function file to c-like format and adapted generator code
diff --git a/tests/scripts/generate_code.pl b/tests/scripts/generate_code.pl
index 43c71fc..d167605 100755
--- a/tests/scripts/generate_code.pl
+++ b/tests/scripts/generate_code.pl
@@ -31,8 +31,8 @@
my $test_data = <TEST_DATA>;
close(TEST_DATA);
-my ( $suite_header ) = $test_cases =~ /BEGIN_HEADER\n(.*?)\nEND_HEADER/s;
-my ( $suite_defines ) = $test_cases =~ /BEGIN_DEPENDENCIES\n(.*?)\nEND_DEPENDENCIES/s;
+my ( $suite_header ) = $test_cases =~ /\/\* BEGIN_HEADER \*\/\n(.*?)\n\/\* END_HEADER \*\//s;
+my ( $suite_defines ) = $test_cases =~ /\/\* BEGIN_DEPENDENCIES\n \* (.*?)\n \* END_DEPENDENCIES/s;
my $requirements;
if ($suite_defines =~ /^depends_on:/)
@@ -69,23 +69,34 @@
END
-while($test_cases =~ /BEGIN_CASE *([\w:]*)\n(\w+):([^\n]*)\n\{\n(.*?)\}\nEND_CASE/sg)
+while($test_cases =~ /\/\* BEGIN_CASE *([\w:]*) \*\/\n(.*?)\n\/\* END_CASE \*\//msg)
{
my $function_deps = $1;
- my $function_name = $2;
- my $function_params = $3;
- my $function_code = $4;
+ my $function_decl = $2;
+
+ # Sanity checks of function
+ if ($function_decl !~ /^void /)
+ {
+ die "Test function does not have 'void' as return type\n";
+ }
+ if ($function_decl !~ /^void (\w+)\(\s*(.*?)\s*\)\s*{(.*?)}/ms)
+ {
+ die "Function declaration not in expected format\n";
+ }
+ my $function_name = $1;
+ my $function_params = $2;
my $function_pre_code;
my $function_post_code;
- my @param_decl;
my $param_defs;
my $param_checks;
my @dispatch_params;
- my @var_def_arr = split(/:/, $function_params);
+ my @var_def_arr = split(/,\s*/, $function_params);
my $i = 1;
my $mapping_regex = "".$function_name;
my $mapping_count = 0;
+ $function_decl =~ s/^void /void test_suite_/;
+
if ($function_deps =~ /^depends_on:/)
{
( $function_deps ) = $function_deps =~ /^depends_on:(.*)$/;
@@ -100,29 +111,28 @@
foreach my $def (@var_def_arr)
{
# Handle the different parameter types
-
- if( substr($def, 0, 1) eq "#" )
+ if( substr($def, 0, 4) eq "int " )
{
$param_defs .= " int param$i;\n";
$param_checks .= " if( verify_int( params[$i], ¶m$i ) != 0 ) return( 2 );\n";
push @dispatch_params, "param$i";
- $def =~ s/#//;
- push @param_decl, "int $def";
$mapping_regex .= ":([\\d\\w |\\+\\-\\(\\)]+)";
$mapping_count++;
}
- else
+ elsif( substr($def, 0, 6) eq "char *" )
{
$param_defs .= " char *param$i = params[$i];\n";
$param_checks .= " if( verify_string( ¶m$i ) != 0 ) return( 2 );\n";
push @dispatch_params, "param$i";
- push @param_decl, "char *$def";
$mapping_regex .= ":[^:]+";
}
+ else
+ {
+ die "Parameter declaration not of supported type (int, char *)\n";
+ }
$i++;
- $function_code =~ s/\{$def\}/$def/g;
}
# Find non-integer values we should map for this function
@@ -149,21 +159,16 @@
}
$param_checks
- ret = test_suite_$function_name( $call_params );
- return ( ret != 0 );
+ test_suite_$function_name( $call_params );
+ return ( 0 );
$function_post_code
return ( 3 );
}
else
END
- my $function_def = "int test_suite_$function_name(";
- $function_def .= join ", ", @param_decl;
- $function_def .= ")\n{\n";
-
- $function_code = $function_pre_code . $function_def . $function_code . "\n return( 0 );\n}\n";
- $function_code .= $function_post_code;
- $test_main =~ s/FUNCTION_CODE/$function_code\n\nFUNCTION_CODE/;
+ my $function_code = $function_pre_code . $function_decl . "\n" . $function_post_code;
+ $test_main =~ s/FUNCTION_CODE/$function_code\nFUNCTION_CODE/;
}
# Find specific case dependencies that we should be able to check