78 lines
2.5 KiB
GDScript
78 lines
2.5 KiB
GDScript
extends SceneTree
|
||
|
||
const EDGE_PADDING: String = " \t\n ⠀"
|
||
|
||
|
||
func _initialize() -> void:
|
||
call_deferred("_validate_protocol")
|
||
|
||
|
||
func _validate_protocol() -> void:
|
||
_validate_type_and_empty_handling()
|
||
_validate_message_cleanup()
|
||
_validate_roleplay_commands()
|
||
_validate_protocol_limits()
|
||
print("Network chat protocol validation: PASS")
|
||
quit()
|
||
|
||
|
||
func _validate_type_and_empty_handling() -> void:
|
||
assert(NetworkChatProtocol.sanitize_body(null) == "")
|
||
assert(NetworkChatProtocol.sanitize_body(42) == "")
|
||
assert(NetworkChatProtocol.sanitize_body(EDGE_PADDING) == "")
|
||
assert(NetworkChatProtocol.sanitize_body("\u0001") == "")
|
||
|
||
|
||
func _validate_message_cleanup() -> void:
|
||
assert(NetworkChatProtocol.sanitize_body(" hello ") == "hello")
|
||
assert(NetworkChatProtocol.sanitize_body("a\tb\nc") == "a b c")
|
||
assert(NetworkChatProtocol.sanitize_body("word word") == "word word")
|
||
assert(NetworkChatProtocol.sanitize_body(" !!! ") == "!!!")
|
||
assert(
|
||
NetworkChatProtocol.sanitize_body(
|
||
EDGE_PADDING + "visible" + EDGE_PADDING
|
||
) == "visible"
|
||
)
|
||
|
||
|
||
func _validate_roleplay_commands() -> void:
|
||
assert(NetworkChatProtocol.is_roleplay_body("/me waves"))
|
||
assert(NetworkChatProtocol.is_roleplay_body("/ME waves"))
|
||
assert(NetworkChatProtocol.is_roleplay_body("/me"))
|
||
assert(not NetworkChatProtocol.is_roleplay_body("/meow"))
|
||
assert(NetworkChatProtocol.roleplay_action("/me waves") == "waves")
|
||
assert(NetworkChatProtocol.roleplay_action(
|
||
"/me [color=red]waves[/color]"
|
||
) == "[color=red]waves[/color]")
|
||
assert(NetworkChatProtocol.valid_user_body("/me waves"))
|
||
assert(not NetworkChatProtocol.valid_user_body("/me"))
|
||
assert(not NetworkChatProtocol.valid_user_body("/me "))
|
||
assert(NetworkChatProtocol.valid_user_body("/meow"))
|
||
var signed_fields: Array = NetworkChatProtocol.signature_fields({
|
||
"session_id": "session",
|
||
"request_id": "request",
|
||
"sender_fingerprint": "fingerprint",
|
||
"body": "/me waves",
|
||
})
|
||
assert(signed_fields.back() == "/me waves")
|
||
|
||
|
||
func _validate_protocol_limits() -> void:
|
||
var maximum_body: String = "a".repeat(
|
||
NetworkChatProtocol.MAX_VISIBLE_CHARACTERS
|
||
)
|
||
assert(NetworkChatProtocol.sanitize_body(maximum_body) == maximum_body)
|
||
assert(
|
||
NetworkChatProtocol.sanitize_body(maximum_body + "a") == ""
|
||
)
|
||
var maximum_utf8_body: String = "🐟".repeat(
|
||
NetworkChatProtocol.MAX_VISIBLE_CHARACTERS
|
||
)
|
||
assert(
|
||
maximum_utf8_body.to_utf8_buffer().size()
|
||
== NetworkChatProtocol.MAX_UTF8_BYTES
|
||
)
|
||
assert(
|
||
NetworkChatProtocol.sanitize_body(maximum_utf8_body)
|
||
== maximum_utf8_body
|
||
)
|