Skip to content

Unit Test Plan: 6. Testing key_mapping.gd #352 - #374

Merged
ikostan merged 8 commits into
mainfrom
unit-test-plan-testing-key_mappinggd
Feb 4, 2026
Merged

ikostan merged 8 commits into
mainfrom
unit-test-plan-testing-key_mappinggd

Conversation

@ikostan

@ikostan ikostan commented Feb 4, 2026

Copy link
Copy Markdown
Owner

Introduce a new GUT test suite test/gut/test_key_mapping_menu_device_aware.gd that verifies key mapping menu behavior (KM-01..KM-13). Covers device toggling (keyboard/gamepad), mutual exclusivity, UI label sync, reset semantics (per-device and defaults), persistence via user config, invalid input handling during remap, signal connections, logging sanity, and rapid-toggle stress. Tests instantiate key_mapping_menu.tscn, drive CheckButtons and InputRemapButton instances, and include setup/teardown to preserve/cleanup a temporary user config.


name: Default Pull Request Template
about: Suggesting changes to SkyLockAssault
title: ''
labels: ''
assignees: ''

Description

What does this PR do? (e.g., "Fixes player jump physics in level 2" or "Adds
new enemy AI script")

Related Issue

Closes #ISSUE_NUMBER (if applicable)

Changes

  • List key changes here (e.g., "Updated Jump.gd to use Godot 4.4's new Tween
    system")
  • Any breaking changes? (e.g., "Deprecated old signal; migrate to new one")

Testing

  • Ran the game in Godot v4.5 editor—describe what you tested (e.g., "Jump
    works on Win10 with 60 FPS")
  • Any new unit tests added? (Link to test scene if yes)
  • Screenshots/GIFs if UI-related: (Attach below)

Checklist

  • Code follows Godot style guide (e.g., snake_case for variables)
  • No console errors in editor/output
  • Ready for review!

Additional Notes

Anything else? (e.g., "Tested on Win10 64-bit; needs Linux validation")

Summary by Sourcery

Tests:

  • Introduce comprehensive device-aware unit tests for the key mapping menu covering keyboard/gamepad toggling, mutual exclusivity, reset semantics, persistence, invalid input handling, signal wiring, and rapid toggle behavior.

Summary by CodeRabbit

  • Tests
    • Added a comprehensive, device-aware test suite (13 cases) for the Key Mapping Menu covering keyboard/gamepad toggling, mutual exclusivity, remap updates, resets and defaults, persistence across reloads, invalid-input handling, UI node/signals and label synchronization, rapid-toggle stress, and logging/validation behaviors.
    • Includes lifecycle/setup handling, per-suite config backup, and input remapping simulation helpers.

Introduce a new GUT test suite test/gut/test_key_mapping_menu_device_aware.gd that verifies key mapping menu behavior (KM-01..KM-13). Covers device toggling (keyboard/gamepad), mutual exclusivity, UI label sync, reset semantics (per-device and defaults), persistence via user config, invalid input handling during remap, signal connections, logging sanity, and rapid-toggle stress. Tests instantiate key_mapping_menu.tscn, drive CheckButtons and InputRemapButton instances, and include setup/teardown to preserve/cleanup a temporary user config.
@sourcery-ai

sourcery-ai Bot commented Feb 4, 2026

Copy link
Copy Markdown
Contributor

Reviewer's Guide

Adds a new GUT test suite that instantiates the key mapping menu scene and exhaustively tests device-aware behavior (keyboard vs gamepad), remapping, reset and persistence semantics, invalid input handling, and signal wiring for key mapping actions.

File-Level Changes

Change Details Files
Introduce a device-aware GUT test suite for key mapping menu behavior (KM-01..KM-13).
  • Adds per-suite setup/teardown that backs up and restores existing settings configs and uses a dedicated test config path.
  • Resets and repopulates InputMap with keyboard and gamepad defaults before each test, then instantiates key_mapping_menu.tscn and wires key UI nodes for assertions.
  • Implements a helper to simulate remapping for keyboard keys and gamepad button/axis events and asserts the listening lifecycle on InputRemapButton.
  • Covers device toggling and mutual exclusivity between keyboard and gamepad CheckButtons and ensures all remap buttons track the selected device.
  • Verifies UI label synchronization for default and remapped bindings, device-specific reset semantics, persistence across reload via Settings.save_input_mappings/load_input_mappings, and that invalid inputs during remap are ignored without changing mappings.
  • Adds tests around signal connections, basic logging sanity, rapid device-toggle stress, and UI node presence to catch wiring or structural regressions.
test/gut/test_key_mapping_menu_device_aware.gd

Assessment against linked issues

Issue Objective Addressed Explanation
#352 Add a GUT-based unit test suite for the Key Mapping Menu that covers device-aware behavior (keyboard/gamepad toggling, mutual exclusivity, remap button updates, reset behavior, UI node/signal validation, logging, persistence, invalid input handling, rapid-toggle stress, and UI label sync) as defined by KM-01 through KM-13.

Possibly linked issues


Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@ikostan ikostan moved this to In Progress in Sky Lock Assault Project Feb 4, 2026

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've left some high level feedback:

  • In before_all/after_all you recompute backup_path as a string literal instead of using a shared constant; consider extracting user://test_backup_device_aware.cfg into a const to avoid drift between setup/teardown paths.
  • In _remap_button you directly call the button’s _on_pressed() and _input() methods; using the public signals (pressed.emit() and feeding events via the scene tree) would make the tests less tightly coupled to InputRemapButton internals and more resilient to refactors.
  • In test_km_11_rapid_toggle_stress the final assertion uses 19 % 2 == 1 inline; since the loop bounds are fixed you can simplify this by asserting the explicitly expected device (GAMEPAD) or deriving it from the final button state to avoid a magic number in the test.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- In `before_all`/`after_all` you recompute `backup_path` as a string literal instead of using a shared constant; consider extracting `user://test_backup_device_aware.cfg` into a `const` to avoid drift between setup/teardown paths.
- In `_remap_button` you directly call the button’s `_on_pressed()` and `_input()` methods; using the public signals (`pressed.emit()` and feeding events via the scene tree) would make the tests less tightly coupled to `InputRemapButton` internals and more resilient to refactors.
- In `test_km_11_rapid_toggle_stress` the final assertion uses `19 % 2 == 1` inline; since the loop bounds are fixed you can simplify this by asserting the explicitly expected device (GAMEPAD) or deriving it from the final button state to avoid a magic number in the test.

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

@coderabbitai

coderabbitai Bot commented Feb 4, 2026

Copy link
Copy Markdown
Contributor

Warning

Rate limit exceeded

@ikostan has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 12 minutes and 15 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 26c41bf and e941aed.

📒 Files selected for processing (1)
  • test/gut/test_key_mapping_menu_device_aware.gd
📝 Walkthrough

Walkthrough

Adds a new GUT test suite file implementing 13 device-aware Key Mapping Menu tests covering device toggles, remapping, resets, persistence, UI validation, signals, logging, invalid inputs, and stress scenarios for keyboard and gamepad modes.

Changes

Cohort / File(s) Summary
Key Mapping Menu Device-Aware Tests
test/gut/test_key_mapping_menu_device_aware.gd
New GUT test file (+314 lines) adding 13 tests (KM-01..KM-13), lifecycle hooks (before_all/before_each/after_each/after_all), helper for simulating remap input, new constants/vars for actions/UI, and assertions for device-aware remapping, persistence, UI sync, logging, and invalid input handling.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related issues

Possibly related PRs

Poem

🐰 I hop through tests, thirteen steps in tune,
Keyboard and gamepad hum under the moon.
Buttons remapped, labels neat and bright,
Persistence held through day and night.
Bugs beware — this rabbit's on the hunt!

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 inconclusive)
Check name Status Explanation Resolution
Description check ❓ Inconclusive The PR description includes a clear summary of the test suite and its coverage, but the template sections are mostly checked off without meaningful detail or specific information. Provide specific details in each template section: explain what the Changes section involves, describe which testing environments were used, clarify if any breaking changes exist, and add concrete notes about test coverage and any limitations.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the PR as introducing a unit test plan for testing key_mapping.gd, referencing issue #352, which directly matches the changeset adding a comprehensive GUT test suite.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch unit-test-plan-testing-key_mappinggd

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In `@test/gut/test_key_mapping_menu_device_aware.gd`:
- Around line 224-244: test_km_09_persistence sets keyboard_btn.button_pressed
and gamepad_btn.button_pressed but never emits their toggled signals before
calling _remap_button, so device context isn't switched; after setting
keyboard_btn.button_pressed = true call keyboard_btn.toggled.emit(true) before
the first _remap_button call, and likewise after setting
gamepad_btn.button_pressed = true call gamepad_btn.toggled.emit(true) before the
second _remap_button call so the remaps apply to the intended devices
(references: test_km_09_persistence, keyboard_btn, gamepad_btn, _remap_button,
toggled.emit).
- Around line 179-195: The test fails to update the menu's device state because
you set keyboard_btn.button_pressed/gamepad_btn.button_pressed without emitting
their toggled signals; update test_km_05_reset_current_device to emit the
corresponding toggled signal immediately after each button_pressed change so the
menu handlers run: after the first keyboard_btn.button_pressed = true call emit
keyboard_btn.toggled.emit(false) (to select keyboard) before calling
_remap_button, after the gamepad_btn.button_pressed = true emit
gamepad_btn.toggled.emit(true) before the D-Pad remap, and before reset emit
keyboard_btn.toggled.emit(false) so _on_reset_pressed reads the correct keyboard
state; this keeps _remap_button, update_all_remap_buttons,
_on_keyboard_toggled/_on_gamepad_toggled and input_remap_button.gd::_input in
sync.
🧹 Nitpick comments (2)
test/gut/test_key_mapping_menu_device_aware.gd (2)

214-221: Replace always‑true assertion with log capture.
Consider using GUT’s log capture/spy utilities to assert expected debug output instead of assert_true(true).


263-275: Make expected device derive from loop, not a constant.
19 % 2 is fixed; if the iteration count changes the assertion silently drifts. Track the expected device inside the loop.

♻️ Suggested tweak
-	for i in range(20):
+	var expected_device = InputRemapButton.DeviceType.KEYBOARD
+	for i in range(20):
 		if i % 2 == 0:
 			keyboard_btn.button_pressed = true
 			keyboard_btn.toggled.emit(true)
+			expected_device = InputRemapButton.DeviceType.KEYBOARD
 		else:
 			gamepad_btn.button_pressed = true
 			gamepad_btn.toggled.emit(true)
+			expected_device = InputRemapButton.DeviceType.GAMEPAD
 		menu.update_all_remap_buttons()
 		assert_true(keyboard_btn.button_pressed or gamepad_btn.button_pressed)
 		assert_false(keyboard_btn.button_pressed and gamepad_btn.button_pressed)
-	assert_eq(speed_up_btn.current_device, InputRemapButton.DeviceType.GAMEPAD if 19 % 2 == 1 else InputRemapButton.DeviceType.KEYBOARD)
+	assert_eq(speed_up_btn.current_device, expected_device)
📜 Review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e1d1ed7 and e3e56dd.

📒 Files selected for processing (1)
  • test/gut/test_key_mapping_menu_device_aware.gd
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Browser Functional Tests / test
🔇 Additional comments (14)
test/gut/test_key_mapping_menu_device_aware.gd (14)

25-31: LGTM for config backup setup.
Clean and minimal; preserves existing user settings.


83-89: LGTM for per-test cleanup.
Queue-free + frame wait is appropriate for teardown.


92-104: LGTM for per-suite restore.
Restores backups safely and cleans temporary files.


107-123: LGTM for remap helper.
Clear, deterministic input simulation.


126-135: LGTM for KM‑01.
Toggle test is clear and covers device propagation.


138-147: LGTM for KM‑02.
Covers expected gamepad activation behavior.


150-162: LGTM for KM‑03.
Mutual exclusivity is correctly exercised both ways.


165-176: LGTM for KM‑04.
UI label updates are asserted for both devices.


198-204: LGTM for KM‑06.
Basic node existence coverage is good.


207-211: LGTM for KM‑07.
Signal wiring checks are straightforward.


247-260: LGTM for KM‑10.
Invalid input path is asserted cleanly.


278-287: LGTM for KM‑12.
Label sync checks are crisp and readable.


290-302: LGTM for KM‑13.
Default reset path is well covered.


34-81: No action needed. In Godot 4.x, add_child() is synchronous when the parent is already in the SceneTree (as it is here in a GUT test). The children's _ready() callbacks, including InputRemapButton._ready() which adds nodes to the "remap_buttons" group, complete before add_child() returns. The test code safely accesses the group and calls update_all_remap_buttons() immediately after.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment thread test/gut/test_key_mapping_menu_device_aware.gd
Comment thread test/gut/test_key_mapping_menu_device_aware.gd
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@test/gut/test_key_mapping_menu_device_aware.gd`:
- Around line 293-305: The test_km_13_reset_with_defaults has a missing keyboard
device toggle before calling reset: emit keyboard_btn.toggled(true) (same
pattern used for gamepad_btn) so the reset operates on the current device state;
update the setup so after setting keyboard_btn.button_pressed = true you call
keyboard_btn.toggled.emit(true) before reset_btn.pressed.emit(), ensuring
keyboard_btn, gamepad_btn and reset_btn interactions are consistent.
🧹 Nitpick comments (3)
test/gut/test_key_mapping_menu_device_aware.gd (3)

26-31: Consider checking return values from file operations.

DirAccess.copy_absolute() returns an Error code that is currently ignored. If the copy fails, the test suite would proceed without a valid backup, potentially corrupting user settings during cleanup.

♻️ Proposed fix to validate copy operations
 func before_all() -> void:
 	var backup_path: String = "user://test_backup_device_aware.cfg"
 	if FileAccess.file_exists(TEST_CONFIG_PATH):
-		DirAccess.copy_absolute(TEST_CONFIG_PATH, backup_path)
+		var err := DirAccess.copy_absolute(TEST_CONFIG_PATH, backup_path)
+		assert_eq(err, OK, "Failed to backup test config")
 	if FileAccess.file_exists(Settings.CONFIG_PATH):
-		DirAccess.copy_absolute(Settings.CONFIG_PATH, DEFAULT_CONFIG_BACKUP)
+		var err := DirAccess.copy_absolute(Settings.CONFIG_PATH, DEFAULT_CONFIG_BACKUP)
+		assert_eq(err, OK, "Failed to backup production config")

69-74: Potential scope issue: get_nodes_in_group returns all nodes in the SceneTree.

menu.get_tree().get_nodes_in_group("remap_buttons") retrieves all nodes in the group across the entire scene tree, not just descendants of menu. If other tests or scenes add nodes to this group, the array may contain unintended elements.

♻️ Proposed fix to filter by menu descendants
-	var nodes: Array[Node] = menu.get_tree().get_nodes_in_group("remap_buttons")
-	remap_buttons = []
-	for node: Node in nodes:
-		if node is InputRemapButton:
-			remap_buttons.append(node as InputRemapButton)
+	var all_nodes: Array[Node] = menu.get_tree().get_nodes_in_group("remap_buttons")
+	remap_buttons = []
+	for node: Node in all_nodes:
+		if node is InputRemapButton and menu.is_ancestor_of(node):
+			remap_buttons.append(node as InputRemapButton)

266-278: Consider simplifying the expected device assertion.

Line 278 uses 19 % 2 == 1 which is always true (19 is odd), making the ternary evaluate to GAMEPAD. While correct, this is confusing to read. Consider using a constant or direct value for clarity.

♻️ Proposed simplification
-	assert_eq(speed_up_btn.current_device, InputRemapButton.DeviceType.GAMEPAD if 19 % 2 == 1 else InputRemapButton.DeviceType.KEYBOARD)
+	# After 20 iterations (0-19), last iteration is i=19 (odd), so gamepad is active
+	assert_eq(speed_up_btn.current_device, InputRemapButton.DeviceType.GAMEPAD)
📜 Review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e3e56dd and 80223aa.

📒 Files selected for processing (1)
  • test/gut/test_key_mapping_menu_device_aware.gd
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Browser Functional Tests / test
🔇 Additional comments (4)
test/gut/test_key_mapping_menu_device_aware.gd (4)

1-23: LGTM!

Constants and instance variables are well-defined with proper type hints. The test configuration paths are appropriately namespaced to avoid conflicts with production settings.


83-105: LGTM!

The cleanup and restore logic properly handles test isolation and preserves user settings. The await get_tree().process_frame ensures deferred cleanup completes before the next test.


107-124: LGTM!

The helper correctly simulates remapping for different input event types. The direct _input() call is appropriate for unit testing, and the assertion at line 123 validates the remap completed successfully.


126-199: LGTM!

Tests KM-01 through KM-05 correctly emit toggled signals after setting button_pressed, ensuring the menu's device state handlers are triggered. The fix for KM-05 (previously flagged) is properly applied with toggled.emit() calls at lines 183, 187, and 192.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment thread test/gut/test_key_mapping_menu_device_aware.gd
ikostan and others added 5 commits February 3, 2026 20:21
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
… device switches).

The first two remaps in this test set button_pressed without emitting toggled, but later in the same test (lines after reload) properly emit the signal. All other tests consistently emit toggled after setting button_pressed before remapping. Without the signal, device context handlers may not be triggered, causing remaps to apply to the previous device.
DirAccess.copy_absolute() returns an Error code that is currently ignored. If the copy fails, the test suite would proceed without a valid backup, potentially corrupting user settings during cleanup.
… the SceneTree.

menu.get_tree().get_nodes_in_group("remap_buttons") retrieves all nodes in the group across the entire scene tree, not just descendants of menu. If other tests or scenes add nodes to this group, the array may contain unintended elements.
Line 278 uses 19 % 2 == 1 which is always true (19 is odd), making the ternary evaluate to GAMEPAD. While correct, this is confusing to read. Consider using a constant or direct value for clarity.
@ikostan

ikostan commented Feb 4, 2026

Copy link
Copy Markdown
Owner Author

@sourcery-ai review

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've left some high level feedback:

  • Several tests assert against hard-coded UI text values like "W", "Right Trigger", and "D-Pad Left"; consider deriving these from the same label/translation helpers used in production (or asserting on underlying InputMap events instead) so that tests are resilient to localization or label changes.
  • The tests interact with remap buttons via private methods (_on_pressed, _input) and direct property twiddling; where possible, prefer going through public APIs or emitting the appropriate signals to better mirror real usage and reduce coupling to internal implementation details.
  • The backup path string for user://test_backup_device_aware.cfg and the config backup/restore logic is duplicated between before_all and after_all; consider centralizing this into a small helper or constant to avoid divergence if the backup behavior needs to change.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- Several tests assert against hard-coded UI text values like "W", "Right Trigger", and "D-Pad Left"; consider deriving these from the same label/translation helpers used in production (or asserting on underlying InputMap events instead) so that tests are resilient to localization or label changes.
- The tests interact with remap buttons via private methods (`_on_pressed`, `_input`) and direct property twiddling; where possible, prefer going through public APIs or emitting the appropriate signals to better mirror real usage and reduce coupling to internal implementation details.
- The backup path string for `user://test_backup_device_aware.cfg` and the config backup/restore logic is duplicated between `before_all` and `after_all`; consider centralizing this into a small helper or constant to avoid divergence if the backup behavior needs to change.

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

The backup path string for user://test_backup_device_aware.cfg and the config backup/restore logic is duplicated between before_all and after_all; consider centralizing this into a small helper or constant to avoid divergence if the backup behavior needs to change.
@ikostan
ikostan merged commit 002884d into main Feb 4, 2026
9 checks passed
@github-project-automation github-project-automation Bot moved this from In Progress to Done in Sky Lock Assault Project Feb 4, 2026
@ikostan
ikostan deleted the unit-test-plan-testing-key_mappinggd branch February 4, 2026 05:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

Unit Test Plan: 6. Testing key_mapping.gd

1 participant