Purpose: Systematic tracking of test scenarios for node query and signal functionality
Last Updated: October 10, 2025
Status Legend: โ
PASS | โ ๏ธ PARTIAL | โ TODO | ๐ง IN PROGRESS | ๐ฅ FAIL
| Test ID | Scenario | Input | Expected Output | Unit Test (Runtime) | Unit Test (Compiler) | Integration Test | Headless Test | Status |
|---|---|---|---|---|---|---|---|---|
| NQ-001 | Basic child access | "Player" |
Node object | โ test_call_get_node_function | โ test_get_node_valid | โ node_query_basic.ferris | โ Implicit | โ PASS |
| NQ-002 | Nested path | "UI/HUD/HealthBar" |
Node object | โ ๏ธ test_node_query_error_handling | โ | โ ๏ธ node_query_error_handling.ferris | โ | โ ๏ธ PARTIAL |
| NQ-003 | Missing node | "NonExistent" |
Error E603 | โ ๏ธ test_node_query_error_handling | โ | โ node_query_error_demo.ferris | โ ๏ธ Error demo | โ PASS |
| NQ-004 | Wrong arg count (0) | get_node() |
Error E601 | โ | โ test_get_node_wrong_arg_count | โ | โ | โ ๏ธ PARTIAL |
| NQ-005 | Wrong arg count (2+) | get_node("A", "B") |
Error E601 | โ | โ test_get_node_wrong_arg_count | โ | โ | โ ๏ธ PARTIAL |
| NQ-006 | Wrong arg type | get_node(123) |
Error E602 | โ | โ test_get_node_wrong_arg_type | โ | โ | โ ๏ธ PARTIAL |
| NQ-007 | No callback set | "Player" |
SelfObject | โ test_node_query_without_callback | โ | โ | โ | โ ๏ธ PARTIAL |
| NQ-008 | Empty string | "" |
Error E603 | โ test_get_node_empty_string | โ | โ | โ | โ PASS |
| NQ-009 | Path with spaces | "My Player" |
Node or error | โ | โ | โ | โ | โ TODO |
| NQ-010 | Path with special chars | "Player-1" |
Node or error | โ | โ | โ | โ | โ TODO |
| NQ-011 | Relative path | "../Sibling" |
Node or error | โ | โ | โ | โ | โ TODO |
| NQ-012 | Absolute path | "/root/Main" |
Node or error | โ | โ | โ | โ | โ TODO |
| NQ-013 | Very long path | "A" * 500 |
Node or error | โ | โ | โ | โ | โ TODO |
| NQ-014 | Unicode path | "็ฉๅฎถ" |
Node or error | โ | โ | โ | โ | โ TODO |
| NQ-015 | Trailing slash | "Player/" |
Node or error | โ | โ | โ | โ | โ TODO |
| Test ID | Scenario | Input | Expected Output | Unit Test (Runtime) | Unit Test (Compiler) | Integration Test | Headless Test | Status |
|---|---|---|---|---|---|---|---|---|
| NQ-020 | Basic usage | get_parent() |
Parent node | โ test_call_get_parent_function | โ test_get_parent_valid | โ node_query_basic.ferris | โ Implicit | โ PASS |
| NQ-021 | With args (error) | get_parent("arg") |
Error E605 | โ | โ test_get_parent_with_args | โ | โ | โ ๏ธ PARTIAL |
| NQ-022 | No callback set | get_parent() |
Error E606 | โ test_get_parent_without_callback | โ | โ | โ | โ PASS |
| NQ-023 | At root node | get_parent() |
Null/error? | โ | โ | โ | โ | โ TODO |
| Test ID | Scenario | Input | Expected Output | Unit Test (Runtime) | Unit Test (Compiler) | Integration Test | Headless Test | Status |
|---|---|---|---|---|---|---|---|---|
| NQ-030 | Node exists | "Player" |
true |
โ test_call_has_node_function | โ test_has_node_valid | โ node_query_validation.ferris | โ Implicit | โ PASS |
| NQ-031 | Node doesnโt exist | "Missing" |
false |
โ test_call_has_node_function | โ | โ node_query_validation.ferris | โ | โ PASS |
| NQ-032 | Wrong arg count (0) | has_node() |
Error E607 | โ | โ test_has_node_wrong_arg_count | โ | โ | โ ๏ธ PARTIAL |
| NQ-033 | Wrong arg count (2+) | has_node("A", "B") |
Error E607 | โ | โ test_has_node_wrong_arg_count | โ | โ | โ ๏ธ PARTIAL |
| NQ-034 | Wrong arg type | has_node(123) |
Error E608 | โ | โ test_has_node_wrong_arg_type | โ | โ | โ ๏ธ PARTIAL |
| NQ-035 | No callback set | "Player" |
Error E609 | โ test_has_node_without_callback | โ | โ | โ | โ PASS |
| NQ-036 | Nested path (exists) | "UI/HUD" |
true |
โ | โ | โ ๏ธ node_query_validation.ferris | โ | โ ๏ธ PARTIAL |
| NQ-037 | Empty string | "" |
Callback error | โ test_has_node_empty_string | โ | โ | โ | โ PASS |
| Test ID | Scenario | Input | Expected Output | Unit Test (Runtime) | Unit Test (Compiler) | Integration Test | Headless Test | Status |
|---|---|---|---|---|---|---|---|---|
| NQ-040 | Basic search | "Enemy" |
Node object | โ test_call_find_child_function | โ test_find_child_valid | โ node_query_search.ferris | โ Implicit | โ PASS |
| NQ-041 | Wrong arg count (0) | find_child() |
Error E610 | โ | โ test_find_child_wrong_arg_count | โ | โ | โ ๏ธ PARTIAL |
| NQ-042 | Wrong arg count (2+) | find_child("A", "B") |
Error E610 | โ | โ test_find_child_wrong_arg_count | โ | โ | โ ๏ธ PARTIAL |
| NQ-043 | Wrong arg type | find_child(123) |
Error E611 | โ | โ test_find_child_wrong_arg_type | โ | โ | โ ๏ธ PARTIAL |
| NQ-044 | No callback set | "Enemy" |
SelfObject | โ | โ | โ | โ | โ TODO |
| NQ-045 | Not found | "NonExistent" |
Null/error? | โ | โ | โ | โ | โ TODO |
| NQ-046 | Multiple matches | "Item" (2+ exist) |
First match | โ | โ | โ | โ | โ TODO |
| NQ-047 | Deep nesting | Name 10+ levels deep | Node object | โ | โ | โ ๏ธ node_query_search.ferris | โ | โ ๏ธ PARTIAL |
| NQ-048 | Case sensitivity | "enemy" vs "Enemy" |
Match or not? | โ | โ | โ | โ | โ TODO |
| NQ-049 | Empty string | "" |
Error E611 | โ | โ | โ | โ | โ TODO |
| Test ID | Scenario | Input | Expected Output | Unit Test (Runtime) | Unit Test (Compiler) | Integration Test | Headless Test | Status |
|---|---|---|---|---|---|---|---|---|
| SIG-001 | No parameters | signal player_died; |
Success | โ test_signal_declaration_in_program | โ test_signal_no_params | โ signals.ferris | โ | โ PASS |
| SIG-002 | With parameters | signal health_changed(i32, i32); |
Success | โ test_register_signal | โ test_signal_declaration_valid | โ signals.ferris | โ | โ PASS |
| SIG-003 | Multiple types | signal item(String, i32, f32); |
Success | โ | โ | โ signals.ferris | โ | โ ๏ธ PARTIAL |
| SIG-004 | Duplicate signal | signal x; signal x; |
Error E401 | โ | โ test_signal_duplicate_name_error | โ | โ | โ ๏ธ PARTIAL |
| SIG-005 | Undefined type | signal x(Unknown); |
Error E402 | โ | โ test_signal_undefined_type_error | โ | โ | โ ๏ธ PARTIAL |
| SIG-006 | Missing semicolon | signal x() |
Parse error | โ | โ test_parse_signal_missing_semicolon | โ | โ | โ ๏ธ PARTIAL |
| SIG-007 | Missing parens | signal x; (should have ()) |
Parse error? | โ | โ test_parse_signal_missing_parens | โ | โ | โ ๏ธ PARTIAL |
| SIG-008 | Many signals | 50+ signals | Success | โ | โ | โ | โ | โ TODO |
| SIG-009 | Very long name | 100+ chars | Success or error | โ | โ | โ | โ | โ TODO |
| SIG-010 | Unicode name | signal ไฟกๅท; |
Success or error | โ | โ | โ | โ | โ TODO |
| SIG-011 | Special chars in name | signal player_died!; |
Parse error | โ | โ | โ | โ | โ TODO |
| SIG-012 | Many parameters | 10+ params | Success or error | โ | โ | โ | โ | โ TODO |
| Test ID | Scenario | Input | Expected Output | Unit Test (Runtime) | Unit Test (Compiler) | Integration Test | Headless Test | Status |
|---|---|---|---|---|---|---|---|---|
| SIG-020 | Basic emission | emit_signal("player_died"); |
Callback invoked | โ test_emit_signal_in_function | โ test_emit_signal_valid | โ signals.ferris | โ | โ PASS |
| SIG-021 | With parameters | emit_signal("health_changed", 100, 80); |
Callback with args | โ test_signal_emitter_callback_invoked | โ | โ signals.ferris | โ | โ PASS |
| SIG-022 | No parameters | emit_signal("player_died"); |
Callback invoked | โ test_emit_signal_with_no_params | โ ๏ธ Implied | โ signals.ferris | โ | โ PASS |
| SIG-023 | All types | i32, f32, bool, String, Vector2 | Correct types passed | โ test_signal_emitter_callback_all_types | โ | โ ๏ธ signals.ferris | โ | โ PASS |
| SIG-024 | No callback set | emit_signal("x"); |
Returns Nil | โ test_signal_emitter_without_callback | โ | โ | โ | โ PASS |
| SIG-025 | Callback error | Callback panics | Error handled | โ test_signal_emitter_error_handling | โ | โ | โ | โ PASS |
| SIG-026 | No signal name | emit_signal(); |
Error E501 | โ test_emit_signal_error_no_signal_name | โ | โ | โ | โ PASS |
| SIG-027 | Invalid name type | emit_signal(123); |
Error E502 | โ test_emit_signal_error_invalid_signal_name_type | โ | โ | โ | โ PASS |
| SIG-028 | Undefined signal | emit_signal("unknown"); |
Error E403 | โ | โ test_emit_signal_undefined_error | โ | โ | โ ๏ธ PARTIAL |
| SIG-029 | Param count mismatch | emit_signal("x", 1) (expects 0) |
Error E404 | โ | โ test_emit_signal_param_count_mismatch | โ | โ | โ ๏ธ PARTIAL |
| SIG-030 | Param type mismatch | emit_signal("x", "str") (expects i32) |
Error E405 | โ | โ test_emit_signal_param_type_mismatch | โ | โ | โ ๏ธ PARTIAL |
| SIG-031 | Type coercion | emit_signal("x", 42) (expects f32) |
Coerced to f32 | โ | โ test_emit_signal_type_coercion | โ | โ | โ ๏ธ PARTIAL |
| SIG-032 | In _ready | emit_signal("x"); in _ready |
Success | โ | โ | โ ๏ธ signals.ferris | โ | โ ๏ธ PARTIAL |
| SIG-033 | In _process | emit_signal("x"); in _process |
Success | โ | โ | โ ๏ธ signals.ferris | โ | โ ๏ธ PARTIAL |
| SIG-034 | In conditional | if (x) emit_signal("y"); |
Success | โ | โ | โ ๏ธ signals.ferris | โ | โ ๏ธ PARTIAL |
| SIG-035 | In loop | for (...) emit_signal("x"); |
Success | โ | โ | โ | โ | โ TODO |
| SIG-036 | Multiple emissions | Sequential calls | All invoked | โ | โ | โ ๏ธ signals.ferris | โ | โ ๏ธ PARTIAL |
| SIG-037 | Signal name variable | let s = "x"; emit_signal(s); |
Error E205 (NOT SUPPORTED) | โ test_emit_signal_name_as_variable | โ | โ | โ | โ PASS |
| SIG-038 | Nested emission | Signal handler emits signal | Success or error | โ | โ | โ | โ | โ TODO |
| SIG-039 | Recursive emission | Signal AโBโA | Stack overflow? | โ | โ | โ | โ | โ TODO |
Node Queries:
Signals:
Overall: