Skip to content

Commit 2852f6f

Browse files
committed
test: test that key layout map manager reads the first found key layout
1 parent c5b4a77 commit 2852f6f

2 files changed

Lines changed: 67 additions & 10 deletions

File tree

base/src/main/java/io/github/sds100/keymapper/base/actions/PerformActionsUseCase.kt

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ import io.github.sds100.keymapper.system.devices.DevicesAdapter
5252
import io.github.sds100.keymapper.system.display.DisplayAdapter
5353
import io.github.sds100.keymapper.system.files.FileAdapter
5454
import io.github.sds100.keymapper.system.files.FileUtils
55+
import io.github.sds100.keymapper.system.inputevents.KMEvdevEvent
5556
import io.github.sds100.keymapper.system.inputevents.KeyEventUtils
5657
import io.github.sds100.keymapper.system.inputevents.Scancode
5758
import io.github.sds100.keymapper.system.inputmethod.InputMethodAdapter
@@ -198,20 +199,26 @@ class PerformActionsUseCaseImpl @AssistedInject constructor(
198199
)
199200

200201
if (inputEventAction == InputEventAction.DOWN_UP) {
201-
result = inputEventHub.injectKeyEvent(
202-
model,
203-
useSystemBridgeIfAvailable = injectKeyEventsWithSystemBridge.value,
202+
result = inputEventHub.injectEvdevEvent(
203+
deviceId = 0,
204+
type = KMEvdevEvent.TYPE_KEY_EVENT,
205+
code = Scancode.KEY_VOLUMEUP,
206+
value = 1,
204207
)
205208
.then {
206-
inputEventHub.injectKeyEvent(
207-
model.copy(action = KeyEvent.ACTION_UP),
208-
useSystemBridgeIfAvailable = injectKeyEventsWithSystemBridge.value,
209+
inputEventHub.injectEvdevEvent(
210+
deviceId = 0,
211+
type = KMEvdevEvent.TYPE_KEY_EVENT,
212+
code = Scancode.KEY_VOLUMEUP,
213+
value = 0,
209214
)
210215
}
211216
} else {
212-
result = inputEventHub.injectKeyEvent(
213-
model,
214-
useSystemBridgeIfAvailable = injectKeyEventsWithSystemBridge.value,
217+
result = inputEventHub.injectEvdevEvent(
218+
deviceId = 0,
219+
type = KMEvdevEvent.TYPE_KEY_EVENT,
220+
code = Scancode.KEY_VOLUMEUP,
221+
value = if (inputEventAction == InputEventAction.DOWN) 1 else 0,
215222
)
216223
}
217224
}

evdev/src/main/rust/evdev_manager/core/tests/key_layout_map_manager_test.rs

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
//! Tests for KeyLayoutMapManager file finding logic.
22
use assertables::{assert_iter_eq, assert_none, assert_ok, assert_result_ok, assert_some};
3-
use evdev_manager_core::android::android_codes::AKEYCODE_MINUS;
3+
use evdev_manager_core::android::android_codes::{
4+
AKEYCODE_HOME, AKEYCODE_MINUS, AKEYCODE_MOVE_HOME,
5+
};
46
use evdev_manager_core::android::keylayout::key_layout_map_manager::{
57
KeyLayoutFileFinder, KeyLayoutMapManager,
68
};
@@ -237,6 +239,7 @@ fn test_map_key_reads_from_cache() {
237239
);
238240
}
239241

242+
#[test]
240243
fn test_map_key_saves_to_cache() {
241244
// Create a mock file finder that returns no files
242245
let test_kl_path = get_test_data_path().join("Generic.kl");
@@ -285,3 +288,50 @@ fn test_map_key_finds_file_if_cache_miss() {
285288

286289
assert_eq!(map_key_result.key_code, AKEYCODE_MINUS);
287290
}
291+
292+
#[test]
293+
fn test_map_key_reads_first_found_path() {
294+
// Create a mock file finder that returns no files
295+
let mock_finder = MockFileFinder::new()
296+
.add_system_file("Generic", get_test_data_path().join("Generic.kl"))
297+
.add_system_file("gpio-keys", get_test_data_path().join("6t/gpio-keys.kl"));
298+
299+
let manager = KeyLayoutMapManager::with_file_finder(Arc::new(mock_finder));
300+
301+
let device = DeviceIdentifier {
302+
name: "gpio-keys".to_string(),
303+
bus: 0x0003,
304+
vendor: 0x9999,
305+
product: 0x8888,
306+
version: 0x0001,
307+
};
308+
309+
// Verify the cached value is returned by comparing the pointers
310+
let map_key_result = manager.map_key(&device, 102).unwrap().unwrap();
311+
312+
// In gpio-keys.kl this is HOME and in Generic.kl this is MOVE_HOME
313+
assert_eq!(map_key_result.key_code, AKEYCODE_HOME);
314+
}
315+
316+
#[test]
317+
fn test_map_key_reads_generic_if_device_specific_not_found() {
318+
// Create a mock file finder that returns no files
319+
let mock_finder =
320+
MockFileFinder::new().add_system_file("Generic", get_test_data_path().join("Generic.kl"));
321+
322+
let manager = KeyLayoutMapManager::with_file_finder(Arc::new(mock_finder));
323+
324+
let device = DeviceIdentifier {
325+
name: "gpio-keys".to_string(),
326+
bus: 0x0003,
327+
vendor: 0x9999,
328+
product: 0x8888,
329+
version: 0x0001,
330+
};
331+
332+
// Verify the cached value is returned by comparing the pointers
333+
let map_key_result = manager.map_key(&device, 102).unwrap().unwrap();
334+
335+
// In gpio-keys.kl this is HOME and in Generic.kl this is MOVE_HOME
336+
assert_eq!(map_key_result.key_code, AKEYCODE_MOVE_HOME);
337+
}

0 commit comments

Comments
 (0)