diff --git a/testing/bin/ktest-to-cxx b/testing/bin/ktest-to-cxx index db5d0ed1..b86bbfd5 100644 --- a/testing/bin/ktest-to-cxx +++ b/testing/bin/ktest-to-cxx @@ -13,6 +13,10 @@ my $depth = 0; my $reports_expected = 0; my @script_lines; my $named_switches = {}; +my $inside_test = 0; + +my $test_class = 'GeneratedKTest'; + GetOptions( "cxx=s" => \$cxx_filename, # string @@ -77,19 +81,11 @@ sub load_from_text { } return undef; }, - type => sub { - my $type = shift; - $type =~ s/\s(\w)/uc($1)/eg; - $test->{type} = $type; - return undef; - }, name => sub { my $name = shift; $name =~ s/\s(\w)/uc($1)/eg; - $test->{name} = $name; - return undef; + return { test_name => $name }; }, - keyswitch => sub { my $content = shift; if ( $content =~ /^(.*)\s+(\d+)\s+(\d+)$/ ) { @@ -208,36 +204,53 @@ sub generate_key_addrs { } } +sub generate_start_new_test { + my $entry = shift; + my $name = $entry->{data}->{test_name}; + if ($inside_test) { + generate_end_test(); + } + cxx( "TEST_F(" . $test_class . "," . $name . ") {" ); + $inside_test = 1; + indent(); +} +sub generate_end_test { + if ($reports_expected) { + generate_check_expected_reports(); + } + outdent(); + cxx("} // TEST_F"); + $inside_test = 0; +} sub generate_script { cxx_section("Test script"); - cxx( "TEST_F(" . $test->{type} . "," . $test->{name} . ") {" ); - indent(); $reports_expected = 0; for my $entry (@script_lines) { - if ($entry->{comment} && (! $entry->{action} ) ) { - cxx_comment($entry->{comment}); - } elsif (my $action = $entry->{action} ) { - - if ( $action eq 'press' ) { generate_press( $entry ) } - elsif ( $action eq 'release' ) { generate_release( $entry ); } - elsif ( $action eq 'run' ) { generate_run( $entry ) } - elsif ( $action eq 'expect' ) { generate_expect_report( $entry ); } - else { - die "$action unknown on line $entry->{line_num}"; - } + if ( $entry->{comment} && ( !$entry->{action} ) ) { + cxx_comment( $entry->{comment} ); + } + elsif ( my $action = $entry->{action} ) { + + if ( $action eq 'name' ) { generate_start_new_test($entry) } + elsif ( !$inside_test ) { + die "Attempting to run an action when not inside a test section on line " . $entry->{line_num} . "\n"; + } + elsif ( $action eq 'press' ) { generate_press($entry) } + elsif ( $action eq 'release' ) { generate_release($entry); } + elsif ( $action eq 'run' ) { generate_run($entry) } + elsif ( $action eq 'expect' ) { generate_expect_report($entry); } + else { + die "$action unknown on line $entry->{line_num}"; + } } } - if ($reports_expected) { - generate_check_expected_reports(); - } + generate_end_test(); - outdent(); - cxx("} // TEST_F"); } sub generate_run { @@ -290,6 +303,7 @@ sub generate_check_expected_reports { } sub generate_preface { + my $preface = <{type}]} : public VirtualDeviceTest {}; +class @{[$test_class]} : public VirtualDeviceTest {}; EOF for my $line (split/\n/,$preface) { diff --git a/tests/examples/basic-keypress/test.ktest b/tests/examples/basic-keypress/test.ktest index e2968c8f..8f40a91c 100644 --- a/tests/examples/basic-keypress/test.ktest +++ b/tests/examples/basic-keypress/test.ktest @@ -1,5 +1,4 @@ VERSION 1 -TYPE KeyboardReports NAME Keys Active When pressed # Comment lines end up as comments in the generated source diff --git a/tests/features/keycodes/test.ktest b/tests/features/keycodes/test.ktest index 0878dbe2..d126d77b 100644 --- a/tests/features/keycodes/test.ktest +++ b/tests/features/keycodes/test.ktest @@ -1,5 +1,4 @@ VERSION 1 -TYPE Keycode NAME Keyboard Non Modifiers KEYSWITCH A 2 1 @@ -17,7 +16,6 @@ RELEASE A EXPECT keyboard-report empty # Report should be empty # TODO, this should be generate a second test stanza -# TYPE Keycode # NAME Keyboard Modifiers RUN 10 ms diff --git a/tests/issues/941/test.ktest b/tests/issues/941/test.ktest index 11f29651..eb208ba0 100644 --- a/tests/issues/941/test.ktest +++ b/tests/issues/941/test.ktest @@ -1,5 +1,4 @@ -TYPE Issue941 -NAME one keypress per cycle +NAME Issue 941 one keypress per cycle KEYSWITCH A 2 1 KEYSWITCH S 2 2