event_filter: add new test cases

genodelabs/genode#4069
This commit is contained in:
Johannes Schlatow 2021-04-27 17:17:04 +02:00 committed by Norman Feske
parent d80b2a150a
commit a2491c30b3
2 changed files with 98 additions and 2 deletions

View File

@ -483,6 +483,68 @@ append config {
<usb> <press code="KEY_A"/> <release code="KEY_A"/> </usb>
<expect_press code="KEY_A" char="b"/> <expect_release code="KEY_A"/>
<message string="test remap of KEY_UNKNOWN"/>
<filter_config>
<output>
<remap>
<key name="KEY_UNKNOWN" to="KEY_A"/>
<input name="usb"/>
</remap>
</output>
<policy label_suffix="usb" input="usb"/>
</filter_config>
<sleep ms="100"/>
<usb>
<press code="KEY_UNKNOWN" />
<release code="KEY_UNKNOWN"/>
</usb>
<expect_press code="KEY_A" />
<expect_release code="KEY_A" />
<message string="test ignore-key"/>
<filter_config>
<output>
<remap>
<key name="KEY_UNKNOWN" to="KEY_A"/>
<ignore-key name="KEY_UNKNOWN"/>
<input name="usb"/>
</remap>
</output>
<policy label_suffix="usb" input="usb"/>
</filter_config>
<sleep ms="100"/>
<usb>
<press code="KEY_UNKNOWN" />
<release code="KEY_UNKNOWN"/>
<press code="KEY_B" />
<release code="KEY_B"/>
</usb>
<not_expect_press code="KEY_A" />
<not_expect_release code="KEY_A" />
<message string="test log output"/>
<filter_config>
<output>
<log prefix="Remapped ">
<remap>
<key name="KEY_UNKNOWN" to="KEY_A"/>
<log prefix="Unremapped ">
<input name="usb"/>
</log>
</remap>
</log>
</output>
<policy label_suffix="usb" input="usb"/>
</filter_config>
<sleep ms="100"/>
<usb>
<press code="KEY_UNKNOWN" />
<release code="KEY_UNKNOWN"/>
</usb>
</config>
<route>
<service name="Event"> <child name="event_filter"/> </service>
@ -508,4 +570,11 @@ build_boot_image $boot_modules
append qemu_args " -nographic "
run_genode_until {.*child "test-event_filter" exited with exit value 0.*} 60
grep_output {mapped event}
unify_output {\t} { }
compare_output_to {
[init -> event_filter] Unremapped event #0 PRESS KEY_UNKNOWN 65534 key count: 1
[init -> event_filter] Remapped event #0 PRESS KEY_A 65534 key count: 1
[init -> event_filter] Unremapped event #1 RELEASE KEY_UNKNOWN key count: 0
[init -> event_filter] Remapped event #1 RELEASE KEY_A key count: 0
}

View File

@ -335,6 +335,8 @@ struct Test::Main : Input_from_filter::Event_handler
_input_from_filter.input_expected(step.type() == "expect_press" ||
step.type() == "expect_release" ||
step.type() == "not_expect_press" ||
step.type() == "not_expect_release" ||
step.type() == "expect_char" ||
step.type() == "expect_motion" ||
step.type() == "expect_wheel");
@ -396,6 +398,7 @@ struct Test::Main : Input_from_filter::Event_handler
}
if (step.type() == "expect_press" || step.type() == "expect_release"
|| step.type() == "not_expect_press" || step.type() == "not_expect_release"
|| step.type() == "expect_char" || step.type() == "expect_motion"
|| step.type() == "expect_wheel")
return;
@ -424,6 +427,7 @@ struct Test::Main : Input_from_filter::Event_handler
Xml_node const step = _curr_step_xml();
bool step_succeeded = false;
bool step_failed = false;
ev.handle_press([&] (Input::Keycode key, Codepoint codepoint) {
@ -438,12 +442,30 @@ struct Test::Main : Input_from_filter::Event_handler
&& ((!step.has_attribute("char") && !step.has_attribute("codepoint")) ||
codepoint_of_step(step).value == codepoint.value))
step_succeeded = true;
if (step.type() == "not_expect_press") {
if (step.attribute_value("code", Value()) == Input::key_name(key)
&& ((!step.has_attribute("char") && !step.has_attribute("codepoint")) ||
codepoint_of_step(step).value == codepoint.value))
step_failed = true;
else
step_succeeded = true;
}
});
ev.handle_release([&] (Input::Keycode key) {
if (step.type() == "expect_release"
&& step.attribute_value("code", Value()) == Input::key_name(key))
step_succeeded = true; });
step_succeeded = true;
if (step.type() == "not_expect_release") {
if (step.attribute_value("code", Value()) == Input::key_name(key))
step_failed = true;
else
step_succeeded = true;
}
});
ev.handle_wheel([&] (int x, int y) {
if (step.type() == "expect_wheel"
@ -463,6 +485,11 @@ struct Test::Main : Input_from_filter::Event_handler
&& (!step.has_attribute("ay") || step.attribute_value("ay", 0L) == y))
step_succeeded = true; });
if (step_failed) {
error("got unexpected event: ", step);
throw Exception();
}
if (step_succeeded) {
_advance_step();
_execute_curr_step();