diff --git a/testing/bin/ktest-to-cxx b/testing/bin/ktest-to-cxx index e788490c..5f1f2aac 100644 --- a/testing/bin/ktest-to-cxx +++ b/testing/bin/ktest-to-cxx @@ -138,6 +138,76 @@ sub load_from_text { keys => [@keys] }; } + if ( $content =~ /^no mouse-report/ ) { + return { + report_type => 'mouse', + count => 0 + }; + } + if ( $content =~ /^mouse-report\s+(.*)$/ ) { + my $report_data = $1; + my @args = split( /,?\s+/, lc $report_data ); + my $mouse_report_data = {}; + $mouse_report_data->{buttons} = []; + $mouse_report_data->{x} = "0"; + $mouse_report_data->{y} = "0"; + $mouse_report_data->{v} = "0"; + $mouse_report_data->{h} = "0"; + if ( scalar(@args) == 1 && $args[0] =~ /^empty$/i ) { + @args = (); + } + for my $arg (@args) { + if ( $arg =~ /(\w+)=([\w\d\-\+]+)/ ) { + my $field = $1; + my $value = $2; + if ( $field =~ /button/ ) { + if ( $value =~ /^l/ ) { + $value = 'MouseReport::kButtonLeft'; + } + elsif ( $value =~ /^r/ ) { + $value = 'MouseReport::kButtonRight'; + } + elsif ( $value =~ /^m/ ) { + $value = 'MouseReport::kButtonMiddle'; + } + elsif ( $value =~ /^n/ ) { + $value = 'MouseReport::kButtonNext'; + } + elsif ( $value =~ /^p/ ) { + $value = 'MouseReport::kButtonPrev'; + } + else { + die +"Couldn't parse mouse button value from $content at line $line_num"; + } + push @{ $mouse_report_data->{buttons} }, $value; + } + elsif ( $field =~ /x/ ) { + $mouse_report_data->{x} = $value; + } + elsif ( $field =~ /y/ ) { + $mouse_report_data->{y} = $value; + } + elsif ( $field =~ /v/ ) { + $mouse_report_data->{v} = $value; + } + elsif ( $field =~ /h/ ) { + $mouse_report_data->{h} = $value; + } + else { + die "Don't know how parse $content at line $line_num"; + } + } + else { + die "Don't know how parse $content at line $line_num"; + } + } + return { + count => 1, # We expect one report here + report_type => 'mouse', + data => $mouse_report_data, + } + } else { die "Don't know how parse $content at line $line_num"; } @@ -394,15 +464,22 @@ sub generate_release { sub generate_expect_report { my $report = shift; - if ( !$report->{data}->{report_type} - || $report->{data}->{report_type} ne 'keyboard' ) - { + if ( $report->{data}->{report_type} eq 'keyboard' ) { + generate_expect_keyboard_report($report); + } + elsif ( $report->{data}->{report_type} eq 'mouse' ) { + generate_expect_mouse_report($report); + } + else { die -"Don't know how to work with expectaions of reports other than 'keyboard' reports at line #" +"Don't know how to handle expectaions of report types other than 'keyboard' and 'mouse' at line #" . $report->{line_num} . "\n"; - } $reports_expected++; +} + +sub generate_expect_keyboard_report { + my $report = shift; if ( $report->{data}->{count} == 0 ) { if ( $report->{comment} ) { @@ -428,6 +505,37 @@ sub generate_expect_report { cxx(""); } +sub generate_expect_mouse_report { + my $report = shift; + + if ( $report->{data}->{count} == 0 ) { + if ( $report->{comment} ) { + cxx_comment( $report->{comment} ); + } + cxx_comment( +"We don't expect any report here, and have told the tests to check that" + ); + return; + } + + my $buttons_code = "0"; + my @buttons = ( ref( $report->{data}->{data}{buttons} ) + ? @{ $report->{data}->{data}{buttons} } + : ( $report->{data}->{data}{buttons} ) ); + for my $button_value (@buttons) { + $buttons_code .= " | $button_value"; + } + cxx("ExpectMouseReport($buttons_code, " + . $report->{data}{data}{x} . ", " + . $report->{data}{data}{y} . ", " + . $report->{data}{data}{v} . ", " + . $report->{data}{data}{h} . ", " + . "\"" + . ( $report->{comment} || 'No explanatory comment specified' ) + . "\");" ); + cxx(""); +} + sub generate_check_expected_reports { cxx(""); cxx("LoadState();");